{"version":3,"sources":["components/Notifs.jsx","utilities/callAPI.js","components/PostForm.jsx","components/NewPost.jsx","components/Sidebar.jsx","utilities/parse.js","components/PostInteract.jsx","components/Comments.jsx","components/Post.jsx","utilities/parsePost.jsx","components/Home.jsx","components/SinglePost.jsx","utilities/generateUsername.js","index.js"],"names":["NotifContainer","Notifs","props","removeNotif","id","i","state","notifs","length","key","splice","setState","this","type","args","message","Array","prototype","slice","call","console","log","join","Date","getTime","notif","notifId","body","remove","arguments","React","Component","Notif","hide","setTimeout","animTime","timeout","className","callAPI","a","method","url","obj","fetch","response","text","r","JSON","parse","error","maxTitleLength","maxContentLength","PostForm","handleChange","event","target","name","value","valid","len","content","between","title","isComment","handleSubmit","preventDefault","username","date","parent","postId","stringify","success","data","likes","onPost","comment","onSubmit","onChange","placeholder","maxLength","minRows","maxRows","num","min","max","NewPost","u","setUsername","document","cookie","prefix","onSave","handleSave","EditableText","toggle","edit","children","textInput","createRef","current","focus","onClick","ref","Sidebar","href","parseDate","d","months","diff","Math","round","curr","getFullYear","getMonth","getDate","parseNum","n","parseContent","c","res","e","index","s","substring","search","push","link","replace","rel","src","alt","at","PostInteract","handleLike","post","liked","share","navigator","clipboard","writeText","window","location","origin","info","showComments","comments","Comments","parsePost","onComment","arr","show","loadComments","Post","componentDidMount","expand","clientHeight","shorten","showParent","parentUsername","options","includes","Posts","addPost","posts","postsArr","loadPosts","SinglePost","undefined","loadPost","adj","nouns","chars","rand","floor","random","path","pathname","App","useCookies","cookies","setCookie","pattern","str","j","toUpperCase","generateUsername","startsWith","p","split","ReactDOM","render","CookiesProvider","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.f58a2aa5.chunk.js","sourcesContent":["import React from 'react';\n\n/**\n * Accessor to global NotifContainer, used to send notifs.\n */\nexport var NotifContainer;\n\n/**\n * Component that holds all notifications.\n */\nexport default class Notifs extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n // notifs to display, JSX\n notifs: []\n }\n }\n\n componentDidMount() {\n NotifContainer = this;\n }\n\n removeNotif = (id) => {\n // find and remove notif\n for (let i = 0; i < this.state.notifs.length; i++) {\n if (this.state.notifs[i].key === \"\" + id) {\n let notifs = this.state.notifs;\n notifs.splice(i, 1);\n this.setState({ notifs: notifs });\n return;\n }\n }\n }\n\n /**\n * Creates a notification.\n * @param {String} type Type of notif (info, error)\n * @param {String} args Array of arguments. args[0]: message, args[1-]: logged data\n */\n notif(type, args) {\n // convert args to a single string\n let message = args[0];\n args = Array.prototype.slice.call(args, 1);\n\n // log info & data\n console.log(message, args.join(\" \"));\n\n // create notif\n let key = new Date().getTime();\n let notif =
{this.props.body}
\n{this.state.prefix + this.state.text}
\n \n(.+?)<\\/code>/) > -1) {\n let text = s.substring(6).replace(/<\\/code>.*/, \"\");\n res.push({text}
);\n i += text.length + 12;\n\n // turn < into <\n } else if (s.search(/^</) > -1) {\n res.push(\"<\");\n i += 3;\n\n // turn > into >\n } else if (s.search(/^>/) > -1) {\n res.push(\">\");\n i += 3;\n\n // otherwise, just add as a normal string\n } else {\n if (typeof res.at(-1) !== \"string\") {\n res.push(e[i]);\n } else {\n res[res.length - 1] = res.at(-1) + e[i];\n }\n }\n }\n \n // if is React object, parse its children\n } else if (typeof e === \"object\") {\n let r = parseContent(e.props.children);\n res.push(...r);\n }\n }\n\n return res;\n}","import React from 'react';\nimport { BsHeart, BsHeartFill, BsChatLeft, BsLink45Deg } from 'react-icons/bs';\n\nimport { NotifContainer } from './Notifs';\n\nimport callAPI from '../utilities/callAPI';\nimport { parseNum } from '../utilities/parse';\nimport { username } from '..';\n\n/**\n * Component for the interaction on a post - likes, comments, and shares.\n */\nexport default class PostInteract extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n // ID of the post\n postId: props.postId || \"\",\n // number of likes\n likes: props.likes || 0,\n // whether the user has liked the post\n liked: props.liked || false\n }\n }\n\n handleLike = async () => {\n // create data object\n let obj = {\n username: username,\n post: this.state.postId\n };\n\n // call API\n let res = await callAPI(\"POST\", JSON.stringify(obj), \"/like\");\n if (res.success) {\n // update likes\n this.setState({\n likes: this.state.likes + (this.state.liked ? -1 : 1),\n liked: !this.state.liked\n });\n } else {\n NotifContainer.error(\"Failed to like post\", res.data);\n }\n }\n\n share = () => {\n // copy link to clipboard\n navigator.clipboard.writeText(window.location.origin + \"/post/\" + this.state.postId);\n NotifContainer.info(\"Link Copied\");\n }\n\n render() {\n return (\n \n \n {this.state.liked\n ? \n : \n }\n {parseNum(this.state.likes)}\n \n \n \n {parseNum(this.props.comments)}\n \n \n \n \n \n );\n }\n}","import React from 'react';\n\nimport PostForm from './PostForm';\nimport { NotifContainer } from './Notifs';\n\nimport callAPI from '../utilities/callAPI';\nimport { parsePost } from '../utilities/parsePost';\n\n/**\n * Component for the comments section in a post.\n */\nexport default class Comments extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n // the comments to be shown, JSX\n comments: null\n }\n }\n\n onPost = (post) => {\n this.setState({ comments: [parsePost(post, { comment: true }), ...this.state.comments] });\n this.props.onComment();\n }\n\n async loadComments() {\n // call API\n const response = await callAPI(\"GET\", \"\", \"/comments/\" + this.props.postId);\n var comments;\n if (response.success) {\n try {\n comments = JSON.parse(response.data);\n } catch (error) {\n NotifContainer.error(\"Failed to parse comments\", error);\n return;\n }\n // parse and add comments to state to show\n let arr = [];\n for (let post of comments) {\n arr.push(parsePost(post, { comment: true }));\n }\n this.setState({ comments: arr });\n } else {\n NotifContainer.error(\"Failed to load comments\", response.data);\n }\n }\n\n componentDidUpdate() {\n if (this.props.show && this.state.comments === null) {\n this.loadComments();\n }\n }\n\n render() {\n return (\n \n \n \n {this.state.comments}\n \n \n );\n }\n}","import React from 'react';\n\nimport PostInteract from './PostInteract';\nimport Comments from './Comments';\n\nimport { parseContent } from '../utilities/parse';\n\nconst maxContentHeight = 1000;\n\n/**\n * Component for a single post.\n */\nexport default class Post extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n // title of the post, parsed\n title: parseContent(props.title || \"\"),\n // content/body of the post, parsed\n content: parseContent(props.content || \"\"),\n // whether the post exceeds the height limit\n shorten: false,\n // whether to expand the post\n expand: false,\n // whether the comments are visible/shown\n showComments: props.showComments || false,\n // whether the post is a comment\n isComment: this.props.comment || false,\n // the number of comments, used to update PostInteract\n comments: props.comments || 0\n }\n this.content = React.createRef();\n }\n\n componentDidMount = () => {\n if (!this.props.expand && this.content.current.clientHeight > maxContentHeight) {\n this.setState({ shorten: true });\n }\n }\n\n expand = () => {\n if (this.state.shorten) {\n this.setState({ shorten: false, expand: true });\n }\n }\n\n showComments = () => {\n this.setState({ showComments: !this.state.showComments });\n }\n\n onComment = () => {\n this.setState({ comments: this.state.comments + 1 });\n }\n\n render() {\n return (\n \n > {this.props.username}
\n {this.props.date}
\n {this.props.showParent && \n Replying to > {this.props.parentUsername}
\n }\n {this.state.title}
\n \n {this.state.content}\n \n View More\n \n \n \n );\n }\n}","import Post from '../components/Post';\n\nimport { parseDate } from './parse';\n\nimport { username } from '..';\n\n/**\n * Parses a post object into a Post.\n * @param {Object} post post object data\n * @param {Object} options options\n * @returns a Post react object\n */\nexport function parsePost(post, options = {}) {\n return (\n \n );\n}","import React from 'react';\n\nimport NewPost from './NewPost';\nimport Sidebar from './Sidebar';\nimport { NotifContainer } from './Notifs';\n\nimport callAPI from '../utilities/callAPI';\nimport { parsePost } from '../utilities/parsePost';\n\n/**\n * Parent Component for the home of the app - shows all posts by date.\n */\nexport default class Posts extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n // posts to be displayed, JSX\n posts: [],\n }\n }\n\n async loadPosts() {\n // call API\n const response = await callAPI(\"GET\");\n var posts;\n if (response.success) {\n try {\n posts = JSON.parse(response.data);\n } catch (error) {\n NotifContainer.error(\"Failed to parse posts\", error);\n return;\n }\n // parse posts and add to state to show\n let postsArr = [];\n for (let post of posts) {\n postsArr.push(parsePost(post));\n }\n this.setState({ posts: postsArr });\n } else {\n NotifContainer.error(\"Failed to retrieve posts\", response.data);\n }\n }\n\n addPost = (post) => {\n let posts = this.state.posts;\n this.setState({ posts: [parsePost(post), ...posts] });\n }\n\n componentDidMount() {\n this.loadPosts();\n }\n\n render() {\n return (\n \n \n \n \n {this.state.posts}\n \n \n );\n }\n}","import React from 'react';\n\nimport Sidebar from './Sidebar';\n\nimport callAPI from '../utilities/callAPI';\nimport { parsePost } from '../utilities/parsePost';\n\n/**\n * Component for viewing a single post.\n */\nexport default class SinglePost extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n // ID of the post\n postId: props.postId || \"\",\n // the post\n post: null\n }\n }\n\n async loadPost() {\n // call API\n const response = await callAPI(\"GET\", \"\", \"/post/\" + this.state.postId);\n if (response.success) {\n // parse post and update\n let post = response.data;\n this.setState({\n post: parsePost(\n post, \n {\n showComments: true, \n showParent: post.parent !== undefined\n }\n )\n });\n } else {\n // if post doesn't exist, tell user\n let e = (\n \n \n Sorry, this post doesn't seem to exist.
\n Home\n
\n \n );\n this.setState({ post: e });\n }\n }\n\n componentDidMount() {\n this.loadPost();\n }\n\n render() {\n return (\n \n \n \n {this.state.post}\n \n \n );\n }\n}","// adjectives\nconst adj = ['jittery', 'evanescent', 'tacky', 'elegant', 'acrid', 'classy', 'fearful', 'brawny', 'skinny', 'valuable', 'steady', 'wonderful', 'odd', 'serious', 'silky', 'grouchy', 'groovy', 'magnificent', 'towering', 'imminent', 'irritating', 'flagrant', 'productive', 'intelligent', 'fast', 'likable', 'divergent', 'sincere', 'civil', 'crabby', 'invincible', 'violent', 'exultant', 'neighborly', 'pushy', 'excited', 'ubiquitous', 'mysterious', 'romantic', 'ordinary', 'complex', 'sleepy', 'rare', 'polite', 'receptive', 'incompetent', 'greedy', 'scary', 'exclusive', 'colorful', 'quaint'];\n// nouns\nconst nouns = ['salad', 'orange', 'duck', 'cake', 'cow', 'building', 'grape', 'crayon', 'volcano', 'horse', 'car', 'basket', 'coat', 'bottle', 'frog', 'basketball', 'fork', 'crib', 'toothbrush', 'dog', 'bell', 'door', 'bubble', 'book', 'pencil', 'farm', 'friend', 'bear', 'glove', 'camera', 'king', 'village', 'piano', 'movie', 'football', 'flower', 'cookie', 'photo', 'coffee', 'river', 'mountain', 'bird', 'pie', 'diamond', 'oven', 'lake', 'cat', 'tale', 'tea', 'poem'];\n// characters\nconst chars = ['-', '_', '.'];\n\n// rates for modifications\nconst capitalizeRate = 0.05;\nconst firstLetterModifier = 10;\nconst charsRate = 0.3;\n\n/**\n * Generates a username based on the words and pattern provided.\n * @param {} pattern Pattern to generate with. \"a\": adjective, \"c\": character, \"n\": noun, \"?\": optional\n * @returns \n */\nexport default function generateUsername(pattern = \"ac?ac?nc?\") {\n let username = \"\";\n // decipher pattern\n for (let i = 0; i < pattern.length; i++) {\n // word for this part of the pattern\n let str = \"\";\n if (pattern[i] === 'a') {\n // check for optional mark\n if (i < pattern.length - 1 && pattern[i + 1] === '?') {\n i++;\n if (rand(0, 10) < 5) {\n continue;\n }\n }\n str = adj[rand(0, adj.length)];\n } else if (pattern[i] === 'n') {\n if (i < pattern.length - 1 && pattern[i + 1] === '?') {\n i++;\n if (rand(0, 10) < 5) {\n continue;\n }\n }\n str = nouns[rand(0, nouns.length)];\n } else if (pattern[i] === 'c') {\n if (i < pattern.length - 1 && pattern[i + 1] === '?') {\n i++;\n if (Math.random() > charsRate) {\n continue;\n }\n }\n str = chars[rand(0, chars.length)];\n }\n // randomly capitalize\n for (let j = 0; j < str.length; j++) {\n if (Math.random() < capitalizeRate * (j === 0 ? firstLetterModifier : 1)) {\n str = str.substring(0, j) + str[j].toUpperCase() + str.substring(j + 1);\n }\n }\n username += str;\n }\n return username;\n}\n\nfunction rand(min, max) {\n return Math.floor(Math.random() * (max - min) + min);\n} ","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { useCookies, CookiesProvider } from \"react-cookie\";\n\nimport Home from './components/Home.jsx';\nimport SinglePost from './components/SinglePost.jsx';\nimport Notifs from './components/Notifs.jsx';\n\nimport generateUsername from \"./utilities/generateUsername.js\";\n\nimport './index.css';\n\nexport var username;\n\nexport function setUsername(u) {\n username = u;\n}\n\nconst path = window.location.pathname;\n\nfunction App() {\n const [cookies, setCookie] = useCookies([\"username\"]);\n\n username = cookies.username;\n if (username === undefined) {\n username = generateUsername();\n setCookie(\"username\", username);\n }\n\n if (path.startsWith(\"/post\")) {\n let p = path.split(\"/\");\n if (p.length === 3) {\n return (\n \n \n \n \n );\n }\n }\n\n return (\n \n \n \n \n );\n}\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root')\n);\n"],"sourceRoot":""}