{"version":3,"sources":["images/viikkis.png","constants.js","tools/actionTools.js","tools/httpTools.js","services/httpService.js","actions/appActions.js","actions/configActions.js","actions/localeActions.js","actions/index.js","containers/Header.js","containers/Login.js","editor/helpers/insertText.js","editor/helpers/keydownListen.js","editor/helpers/highlight.js","editor/helpers/md2html.js","editor/helpers/md2mjml.js","tools/articleTools.js","editor/index.js","containers/Article.js","containers/NavBar.js","containers/Summary.js","containers/CreateWeek.js","containers/WeekList.js","containers/WeekContainer.js","containers/ConfigSettings.js","containers/Navigator.js","components/LoadingComponent.js","containers/ScreenContainer.js","reducers/appReducer.js","reducers/configReducer.js","reducers/index.js","store.js","serviceWorker.js","index.js"],"names":["module","exports","__webpack_require__","p","API_ENDPOINT","TITLES","fi","en","SCREENS","createActionPointers","types","arguments","length","undefined","list","map","type","NAME","PENDING","concat","FULFILLED","REJECTED","Method","request","method","url","data","config","payload","axios","get","post","put","delete","patch","head","headers","content-type","getWeekArticles","_ref","year","week","setState","SET_STATE","getArticles","GET_ARTICLES","GET_WEEK_ARTICLES","httpService","getArticle","id","GET_ARTICLE","deleteArticle","DELETE_ARTICLE","updateArticle","_ref2","text","UPDATE_ARTICLE","_ref3","JSON","stringify","createWeek","articles","CREATE_WEEK","all","_ref4","Object","asyncToGenerator","regenerator_default","a","mark","_callee","res","wrap","_context","prev","next","sent","abrupt","objectSpread","edited_at","created_at","Date","toISOString","stop","this","_x","apply","login","email","password","LOGIN","logout","LOGOUT","setConfigState","SET_CONFIG_STATE","navigate","screen","NAVIGATE","getConfig","GET_CONFIG","updateConfig","newConfig","UPDATE_CONFIG","navigateHome","dispatch","NAVIGATE_HOME","setNextWeek","getState","newDate","moment","now","add","parseInt","format","setPrevWeek","subtract","setLocale","lang","SET_LOCALE","actions","app","appActions","configActions","locale","localeActions","connector","state","acts","connect","bindActionCreators","user","logged","socketsLength","sockets","isAdmin","admin","dropdownOpen","localStorage","removeItem","props","_this2","react_default","createElement","style","styles","top","left","src","headerImage","alt","height","right","ButtonDropdown","isOpen","toggle","direction","DropdownToggle","className","fontSize","color","DropdownMenu","DropdownItem","header","divider","disabled","marginRight","onClick","Component","backgroundColor","width","display","flexDirection","flex","justifyContent","alignItems","cursor","users","position","paddingRight","rememberMe","then","setItem","catch","toast","error","_this3","containers_Header","wrapper","Container","container","Form","Col","FormGroup","Label","Input","name","placeholder","value","onChange","e","target","for","check","Button","boxShadow","borderRadius","padding","margin","bottom","insert","$vm","prefix","hint","subfix","selectionStart","start","end","selectionEnd","restoreTop","scrollTop","substring","focus","toolbar","h1","h2","h3","bold","italic","image","link","linkButton","code","listUl","listOl","table","tab","insertText","KEY_CODE","Hljs","require","registerLanguage","marked","setOptions","renderer","Renderer","gfm","tables","breaks","pedantic","sanitize","smartLists","smartypants","highlight","highlightAuto","replace","content","replacementArray","results","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","Symbol","iterator","done","slicedToArray","regex","replacement","err","return","massReplace","buttonParse","_1","_2","_3","href","paragraph","title","heading","level","raw","escape","console","log","body","tablerow","tablecell","flags","tag","align","ordered","listitem","formatTitle","mdToHtml","md","join","headingCaps","mdToMjml","split","reduce","acc","str","i","substr","charAt","slice","createMarkdownTOC","trim","filter","createMjml","number","guild","job","job_en","guild_en","university","university_en","phone","MdEditor","_this","classCallCheck","possibleConstructorReturn","getPrototypeOf","call","handleChange","saveHistory","assertThisInitialized","currentTarget","getAttribute","textInsert","undo","f_history","f_history_index","handleLineIndex","redo","preview","expand","save","onSave","handleEditorRef","window","innerWidth","line_index","updateWindowDimensions","bind","ins","addEventListener","ctrlKey","metaKey","altKey","shiftKey","keyCode","preventDefault","push","removeEventListener","innerHeight","_this$state","clearTimeout","currentTimeout","setTimeout","splice","shift","_this$state2","previewClass","classNames","for-panel","for-preview-hidden","editorClass","for-editor-hidden","isMobile","previewActive","for-active","fullscreen","for-container","for-fullscreen","expandActive","lineNumStyles","for-line-num","hidden","lineNum","data-type","key","ref","spellCheck","autoCapitalize","autoCorrect","dangerouslySetInnerHTML","__html","topValue","bottomValue","React","defaultProps","socket","rooms","articleId","Main","disconnected","reconnect","emit","getText","autoSave","previousValue","initialize","action","interval","setInterval","isEdited","handleSave","clearInterval","success","_this4","Beforeunload_default","onBeforeunload","socketsOnline","Alert","editorStyle","src_editor","_this$props","article","find","title_en","Breadcrumb","BreadcrumbItem","active","summary","sort","b","showModal","recipient","sender","attachments","fileName","element","document","file","Blob","URL","createObjectURL","download","click","tableOfContents","mjml","fetch","Content-Type","mjml2html","json","createBlob","html","subject","formData","FormData","forEach","append","Authorization","sendEmail","status","SUMMARY_TOP","Fragment","Modal","toggleModal","ModalHeader","ModalBody","multiple","Array","from","files","block","ModalFooter","ButtonGroup","exportMd","exportHtml","exportMjml","text_en","nextNumber","obj","ind","toConsumableArray","index","defineProperty","response","Error","copyPrevWeek","box","button","deleteTitle","row","sm","required","changeArticle","addTitle","size","marginTop","border","zIndex","confirm","containers_CreateWeek","textAlign","paddingTop","paddingBottom","ListGroup","flush","ListGroupItem","Badge","editedAt","templates","suffix","seconds","minute","minutes","hour","hours","day","days","month","months","years","time","template","t","n","Math","abs","round","getTime","lastEdited","outline","float","failed","loaded","init","startOfWeek","startOf","endOfWeek","endOf","center","containers_WeekList","Row","entries","xs","changeConfig","containers_Summary","Article","containers_ConfigSettings","containers_WeekContainer","NavBar","marginBottom","navigation","LoadingComponent","loader","react_loader_spinner_default","loading","ScreenContainer","on","cb","getItem","lib","autoClose","hideProgressBar","newestOnTop","closeOnClick","rtl","pauseOnVisibilityChange","draggable","pauseOnHover","LoadingComponent_LoadingComponent","Navigator","containers_Login","initialState","appReducer","GET_WEEK_CONFIG","configReducer","socketReducer","io","rootReducer","combineReducers","loggerMiddleWare","createLogger","predicate","middleWares","applyMiddleware","promise","thunk","createStore","reducers","Boolean","location","hostname","match","ReactDOM","render","es","store","containers_ScreenContainer","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.eb54fe48.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/viikkis.86ac6c38.png\";","export const API_ENDPOINT = \"https://viikkis.indecs.fi/api.php\";\nexport const AUTH_ENDPOINT = \"https://viikkis.indecs.fi/login.php\";\nexport const SOCKET_ENDPOINT = \"https://viikkisapi.indecs.fi\";\n// export const SOCKET_ENDPOINT = \"http://localhost:5000\";\n\nexport const TITLES = [\n {\n fi: \"Yleistä\",\n en: \"General\"\n },\n {\n fi: \"Indecsin tapahtumat\",\n en: \"Indecs events\"\n },\n {\n fi: \"TREY tiedottaa\",\n en: \"Student Union announces\"\n },\n {\n fi: \"Tampereen Teekkarit tiedottaa\",\n en: \"Teekkari Union of Tampere announces\"\n },\n {\n fi: \"Yritystiimi tiedottaa\",\n en: \"Corporate Relations Team announces\"\n },\n {\n fi: \"Tulevat tapahtumat\",\n en: \"Upcoming events\"\n },\n {\n fi: \"ESTIEM asiaa\",\n en: \"ESTIEM affairs\"\n },\n {\n fi: \"Loppukevennys\",\n en: \"\"\n }\n];\n\nexport const SCREENS = {\n SUMMARY: \"SUMMARY\",\n ARTICLE: \"ARTICLE\",\n CONFIG_SETTINGS: \"CONFIG_SETTINGS\"\n};\n\nexport const EMAIL_SUBJECT = config =>\n `Indecsin Viikkotiedote ${config.number} — Indecs' Newsletter ${config.number}`;\n\nexport const MD_CONFIG = (config, week) =>\n `otsikon_ylle: ${config.guild}\notsikon_alle: Numero ${config.number} – Viikko ${week}\nsposti_aihe: Indecsin Viikkotiedote ${config.number} — Indecs' Newsletter ${config.number}\nurl: ${config.url}\nnimi: ${config.name}\ntitteli: ${config.job} / ${config.job_en}\nkilta: ${config.guild}\nguild: ${config.guild_en}\nyliopisto: ${config.university}\nuniversity: ${config.university_en}\npuhelin: ${config.phone}\nsposti: ${config.email}\ninternet: ${config.url}\n`;\n\nexport const MD_CONFIG_TOC = `\n\n# Sisällysluettelo – Table of Contents\n\n[TOC]\n\n`;\n\nexport const SUMMARY_TOP = (week, tableOfContents, config) => `\n\n${config.guild}\nViikkotiedote\nNumero ${config.number} – Viikko ${week}\n\n Sisällysluettelo – Table of contents\n${tableOfContents}\n`;\n\nexport const SUMMARY_BOTTOM = config => `\n\nTerveisin – Regards\n${config.name}\n${config.job} / ${config.job_en}\n${config.guild}\n${config.guild_en}\n${config.university}\n${config.university_en}\n${config.phone}\n${config.email}\n[${config.url}](${config.url})\n\n`;\n","export const createActionPointers = (types = []) => {\n\tlet list = {};\n\ttypes.map(type => {\n\t\treturn list[type] = {\n\t\t\tNAME: type,\n\t\t\tPENDING: `${type}_PENDING`,\n\t\t\tFULFILLED: `${type}_FULFILLED`,\n\t\t\tREJECTED: `${type}_REJECTED`,\n\t\t}\n\t});\n\treturn list;\n};","import axios from \"axios\"\n\nexport const Method = {\n\tGET: \"GET\",\n\tPOST: \"POST\",\n\tPUT: \"PUT\",\n\tDELETE: \"DELETE\",\n\tPATCH: \"PATCH\",\n\tHEAD: \"HEAD\",\n MULTIPARTPOST: \"MULTIPARTPOST\",\n ALL: \"ALL\"\n};\n\nexport const request = (method, url, data, config) => {\n\tlet payload;\n\n\tswitch(method) {\n\t\tcase Method.GET:\n\t\t\tpayload = axios.get(url, config);\n\t\t\tbreak;\n\t\tcase Method.POST:\n\t\t\tpayload = axios.post(url, data, config);\n\t\t\tbreak;\n\t\tcase Method.PUT:\n\t\t\tpayload = axios.put(url, data, config);\n\t\t\tbreak;\n\t\tcase Method.DELETE:\n\t\t\tpayload = axios.delete(url, config);\n\t\t\tbreak;\n\t\tcase Method.PATCH:\n\t\t\tpayload = axios.patch(url, data, config);\n\t\t\tbreak;\n\t\tcase Method.HEAD:\n\t\t\tpayload = axios.head(url, config);\n break;\n\t\tcase Method.MULTIPARTPOST:\n\t\t\tconfig.headers = {'content-type': 'multipart/form-data'};\n\t\t\tpayload = axios.post(url, data, config);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tpayload = data;\n\t\t\tbreak;\n\t}\n\treturn payload;\n};\n","import { Method, request } from \"../tools/httpTools\";\nimport { API_ENDPOINT, SOCKET_ENDPOINT, AUTH_ENDPOINT } from \"../constants\";\nimport axios from \"axios\";\n\nexport const getArticles = () =>\n request(Method.GET, `${API_ENDPOINT}/articles`);\n\nexport const getWeekArticles = ({ year, week }) =>\n request(Method.GET, `${API_ENDPOINT}/articles?year=${year}&week=${week}`);\n\nexport const getArticle = id =>\n request(Method.GET, `${API_ENDPOINT}/articles/${id}`);\n\nexport const deleteArticle = id =>\n request(Method.DELETE, `${API_ENDPOINT}/articles/${id}`);\n\nexport const login = ({ email, password }) =>\n request(Method.POST, `${AUTH_ENDPOINT}`, JSON.stringify({ email, password }));\n\nexport const updateArticle = ({ id, text }) =>\n request(\n Method.PUT,\n `${API_ENDPOINT}/articles/${id}`,\n JSON.stringify({ text })\n );\n\nexport const createWeek = config =>\n axios.post(`${API_ENDPOINT}/weeks`, JSON.stringify(config));\n\nexport const getConfig = () => axios.get(`${API_ENDPOINT}/config/1`);\n\nexport const updateConfig = config =>\n axios.put(`${API_ENDPOINT}/config/1`, JSON.stringify(config));\n\nexport const createArticles = articles =>\n axios.all(\n articles.map(async a => {\n const res = await axios.post(\n `${API_ENDPOINT}/articles`,\n JSON.stringify(a)\n );\n return {\n ...a,\n id: res.data,\n edited_at: \"0000-00-00 00:00:00\",\n created_at: new Date().toISOString()\n };\n })\n );\n\nexport const mjml2html = mjml =>\n fetch(`${SOCKET_ENDPOINT}/mjml2html`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"text/html\" },\n body: mjml\n });\n\nexport const sendEmail = (mjml, sender, recipient, password, subject, attachments) => {\n const formData = new FormData()\n const json = JSON.stringify({mjml, sender, recipient, subject});\n attachments.forEach((file, i) => {\n formData.append(i, file)\n })\n formData.append(\"body\", new Blob([json]));\n return axios.post(`${SOCKET_ENDPOINT}/send_email`, formData, {headers:{Authorization:password}})\n \n}","import { createActionPointers } from \"../tools/actionTools\";\nimport * as httpService from \"../services/httpService\";\nexport const types = createActionPointers([\n `SET_STATE`,\n \"GET_ARTICLES\",\n \"UPDATE_ARTICLE\",\n \"CREATE_WEEK\",\n \"GET_ARTICLE\",\n \"DELETE_ARTICLE\",\n \"LOGIN\",\n \"LOGOUT\",\n \"GET_TEXT\",\n \"GET_WEEK_ARTICLES\",\n \"GET_WEEK_CONFIG\"\n]);\n\nexport const setState = payload => ({\n type: types.SET_STATE.NAME,\n payload\n});\n\nexport const getArticles = () => ({\n type: types.GET_ARTICLES.NAME,\n payload: httpService.getArticles()\n});\n\nexport const getWeekArticles = ({ year, week }) => ({\n type: types.GET_WEEK_ARTICLES.NAME,\n payload: httpService.getWeekArticles({ year, week })\n});\n\nexport const getArticle = id => ({\n type: types.GET_ARTICLE.NAME,\n payload: httpService.getArticle(id)\n});\n\nexport const deleteArticle = id => ({\n type: types.DELETE_ARTICLE.NAME,\n payload: httpService.deleteArticle(id)\n});\n\nexport const updateArticle = ({ id, text }) => ({\n type: types.UPDATE_ARTICLE.NAME,\n payload: httpService.updateArticle({ id, text })\n});\n\nexport const createWeek = articles => ({\n type: types.CREATE_WEEK.NAME,\n payload: httpService.createArticles(articles)\n});\n\nexport const login = ({ email, password }) => ({\n type: types.LOGIN.NAME,\n payload: httpService.login({ email, password })\n});\n\nexport const logout = () => ({\n type: types.LOGOUT.NAME\n});\n","import moment from \"moment\";\nimport { createActionPointers } from \"../tools/actionTools\";\nimport { getWeekArticles } from \"./appActions\";\nimport * as httpService from \"../services/httpService\";\n\nexport const types = createActionPointers([\n `SET_CONFIG_STATE`,\n \"NAVIGATE\",\n \"NAVIGATE_HOME\",\n \"GET_CONFIG\",\n \"UPDATE_CONFIG\"\n]);\n\nexport const setConfigState = payload => ({\n type: types.SET_CONFIG_STATE.NAME,\n payload\n});\n\nexport const navigate = screen => ({\n type: types.NAVIGATE.NAME,\n payload: screen\n});\n\nexport const getConfig = () => ({\n type: types.GET_CONFIG.NAME,\n payload: httpService.getConfig()\n});\n\nexport const updateConfig = newConfig => ({\n type: types.UPDATE_CONFIG.NAME,\n payload: httpService.updateConfig(newConfig)\n});\n\nexport const navigateHome = () => dispatch => {\n // Not in use\n dispatch({ type: types.NAVIGATE_HOME.NAME });\n};\n\nexport const setNextWeek = () => (dispatch, getState) => {\n const newDate = moment(getState().config.now).add(1, \"weeks\");\n const week = parseInt(newDate.format(\"WW\"));\n const year = parseInt(newDate.format(\"YYYY\"));\n dispatch(\n setConfigState({\n now: newDate,\n week,\n year\n })\n );\n return dispatch(getWeekArticles({ week, year }));\n};\n\nexport const setPrevWeek = () => (dispatch, getState) => {\n const newDate = moment(getState().config.now).subtract(1, \"weeks\");\n const week = parseInt(newDate.format(\"WW\"));\n const year = parseInt(newDate.format(\"YYYY\"));\n dispatch(\n setConfigState({\n now: newDate,\n week,\n year\n })\n );\n return dispatch(getWeekArticles({ week, year }));\n};\n","import {createActionPointers} from '../tools/actionTools';\n\nconst types = createActionPointers([\n 'SET_LOCALE'\n]);\n\nexport const setLocale = (lang) => ({\n type:types.SET_LOCALE.NAME,\n payload:lang\n});","import * as appActions from './appActions';\nimport * as configActions from './configActions';\nimport * as localeActions from './localeActions';\nimport {bindActionCreators} from 'redux';\nimport { connect } from 'react-redux';\n\nexport const actions = {\n app:appActions,\n config:configActions,\n locale:localeActions\n};\n\nexport const connector = (state, acts) => {\n return connect(\n state,\n dispatch => () => bindActionCreators({\n ...acts\n }, dispatch)\n );\n}\n\n\nfunction from(a) {\n return function(actions = actions){\n console.log(a);\n console.log(actions);\n }\n}\n","import React, { Component } from 'react';\nimport headerImage from '../images/viikkis.png';\nimport {SCREENS} from '../constants';\nimport { ButtonDropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';\nimport { connector, actions } from '../actions';\n\nconst connect = connector(\n state => ({\n email:state.app.user.email,\n logged:state.app.logged,\n socketsLength:state.app.sockets.length,\n isAdmin: state.app.user.admin\n }), \n {\n logout:actions.app.logout,\n navigate: actions.config.navigate\n }\n);\n\nclass Header extends Component {\n state = {\n dropdownOpen:false\n };\n\n logout(){\n localStorage.removeItem('email');\n localStorage.removeItem('password');\n this.props.logout();\n }\n\n render() {\n const MenuButton = () => (\n this.setState({dropdownOpen:!this.state.dropdownOpen})} direction={'left'}>\n \n \n \n \n {this.props.email}\n \n {this.props.socketsLength} paikalla\n \n this.props.navigate(SCREENS.CONFIG_SETTINGS)}> Asetukset\n \n this.logout()}>Kirjaudu ulos\n \n \n );\n return (\n
\n\n
\n
\n \"Viikkis\n
\n {this.props.logged &&
\n \n
}\n
\n
\n )\n }\n}\n\nexport default connect(Header)\n\nconst styles = {\n top: {\n backgroundColor: 'rgba(0,0,0,0.5)',\n height: 60,\n width: '100%',\n display: 'flex',\n flexDirection: 'row',\n flex: 1,\n color: 'white',\n justifyContent:'space-between'\n },\n left: {\n display: 'flex',\n alignItems: 'center',\n cursor:'pointer'\n },\n users: {\n position:'absolute',\n top:5,\n right:5,\n fontSize: 15, \n color: 'white'\n },\n right: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n paddingRight: 10,\n cursor: 'pointer'\n },\n}","import React, { Component } from 'react';\nimport { toast } from 'react-toastify';\nimport { Button, Col, Container, Form, FormGroup, Input, Label } from 'reactstrap';\nimport Header from './Header';\nimport {connector, actions} from '../actions';\nconst connect = connector(\n state => null, \n {\n login:actions.app.login\n }\n);\n\nclass Login extends Component {\n state = {\n email: '',\n password: '',\n rememberMe: false\n }\n\n login() {\n this.props.login({ password: this.state.password, email: this.state.email })\n .then(() => {\n if (this.state.rememberMe) {\n localStorage.setItem('email', this.state.email);\n localStorage.setItem('password', this.state.password);\n }\n })\n .catch(() => toast.error('Väärä käyttäjätunnus tai salasana'))\n }\n\n render() {\n return (\n
\n
\n
\n \n

Kirjaudu sisään

\n
\n \n \n \n this.setState({ email: e.target.value })}\n />\n \n \n \n \n \n this.setState({ password: e.target.value })}\n value={this.state.password}\n />\n \n \n \n \n \n \n \n \n
\n
\n
\n
\n );\n }\n}\n\nexport default connect(Login);\n\nconst styles = {\n container: {\n boxShadow: '#999 0 0 12px',\n borderRadius: '4px',\n backgroundColor: 'white',\n padding: 20,\n margin: 10\n },\n wrapper: {\n flex: 1,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n position: 'absolute',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0\n }\n}","function insert($vm, prefix, hint = '', subfix = '') {\n const value = $vm.value\n if ($vm.selectionStart || $vm.selectionStart === 0) {\n let start = $vm.selectionStart\n let end = $vm.selectionEnd\n\n const restoreTop = $vm.scrollTop\n\n if (start === end) {\n $vm.value =\n value.substring(0, start) +\n prefix +\n hint +\n subfix +\n value.substring(end, value.length)\n $vm.selectionStart = start + prefix.length\n $vm.selectionEnd = end + prefix.length + hint.length\n } else {\n $vm.value =\n value.substring(0, start) +\n prefix +\n value.substring(start, end) +\n subfix +\n value.substring(end, value.length)\n $vm.selectionStart = start + prefix.length\n $vm.selectionEnd = end + prefix.length\n }\n\n $vm.focus()\n if (restoreTop >= 0) {\n $vm.scrollTop = restoreTop\n }\n }\n}\n\nconst toolbar = {\n h1($vm) {\n insert($vm, '# ', 'Iso otsikko')\n },\n h2($vm) {\n insert($vm, '## ', 'Keskikokoinen otsikko')\n },\n h3($vm) {\n insert($vm, '### ', 'Pieni otsikko')\n },\n bold($vm) {\n insert($vm, '**', 'Lihavoitu teksti', '**')\n },\n italic($vm) {\n insert($vm, '*', 'Kursivoitu teksti', '*')\n },\n image($vm) {\n insert($vm, '![Kuvan vaihtoehtoinen teksti jos kuva ei toimi](', 'https://indecs.fi/wp-content/uploads/2020/12/Indecs_logo_teksti.svg', ')')\n },\n link($vm) {\n insert($vm, '[FB-tapahtuma](', 'http://www.facebook.com', ')')\n },\n linkButton($vm) {\n insert($vm, '?[FB-tapahtuma](', 'http://www.facebook.com', ')')\n },\n code($vm) {\n insert($vm, '```\\n', 'Lainaus', '\\n```')\n },\n list($vm) {\n insert($vm, 'Lista 1 \\nLista 2 \\n', 'Lista 3', ' ')\n },\n listUl($vm) {\n insert($vm, '- Lista 1\\n- Lista 2\\n- ', 'Lista 3')\n },\n listOl($vm) {\n insert($vm, '1. Lista 1\\n2. Lista 2\\n', '3. Lista 3')\n },\n table($vm) {\n insert($vm, '| Otsikko 1 | Otsikko 2 | Otsikko 3 |\\n | - | - | - | \\n| ', 'tähän', ' | tulee | sisältö |\\n| toisen | rivin | sisältö |')\n },\n tab($vm) {\n insert($vm, ' ')\n }\n}\n\nexport default ($vm, type) => {\n return toolbar[type]($vm)\n}\n","const KEY_CODE = {\n F8: 119,\n F9: 120,\n F10: 121,\n F11: 122,\n F12: 123,\n B: 66,\n I: 73,\n H: 72,\n U: 85,\n D: 68,\n M: 77,\n Q: 81,\n O: 79,\n L: 76,\n S: 83,\n Z: 90,\n Y: 89,\n C: 67,\n T: 84,\n R: 82,\n DELETE: 8,\n TAB: 9,\n ENTER: 13,\n ONE: 97,\n TWO: 98,\n THREE: 99,\n FOUR: 100,\n FIVE: 101,\n SIX: 102,\n _ONE: 49,\n _TWO: 50,\n _THREE: 51,\n _FOUR: 52,\n _FIVE: 53,\n _SIX: 54\n}\n\nexport default ins => {\n const $vm = ins.$vm\n $vm.addEventListener('keydown', e => {\n if (!(e.ctrlKey || e.metaKey) && !e.altKey && !e.shiftKey) {\n switch (e.keyCode) {\n case KEY_CODE.TAB: {\n e.preventDefault()\n ins.insert('tab')\n break\n }\n default:break;\n }\n } else if ((e.ctrlKey || e.metaKey) && !e.altKey && !e.shiftKey) {\n // ctrl +\n switch (e.keyCode) {\n case KEY_CODE.Z: {\n // Z\n e.preventDefault()\n ins.undo()\n break\n }\n case KEY_CODE.Y: {\n // Y\n e.preventDefault()\n ins.redo()\n break\n }\n case KEY_CODE.S: {\n // S\n e.preventDefault()\n ins.save()\n break\n }\n case KEY_CODE.B: {\n e.preventDefault()\n ins.insert('bold');\n break;\n }\n case KEY_CODE.I: {\n e.preventDefault()\n ins.insert('italic');\n break;\n }\n default:break;\n }\n }\n })\n}\n","const Hljs = require('highlight.js/lib/highlight')\n\nHljs.registerLanguage('css', require('highlight.js/lib/languages/css'))\nHljs.registerLanguage('json', require('highlight.js/lib/languages/json'))\nHljs.registerLanguage('less', require('highlight.js/lib/languages/less'))\nHljs.registerLanguage('scss', require('highlight.js/lib/languages/scss'))\nHljs.registerLanguage(\n 'javascript',\n require('highlight.js/lib/languages/javascript')\n)\nHljs.registerLanguage(\n 'typescript',\n require('highlight.js/lib/languages/typescript')\n)\n\nexport default Hljs\n","import marked from \"marked\";\nimport Hljs from \"./highlight\";\n\nmarked.setOptions({\n renderer: new marked.Renderer(),\n gfm: true,\n tables: true,\n breaks: false,\n pedantic: true,\n sanitize: false,\n smartLists: true,\n smartypants: false,\n highlight(code) {\n return Hljs.highlightAuto(code).value;\n }\n});\n\nconst massReplace = (text, replacementArray) => {\n let results = text;\n for (let [regex, replacement] of replacementArray) {\n results = results.replace(regex, replacement);\n }\n return results;\n};\n\nconst replace = content => {\n const rules = [[/\\?\\[(.+?)\\]\\((.*)\\)/g, buttonParse(\"$1\", \"$2\")]];\n return massReplace(content, rules);\n};\n\nlet _1 = 0;\nlet _2 = 0;\nlet _3 = 0;\n\nconst renderer = new marked.Renderer();\n\nconst paragraphParse = text => `

${text}

`;\n\nconst linkParse = (href, title, text) => {\n return `${text}`;\n};\n\nconst headingParse = (text, level, raw) => {\n if (level == 1) {\n _3 = 0;\n _2 = 0;\n _1 = _1 + 1;\n return `${_1}. ${text}`;\n } else if (level == 2) {\n _3 = 0;\n _2 = _2 + 1;\n return `${_1}.${_2}. ${text}`;\n } else {\n _3 = _3 + 1;\n return `${_1}.${_2}.${_3}. ${text}`;\n }\n};\n\nconst buttonParse = (text, href) => {\n return `
`;\n};\n\nrenderer.paragraph = paragraphParse;\nrenderer.link = linkParse;\nrenderer.heading = headingParse;\n\nexport default content => {\n if (typeof content != \"string\") return \"\";\n _1 = 0;\n _2 = 0;\n _3 = 0;\n return marked(replace(content), { renderer });\n};\n","import marked from \"marked\";\nimport Hljs from \"./highlight\";\n\nmarked.setOptions({\n renderer: new marked.Renderer(),\n gfm: true,\n tables: true,\n breaks: false,\n pedantic: false,\n sanitize: false,\n smartLists: true,\n smartypants: false,\n highlight(code) {\n return Hljs.highlightAuto(code).value;\n }\n});\n\nconst renderer = new marked.Renderer();\n\nlet _1 = 0;\nlet _2 = 0;\nlet _3 = 0;\n\nconst massReplace = (text, replacementArray) => {\n let results = text;\n for (let [regex, replacement] of replacementArray) {\n results = results.replace(regex, replacement);\n }\n return results;\n};\n\nconst escape = text => {\n return text;\n return (\n text\n .replace(\"&\", \"&\")\n .replace(\"<\", \"<\")\n .replace(\">\", \">\")\n .replace('\"', \""\")\n .replace(\"'\", \"'\")\n .replace(\"!\", \"!\")\n .replace(\"?\", \"?\")\n .replace(\"#\", \"#\")\n // .replace(\\\\/g, '\')\n .replace(\"w\", \"w\")\n );\n};\n\nconst paragraphParse = text => {\n // mj-class=\"paragraph\"\n return `

${escape(text)}

\\n`;\n};\n\nconst linkParse = (href, title, text) => {\n if (title) {\n return `${escape(\n text\n )}`;\n } else {\n return `${escape(text)}`;\n }\n};\n\nconst headingParse = (text, level, raw) => {\n if (level == 1) {\n _3 = 0;\n _2 = 0;\n _1 = _1 + 1;\n return `\\n${_1}. ${escape(\n text\n )}\\n`;\n } else if (level == 2) {\n _3 = 0;\n _2 = _2 + 1;\n return `\\n${_1}.${_2}. ${escape(\n text\n )}\\n`;\n } else {\n _3 = _3 + 1;\n return `\\n${_1}.${_2}.${_3}. ${escape(\n text\n )}\\n`;\n }\n};\n\nconst imageParse = (href, title, text) => {\n if (title)\n return ` `;\n else\n return ` `;\n};\n\nconst tableParse = (header, body) => {\n return `\\n${header}${body}\\n`;\n};\n\nconst tableRowParse = content => {\n return `\\n${content}\\n`;\n};\n\nconst tableCellParse = (content, flags) => {\n let tag = flags[\"header\"] ? \"th\" : \"td\";\n let align = flags[\"align\"];\n if (!align) return `<${tag}>${content}\\n`;\n else\n return `<${tag} style=\"text-align:${align}\">${escape(content)}\\n`;\n};\n\nconst listParse = (body, ordered, start) => {\n let tag = ordered ? \"ol\" : \"ul\";\n return `<${tag}>\\n${body}\\n`;\n};\n\nconst listItemParse = text => {\n return `
  • ${escape(text)}
  • \\n`;\n};\n\nconst buttonParse = (text, href) => {\n console.log(\"href\", href);\n return `
    ${text}`;\n};\n\nconst replace = content => {\n const rules = [[/\\?\\[(.+?)\\]\\((.*)\\)/g, buttonParse(\"$1\", \"$2\")]];\n return massReplace(content, rules);\n};\n\nrenderer.paragraph = paragraphParse;\nrenderer.link = linkParse;\nrenderer.heading = headingParse;\nrenderer.image = imageParse;\nrenderer.table = tableParse;\nrenderer.tablerow = tableRowParse;\nrenderer.tablecell = tableCellParse;\nrenderer.list = listParse;\nrenderer.listitem = listItemParse;\n\nexport default content => {\n if (typeof content != \"string\") return \"\";\n _1 = 0;\n _2 = 0;\n _3 = 0;\n return marked(replace(content), { renderer });\n};\n","import md2html from \"../editor/helpers/md2html\";\nimport md2mjml from \"../editor/helpers/md2mjml\";\n\nexport const formatTitle = (fi, en) => {\n return en ? `${fi} – ${en}` : `${fi}`;\n};\n\nexport const lastEdited = editedAt => {\n let templates = {\n prefix: \"\",\n suffix: \" sitten\",\n seconds: \"alle minuutti\",\n minute: \"noin minuutti\",\n minutes: \"%d minuuttia\",\n hour: \"noin tunti\",\n hours: \"noin %d tuntia\",\n day: \"päivä\",\n days: \"%d päivää\",\n month: \"noin kuukausi\",\n months: \"%d kuukautta\",\n year: \"noin vuosi\",\n years: \"%d vuotta\"\n };\n\n let time = editedAt;\n\n let template = function(t, n) {\n return templates[t] && templates[t].replace(/%d/i, Math.abs(Math.round(n)));\n };\n\n if (time === \"0000-00-00 00:00:00\") return \"Ei muokattu\";\n time = time.replace(/\\.\\d+/, \"\"); // remove milliseconds\n time = time.replace(/-/, \"/\").replace(/-/, \"/\");\n time = time.replace(/T/, \" \").replace(/Z/, \" UTC\");\n time = time.replace(/([\\+\\-]\\d\\d)\\:?(\\d\\d)/, \" $1$2\"); // -04:00 -> -0400\n time = new Date(time * 1000 || time);\n\n let now = new Date();\n let seconds = ((now.getTime() - time) * 0.001) >> 0;\n let minutes = seconds / 60;\n let hours = minutes / 60;\n let days = hours / 24;\n let years = days / 365;\n\n return (\n \"muokattu \" +\n templates.prefix +\n ((seconds < 45 && template(\"seconds\", seconds)) ||\n (seconds < 90 && template(\"minute\", 1)) ||\n (minutes < 45 && template(\"minutes\", minutes)) ||\n (minutes < 90 && template(\"hour\", 1)) ||\n (hours < 24 && template(\"hours\", hours)) ||\n (hours < 42 && template(\"day\", 1)) ||\n (days < 30 && template(\"days\", days)) ||\n (days < 45 && template(\"month\", 1)) ||\n (days < 365 && template(\"months\", days / 30)) ||\n (years < 1.5 && template(\"year\", 1)) ||\n template(\"years\", years)) +\n templates.suffix\n );\n};\n\nexport const mdToHtml = md => {\n if (typeof md === \"object\") {\n md = md.join(\"\\n\\n\");\n }\n return md2html(headingCaps(md));\n};\nexport const mdToMjml = md => {\n if (typeof md === \"object\") {\n md = md.join(\"\\n\\n\");\n }\n return md2mjml(headingCaps(md));\n};\n\nexport const headingCaps = md => {\n return md.split(\"\\n\").reduce((acc, str) => {\n [\"#\", \"##\", \"###\"].map(i => {\n if (str.substr(0, i.length) === i && str.charAt(i.length) !== \"#\")\n str = [str.slice(0, i.length), \" \", str.slice(i.length)].join(\"\");\n });\n\n return acc + str + \"\\n\";\n }, \"\");\n};\n\nexport const createMarkdownTOC = value => {\n let _1 = 0;\n let _2 = 0;\n let _3 = 0;\n return value\n .replace(\"\\n\\n\", \"\\n\")\n .split(\"\\n\")\n .map(i => i.trim())\n .filter(i => i.length > 0)\n .reduce((acc, str) => {\n if (str.substring(0, 3) === \"###\") {\n _3 = _3 + 1;\n return (\n acc +\n ` - [${_1}.${_2}.${_3}. ${str.replace(\n \"###\",\n \"\"\n )}](#toc_${_1}_${_2}_${_3})\\n`\n );\n } else if (str.substring(0, 2) === \"##\") {\n _3 = 0;\n _2 = _2 + 1;\n return (\n acc +\n ` - [${_1}.${_2}. ${str.replace(\"##\", \"\")}](#toc_${_1}_${_2})\\n`\n );\n } else if (str.substring(0, 1) === \"#\") {\n _3 = 0;\n _2 = 0;\n _1 = _1 + 1;\n return acc + `- [${_1}. ${str.replace(\"#\", \"\")}](#toc_${_1})\\n`;\n } else return acc;\n }, []);\n};\n\nexport const createMjml = (content, config, week) => {\n if (typeof content == \"array\") {\n content = content.join(\"\\n\\n\");\n }\n return `\n\n \n Indecsin Viikkotiedote ${\n config.number\n } — Indecs' Newsletter ${config.number}\n \n p {{ font-size: 16px; margin: 10px 0px}}\n h1 {{ font-size: 25px; font-weight:900; }}\n h2 {{ font-size: 23px; font-weight:400}}\n h3 {{ font-size: 21px; font-weight:400}}\n tr th {{ border-bottom:1px solid #ecedee;text-align:left }}\n ul,ol {{ margin: 10px 0px }}\n ul ul, ol ol, ol ul, ul ol {{ margin: 0px 0px }}\n\n \n \n \n \n \n \n\n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n\n \n \n \n \n \n \n ${\n config.guild\n }\n Viikkotiedote\n Numero ${\n config.number\n } — Viikko ${week}\n \n \n\n \n \n ${mdToMjml(content)}\n \n \n\n \n \n \n Terveisin - Regards,\n ${\n config.name\n }\n ${\n config.job\n } / ${config.job_en}\n \n ${config.guild}
    \n ${config.guild_en}
    \n ${config.university}
    \n ${config.university_en}
    \n ${config.phone}
    \n ${config.email}
    \n ${config.url}\n
    \n
    \n
    \n
    \n
    \n`;\n};\n","import React from 'react'\nimport './index.css'\nimport classNames from 'classnames'\nimport textInsert from './helpers/insertText'\nimport keydownListen from './helpers/keydownListen'\nimport 'highlight.js/styles/tomorrow.css'\nimport './fonts/iconfont.css'\nimport { mdToHtml } from '../tools/articleTools';\n\nclass MdEditor extends React.Component {\n constructor(props) {\n super(props)\n\n this.$vm = null\n this.handleEditorRef = $vm => {\n this.$vm = $vm;\n }\n\n this.state = {\n preview: window.innerWidth < 700 ? false : true,\n expand: false,\n f_history: [],\n f_history_index: 0,\n line_index: 1,\n height:600,\n width:1000\n }\n this.updateWindowDimensions = this.updateWindowDimensions.bind(this);\n }\n\n static defaultProps = {\n placeholder: '',\n lineNum: true,\n topValue:'',\n bottomValue:''\n }\n\n componentDidMount() {\n keydownListen(this);\n this.updateWindowDimensions();\n window.addEventListener('resize', this.updateWindowDimensions);\n }\n\n componentWillUpdate(props, state) {\n const { f_history } = this.state\n if (props.value && state.f_history.length === 0) {\n f_history.push(props.value)\n this.setState({\n f_history\n })\n this.handleLineIndex(props.value)\n }\n }\n\n componentWillUnmount() {\n window.removeEventListener('resize', this.updateWindowDimensions);\n }\n\n updateWindowDimensions() {\n this.setState({ width: window.innerWidth, height: window.innerHeight });\n }\n\n handleChange = e => {\n const value = e.target.value\n this.saveHistory(value)\n this.props.onChange(value)\n }\n\n insert = e => {\n const { $vm } = this\n const type = e.currentTarget ? e.currentTarget.getAttribute('data-type') : e\n textInsert($vm, type)\n this.props.onChange($vm.value)\n this.saveHistory($vm.value)\n }\n\n saveHistory(value) {\n let { f_history, f_history_index } = this.state\n window.clearTimeout(this.currentTimeout)\n this.currentTimeout = setTimeout(() => {\n\n if (f_history_index < f_history.length - 1) {\n f_history.splice(f_history_index + 1)\n }\n\n if (f_history.length >= 20) {\n f_history.shift()\n }\n\n f_history_index = f_history.length\n f_history.push(value)\n this.setState({\n f_history,\n f_history_index\n })\n }, 500)\n\n this.handleLineIndex(value)\n }\n\n handleLineIndex(value) {\n const line_index = value ? value.split('\\n').length : 1\n this.setState({\n line_index: line_index\n })\n }\n\n undo = () => {\n const { f_history } = this.state\n let { f_history_index } = this.state\n f_history_index = f_history_index - 1\n if (f_history_index < 0) return\n this.setState({\n f_history_index\n })\n const value = f_history[f_history_index]\n this.props.onChange(value)\n this.handleLineIndex(value)\n }\n\n redo = () => {\n const { f_history } = this.state\n let { f_history_index } = this.state\n f_history_index = f_history_index + 1\n if (f_history_index >= f_history.length) return\n this.setState({\n f_history_index\n })\n const value = f_history[f_history_index]\n this.props.onChange(value)\n this.handleLineIndex(value)\n }\n\n preview = () => {\n this.setState({\n preview: !this.state.preview\n })\n }\n\n expand = () => {\n this.setState({\n expand: !this.state.expand\n })\n }\n\n save = () => {\n this.props.onSave()\n }\n\n isMobile() {\n return this.state.width < 700;\n }\n\n render() {\n const { preview, expand, line_index } = this.state\n const { value } = this.props\n const previewClass = classNames({\n 'for-panel': true,\n 'for-preview-hidden': !preview,\n \n })\n const editorClass = classNames({\n 'for-panel': true,\n 'for-editor-hidden':this.isMobile() ? preview : false\n })\n const previewActive = classNames({\n 'for-active': preview\n })\n const fullscreen = classNames({\n 'for-container': true,\n 'for-fullscreen': expand\n })\n const expandActive = classNames({\n 'for-active': expand\n })\n const lineNumStyles = classNames({\n 'for-line-num': true,\n hidden: !this.props.lineNum\n })\n\n const lineNum = function () {\n const list = []\n for (let i = 0; i < line_index; i++) {\n list.push(
  • {i + 1}
  • )\n }\n return
      {list}
    \n }\n\n\n return (\n
    \n
    \n
      \n
    • \n H1\n
    • \n
    • \n H2\n
    • \n
    • \n H3\n
    • \n
    • \n \n
    • \n
    • \n \n
    • \n
    • \n \n
    • \n
    • \n \n
    • \n
    • \n \n
    • \n
    • \n \n
    • \n
    \n
      \n
    • \n \n
    • \n
    • \n \n
    • \n
    • \n \n
    • \n
    • \n \n
    • \n
    • \n {expandActive ? (\n \n ) : (\n \n )}\n
    • \n
    • \n {previewActive ? (\n \n ) : (\n \n )}\n
    • \n
    • \n \n
    • \n
    • \n \n
    • \n
    \n
    \n
    \n
    \n
    \n {/*
    */}\n
    \n {lineNum()}\n
    \n
    {value} 
    \n \n
    \n
    \n {/*
    */}\n
    \n
    \n
    \n \n
    \n
    \n
    \n )\n }\n}\n\nexport default MdEditor\n","import React, { Component } from 'react';\nimport { toast } from 'react-toastify';\nimport Editor from '../editor';\nimport {Alert} from 'reactstrap'\nimport Beforeunload from 'react-beforeunload';\nimport { connector, actions } from '../actions';\n\nconst connect = connector(\n state => ({\n socket:state.socket,\n rooms:state.app.rooms,\n id:state.config.articleId\n }), \n {\n getArticle:actions.app.getArticle,\n navigate:actions.config.navigate,\n updateArticle:actions.app.updateArticle\n }\n);\n\nclass Main extends Component {\n constructor(props) {\n super(props);\n this.props.getText(value => this.setState({ value }));\n this.state = {\n value: '',\n autoSave: true,\n previousValue: ''\n }\n }\n\n componentDidMount() {\n this.initialize();\n }\n\n initialize() {\n this.props.getArticle(this.props.id)\n .then(({ action: { payload: { data } } }) => {\n this.setState({\n value: data.text,\n previousValue:data.text\n });\n\n this.props.socket.emit('join room', data);\n this.interval = setInterval(() => {\n if (this.isEdited()) {\n this.setState({previousValue:this.state.value});\n this.handleSave()\n }\n }, 60000);\n })\n .catch(e => {\n this.props.navigate('HOME');\n })\n }\n\n isEdited(){\n return this.state.value !== this.state.previousValue\n }\n\n componentWillUnmount() {\n clearInterval(this.interval);\n }\n\n reconnect() {\n this.props.getArticle(this.props.id)\n .then(({ action: { payload: { data } } }) => {\n this.setState({\n value: data.text,\n previousValue:data.text,\n disconnected:false\n });\n this.props.socket.emit('join room', data);\n })\n .catch(e => {\n this.props.navigate('HOME');\n })\n }\n\n handleChange = value => {\n if(this.props.socket.disconnected) {\n this.reconnect();\n }else {\n this.setState({\n value,\n });\n this.props.socket.emit('set text', value);\n }\n\n }\n\n handleSave() {\n this.props.updateArticle({ id: this.props.id, text: this.state.value })\n .then(() => toast.success(\"Artikkeli tallennettu\"))\n .catch(() => toast.error(\"Virhe tallennettaessa artikkelia\"))\n }\n\n socketsOnline(){\n const {rooms} = this.props;\n const sockets = rooms[this.props.id] ? rooms[this.props.id].sockets : [];\n return sockets.length > 1;\n }\n\n render() {\n return (\n
    \n {this.isEdited() && \"Haluatko varmasti poistua? Viimeisempiä muutoksia ei ole tallennettu.\"} />}\n {this.socketsOnline() && \n Toinen käyttäjä on muokkaamassa tiedostoa!\n }\n
    \n this.handleSave()}\n />\n
    \n
    \n )\n }\n}\n\nexport default connect(Main)\n\nconst editorStyle = {\n boxShadow: '#999 0 0 12px',\n borderRadius: '4px'\n}","import React, { Component } from 'react'\nimport { Breadcrumb, BreadcrumbItem } from 'reactstrap';\nimport {formatTitle} from '../tools/articleTools';\nimport {SCREENS} from '../constants';\nimport { connector, actions } from '../actions';\n\nconst connect = connector(\n state => ({\n year:state.config.year,\n week:state.config.week,\n articleId:state.config.articleId,\n screen:state.config.screen,\n articles:state.app.articles\n }), \n {\n navigate:actions.config.navigate\n }\n);\n\nclass Nav extends Component {\n\n render() {\n\n const { year, week, articleId, screen, articles } = this.props;\n const article = screen === SCREENS.ARTICLE && articles.find(a => a.id === articleId);\n const title = article ? `${article.position}. ${formatTitle(article.title, article.title_en)}` : `Viikkotiedote`;\n return (\n \n this.props.navigate('HOME')}>Viikkis {week}/{year}\n {(screen === SCREENS.ARTICLE || screen === SCREENS.SUMMARY) && {title}}\n\n \n )\n }\n}\n\nexport default connect(Nav)\n","import React, { Component } from \"react\";\nimport {\n Button,\n Modal,\n ModalHeader,\n ModalBody,\n ModalFooter,\n ButtonGroup,\n Input\n} from \"reactstrap\";\nimport Editor from \"../editor\";\nimport { createMarkdownTOC, mdToHtml } from \"../tools/articleTools\";\nimport {\n MD_CONFIG,\n MD_CONFIG_TOC,\n SUMMARY_BOTTOM,\n SUMMARY_TOP,\n EMAIL_SUBJECT\n} from \"../constants\";\nimport { connector, actions } from \"../actions\";\nimport { mjml2html, sendEmail } from \"../services/httpService\";\nimport { createMjml } from \"../tools/articleTools\";\nimport { toast } from \"react-toastify\";\n\n\nconst connect = connector(\n state => ({\n year: state.config.year,\n week: state.config.week,\n now: state.config.now,\n socket: state.socket,\n config: state.config.config,\n isAdmin: state.app.user.admin,\n summary: state.app.articles\n .sort((a, b) => a.position - b.position)\n .reduce((acc, a) => acc + \"\\n \\n\" + a.text, ``)\n }),\n {\n getWeekArticles: actions.app.getWeekArticles,\n setPrevWeek: actions.config.setPrevWeek,\n setNextWeek: actions.config.setNextWeek\n }\n);\n\nclass Summary extends Component {\n state = {\n showModal: false,\n password:'',\n recipient:this.props.config.recipient,\n sender:this.props.config.sender,\n attachments:[]\n };\n\n componentDidMount() {\n this.props.getWeekArticles({\n year: this.props.year,\n week: this.props.week\n });\n }\n\n toggleModal() {\n this.setState({ showModal: !this.state.showModal });\n }\n\n createBlob(format, content) {\n const fileName = `${this.props.year}-${this.props.week}-viikkis.${format}`;\n let element = document.createElement(\"a\");\n let file = new Blob([content], { type: \"text/plain\" });\n element.href = URL.createObjectURL(file);\n element.download = fileName;\n element.click();\n }\n\n exportHtml() {\n // md -> mjml -> html\n const tableOfContents = createMarkdownTOC(this.props.summary);\n const mjml = createMjml(\n [tableOfContents, this.props.summary],\n this.props.config,\n this.props.week\n );\n mjml2html(mjml)\n .then(res => res.json())\n .then(res => this.createBlob(\"html\", res.html))\n .catch(e => toast.error(\"virhe\"));\n }\n\n sendEmail(){\n const tableOfContents = createMarkdownTOC(this.props.summary);\n const mjml = createMjml([tableOfContents, this.props.summary], this.props.config, this.props.week);\n const {sender, recipient, password, attachments} = this.state;\n const subject = EMAIL_SUBJECT(this.props.config);\n sendEmail(mjml, sender, recipient, password, subject, attachments)\n .then((res) => {\n if (res.status === 200) {\n toast.success(\"Sähköposti lähetetty\")\n } else {\n toast.error(\"Ongelma sähköpostin lähetyksessä\")\n }\n })\n .catch(e => toast.error(\"Ongelma sähköpostin lähetyksessä\"));\n }\n\n exportMd() {\n let content = (\n MD_CONFIG(this.props.config, this.props.week) +\n MD_CONFIG_TOC +\n this.props.summary\n ).replace(/\\n/g, \"\\r\\n\");\n this.createBlob(\"md\", content);\n }\n\n exportMjml() {\n const tableOfContents = createMarkdownTOC(this.props.summary);\n const mjml = createMjml(\n [tableOfContents, this.props.summary],\n this.props.config,\n this.props.week\n ).replace(/\\n/g, \"\\r\\n\");\n this.createBlob(\"txt\", mjml);\n }\n\n render() {\n const tableOfContents = createMarkdownTOC(this.props.summary);\n const topValue = SUMMARY_TOP(\n this.props.week,\n tableOfContents,\n this.props.config\n );\n const bottomValue = SUMMARY_BOTTOM(this.props.config);\n const editorStyle = {\n boxShadow: \"#999 0 0 12px\",\n borderRadius: \"4px\"\n };\n\n return (\n \n this.toggleModal()}>\n Lataa tai lähetä viikkis\n \n
    Lähetä viikkis sähköpostilla
    \n Vastaanottajan sähköposti:\n this.setState({ recipient: e.target.value })}\n />\n Liitteet:\n this.setState({attachments:Array.from(e.target.files)})}/>\n
    \n Lähettäjän sähköposti:\n this.setState({ sender: e.target.value })}\n />\n Lähettäjän salasana:\n this.setState({ password: e.target.value })}\n />\n \n
    \n \n \n \n \n \n \n \n
    \n\n {this.props.isAdmin && }\n\n
    \n {}}\n onSave={() => {}}\n />\n
    \n
    \n );\n }\n}\n\nexport default connect(Summary);\n","import React, { Component } from \"react\";\nimport { Button, Form, FormGroup, Label, Input, Col, Row } from \"reactstrap\";\nimport { formatTitle } from \"../tools/articleTools\";\nimport { TITLES } from \"../constants\";\nimport { connector, actions } from \"../actions\";\nimport { toast } from \"react-toastify\";\nimport * as httpService from \"../services/httpService\";\n\nconst connect = connector(\n state => ({\n year: state.config.year,\n week: state.config.week,\n number: state.config.config.number\n }),\n {\n createWeek: actions.app.createWeek,\n updateConfig: actions.config.updateConfig\n }\n);\n\nclass CreateWeek extends Component {\n state = {\n articles: TITLES.map((title, i) => ({\n year: this.props.year,\n week: this.props.week,\n title: title.fi,\n title_en: title.en,\n text: `# ${formatTitle(title.fi, title.en)} \\n\\n`,\n text_en: ``\n }))\n };\n\n createWeek() {\n if (this.state.articles.find(article => article.title.trim() === \"\")) {\n toast.error(\"Kaikki suomenkieliset kentät ovat pakollisia!\");\n return;\n }\n const articles = this.state.articles.map((a, i) => ({\n ...a,\n position: i + 1,\n text: a.text || `# ${formatTitle(a.title, a.title_en)} \\n\\n`,\n year: this.props.year,\n week: this.props.week\n }));\n \n let nextNumber = this.props.number+1;\n if (this.props.week < 6 && this.props.number > 8) {\n nextNumber = 1;\n }\n\n this.props.createWeek(articles);\n this.props.updateConfig({number:nextNumber})\n }\n\n deleteTitle(i) {\n this.setState({\n articles: this.state.articles.reduce(\n (acc, obj, ind) => (ind === i ? acc : [...acc, obj]),\n []\n )\n });\n }\n\n changeArticle(e, i) {\n this.setState({\n articles: this.state.articles.map((article, index) =>\n i === index ? { ...article, [e.target.name]: e.target.value } : article\n )\n });\n }\n\n async copyPrevWeek() {\n try {\n const response = await httpService.getWeekArticles({\n week: this.props.week - 1,\n year: this.props.year\n });\n const data = response.data;\n if (data.length === 0) throw new Error(\"Ei viime viikon tuloksia\");\n this.setState({\n articles: data\n .sort((a, b) => a.position - b.position)\n .map(a => ({\n title: a.title,\n title_en: a.title_en,\n text: a.text,\n text_en: a.text_en,\n year: this.props.year,\n week: this.props.week,\n position: a.position\n }))\n });\n } catch (e) {\n toast.error(\"Virhe ladatessa viime viikkoa\");\n }\n }\n\n addTitle() {\n this.setState({ articles: [...this.state.articles, { fi: \"\", en: \"\" }] });\n }\n\n render() {\n const { articles } = this.state;\n\n return (\n
    \n \n
    \n {articles.map((article, i) => (\n
    \n this.deleteTitle(i)}\n >\n X\n \n \n
    \n

    {i + 1}.

    \n
    \n \n \n this.changeArticle(e, i)}\n />\n \n \n \n this.changeArticle(e, i)}\n />\n \n
    \n\n this.changeArticle(e, i)}\n />\n
    \n ))}\n \n\n this.createWeek()}\n >\n Luo viikkis!\n \n \n
    \n );\n }\n}\n\nexport default connect(CreateWeek);\n\nconst styles = {\n box: {\n position: \"relative\",\n marginTop: 10,\n backgroundColor: \"rgba(0,0,0,0.07)\",\n borderRadius: 3,\n boxShadow: \"#999 0 0 7px\",\n border: \"1px solid darkgray\",\n padding: `60px 10px 10px 10px`\n },\n button: {\n position: \"absolute\",\n top: 0,\n right: 0,\n zIndex: 999\n },\n index: {\n position: \"absolute\",\n top: 5,\n left: 5,\n zIndex: 999\n }\n};\n","import React, { Component } from 'react';\nimport { Badge, Button, ListGroup, ListGroupItem } from 'reactstrap';\nimport CreateWeek from './CreateWeek';\nimport { formatTitle, lastEdited } from '../tools/articleTools';\nimport { connector, actions } from '../actions';\n\nconst connect = connector(\n state => ({\n articles:state.app.articles.sort((a, b) => a.position - b.position),\n socket:state.socket,\n rooms:state.app.rooms,\n year:state.config.year,\n week:state.config.week,\n isAdmin: state.app.user.admin\n }), \n {\n deleteArticle:actions.app.deleteArticle,\n setConfigState:actions.config.setConfigState,\n navigate:actions.config.navigate\n }\n);\n\nclass WeekList extends Component {\n\n socketsOnline(id) {\n const { rooms } = this.props;\n const sockets = rooms[id] ? rooms[id].sockets : [];\n return sockets.length > 0;\n }\n\n deleteArticle(id) {\n const bool = window.confirm('Haluatko varmasti poistaa artikkelin?');\n if (bool) {\n this.props.deleteArticle(id)\n }\n }\n\n render() {\n const {articles} = this.props;\n\n const NoArticles = () => {\n return (\n
    \n \n

    Ei artikkeleja

    \n
    Sihteeri ei ole vielä luonut tämän viikon artikkeleja
    \n
    \n )\n }\n\n return articles.length === 0 ? (\n this.props.isAdmin ? : \n ) : (\n \n \n \n {\n articles.map(article => (\n\n \n this.props.setConfigState({ articleId: article.id, screen: 'ARTICLE' })}>\n {article.position}. {formatTitle(article.title, article.title_en)}\n \n
    \n\n {article.text.length} merkkiä {' '}\n {lastEdited(article.edited_at)} {' '}\n {this.socketsOnline(article.id) && joku muokkaamassa}\n \n {this.props.isAdmin && }\n\n
    \n ))\n }\n
    \n
    \n )\n }\n}\n\nexport default connect(WeekList)","import moment from \"moment\";\nimport React, { Component } from \"react\";\nimport { toast } from \"react-toastify\";\nimport WeekList from \"./WeekList\";\nimport { Button } from \"reactstrap\";\nimport { connector, actions } from \"../actions\";\n\nconst connect = connector(\n state => ({\n year: state.config.year,\n week: state.config.week,\n now: state.config.now,\n socket: state.socket\n }),\n {\n getWeekArticles: actions.app.getWeekArticles,\n setPrevWeek: actions.config.setPrevWeek,\n setNextWeek: actions.config.setNextWeek,\n getConfig: actions.config.getConfig\n }\n);\n\nclass WeekContainer extends Component {\n state = {\n failed: true,\n loaded: false\n };\n componentDidMount() {\n this.init();\n this.props.socket.emit(\"leave room\");\n }\n\n async init() {\n try {\n await this.props.getWeekArticles({\n year: this.props.year,\n week: this.props.week\n });\n this.props.getConfig();\n this.setState({ failed: false, loaded: true });\n } catch (e) {\n toast.error(\"Ei internet yhteyttä palvelimeen\");\n this.setState({ failed: true, loaded: true });\n }\n }\n\n render() {\n const { year, week, now } = this.props;\n const startOfWeek = moment(now).startOf(\"isoWeek\");\n const endOfWeek = moment(now).endOf(\"isoWeek\");\n const { loaded, failed } = this.state;\n return (\n
    \n
    \n this.props.setPrevWeek()}\n style={styles.left}\n color=\"link\"\n >\n

    \n \n

    \n \n
    \n

    Viikko {week}

    \n

    \n {startOfWeek.format(\"DD.MM.YYYY\")} -{\" \"}\n {endOfWeek.format(\"DD.MM.YYYY\")}\n

    \n
    \n this.props.setNextWeek()}\n style={styles.right}\n color=\"link\"\n >\n

    \n \n

    \n \n
    \n {loaded && !failed && }\n
    \n );\n }\n}\n\nexport default connect(WeekContainer);\n\nconst styles = {\n wrapper: {\n backgroundColor: \"white\",\n boxShadow: \"#999 0 0 12px\",\n borderRadius: \"4px\"\n },\n container: {\n flex: 1,\n flexDirection: \"row\",\n display: \"flex\"\n },\n left: {\n flex: 0.1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n cursor: \"pointer\",\n borderRadius: 0\n },\n center: {\n flex: 0.8,\n flexDirection: \"column\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\"\n },\n right: {\n flex: 0.1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n cursor: \"pointer\"\n }\n};\n","import React from \"react\";\nimport { connector, actions } from \"../actions\";\nimport { Col, Input, Row, Button } from \"reactstrap\";\nimport { toast } from \"react-toastify\";\n\nconst connect = connector(\n state => ({\n config: state.config.config\n }),\n {\n updateConfig: actions.config.updateConfig\n }\n);\n\nclass ConfigSettings extends React.Component {\n state = this.props.config;\n\n changeConfig(e) {\n this.setState({ [e.target.name]: e.target.value });\n }\n\n updateConfig() {\n this.props.updateConfig(this.state)\n .then(() => toast.success(\"Asetukset päivitetty\"))\n .catch(e => toast.error(\"Virhe asetuksien päivityksessä\"));\n }\n\n render() {\n return (\n
    \n

    Sihteerin asetukset

    \n \n {Object.entries(this.state)\n .filter(i => i[0] !== \"id\")\n .map(([key, value]) => (\n \n {key}:\n this.changeConfig(e)}\n />\n \n ))}\n \n this.updateConfig()}\n >\n Tallenna asetukset\n \n
    \n );\n }\n}\n\nexport default connect(ConfigSettings);\n\nconst styles = {\n box: {\n position: \"relative\",\n marginTop: 10,\n backgroundColor: \"white\",\n borderRadius: 3,\n boxShadow: \"#999 0 0 7px\",\n border: \"1px solid darkgray\",\n padding: `60px 10px 10px 10px`\n }\n};\n","import React from 'react';\nimport {connector} from '../actions';\nimport { Container } from 'reactstrap';\nimport { SCREENS } from '../constants';\nimport Article from './Article';\nimport Header from './Header';\nimport NavBar from './NavBar';\nimport Summary from './Summary';\nimport WeekContainer from './WeekContainer';\nimport ConfigSettings from './ConfigSettings';\n\nconst connect = connector(\n state => ({\n screen:state.config.screen\n })\n);\n\nclass MainContainer extends React.Component {\n\n navigation() {\n switch (this.props.screen) {\n case SCREENS.SUMMARY:\n return \n case SCREENS.ARTICLE:\n return
    \n case SCREENS.CONFIG_SETTINGS:\n return \n default:\n return \n }\n }\n\n render() {\n return (\n
    \n
    \n \n \n {this.navigation()}\n \n
    \n );\n }\n}\n\nexport default connect(MainContainer)","import React from 'react';\nimport Loader from 'react-loader-spinner';\n\nexport const LoadingComponent = () => {\n return (\n
    \n
    \n

    Ladataan...

    \n \n
    \n
    \n )\n}\n\nconst styles = {\n loader: {\n zIndex: 10000,\n position: 'fixed',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n backgroundColor: 'transparent',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n color: 'white'\n },\n container: { backgroundColor: 'rgba(0,0,0,0.5)', padding: 40, display: 'flex', justifyContent: 'center', alignItems: 'center' },\n text: { color: 'white' }\n}","import React, { Component } from 'react';\nimport { ToastContainer } from 'react-toastify';\nimport Login from './Login';\nimport Navigator from './Navigator';\nimport { LoadingComponent } from '../components'\nimport { connector, actions } from '../actions';\n\nconst connect = connector(\n state => ({\n loading:state.app.loading,\n socket:state.socket,\n logged:state.app.logged\n }), \n {\n login:actions.app.login,\n setState:actions.app.setState\n }\n);\n\nclass ScreenContainer extends Component {\n constructor(props) {\n super(props);\n this.props.socket.on('get rooms', (rooms) => this.props.setState({ rooms }));\n this.props.socket.on('get sockets', (sockets) => this.props.setState({ sockets }));\n this.getText = (cb) => this.props.socket.on('get text', cb);\n }\n\n componentDidMount() {\n const email = localStorage.getItem('email');\n const password = localStorage.getItem('password');\n if (email && password) {\n this.props.login({ email, password })\n .catch(() => {\n localStorage.removeItem('email');\n localStorage.removeItem('password');\n })\n }\n }\n\n render() {\n return (\n
    \n \n {\n this.props.loading && \n }\n {\n this.props.logged ? : \n }\n
    \n );\n }\n}\n\nexport default connect(ScreenContainer)\n","import { types } from \"../actions/appActions\";\nimport { toast } from \"react-toastify\";\nlet initialState = {\n loading: false,\n articles: [],\n config: {\n year: null,\n week: null,\n number: null,\n guild: null,\n guild_en: null,\n subject: null,\n url: null,\n name: null,\n job: null,\n job_en: null,\n university: null,\n university_en: null,\n phone: null,\n email: null\n },\n rooms: {},\n logged: false,\n user: {\n admin:false,\n email:''\n },\n sockets: []\n};\n\nconst appReducer = (state = initialState, { payload, type }) => {\n switch (type) {\n case types.SET_STATE.NAME:\n return { ...state, ...payload };\n\n case types.GET_ARTICLES.PENDING:\n case types.CREATE_WEEK.PENDING:\n case types.GET_ARTICLE.PENDING:\n case types.DELETE_ARTICLE.PENDING:\n case types.GET_WEEK_ARTICLES.PENDING:\n case types.GET_WEEK_CONFIG.PENDING:\n case types.LOGIN.PENDING:\n return { ...state, loading: true };\n\n case types.GET_ARTICLES.REJECTED:\n case types.CREATE_WEEK.REJECTED:\n case types.DELETE_ARTICLE.REJECTED:\n case types.GET_ARTICLE.REJECTED:\n case types.GET_WEEK_ARTICLES.REJECTED:\n case types.GET_WEEK_CONFIG.REJECTED:\n toast.error(\"Ei internet yhteyttä palvelimeen\");\n return { ...state, loading: false };\n\n case types.GET_ARTICLES.FULFILLED:\n return { ...state, loading: false, articles: payload.data };\n\n case types.LOGIN.REJECTED:\n return { ...state, loading: false };\n\n case types.CREATE_WEEK.FULFILLED:\n return {\n ...state,\n articles: [...state.articles, ...payload],\n loading: false\n };\n\n case types.GET_ARTICLE.FULFILLED:\n return {\n ...state,\n articles: state.articles.map(a => (a.id === payload.id ? payload : a)),\n loading: false\n };\n\n case types.DELETE_ARTICLE.FULFILLED:\n return {\n ...state,\n articles: state.articles.reduce(\n (acc, a) => (a.id === payload.data ? acc : [...acc, a]),\n []\n ),\n loading: false\n };\n\n case types.GET_WEEK_ARTICLES.FULFILLED:\n return { ...state, articles: payload.data, loading: false };\n\n case types.GET_WEEK_CONFIG.FULFILLED:\n return {\n ...state,\n config: payload.data.length > 0 ? payload.data[0] : initialState.config,\n loading: false\n };\n\n case types.LOGIN.FULFILLED:\n return { ...state, user: payload.data, logged: true, loading: false };\n\n case types.LOGOUT.NAME:\n return { ...state, user: initialState.user, logged: false };\n\n default:\n return state;\n }\n};\n\nexport default appReducer;\n","import { types } from \"../actions/configActions\";\nimport moment from \"moment\";\nlet initialState = {\n loading: false,\n year: parseInt(moment().format(\"YYYY\")),\n week: parseInt(moment().format(\"WW\")),\n now: moment()\n .day(\"Wednesday\")\n .year(moment().format(\"YYYY\"))\n .week(moment().format(\"WW\")),\n screen: null,\n articleId: null,\n config: {\n email: \"\",\n guild: \"\",\n guild_en: \"\",\n id: \"\",\n job: \"\",\n job_en: \"\",\n name: \"\",\n phone: \"\",\n university: \"\",\n university_en: \"\",\n url: \"\",\n sender:\"\",\n recipient:\"\",\n number:0\n }\n};\n\nconst configReducer = (state = initialState, { payload, type }) => {\n switch (type) {\n case types.SET_CONFIG_STATE.NAME:\n return { ...state, ...payload };\n case types.NAVIGATE.NAME:\n return { ...state, screen: payload };\n case types.NAVIGATE_HOME.NAME:\n return initialState;\n case types.GET_CONFIG.FULFILLED:\n return {\n ...state,\n config: payload.data\n };\n default:\n return state;\n }\n};\n\nexport default configReducer;\n","import { combineReducers } from 'redux';\nimport appReducer from './appReducer';\nimport io from 'socket.io-client';\nimport {SOCKET_ENDPOINT} from '../constants'\nimport configReducer from './configReducer';\nconst socketReducer = io(SOCKET_ENDPOINT);\n\nconst rootReducer = combineReducers({\n app: appReducer,\n config: configReducer,\n socket: () => socketReducer\n})\n\nexport default rootReducer;\n","import { createStore, applyMiddleware } from 'redux';\nimport thunk from 'redux-thunk';\nimport reducers from './reducers';\nimport promise from \"redux-promise-middleware\"\nimport { createLogger } from 'redux-logger';\n\nconst loggerMiddleWare = createLogger({ predicate:(getState, action) => true});\nconst middleWares = applyMiddleware(promise(), thunk, loggerMiddleWare);\n\nexport default createStore(reducers, middleWares);","// This optional code is used to register a service worker.\n// register() is not called by default.\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 subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA\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 function register(config) {\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.href);\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/facebook/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. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\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 http://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\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 // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\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 const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.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, config);\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-app-polyfill/ie11';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport ScreenContainer from './containers/ScreenContainer'\nimport {Provider} from 'react-redux';\nimport store from './store';\nimport * as serviceWorker from './serviceWorker';\nimport 'react-toastify/dist/ReactToastify.css';\nimport './bootstrap.css';\nimport './index.css';\n\nReactDOM.render(, document.getElementById('root'));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: http://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}