\n
{e.preventDefault();e.target.click();}} />\n
\n {cur_content}\n
\n
\n
\n {this.props.stack.length>2 &&\n
\n }\n {cur_title}\n
\n
\n );\n }\n}","import React, {Component} from 'react';\nimport Pressure from 'pressure';\n\nimport './PressureHelper.css';\n\nconst THRESHOLD=.4;\nconst MULTIPLIER=25;\nconst BORDER_WIDTH=500; // also change css!\n\nexport class PressureHelper extends Component {\n constructor(props) {\n super(props);\n this.state={\n level: 0,\n fired: false,\n };\n this.callback=props.callback;\n this.esc_interval=null;\n }\n\n do_fire() {\n if(this.esc_interval) {\n clearInterval(this.esc_interval);\n this.esc_interval=null;\n }\n this.setState({\n level: 1,\n fired: true,\n });\n this.callback();\n window.setTimeout(()=>{\n this.setState({\n level: 0,\n fired: false,\n });\n },300);\n }\n\n componentDidMount() {\n if(window.config.pressure) {\n Pressure.set(document.body, {\n change: (force)=>{\n if(!this.state.fired) {\n if(force>=.999) {\n this.do_fire();\n }\n else\n this.setState({\n level: force,\n });\n }\n },\n end: ()=>{\n this.setState({\n level: 0,\n fired: false,\n });\n },\n }, {\n polyfill: false,\n only: 'touch',\n preventSelect: false,\n });\n\n document.addEventListener('keydown',(e)=>{\n if(!e.repeat && e.key==='Escape') {\n if(this.esc_interval)\n clearInterval(this.esc_interval);\n this.setState({\n level: THRESHOLD/2,\n },()=>{\n this.esc_interval=setInterval(()=>{\n let new_level=this.state.level+.1;\n if(new_level>=.999)\n this.do_fire();\n else\n this.setState({\n level: new_level,\n });\n },30);\n });\n }\n });\n document.addEventListener('keyup',(e)=>{\n if(e.key==='Escape') {\n if(this.esc_interval) {\n clearInterval(this.esc_interval);\n this.esc_interval=null;\n }\n this.setState({\n level: 0,\n });\n }\n });\n }\n }\n\n render() {\n const pad=MULTIPLIER*(this.state.level-THRESHOLD)-BORDER_WIDTH;\n return (\n
\n )\n }\n}","import React, {Component} from 'react';\nimport {Flow} from './Flows';\nimport {Title} from './Title';\nimport {Sidebar} from './Sidebar';\nimport {PressureHelper} from './PressureHelper';\nimport {TokenCtx} from './UserAction';\nimport {load_config,bgimg_style} from './Config';\nimport {listen_darkmode} from './infrastructure/functions';\nimport {LoginPopup, TitleLine} from './infrastructure/widgets';\n\nconst MAX_SIDEBAR_STACK_SIZE=10;\n\nfunction DeprecatedAlert(props) {\n return (\n
\n );\n}\n\nclass App extends Component {\n constructor(props) {\n super(props);\n load_config();\n listen_darkmode({default: undefined, light: false, dark: true}[window.config.color_scheme]);\n this.state={\n sidebar_stack: [[null,null]], // list of [status, content]\n mode: 'list', // list, single, search, attention\n search_text: null,\n flow_render_key: +new Date(),\n token: localStorage['TOKEN']||null,\n };\n this.show_sidebar_bound=this.show_sidebar.bind(this);\n this.set_mode_bound=this.set_mode.bind(this);\n this.on_pressure_bound=this.on_pressure.bind(this);\n // a silly self-deceptive approach to ban guests, enough to fool those muggles\n // document cookie 'pku_ip_flag=yes'\n this.inthu_flag=window[atob('ZG9jdW1lbnQ')][atob('Y29va2ll')].indexOf(atob('dGh1X2lwX2ZsYWc9eWVz'))!==-1;\n }\n\n static is_darkmode() {\n if(window.config.color_scheme==='dark') return true;\n if(window.config.color_scheme==='light') return false;\n else { // 'default'\n return window.matchMedia('(prefers-color-scheme: dark)').matches;\n }\n }\n\n on_pressure() {\n if(this.state.sidebar_stack.length>1)\n this.show_sidebar(null,null,'clear');\n else\n this.set_mode('list',null);\n }\n\n show_sidebar(title,content,mode='push') {\n this.setState((prevState)=>{\n let ns=prevState.sidebar_stack.slice();\n if(mode==='push') {\n if(ns.length>MAX_SIDEBAR_STACK_SIZE)\n ns.splice(1,1);\n ns=ns.concat([[title,content]]);\n } else if(mode==='pop') {\n if(ns.length===1) return;\n ns.pop();\n } else if(mode==='replace') {\n ns.pop();\n ns=ns.concat([[title,content]]);\n } else if(mode==='clear') {\n ns=[[null,null]];\n } else\n throw new Error('bad show_sidebar mode');\n return {\n sidebar_stack: ns,\n };\n });\n }\n\n set_mode(mode,search_text) {\n this.setState({\n mode: mode,\n search_text: search_text,\n flow_render_key: +new Date(),\n });\n }\n\n render() {\n return (\n
{\n localStorage['TOKEN']=x||'';\n this.setState({\n token: x,\n });\n },\n }}>\n \n \n \n {(token)=>(\n \n
\n {!token.value &&\n
\n }\n {this.inthu_flag||token.value ?\n
:\n
\n }\n
\n
\n )}\n \n \n );\n }\n}\n\nexport default App;\n","// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport default function register() {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n // const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\n // if (publicUrl.origin !== window.location.origin) {\n // // Our service worker won't work if PUBLIC_URL is on a different origin\n // // from what our page is served on. This might happen if a CDN is used to\n // // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\n // return;\n // }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://goo.gl/SC7cgQ'\n );\n });\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log('New content is available; please refresh.');\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (\n response.status === 404 ||\n response.headers.get('content-type').indexOf('javascript') === -1\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\n//import {elevate} from './infrastructure/elevator';\nimport registerServiceWorker from './registerServiceWorker';\n\n//elevate();\n\nReactDOM.render(
, document.getElementById('root'));\nregisterServiceWorker();\n"],"sourceRoot":""}
\ No newline at end of file