{"version":3,"sources":["components/Index/FetchFunctions.js","components/Index/HomeContext.js","components/Index/PersonRow.js","components/Index/PersonsTable.js","components/Index/SearchInputs.js","components/Index/IndexContainter.js","components/MyMenu/NumberOfUsers.js","components/MyMenu/MyMenu.js","components/Index/Title.js","components/Index/Index.js","components/Person/PersonContext.js","components/Person/GifDisplayGrid.js","components/Person/GiphyPicker.js","components/Person/CommentForm.js","components/Person/MyComment.js","components/Person/CommentGroup.js","components/Person/PersonContainer.js","components/Person/PersonPage.js","components/About/IconPageLink.js","components/About/About.js","App.js","serviceWorker.js","index.js"],"names":["searchPersons","order","searchQuery","searchType","a","JSON","parse","stringify","searchQCorrect","replace","endpoint","console","log","fetch","response","json","data","GetPersonsData","persons","length","url","personsDataurl","slugExists","Slug","p","some","el","FetchFunctions","require","RemoteSearch","filteredPersons","addPersons","forEach","element","push","HomeContext","createContext","HomeContextProvider","props","useState","setSearchQuery","Persons","setPersons","setSearchType","setOrder","prevOrderRef","useRef","isSearching","setIsSearching","typingTimeout","setTypingTimeout","isFetching","setIsFeteching","useEffect","current","prevOrder","GetPersons","clearTimeout","search","Search","Data","hasVScroll","document","body","scrollHeight","clientHeight","getPersons","runSearch","runFilter","setTimeout","filter","person","Name","toLowerCase","indexOf","Provider","value","children","myController","AbortController","LikeDislikeButton","context","useContext","isLiked","setLiked","undefined","beingCHANGEDbyRow","Votes","votes","setVotes","prevVotesRef","setFetchVotes","firstUpdate","prevVotes","handleVoteClick","liked","times","handleLikeClick","handleDisLikeClick","DisLikeButton","params","IconButton","edge","onClick","name","className","color","LikeButton","e","style","transform","rotateY","useLayoutEffect","voteURL","slug","i","Math","abs","method","index","textAlign","alignContent","width","PersonRow","abort","Table","Row","Cell","fontSize","textDecoration","href","CommentIconButton","commentCount","Nav","Item","Link","PersonsTable","handleScroll","h","documentElement","b","st","sh","getScrollPercent","window","addEventListener","removeEventListener","unstackable","columns","Body","map","key","CommentCount","align","Loader","active","inline","SearchInputs","bigButton","setBigButton","ToggleButtons","handleOrderChange","event","target","Button","Group","size","toggle","negative","handleResize","innerWidth","onInput","Input","placeholder","Divider","hidden","IndexContainer","NumberOfUsers","timeoutId","setTimeoutId","onbeforeunload","navigator","sendBeacon","onload","getNumOfUsers","mounted","handleVisibilityChange","focus","type","clearInterval","numUsers","setNumUsers","Menu","position","MyMenu","secondary","to","Title","Component","Index","divRef","min","myDiv","overflow","ref","PersonContext","PersonContextProvider","setName","setSlug","comments","setComments","isUpdating","setisUpdating","staffJob","setStaffJob","getPData","getCommentData","then","getPersonData","Comments","StaffJob","personDataurl","postCommentVote","yes","GifDisplayGrid","Grid","images","image","Column","Image","src","GiphyPicker","stickersType","this","apiKey","onSelect","item","handleGifAdd","library","rating","searchPlaceholder","masonryConfig","imageWidth","gutter","mq","linkify","CommentForm","state","content","files","handleFormSubmit","bind","handleChange","preventDefault","FormData","append","callbackFromParent","setState","closeModal","links","find","link","myImages","gif","downsizedUrl","downsized","SubmitButton","labelPosition","icon","disabled","primary","Form","reply","onSubmit","onChange","encType","action","TextArea","Popup","trigger","on","pinned","Content","contextType","MyComment","handleOpen","modalOpen","handleClose","isLikeButtonSelected","c","updateComment","onLike","Author","as","AuthorName","Images","Text","Actions","Icon","display","Modal","open","onClose","CommentGroup","paddingBottom","paddingTop","PersonContainer","padded","Header","PersonPage","match","IconPageLink","Start","About","page","App","path","exact","component","render","Boolean","location","hostname","ReactDOM","StrictMode","getElementById","serviceWorker","ready","registration","unregister","catch","error","message"],"mappings":"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","file":"static/js/main.610cd457.chunk.js","sourcesContent":["export async function searchPersons(order, searchQuery, searchType) {\r\n let searchQCorrect = JSON.parse(JSON.stringify(searchQuery));\r\n searchQCorrect =\r\n searchQuery.replace(/\\u0027|\\u2019|\\u0060|\\u2018/, `'`); \r\n \r\n const endpoint =\r\n \"/persons?name=\" +\r\n searchQCorrect +\r\n \"&type=\" +\r\n searchType +\r\n \"&order=\" +\r\n order;\r\n console.log(endpoint);\r\n\r\n const response = await fetch(endpoint);\r\n const data = await response.json();\r\n\r\n return data;\r\n}\r\n\r\nconst personsDataurl = \"/json\";\r\n\r\nexport async function GetPersonsData(order, persons) {\r\n console.log(\"This is the skip length\" + persons.length);\r\n let url =\r\n personsDataurl +\r\n \"?order=\" +\r\n order +\r\n \"&number=\" +\r\n 10 +\r\n // (count - Persons.length) +\r\n \"&skip=\" +\r\n persons.length;\r\n const response = await fetch(url);\r\n const data = await response.json();\r\n return data;\r\n}\r\nexport function slugExists(Slug, p) {\r\n return p.some(function (el) {\r\n return el.Slug === Slug;\r\n });\r\n}\r\nconst FetchFunctions = require(\"./FetchFunctions\");\r\n\r\nexport async function RemoteSearch(\r\n order,\r\n searchQuery,\r\n searchType,\r\n filteredPersons\r\n) {\r\n let addPersons = [];\r\n console.log(\"Doing Remote Search\");\r\n\r\n let searchPersons = await FetchFunctions.searchPersons(\r\n order,\r\n searchQuery,\r\n searchType\r\n );\r\n\r\n if (filteredPersons == null || filteredPersons.length < 1) {\r\n addPersons = searchPersons;\r\n return addPersons;\r\n } else if (searchPersons != null && searchPersons.length > 0) {\r\n searchPersons.forEach((element) => {\r\n if (slugExists(element.Slug, filteredPersons) === false) {\r\n addPersons.push(element);\r\n } else {\r\n console.log(\"DUPLCIATE\");\r\n }\r\n });\r\n return addPersons;\r\n }\r\n}\r\n","import React, { createContext, useState, useEffect, useRef } from \"react\";\r\n\r\nexport const HomeContext = createContext(null);\r\nvar persons = [];\r\nconst FetchFunctions = require(\"./FetchFunctions\");\r\nconst maxLength = 100;\r\n\r\nexport const HomeContextProvider = (props) => {\r\n const [searchQuery, setSearchQuery] = useState(\"\");\r\n const [Persons, setPersons] = useState([]);\r\n\r\n const [searchType, setSearchType] = useState(\"all\");\r\n const [order, setOrder] = useState(-1);\r\n const prevOrderRef = useRef(order);\r\n // const [count, setCount] = useState(10);\r\n const [isSearching, setIsSearching] = useState(false);\r\n const [typingTimeout, setTypingTimeout] = useState(0);\r\n const [isFetching, setIsFeteching] = useState(false);\r\n\r\n useEffect(() => {\r\n prevOrderRef.current = order;\r\n });\r\n const prevOrder = prevOrderRef.current;\r\n useEffect(() => {\r\n if (Persons != null) {\r\n }\r\n }, [Persons]);\r\n useEffect(() => {\r\n if (!isFetching) return;\r\n if (persons.length > maxLength) {\r\n return;\r\n }\r\n GetPersons(-1, false);\r\n }, [isFetching]);\r\n useEffect(() => {\r\n clearTimeout(typingTimeout);\r\n if (prevOrder != order) {\r\n console.log(prevOrder);\r\n console.log(order);\r\n persons = [];\r\n }\r\n if (searchQuery !== \"\" || searchType !== \"all\") {\r\n GetPersons(-1, true);\r\n // console.log(\"GET PERSONS FROM SEARCH COMPONET\");\r\n } else {\r\n // console.log(\"GET PERSONS\");\r\n setIsSearching(false);\r\n\r\n GetPersons(-1, false);\r\n }\r\n }, [searchQuery, searchType, order]);\r\n\r\n var isRunning = false;\r\n\r\n async function GetPersons(order, search) {\r\n console.log(isRunning);\r\n if (!isRunning) {\r\n if (search) {\r\n // setIsSearching(true)\r\n await Search(false, false);\r\n // setIsSearching(false)\r\n } else if (!search) {\r\n await Data();\r\n let hasVScroll =\r\n document.body.scrollHeight > document.body.clientHeight;\r\n console.log(\"hasVsCroll\" + hasVScroll);\r\n\r\n if (!hasVScroll) {\r\n console.log(\"Running Data for hasVSCroll\")\r\n setIsFeteching(true)\r\n } \r\n setIsFeteching(false);\r\n \r\n }\r\n } else {\r\n // console.log(\"IsRunning: \" + isRunning);\r\n }\r\n }\r\n\r\n async function Data() {\r\n if (persons.length > maxLength && Persons.length > maxLength) {\r\n return;\r\n } else if (\r\n persons.length > maxLength &&\r\n Persons.length !== persons.length\r\n ) {\r\n console.log(\"The Exception case\");\r\n setPersons(persons);\r\n return;\r\n }\r\n let getPersons = await FetchFunctions.GetPersonsData(order, persons); // IT's adding the extra person at the 10 mark somewhere in here\r\n\r\n if (getPersons != null) {\r\n getPersons.forEach((element) => {\r\n if (FetchFunctions.slugExists(element.Slug, persons) === false) {\r\n persons.push(element);\r\n } else {\r\n console.log(\"DUPLCIATE\");\r\n }\r\n });\r\n }\r\n\r\n console.log(\"persons: \" + persons);\r\n\r\n setPersons(persons);\r\n }\r\n var filteredPersons = [];\r\n async function Search(runSearch, runFilter) {\r\n setIsSearching(true);\r\n\r\n // console.log(\"SEARCHED\");\r\n if (typingTimeout) {\r\n clearTimeout(typingTimeout);\r\n }\r\n setTypingTimeout(\r\n setTimeout(async () => {\r\n console.log(\"Would have done search now\");\r\n\r\n // if (runSearch === false) {\r\n // Search(true, false);\r\n // }\r\n if (runFilter === false) {\r\n setIsSearching(true);\r\n console.log(\"SET SERACHING TRUE\");\r\n await Search(true, true);\r\n console.log(\"SET SERACHING False\");\r\n\r\n setIsSearching(false);\r\n }\r\n }, 1000)\r\n );\r\n if (runFilter === true) {\r\n console.log(\"filtered persons\");\r\n filteredPersons = persons.filter((person) => {\r\n return (\r\n person.Name.toLowerCase().indexOf(searchQuery.toLowerCase()) !== -1\r\n );\r\n });\r\n }\r\n\r\n if (runSearch === true) {\r\n console.log(\"run search persons\");\r\n console.log(searchQuery);\r\n // let mysearchq = searchQuery\r\n\r\n let addPersons = await FetchFunctions.RemoteSearch(\r\n order,\r\n searchQuery,\r\n searchType,\r\n filteredPersons\r\n );\r\n if (addPersons != null && addPersons.length > 0) {\r\n filteredPersons.push(...addPersons);\r\n }\r\n }\r\n\r\n if (filteredPersons.length > 0) {\r\n setPersons(filteredPersons);\r\n } else {\r\n }\r\n }\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n","import IconButton from \"@material-ui/core/IconButton\";\r\nimport ArrowDropDownCircleIcon from \"@material-ui/icons/ArrowDropDownCircle\";\r\nimport CommentIcon from \"@material-ui/icons/Comment\";\r\n\r\nimport React, {\r\n useContext,\r\n useEffect,\r\n useLayoutEffect,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\nimport { Nav } from \"react-bootstrap\";\r\nimport { Table, Grid } from \"semantic-ui-react\";\r\nimport { HomeContext } from \"./HomeContext\";\r\nimport \"./PersonRow.css\";\r\nvar myController = new AbortController();\r\n\r\nfunction PersonRow(props) {\r\n var context = useContext(HomeContext);\r\n\r\n useState(() => {\r\n myController.abort();\r\n }, [context.setSearchQuery, context.setSearchType]);\r\n\r\n return (\r\n \r\n \r\n {/* \r\n \r\n \r\n \r\n \r\n \r\n \r\n */}\r\n {props.name}\r\n \r\n {/* \r\n \r\n\r\n */}\r\n {/* \r\n \r\n\r\n */}\r\n \r\n {/*

APPLE

*/}\r\n \r\n
\r\n \r\n \r\n \r\n {/* \r\n \r\n */}\r\n
\r\n );\r\n}\r\n\r\nconst LikeDislikeButton = (props) => {\r\n var context = useContext(HomeContext);\r\n var [isLiked, setLiked] = useState(\"none\");\r\n var person = props.person;\r\n\r\n useEffect(() => {\r\n if (person.isLiked == undefined) {\r\n setLiked(\"none\");\r\n person.isLiked = \"none\";\r\n person.beingCHANGEDbyRow = \"YES IT WAS CHANGED\";\r\n } else {\r\n setLiked(person.isLiked);\r\n }\r\n }, []);\r\n\r\n var [votes, setVotes] = useState(person.Votes);\r\n const prevVotesRef = useRef(votes);\r\n const [fetchVotes, setFetchVotes] = useState();\r\n\r\n const firstUpdate = useRef(true);\r\n useEffect(() => {\r\n prevVotesRef.current = votes;\r\n });\r\n const prevVotes = prevVotesRef.current;\r\n\r\n useLayoutEffect(() => {\r\n if (firstUpdate.current) {\r\n firstUpdate.current = false;\r\n return;\r\n }\r\n let times = votes - prevVotes;\r\n let liked;\r\n if (times < 0) {\r\n liked = false;\r\n } else {\r\n liked = true;\r\n }\r\n const voteURL = \"/person/\" + props.slug + \"/vote\" + \"?addVote=\" + liked;\r\n console.log(voteURL);\r\n for (let i = 0; i < Math.abs(times); i++) {\r\n fetch(voteURL, {\r\n // THIS IS THE Problem for loop dosen't matter I don't think\r\n method: \"POST\",\r\n // signal: mySignal\r\n });\r\n // var oreq = new XMLHttpRequest()\r\n // oreq.open(\"POST\", voteURL)\r\n // oreq.send()\r\n }\r\n }, [votes]);\r\n\r\n async function handleVoteClick(liked, times) {\r\n // the stuff breaks in here\r\n if (times === undefined || times == null) {\r\n times = 1;\r\n }\r\n\r\n if (liked === true) {\r\n setVotes(votes + times);\r\n person.Votes = person.Votes + times;\r\n } else {\r\n setVotes(votes - times);\r\n person.Votes = person.Votes - times;\r\n }\r\n\r\n if (liked === true) {\r\n setFetchVotes(true);\r\n } else if (liked === false) {\r\n setFetchVotes(false);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n var persons = context.Persons;\r\n persons[props.index].isLiked = isLiked;\r\n }, [isLiked]);\r\n function handleLikeClick() {\r\n if (isLiked === \"none\") {\r\n handleVoteClick(true);\r\n setLiked(\"true\");\r\n } else if (isLiked === \"false\") {\r\n console.log(\"isLiked === false\");\r\n handleVoteClick(true, 2);\r\n setLiked(\"true\");\r\n } else {\r\n handleVoteClick(false);\r\n setLiked(\"none\");\r\n }\r\n }\r\n function handleDisLikeClick() {\r\n if (isLiked === \"none\") {\r\n handleVoteClick(false);\r\n setLiked(\"false\");\r\n } else if (isLiked === \"true\") {\r\n handleVoteClick(false, 2);\r\n setLiked(\"false\");\r\n } else {\r\n handleVoteClick(true);\r\n setLiked(\"none\");\r\n }\r\n }\r\n\r\n function DisLikeButton(params) {\r\n if (isLiked === \"none\" || isLiked === \"true\" || isLiked == undefined) {\r\n return (\r\n \r\n \r\n \r\n );\r\n } else if (isLiked == \"false\") {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n }\r\n function LikeButton(params) {\r\n if (isLiked === \"none\" || isLiked === \"false\" || isLiked === undefined) {\r\n return (\r\n handleLikeClick(e)}\r\n edge=\"start\"\r\n style={{ transform: [{ rotateY: \"90deg\" }] }}\r\n name=\"Like\"\r\n >\r\n \r\n \r\n );\r\n } else if (isLiked === \"true\") {\r\n return (\r\n handleLikeClick(e)}\r\n edge=\"start\"\r\n style={{ transform: [{ rotateY: \"90deg\" }] }}\r\n name=\"Like\"\r\n >\r\n \r\n \r\n );\r\n }\r\n }\r\n return (\r\n
\r\n \r\n\r\n \r\n
{votes}
\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default PersonRow;\r\n\r\nfunction CommentIconButton(props) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.commentCount}\r\n \r\n \r\n \r\n );\r\n}\r\n","import React, { useContext, useEffect } from \"react\";\r\nimport { Loader, Table } from \"semantic-ui-react\";\r\nimport { HomeContext } from \"./HomeContext\";\r\nimport PersonRow from \"./PersonRow\";\r\nimport \"./PersonsTable.css\";\r\nfunction PersonsTable(props) {\r\n const context = useContext(HomeContext);\r\n useEffect(() => {\r\n window.addEventListener(\"scroll\", handleScroll);\r\n return () => window.removeEventListener(\"scroll\", handleScroll);\r\n }, []);\r\n function handleScroll() {\r\n \r\n console.log();\r\n if (getScrollPercent() < 60) {\r\n return;\r\n }\r\n console.log(\"Fetch more list items!\");\r\n context.setIsFeteching(true);\r\n }\r\n // useEffect(() => {\r\n // function handleResize() {\r\n // console.log(window.innerWidth + \"x\" + window.innerHeight)\r\n // }\r\n // window.addEventListener(\"resize\", handleResize)\r\n // });\r\n if (context.Persons != null && context.isSearching === false) {\r\n return (\r\n
\r\n \r\n \r\n \r\n {context.Persons.map((person, index) => (\r\n \r\n ))}\r\n \r\n
\r\n
\r\n );\r\n } else {\r\n return (\r\n
\r\n {/* \r\n Loading...\r\n */}\r\n \r\n
\r\n );\r\n }\r\n\r\n // else {\r\n // return (
)\r\n // }\r\n}\r\n\r\nfunction getScrollPercent() {\r\n var h = document.documentElement,\r\n b = document.body,\r\n st = \"scrollTop\",\r\n sh = \"scrollHeight\";\r\n return ((h[st] || b[st]) / ((h[sh] || b[sh]) - h.clientHeight)) * 100;\r\n}\r\nexport default PersonsTable;\r\n","import React, { useContext,useEffect,useState,useRef } from \"react\";\r\nimport { HomeContext } from \"./HomeContext\";\r\nimport { Input, Button, Divider } from \"semantic-ui-react\";\r\nimport \"./SearchInputs.css\";\r\nfunction SearchInputs() {\r\n const context = useContext(HomeContext);\r\n // constructor() {\r\n // super()\r\n // this.handleChange = this.handleChange.bind(this);\r\n // }\r\n const firstUpdate = useRef(true);\r\n\r\n const [bigButton, setBigButton] = useState(false)\r\n useEffect(() => {\r\n if (firstUpdate.current) {\r\n firstUpdate.current = false;\r\n handleResize()\r\n }\r\n function handleResize() {\r\n if (window.innerWidth > 700) {\r\n setBigButton(true)\r\n } else {\r\n setBigButton(false)\r\n }\r\n }\r\n\r\n window.addEventListener('resize', handleResize)\r\n return()=> window.removeEventListener('resize', handleResize)\r\n })\r\n function handleChange(event) {\r\n const { name, value } = event.target;\r\n\r\n if (name == \"searchQuery\") {\r\n context.setSearchQuery(value);\r\n } else if (name == \"searchType\") {\r\n context.setSearchType(value);\r\n }\r\n }\r\n\r\n // function searchWithUpdatedInfo() {\r\n // this.props.callbackFromParent(this.props.searchProps);\r\n // }\r\n\r\n function ToggleButtons(props) {\r\n function handleOrderChange(event) {\r\n const { value } = event.target;\r\n console.log(value);\r\n if (value === \"Ascending\") {\r\n context.setOrder(1);\r\n } else if (value === \"Descending\") {\r\n context.setOrder(-1);\r\n }\r\n }\r\n\r\n if (context.order === 1) {\r\n console.log(\"Here\");\r\n return (\r\n \r\n
\r\n \r\n Most Liked\r\n \r\n \r\n Most Disliked\r\n \r\n
\r\n
\r\n );\r\n }\r\n return (\r\n \r\n
\r\n \r\n Most Liked\r\n \r\n \r\n Most Disliked\r\n \r\n
\r\n
\r\n );\r\n }\r\n return (\r\n
\r\n
\r\n \r\n\r\n
\r\n );\r\n}\r\n\r\nexport default SearchInputs;\r\n","import React, { useEffect, useContext } from \"react\";\r\n\r\nimport PersonsTable from \"./PersonsTable\";\r\nimport SearchInputs from \"./SearchInputs\";\r\nimport { HomeContext } from \"./HomeContext\";\r\n\r\nfunction IndexContainer(params) {\r\n const context = useContext(HomeContext);\r\n \r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\n\r\nexport default IndexContainer;\r\n","import React, { useState, useRef, useEffect } from \"react\";\r\nimport { Menu } from \"semantic-ui-react\";\r\n\r\nfunction NumberOfUsers(props) {\r\n const [timeoutId, setTimeoutId] = useState();\r\n const firstUpdate = useRef(true);\r\n window.onbeforeunload = exit;\r\n window.onload = () =>{\r\n console.log(\"onload\")\r\n fetch(\"/addUser\")\r\n }\r\n function exit() {\r\n console.log(\"thing\")\r\n navigator.sendBeacon(\"/exit\", \"123345\")\r\n }\r\n useEffect(() => {\r\n if (firstUpdate.current) {\r\n firstUpdate.current = false;\r\n getNumOfUsers()\r\n \r\n return;\r\n }\r\n let mounted = true;\r\n window.addEventListener(\"focus\", handleVisibilityChange);\r\n window.addEventListener(\"blur\", handleVisibilityChange);\r\n\r\n function handleVisibilityChange(focus) {\r\n if (mounted) {\r\n console.log(focus.type);\r\n\r\n\r\n if (focus.type === \"focus\") {\r\n if (timeoutId != undefined) {\r\n clearInterval(timeoutId)\r\n getNumOfUsers()\r\n }\r\n \r\n } else if (focus.type === \"blur\") {\r\n clearTimeout(timeoutId);\r\n console.log(\"clear getinterval\");\r\n }\r\n } else {\r\n console.log(\"IN ELSE\");\r\n clearTimeout(timeoutId);\r\n }\r\n }\r\n return () => {\r\n window.removeEventListener(\"focus\", handleVisibilityChange);\r\n window.removeEventListener(\"blur\", handleVisibilityChange);\r\n clearTimeout(timeoutId);\r\n mounted = false;\r\n };\r\n });\r\n\r\n\r\n const [numUsers, setNumUsers] = useState();\r\n\r\n async function getNumOfUsers() {\r\n try {\r\n const response = await fetch(\"/numberofusers\");\r\n const data = await response.json();\r\n console.log(data)\r\n setNumUsers(data);\r\n } catch (error) {}\r\n setTimeoutId(setTimeout(getNumOfUsers, 5000));\r\n }\r\n return (\r\n \r\n Number of Users: {numUsers}\r\n \r\n );\r\n}\r\n\r\nexport default NumberOfUsers;\r\n\r\n\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { Menu } from \"semantic-ui-react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport \"./MyMenu.css\";\r\nimport NumberOfUsers from \"./NumberOfUsers\";\r\nlet hasRun = false;\r\n\r\nfunction MyMenu(props) {\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n Home\r\n \r\n \r\n \r\n About\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default MyMenu;\r\n","import React, {Component} from \"react\";\r\nimport './Title.css'\r\n// import \"bootstrap/dist/css/bootstrap.min.css\";\r\nclass Title extends Component {\r\n render() {\r\n \r\n return (\r\n\r\n
\r\n {/* */}\r\n\r\n

