mirror of
https://github.com/Redocly/redoc.git
synced 2025-02-07 13:30:33 +03:00
parent
cb106cc668
commit
131b437478
|
@ -1,15 +1,20 @@
|
|||
'use strict';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { PlatformLocation } from '@angular/common';
|
||||
|
||||
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
|
||||
|
||||
import { debounce } from '../utils/';
|
||||
|
||||
@Injectable()
|
||||
export class Hash {
|
||||
public value = new BehaviorSubject<string | null>(null);
|
||||
private noEmit:boolean = false;
|
||||
private debouncedUpdate: (hash:string, rewrite: boolean) => void;
|
||||
|
||||
constructor(private location: PlatformLocation) {
|
||||
this.bind();
|
||||
|
||||
this.debouncedUpdate = debounce(this._update.bind(this), 100);
|
||||
}
|
||||
|
||||
start() {
|
||||
|
@ -28,6 +33,10 @@ export class Hash {
|
|||
}
|
||||
|
||||
update(hash: string|null, rewriteHistory:boolean = false) {
|
||||
this.debouncedUpdate(hash, rewriteHistory);
|
||||
}
|
||||
|
||||
private _update(hash: string|null, rewriteHistory:boolean = false) {
|
||||
if (hash == undefined) return;
|
||||
if (rewriteHistory) {
|
||||
window.history.replaceState(null, '', window.location.href.split('#')[0] + '#' + hash);
|
||||
|
@ -39,4 +48,5 @@ export class Hash {
|
|||
this.noEmit = false;
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -99,6 +99,21 @@ export function throttle(fn, threshhold, scope) {
|
|||
};
|
||||
}
|
||||
|
||||
export function debounce(func, wait, immediate = false) {
|
||||
var timeout;
|
||||
return function() {
|
||||
var context = this, args = arguments;
|
||||
var later = function() {
|
||||
timeout = null;
|
||||
if (!immediate) func.apply(context, args);
|
||||
};
|
||||
var callNow = immediate && !timeout;
|
||||
clearTimeout(timeout);
|
||||
timeout = setTimeout(later, wait);
|
||||
if (callNow) func.apply(context, args);
|
||||
};
|
||||
}
|
||||
|
||||
export const isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0
|
||||
|| (function (p) { return p.toString() === '[object SafariRemoteNotification]'; })(!window['safari']
|
||||
|| safari.pushNotification);
|
||||
|
|
Loading…
Reference in New Issue
Block a user