프로바랩스 주식회사

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)); };