Who is The Best at CHHS

\r\n

Vote Then Comment Anonymously

\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default Title","import React, { Component, useEffect, useRef } from \"react\";\r\nimport IndexContainer from \"./IndexContainter\";\r\nimport { HomeContextProvider } from \"./HomeContext\";\r\nimport MyMenu from \"../MyMenu/MyMenu\";\r\nimport Title from './Title'\r\nimport \"./Index.css\"\r\nfunction Index() {\r\n var divRef = useRef()\r\n useEffect(() => {\r\n var scale = Math.min()\r\n var myDiv = divRef.current\r\n // var elHeight = myDiv.outerHeight()\r\n // var elWidth = myDiv.outerHeight()\r\n // console.log(elHeight + \"x \" + elWidth)\r\n console.log(myDiv)\r\n })\r\n return (\r\n
\r\n \r\n \r\n\r\n <HomeContextProvider>\r\n <IndexContainer></IndexContainer>\r\n </HomeContextProvider>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Index;\r\n","import React, { createContext, Component, useState} from \"react\";\r\n\r\nexport const PersonContext = createContext(null);\r\n\r\nexport const PersonContextProvider = (props) => {\r\n \r\n\r\n const [name, setName] = useState(\"\")\r\n const [votes, setVotes] = useState(0)\r\n const [slug, setSlug] = useState(props.slug)\r\n const [comments, setComments] = useState([])\r\n const [isUpdating, setisUpdating] = useState(false)\r\n const [staffJob, setStaffJob] = useState(\"\")\r\n function getPData() {\r\n\r\n setisUpdating(true)\r\n // console.log(\"getPDate\")\r\n if (props.slug === \"/about\") {\r\n getCommentData(props.slug).then((data) => {\r\n setComments(data)\r\n }).then(() => {\r\n setisUpdating(false)\r\n\r\n })\r\n } else {\r\n getPersonData(slug).then((data) => {\r\n // this.setState({\r\n // name: data.Name,\r\n // comments: data.Comments,\r\n // slug: data.Slug,\r\n // });\r\n setName(data.Name)\r\n setComments(data.Comments)\r\n setSlug(data.Slug)\r\n setVotes(data.Votes)\r\n setStaffJob(data.StaffJob)\r\n }).then(()=>{\r\n setisUpdating(false)\r\n })\r\n }\r\n\r\n }\r\n return(\r\n <PersonContext.Provider value = {{name, slug, votes, comments, isUpdating, setisUpdating, setSlug, getPData, staffJob}}>\r\n {props.children}\r\n </PersonContext.Provider>\r\n )\r\n}\r\n\r\n\r\n\r\n\r\n\r\nasync function getPersonData(slug) {\r\n const personDataurl = \"/person/\" + slug + \"/json\";\r\n console.log(personDataurl);\r\n const response = await fetch(personDataurl);\r\n\r\n const data = await response.json();\r\n data.Comments = await getCommentData(\"/\" + slug)\r\n return data;\r\n}\r\n\r\nexport async function getCommentData(slug) {\r\n slug = \"/comment\" + slug\r\n\r\n const data = await fetch(slug)\r\n const response = await data.json()\r\n return response\r\n}\r\n\r\nexport async function postCommentVote(slug, yes) {\r\n slug = \"/vote\" + slug + \"?addVote=\" + yes\r\n await fetch(slug,{\r\n method: 'POST',\r\n \r\n })\r\n}","import React from \"react\";\r\n\r\nimport { Grid, Image } from \"semantic-ui-react\";\r\n\r\nfunction GifDisplayGrid(props) {\r\n return(\r\n <Grid columns=\"equal\" >\r\n <Grid.Row >\r\n {props.images.map((image) => (\r\n <Grid.Column key = {image} >\r\n <Image size = \"medium\" src={image} key = {image} />\r\n </Grid.Column>\r\n ))}\r\n </Grid.Row>\r\n </Grid>\r\n )\r\n}\r\n\r\nexport default GifDisplayGrid","import React, {Component} from 'react'\r\nimport { render } from 'react-dom'\r\nimport ReactGiphySearchbox from 'react-giphy-searchbox'\r\n\r\nclass GiphyPicker extends Component {\r\n constructor(props) {\r\n super(props);\r\n \r\n \r\n \r\n }\r\n \r\n\r\n render(){\r\n var stickersType = false\r\n if(this.props.type == \"stickers\"){\r\n stickersType = true\r\n }\r\n return(\r\n <div>\r\n <ReactGiphySearchbox\r\n apiKey=\"O1f8RpemLoGqKr07AuifpHEb2TeeVmV9\" \r\n onSelect={item => this.props.handleGifAdd(item)}\r\n library = {this.props.type}\r\n rating = \"R\"\r\n searchPlaceholder = {stickersType ? 'Search for Stickers' : \"Search for GIFs\"}\r\n masonryConfig={[\r\n { columns: 2, imageWidth: 110, gutter: 5 },\r\n { mq: '700px', columns: 2, imageWidth: 110*2, gutter: 5 },\r\n ]}\r\n />\r\n </div>\r\n \r\n )\r\n }\r\n \r\n }\r\n\r\n export default GiphyPicker","import React, { Component } from \"react\";\r\nimport { Button, Form } from \"semantic-ui-react\";\r\nimport { PersonContext } from \"./PersonContext\";\r\nimport { Popup } from \"semantic-ui-react\";\r\nimport GifDisplayGrid from \"./GifDisplayGrid\";\r\nimport GiphyPicker from \"./GiphyPicker\";\r\nimport \"./CommentForm.css\"\r\nvar linkify = require(\"linkifyjs\");\r\n\r\nclass CommentForm extends Component {\r\n static contextType = PersonContext;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n content: \"\",\r\n files: null,\r\n images: [],\r\n };\r\n\r\n this.handleFormSubmit = this.handleFormSubmit.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleGifAdd = this.handleGifAdd.bind(this);\r\n }\r\n handleFormSubmit(e) {\r\n e.preventDefault();\r\n this.context.setisUpdating(true);\r\n\r\n var data = new FormData();\r\n data.append(\"content\", this.state.content);\r\n data.append(\"images\", this.state.images);\r\n\r\n fetch(\"/comment\" + this.props.url, {\r\n method: \"POST\",\r\n body: data,\r\n }).then(() => {\r\n if (this.props.callbackFromParent != null) {\r\n this.props.callbackFromParent();\r\n this.context.getPData();\r\n } else {\r\n this.context.getPData();\r\n }\r\n this.setState({\r\n files: null,\r\n content: \"\",\r\n images: [],\r\n });\r\n if (this.props.closeModal !== undefined) {\r\n this.props.closeModal();\r\n }\r\n });\r\n }\r\n\r\n handleChange(event) {\r\n if (event.target.name === \"content\") {\r\n var content = event.target.value;\r\n var links = linkify.find(content);\r\n if (links.length > 0) {\r\n console.log(links);\r\n links.forEach((link) => {\r\n content = content.replace(link.href, \"\");\r\n });\r\n\r\n this.setState(function (state, props) {\r\n var myImages = state.images;\r\n myImages[0] = links[0].href;\r\n return {\r\n images: myImages,\r\n };\r\n });\r\n }\r\n\r\n this.setState({\r\n [event.target.name]: content,\r\n });\r\n } else {\r\n this.setState({\r\n [event.target.name]: event.target.value,\r\n });\r\n }\r\n }\r\n handleGifAdd(gif) {\r\n var downsizedUrl = gif.images.downsized.url;\r\n \r\n this.setState(function (state, props) {\r\n var myImages = state.images;\r\n myImages[0] = downsizedUrl;\r\n return {\r\n images: myImages,\r\n };\r\n });\r\n }\r\n render() {\r\n let isUpdating = this.context.isUpdating;\r\n const SubmitButton = () => {\r\n if (isUpdating) {\r\n return (\r\n <Button\r\n content=\"Add Reply\"\r\n labelPosition=\"left\"\r\n icon=\"edit\"\r\n disabled\r\n />\r\n );\r\n } else {\r\n return (\r\n <Button\r\n content=\"Add Reply\"\r\n labelPosition=\"left\"\r\n icon=\"edit\"\r\n primary\r\n />\r\n );\r\n }\r\n };\r\n return (\r\n <Form\r\n className=\"CommentForm\"\r\n reply\r\n onSubmit={this.handleFormSubmit}\r\n onChange={this.handleChange}\r\n method=\"POST\"\r\n encType=\"multipart/form-data\"\r\n action={\"/comment\" + this.props.url}\r\n >\r\n <Form.TextArea\r\n placeholder=\"Write anything you want. You can paste Image URLs from other websites here too...\"\r\n name=\"content\"\r\n value={this.state.content}\r\n ></Form.TextArea>\r\n <GifDisplayGrid images={this.state.images} />\r\n\r\n <br></br>\r\n <SubmitButton />\r\n <Popup\r\n trigger={\r\n <Button\r\n onClick={(b) => {\r\n b.preventDefault();\r\n }}\r\n >\r\n GIFs\r\n </Button>\r\n }\r\n on=\"click\"\r\n pinned\r\n >\r\n <Popup.Content>\r\n <GiphyPicker handleGifAdd={this.handleGifAdd} type=\"gifs\" />\r\n </Popup.Content>\r\n </Popup>\r\n <Popup\r\n trigger={\r\n <Button\r\n onClick={(b) => {\r\n b.preventDefault();\r\n }}\r\n >\r\n Stickers\r\n </Button>\r\n }\r\n on=\"click\"\r\n pinned\r\n >\r\n <Popup.Content>\r\n <GiphyPicker handleGifAdd={this.handleGifAdd} type=\"stickers\" />\r\n </Popup.Content>\r\n </Popup>\r\n\r\n {/* <GiphyPicker handleGifAdd={this.handleGifAdd} /> */}\r\n {/* <Input name=\"imageFile\" type=\"file\" multiple></Input> */}\r\n </Form>\r\n );\r\n }\r\n}\r\n\r\nexport default CommentForm;\r\n","import React, { Component } from \"react\";\r\nimport {\r\n Button,\r\n Comment,\r\n Icon,\r\n\r\n Image, Modal\r\n} from \"semantic-ui-react\";\r\nimport CommentForm from \"./CommentForm\";\r\nimport { getCommentData, PersonContext, postCommentVote } from \"./PersonContext\";\r\n\r\nclass MyComment extends Component {\r\n static contextType = PersonContext;\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n comments: [],\r\n isLikeButtonSelected: false,\r\n Votes: this.props.c.Votes,\r\n modalOpen: false\r\n };\r\n this.updateComment = this.updateComment.bind(this);\r\n this.onLike = this.onLike.bind(this);\r\n \r\n }\r\n handleOpen = () => this.setState({ modalOpen: true })\r\n\r\n handleClose = () => this.setState({ modalOpen: false })\r\n componentDidMount() {\r\n this.updateComment();\r\n }\r\n async updateComment() {\r\n const data = await getCommentData(this.props.c.Slug);\r\n\r\n this.setState({\r\n comments: data,\r\n });\r\n }\r\n onLike() {\r\n if (this.state.isLikeButtonSelected == false) {\r\n this.setState((state, props) => {\r\n return { Votes: state.Votes + 1, isLikeButtonSelected: true };\r\n });\r\n // fetch with true\r\n postCommentVote(this.props.c.Slug, \"true\");\r\n } else {\r\n this.setState((state, props) => {\r\n return { Votes: state.Votes - 1, isLikeButtonSelected: false };\r\n });\r\n postCommentVote(this.props.c.Slug, \"false\");\r\n }\r\n }\r\n \r\n // pass the c index of the context Comments Array then acsess the context instead of using props\r\n // because the props is delting the damm comments\r\n render() {\r\n return (\r\n <Comment key={this.props.c.Slug}>\r\n <Comment.Content>\r\n \r\n <Comment.Author as=\"a\">{this.props.c.AuthorName ? this.props.c.AuthorName : 'Anonymous'}</Comment.Author>\r\n {/* <Comment.Metadata>\r\n <span>{this.props.c.TimeString}</span>\r\n </Comment.Metadata> */}\r\n <Images Images={this.props.c.Images} />\r\n <Comment.Text>{this.props.c.Content}</Comment.Text>\r\n <Comment.Actions>\r\n {this.state.isLikeButtonSelected ? (\r\n <Button size=\"mini\" color=\"red\" onClick={this.onLike}>\r\n <Icon name=\"heart\" />\r\n {this.state.Votes}\r\n </Button>\r\n ) : (\r\n <Button size=\"mini\" onClick={this.onLike}>\r\n <Icon name=\"heart\" />\r\n {this.state.Votes}\r\n </Button>\r\n )}\r\n\r\n <div style={{ display: \"flex\" }}>\r\n \r\n <Modal\r\n trigger={<a onClick={this.handleOpen}>Reply</a>}\r\n open={this.state.modalOpen}\r\n onClose={this.handleClose}\r\n \r\n size=\"small\"\r\n >\r\n <Modal.Content>\r\n <CommentForm\r\n url={this.props.c.Slug}\r\n callbackFromParent={this.updateComment}\r\n closeModal = {this.handleClose}\r\n />\r\n </Modal.Content>\r\n \r\n </Modal>\r\n </div>\r\n </Comment.Actions>\r\n </Comment.Content>\r\n {this.state.comments != null && (\r\n <Comment.Group>\r\n {this.state.comments.map((c) => (\r\n <MyComment c={c} key={c.Slug} />\r\n ))}\r\n </Comment.Group>\r\n )}\r\n </Comment>\r\n );\r\n }\r\n}\r\n\r\nclass Images extends Component {\r\n render() {\r\n if (this.props.Images != undefined) {\r\n return (\r\n <div>\r\n {this.props.Images.map((image) => (\r\n <Image src={image} key = {image}></Image>\r\n ))}\r\n </div>\r\n );\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\nexport default MyComment;\r\n","import React, { Component, useContext, useState } from \"react\";\r\n// import CommentsBlock from 'simple-react-comments';\r\n// import { commentsData } from './data/index';\r\nimport { Button, Comment, Form, Header, Image, Popup } from \"semantic-ui-react\";\r\nimport \"./comment.css\";\r\nimport CommentForm from \"./CommentForm\";\r\nimport MyComment from './MyComment'\r\nimport {PersonContext} from './PersonContext'\r\nvar url;\r\n\r\nfunction CommentGroup(props) {\r\n\r\n const { comments} = useContext(PersonContext)\r\n \r\n if(comments != null){\r\n return(\r\n <div style = {{paddingBottom: \"100px\", paddingTop: \"15px\"}}>\r\n \r\n <Comment.Group>\r\n \r\n {comments.map((c, index) => (\r\n \r\n <MyComment c= {c} index = {index} key = {c.Slug}/>\r\n \r\n \r\n ))}\r\n </Comment.Group>\r\n </div>\r\n )\r\n } else {\r\n return(<div></div>)\r\n }\r\n \r\n}\r\n\r\n\r\n\r\nexport default CommentGroup;\r\n\r\n\r\n\r\n","import React, { Component, useState, useEffect, useContext } from \"react\";\r\nimport Title from \"../Index/Title\";\r\nimport { Header, Grid } from \"semantic-ui-react\";\r\nimport \"./PersonContainer.css\";\r\nimport CommentGroup from \"./CommentGroup\";\r\nimport CommentForm from \"./CommentForm\";\r\nimport MyMenu from '../MyMenu/MyMenu'\r\n// import PersonContextProvider from './PersonContext'\r\nimport { PersonContext } from \"./PersonContext\";\r\nfunction PersonContainer(props) {\r\n const { slug, getPData, name, votes, staffJob } = useContext(PersonContext);\r\n\r\n useEffect(() => {\r\n console.log(\"useeffcet\");\r\n // setSlug(props.slug)\r\n getPData();\r\n }, []);\r\n\r\n return (\r\n <div>\r\n {/* <Title> */}\r\n \r\n \r\n\r\n \r\n \r\n \r\n

