mirror of
https://github.com/Redocly/redoc.git
synced 2025-02-07 05:20:32 +03:00
refactor and fix side-menu
This commit is contained in:
parent
8c30bf90c9
commit
a3d60a3549
|
@ -4,6 +4,7 @@ import {RedocComponent, BaseComponent} from '../base';
|
|||
import {NgZone, ChangeDetectionStrategy} from 'angular2/core';
|
||||
import {redocEvents} from '../../events';
|
||||
import detectScollParent from 'scrollparent';
|
||||
import {document} from 'angular2/src/facade/browser';
|
||||
|
||||
import {BrowserDomAdapter} from 'angular2/platform/browser';
|
||||
import {global} from 'angular2/src/facade/lang';
|
||||
|
@ -22,15 +23,16 @@ const INVIEW_POSITION = {
|
|||
|
||||
@RedocComponent({
|
||||
selector: 'side-menu',
|
||||
providers: [BrowserDomAdapter],
|
||||
templateUrl: './lib/components/SideMenu/side-menu.html',
|
||||
styleUrls: ['./lib/components/SideMenu/side-menu.css'],
|
||||
changeDetection: ChangeDetectionStrategy.Default
|
||||
})
|
||||
export default class SideMenu extends BaseComponent {
|
||||
constructor(schemaMgr, zone) {
|
||||
constructor(schemaMgr, adapter, zone) {
|
||||
super(schemaMgr);
|
||||
this.zone = zone;
|
||||
this.adapter = new BrowserDomAdapter();
|
||||
this.adapter = adapter;
|
||||
|
||||
this.scrollParent = detectScollParent(document.querySelector('methods-list'));
|
||||
|
||||
|
@ -51,7 +53,7 @@ export default class SideMenu extends BaseComponent {
|
|||
}
|
||||
|
||||
hashScroll(evt) {
|
||||
let hash = global.location.hash;
|
||||
let hash = this.adapter.getLocation().hash;
|
||||
if (!hash) return;
|
||||
|
||||
hash = hash.substr(1);
|
||||
|
@ -64,10 +66,16 @@ export default class SideMenu extends BaseComponent {
|
|||
|
||||
bindEvents() {
|
||||
this.prevOffsetY = this.scrollY();
|
||||
let view = document.querySelector('redoc');
|
||||
this.viewBoxTop = view.offsetTop;
|
||||
this.adapter.on(this.scrollParent, 'scroll', () => this.scrollHandler());
|
||||
this.adapter.on(global, 'hashchange', evt => this.hashScroll(evt));
|
||||
this.viewBoxTop = this.scrollParent.offsetTop || 0;
|
||||
this._cancel = {};
|
||||
this._cancel.scroll = this.adapter.onAndCancel(this.scrollParent, 'scroll', () => { this.scrollHandler(); });
|
||||
this._cancel.hash = this.adapter.onAndCancel(global, 'hashchange', evt => this.hashScroll(evt));
|
||||
}
|
||||
|
||||
destroy() {
|
||||
this._cancel.scroll();
|
||||
this._cancel.hash();
|
||||
console.log('destroyed');
|
||||
}
|
||||
|
||||
activateAndScroll(idx, methodIdx) {
|
||||
|
@ -76,6 +84,7 @@ export default class SideMenu extends BaseComponent {
|
|||
}
|
||||
|
||||
scrollTo(el) {
|
||||
// TODO: rewrite this to use offsetTop as more reliable solution
|
||||
let subjRect = el.getBoundingClientRect();
|
||||
let offset = this.scrollY() + subjRect.top - this.viewBoxTop + 1;
|
||||
if (this.scrollParent.scrollTo) {
|
||||
|
@ -196,4 +205,4 @@ export default class SideMenu extends BaseComponent {
|
|||
this.changeActive(CHANGE.INITIAL);
|
||||
}
|
||||
}
|
||||
SideMenu.parameters = SideMenu.parameters.concat([NgZone]);
|
||||
SideMenu.parameters = SideMenu.parameters.concat([[BrowserDomAdapter], [NgZone]]);
|
||||
|
|
Loading…
Reference in New Issue
Block a user