30db14b1 |
function polyfillCustomEvent() {
if ( typeof window.CustomEvent === "function" ) return false;
function CustomEvent ( event, params ) {
params = params || { bubbles: false, cancelable: false, detail: undefined };
var evt = document.createEvent( 'CustomEvent' );
evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
return evt;
}
CustomEvent.prototype = window.Event.prototype;
window.CustomEvent = CustomEvent;
};
function debounce(object, flag, cb) {
if (!object[flag]) {
object[flag] = true;
cb();
}
}
let MISSING_HISTORY = Symbol("missing_history");
export default function addMissingHistoryEvents(window, history) {
debounce(history, MISSING_HISTORY, () => {
const pushState = history.pushState.bind(history);
const replaceState = history.replaceState.bind(history);
polyfillCustomEvent();
history.pushState = function (state, title, url) {
let result = pushState(...arguments);
var pushstate = new CustomEvent('pushstate', {detail: {state, title, url}});
window.dispatchEvent(pushstate);
return result;
};
history.replaceState = function (state, title, url) {
const result = replaceState(...arguments);
var replacestate = new CustomEvent('replacestate', {detail: {state, title, url}});
window.dispatchEvent(replacestate);
return result;
};
});
}
|