\r\n {name}, {staffJob}\r\n

\r\n
\r\n \r\n

Likes: {votes}

\r\n
\r\n
\r\n
\r\n\r\n
\r\n Comments\r\n
\r\n \r\n {/* */}\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default PersonContainer;\r\n\r\n","import React, {useState, useContext, useEffect} from \"react\";\r\nimport {PersonContextProvider} from \"./PersonContext\";\r\nimport { PersonContext } from \"./PersonContext\";\r\n\r\nimport PersonContainer from \"./PersonContainer\";\r\n\r\nfunction PersonPage(props) {\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default PersonPage;\r\n","import React from \"react\";\r\nimport {Icon} from \"semantic-ui-react\"\r\n\r\nfunction IconPageLink(props) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\nexport default IconPageLink","import React, { useContext, useState, useRef, useEffect } from \"react\";\r\nimport MyMenu from \"../MyMenu/MyMenu\";\r\nimport \"./About.css\";\r\nimport CommentGroup from \"../Person/CommentGroup\";\r\nimport { PersonContextProvider, PersonContext } from \"../Person/PersonContext\";\r\nimport IconPageLink from \"./IconPageLink\";\r\nimport CommentForm from \"../Person/CommentForm\"\r\nfunction About(props) {\r\n return (\r\n
\r\n \r\n

