프로바랩스 주식회사
Mission
ScalloP®️
Team
Announcements
Wiki & Resources
Careers
Untitled
<aside>
🏢 SNU Research Park Main Building #337, 1, Gwanak-ro, Gwanak-gu, Seoul, Republic of Korea 08826 | [email protected]
COPYRIGHT PROVALABS, INC. ALL RIGHTS RESERVED.
</aside>
window.CONFIG.domainBaseUrl = 'https://provalabs.com';
localStorage.__console = true;
const SLUG_TO_PAGE = {"":"a7211ac730104c6781c0abcf7f77e01e","mission":"8506190409204af5851e2c470b006b60","announcement":"2b72218348d04047a951c4fa74c34ef5","members":"f2ca1eadd73c4d099816f956336d86c0","careers":"9c7b75799fcd4cea8cd34836e43f0a62","resources":"6875e0b972e54a4abb86ac8690787ce0","scallop":"16410891e76b4a7d9d51a4e7d027bed4"};
const PAGE_TO_SLUG = {};
const slugs = [];
const pages = [];
const el = document.createElement('div');
let redirected = false;
Object.keys(SLUG_TO_PAGE).forEach(slug => {
const page = SLUG_TO_PAGE[slug];
slugs.push(slug);
pages.push(page);
PAGE_TO_SLUG[page] = slug;
});
function getPage() {
return location.pathname.slice(-32);
}
function getSlug() {
return location.pathname.slice(1);
}
function updateSlug() {
const slug = PAGE_TO_SLUG[getPage()];
console.log('[CW]updateSlug:',slug);
if (slug != null) {
history.replaceState(history.state, '', '/' + slug);
}
}
function enableConsoleEffectAndSetMode(mode) {
if (__console && !__console.isEnabled) {
__console.enable()
window.location.reload()
} else {
__console.environment.ThemeStore.setState({ mode: mode })
}
}
function onDark() {
el.innerHTML =
''
document.body.classList.add('dark')
enableConsoleEffectAndSetMode('dark')
}
function onLight() {
el.innerHTML =
''
document.body.classList.remove('dark')
enableConsoleEffectAndSetMode('light')
}
function toggle() {
// if (!__console.isEnabled) __console.enable();
// if (document.body.classList.contains('dark')) {
// onLight();
// } else {
onDark();
// }
}
function addDarkModeButton(device) {
const nav = device === 'web' ? document.querySelector('.notion-topbar').firstChild : document.querySelector('.notion-topbar-mobile');
el.className = 'toggle-mode';
el.addEventListener('click', toggle);
nav.appendChild(el);
onLight();
}
const observer = new MutationObserver(function() {
if (redirected) return;
const nav = document.querySelector('.notion-topbar');
const mobileNav = document.querySelector('.notion-topbar-mobile');
if (nav && nav.firstChild && nav.firstChild.firstChild
|| mobileNav && mobileNav.firstChild) {
redirected = true;
updateSlug();
// addDarkModeButton(nav ? 'web' : 'mobile');
onDark();
const onpopstate = window.onpopstate;
window.onpopstate = function() {
if (slugs.includes(getSlug())) {
const page = SLUG_TO_PAGE[getSlug()];
if (page) {
history.replaceState(history.state, 'bypass', '/' + page);
}
}
onpopstate.apply(this, [].slice.call(arguments));
updateSlug();
};
}
});
observer.observe(document.querySelector('#notion-app'), {
childList: true,
subtree: true,
});
const replaceState = window.history.replaceState;
window.history.replaceState = function(state) {
console.log('[CW]replacing state...');
if (arguments[1] !== 'bypass' && slugs.includes(getSlug())) return;
return replaceState.apply(window.history, arguments);
};
const pushState = window.history.pushState;
window.history.pushState = function(state) {
const dest = new URL(location.protocol + location.host + arguments[2]);
const id = dest.pathname.slice(-32);
if (pages.includes(id)) {
arguments[2] = '/' + PAGE_TO_SLUG[id];
}
return pushState.apply(window.history, arguments);
};
const open = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function() {
arguments[1] = arguments[1].replace('provalabs.com', 'provalabs.notion.site');
return open.apply(this, [].slice.call(arguments));
};