|
|
|
import 'matchmedia-polyfill';
|
|
|
|
|
|
|
|
import browserUpdate from 'browser-update';
|
|
|
|
import queueMicrotask from 'queue-microtask';
|
|
|
|
|
|
|
|
window.queueMicrotask = queueMicrotask;
|
|
|
|
browserUpdate({
|
|
|
|
required: {
|
|
|
|
e: -10, f: -10, o: -3, s: -1, c: -10,
|
|
|
|
},
|
|
|
|
insecure: true,
|
|
|
|
api: 2022.03,
|
|
|
|
});
|
|
|
|
|
|
|
|
// monaco-editor requires this polyfill
|
|
|
|
if (window.MediaQueryList) {
|
|
|
|
MediaQueryList.prototype.addEventListener = (k, listener) => {
|
|
|
|
MediaQueryList.prototype.addListener(listener);
|
|
|
|
};
|
|
|
|
}
|
|
|
|
if (!(window.matchMedia('all').addListener || window.matchMedia('all').addEventListener)) {
|
|
|
|
const localMatchMedia = window.matchMedia;
|
|
|
|
const hasMediaQueries = localMatchMedia('only all').matches;
|
|
|
|
let isListening = false;
|
|
|
|
let timeoutID;
|
|
|
|
const queries = [];
|
|
|
|
const handleChange = function () {
|
|
|
|
clearTimeout(timeoutID);
|
|
|
|
timeoutID = setTimeout(() => {
|
|
|
|
for (let i = 0, il = queries.length; i < il; i++) {
|
|
|
|
const { mql } = queries[i];
|
|
|
|
const listeners = queries[i].listeners || [];
|
|
|
|
const { matches } = localMatchMedia(mql.media);
|
|
|
|
if (matches !== mql.matches) {
|
|
|
|
mql.matches = matches;
|
|
|
|
for (let j = 0, jl = listeners.length; j < jl; j++) {
|
|
|
|
listeners[j].call(window, mql);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}, 30);
|
|
|
|
};
|
|
|
|
window.matchMedia = function (media) {
|
|
|
|
const mql = localMatchMedia(media);
|
|
|
|
const listeners = [];
|
|
|
|
let index = 0;
|
|
|
|
if (!mql.addListener) {
|
|
|
|
mql.addListener = function (listener) {
|
|
|
|
if (!hasMediaQueries) return;
|
|
|
|
if (!isListening) {
|
|
|
|
isListening = true;
|
|
|
|
window.addEventListener('resize', handleChange, true);
|
|
|
|
}
|
|
|
|
if (index === 0) {
|
|
|
|
index = queries.push({
|
|
|
|
mql,
|
|
|
|
listeners,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
listeners.push(listener);
|
|
|
|
};
|
|
|
|
mql.removeListener = function (listener) {
|
|
|
|
for (let i = 0, il = listeners.length; i < il; i++) {
|
|
|
|
if (listeners[i] === listener) {
|
|
|
|
listeners.splice(i, 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
if (!mql.addEventListener) {
|
|
|
|
mql.addEventListener = (k, listener) => mql.addListener(listener);
|
|
|
|
mql.removeEventListener = (k, listener) => mql.removeListener(listener);
|
|
|
|
}
|
|
|
|
return mql;
|
|
|
|
};
|
|
|
|
}
|