Why Was This Site Created?

\r\n
\r\n

\r\n I wanted to give Cape Students an objective measurement of Cape\r\n faculty. End of year surveys are hardly anonymous or informative,\r\n given that these surveys never get released to us.\r\n

\r\n

\r\n This site serves as an open forum, feel free to say anything about\r\n anybody. TLS/SSL encryption\r\n ensures that no comments or votes can ever be traced back to the\r\n author.\r\n

\r\n

\r\n Most importantly, this site serves to provide a fun place for sharing\r\n comments, gifs, memes, etc. HAVE FUN!\r\n

\r\n
\r\n\r\n

 

\r\n

\r\n Created by J.G  \r\n \r\n \r\n \r\n

\r\n

\r\n Tech Stack: Golang, MongoDB, ReactJS, Google Cloud App Engine, Cloudflare\r\n

\r\n

 

\r\n

\r\n Report bugs, questions, etc. below\r\n

\r\n

 

\r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nfunction Start(props) {\r\n const { getPData } = useContext(PersonContext);\r\n\r\n useEffect(() => {\r\n console.log(\"getP Data\");\r\n getPData();\r\n }, []);\r\n return
;\r\n}\r\n\r\nexport default About;\r\n","import React, { useEffect,useRef } from \"react\";\r\n\r\nimport { BrowserRouter, Switch, Route } from \"react-router-dom\";\r\nimport Index from \"./components/Index/Index.js\";\r\nimport PersonPage from \"./components/Person/PersonPage\";\r\nimport About from \"./components/About/About\"\r\nfunction App() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n
404
} />\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default App;\r\n","// 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 https://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.0/8 are 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 https://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 https://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 headers: { 'Service-Worker': 'script' },\n })\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\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\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: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}