<script>
- import {forums, addForum} from '../../models/forums.js'
-
- import { fade } from 'svelte/transition';
+ import {forums, addForum} from '../../stores/forums.js'
</script>
-<aside>
- <button on:click="{addForum}">Add a Forum</button>
- <nav>
- <ul>
- {#each $forums as forum}
- <li transition:fade>
- <a href="/f/{forum.id}">
- <span class="navigation-kanji">{forum.kanji}</span>
- <span class="navigation-label">{forum.label}</span>
- </a>
- </li>
- {/each}
- </ul>
- </nav>
-</aside>
+<nav title="List of Forums">
+ <ul>
+ {#each $forums as forum}
+ <li>
+ <a href="/f/{forum.id}">
+ <span aria-hidden="true" class="navigation-glyph {forum.glyph}">{forum.glyph}</span>
+ <span class="navigation-label">{forum.label}</span>
+ </a>
+ </li>
+ {/each}
+ </ul>
+</nav>
+
+<style>
+ nav {
+ grid-column: col-start 1;
+ grid-row: 2;
+ border-right: 1px solid black;
+ }
+
+ ul {
+ padding: 0;
+ }
+
+ li {
+ display: block;
+ text-align: left;
+ margin-bottom: 20px;
+ }
+
+ .navigation-glyph {
+ font-size: 1.5rem;
+ display: block;
+ }
+
+ .☽ {
+ font-size: 2rem;
+ }
+
+ a {
+ text-decoration: none;
+ }
+</style>
--- /dev/null
+<script>
+ import { getGlyphHash } from '../../utils/glyph_hash';
+
+ export let uuid;
+</script>
+
+<div class="glyphicon" aria-hidden="true" title="User avatar.">
+ {#each getGlyphHash(uuid) as fragment}
+ <span class="{fragment.glyph}" style="color: {fragment.color} ">
+ {fragment.glyph}
+ </span>
+ {/each}
+</div>
+
+<style>
+ .glyphicon {
+ border: 1px solid black;
+ display: inline-block;
+ font-size: 1.4rem;
+ height: 48px;
+ margin-top: 5px;
+ width: 48px;
+ }
+
+ span {
+ display: block;
+ float: left;
+ width: 24px;
+ height: 24px;
+ text-align: center;
+ line-height: 24px;
+ }
+
+ .☽ {
+ font-size: 2rem;
+ line-height: 19px;
+ }
+</style>
-<header>
- <nav class="top-navigation">
- <ul>
- <li><strong><a href="/">Forum v1.0.0</a></strong></li>
- <li><a href="/new"><u class="action-key">N</u>ew Post</a></li>
- <li><a href="/reply"><u class="action-key">R</u>eply</a></li>
- <li><a href="/search"><u class="action-key">S</u>earch</a></li>
- <li><a href="/logout">Log <u class="action-key">O</u>ut</a></li>
- </ul>
- </nav>
+<header title="Toolbar">
+ <ul>
+ <li><strong><a href="/" aria-label="Forum Version 1.0.0">Forum v1.0.0</a></strong></li>
+ <li><a href="/new" aria-label="New"><u class="action-key">N</u>ew</a></li>
+ <li><a href="/reply" aria-label="Reply"><u class="action-key">R</u>eply</a></li>
+ <li><a href="/search" aria-label="Search"><u class="action-key">S</u>earch</a></li>
+ <li><a href="/logout" aria-label="Log Out">Log <u class="action-key">O</u>ut</a></li>
+ </ul>
</header>
+
+<style>
+ header {
+ grid-column: col-start 1 / span 12;
+ border-bottom: 1px solid black;
+ }
+
+ ul {
+ padding: 0;
+ }
+
+ .action-key {
+ font-weight: bold;
+ text-decoration: underline;
+ }
+
+ li {
+ display: inline;
+ margin: 5px;
+ }
+
+ a {
+ text-decoration: none;
+ line-height: 3em;
+ display: inline-block;
+ }
+
+ strong a {
+ color: blue;
+ text-decoration: underline;
+ }
+
+</style>
--- /dev/null
+<script>
+ import Glyph from '../glyph/glyph.svelte';
+</script>
+
+<main class="h-entry" title="Topic">
+ <h1 class="p-name">This is a post in the forum.</h1>
+ <aside class="topic-meta" title="Topic metadata">
+ <span class="topic-location">Posted on <a href="/f/interaction"
+ class="p-category">Interaction</a>.</span>
+ <span class="topic-ttl"><a class="u-url u-uid" href="/t/2a3fc567af8c897ca6f55fb5fj">3 days remaining</a>.</span>
+ </aside>
+ <aside class="topic-tags" title="Topic Tags">
+ Tags:
+ <a href="/t/question" class="p-category">question<span class="tag-weight">(5)</span></a>
+ <a href="/t/meta" class="p-category">meta<span class="tag-weight">(34)</span></a>
+ <a href="/t/carrots" class="p-category">carrots<span class="tag-weight">(1)</span></a>
+ <a href="/t/tpbo" class="p-category">tpbo<span class="tag-weight">(2)</span></a>
+ </aside>
+ <aside class="post-meta" title="Post 1 of 2 metadata">
+ <Glyph uuid="3cd8c84e18144a2da71f6bace9392abc" />
+ <span class="h-card">
+ By: <a href="/a/rbdr" class="p-nickname u-url">rbdr</a>.
+ </span>
+ <time class="dt-published" datetime="2018-08-14T03:32:10.929Z">
+ <a href="/p/a80c70ea0120387123097ce1907ff">
+ 2018-08-14 03:32:10
+ </a>
+ </time>
+ </aside>
+ <article class="e-content" title="Post 1 of 2 by rbdr">
+ <p>This is a main topic in the forum. Does that abstraction still even make sense?</p>
+ <p>Is this really it??</p>
+ <p>This might all be fake but at least the links look purple when visited</p>
+ </article>
+ <hr/>
+ <aside class="post-meta" title="Post 2 of 2 metadata">
+ <Glyph uuid="b33f0339f7d64d1ca27f1c0aefb7d753" />
+ <span class="h-card">
+ By: <a href="/a/time4carrots" class="p-nickname u-url">time4carrots</a>.
+ </span>
+ <time class="dt-published" datetime="2018-08-15T04:10:00.929Z">
+ <a href="/p/da9910f3febde91948000ce1535ea">
+ 2018-08-15 04:10:00
+ </a>
+ </time>
+ </aside>
+ <article class="e-content" title="Post 2 of 2 by time4carrots">
+ <p>It's just how it is...</p>
+ </article>
+ <hr/>
+</main>
+
+<style>
+ main {
+ grid-column: col-start 2 / span 11;
+ }
+
+ .post-meta > * {
+ vertical-align: top;
+ }
+</style>
--- /dev/null
+body {
+ display: grid;
+ font-family : 'ヒラギノ明朝 ProN' , 'Hiragino Mincho ProN' , '游明朝','游明朝体',YuMincho,'Yu Mincho' , 'MS 明朝' , 'MS Mincho' , HiraMinProN-W3 , 'TakaoEx明朝' , TakaoExMincho , 'MotoyaLCedar' , 'Droid Sans Japanese' , serif;
+ grid-template-columns: repeat(12, [col-start] 1fr);
+ grid-gap: 20px;
+ grid-auto-rows: minmax(24px, auto);
+}
<script>
import ForumList from './components/forum_list/forum_list.svelte';
import Header from './components/header/header.svelte';
+ import Topic from './components/topic/topic.svelte';
</script>
-<main class="topic">
- <h1>Is this really what the forum looks like?</h1>
- <p class="topic-meta">
- <span class="topic-location">Posted on <a href="/f/interaction">Interaction</a>.</span>
- <span class="topic-ttl"><a href="/t/2a3fc567af8c897ca6f55fb5fj">3 days remaining</a>.</span>
- </p>
- <p class="topic-tags">
- Tags:
- <a href="/t/question">question<span class="tag-weight">(5)</span></a>
- <a href="/t/meta">meta<span class="tag-weight">(34)</span></a>
- <a href="/t/carrots">carrots<span class="tag-weight">(1)</span></a>
- <a href="/t/tpbo">tpbo<span class="tag-weight">(2)</span></a>
- </p>
- <article class="post">
- <footer>
- <span class="post-author">By: <a href="/a/rbdr">rbdr</a>.</span>
- <span class="post-date"><a href="/p/a80c70ea0120387123097ce1907ff">2018-08-14 03:32:10</a></span>
- <p>So, I’m new here and I had heard a lot about the forums.<br><br>Is this really it??<br><br>It has barely any features, also I think I accidentaally created a post without a board? what’s up with that??</p>
- </footer>
- </article>
-</main>
<Header />
+<Topic />
<ForumList />
-
-<style>
- h1 {
- color: magenta;
- }
-</style>
<!doctype html>
-<html>
+<html lang="en">
<head>
<meta charset="utf-8">
<meta name="description" content="A forum for the year 3000">
<meta name="robots" content="noindex, nofollow" />
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="theme-color" content="#ffffff">
<title>Forum.</title>
+ <link rel="manifest" href="./manifest.webmanifest">
+
<script defer src="./application.js"></script>
- <link href="./css/style.css" rel="stylesheet">
+ <link href="./css/global.css" rel="stylesheet">
</head>
<body>
+ <noscript>
+ <h1>Javascript Required.</h1>
+ <p>Please enable Javascript to use this forum.</p>
+ </noscript>
</body>
</html>
--- /dev/null
+{
+ "name": "Forum",
+ "short_name": "Forum",
+ start_url": "/",
+"background_color": "#ffffff",
+ "display": "standalone",
+ "theme_color": "#ffffff"
+}
--- /dev/null
+{
+ "name": "Forum",
+ "start_url": "/",
+ "background_color": "#ffffff",
+ "display": "standalone",
+ "theme_color": "#ffffff"
+}
internals.forums = [
{
id: 'life',
- kanji: '命',
+ glyph: '☆',
label: 'Life'
},
{
id: 'the-world',
- kanji: '世',
+ glyph: '◯',
label: 'The World'
},
{
id: 'online',
- kanji: '直結',
+ glyph: '⏀',
label: 'Online'
},
{
id: 'experience',
- kanji: '体験',
+ glyph: '♢',
label: 'Experience'
},
{
id: 'belief',
- kanji: '信念',
+ glyph: '⏃',
label: 'Belief'
},
{
id: 'movement',
- kanji: '動',
+ glyph: '▷',
label: 'Movement'
},
{
id: 'emotion',
- kanji: '情',
+ glyph: '☽',
label: 'Emotion'
},
{
id: 'interaction',
- kanji: '交流',
+ glyph: '〒',
label: 'Interaction'
},
{
id: 'structure',
- kanji: '構造',
+ glyph: '▢',
label: 'Structure'
},
{
id: 'sound',
- kanji: '音',
+ glyph: '〰',
label: 'Sound'
},
{
id: 'words',
- kanji: '言葉',
+ glyph: '╳',
label: 'Words'
},
{
id: 'us',
- kanji: '一同',
+ glyph: '╱',
label: 'Us'
},
{
id: 'everything',
- kanji: '何事も',
+ glyph: '♡',
label: 'Everything'
}
];
forums.update((forums) => ([...forums,
{
id,
- kanji: 'の',
+ glyph: 'の',
label: `Woah ${id}`
}
]));
--- /dev/null
+const internals = {
+ kSplitterRegex: /.{1,8}/g,
+ kGlyphs: [
+ "☽",
+ "☆",
+ "♢",
+ "♡",
+ "╱",
+ "╲",
+ "╳",
+ "〰",
+ "▷",
+ "⏊",
+ "〒",
+ "▢",
+ "◯",
+ "⏃",
+ "⏀",
+ "⏆"
+ ]
+};
+
+// Return a glyph with color based on a 4 byte fragment of a UUIDv4
+const getGlyphHashFragment = function (uuidFragment) {
+
+ const glyphIndex = parseInt(uuidFragment.substring(0,2), 16) % 16;
+ return {
+ glyph: internals.kGlyphs[glyphIndex],
+ color: `#${uuidFragment.substring(2,8)}`
+ }
+};
+
+// Return an array of glyphs based on a UUIDv4
+export const getGlyphHash = function (uuid) {
+
+ const hashFragments = uuid.match(internals.kSplitterRegex);
+ return hashFragments.map(getGlyphHashFragment);
+};
--- /dev/null
+# Code Quality Report
+Thu Nov 15 2018 01:45:42 GMT+0100 (Central European Standard Time)
+
+## Tests
+
+**Application Loader**
+✔ 1) Should instantiate and start Forum on window load (18 ms)
+
+
+1 test
+0 tests failed
+0 tests skipped
+
+Test duration: 27 ms
+
+
+## Leaks
+The following global variable leaks were detected:_registeredHandlers, _eventHandlers, DOMException, NamedNodeMap, Attr, Node, Element, DocumentFragment, HTMLDocument, Document, XMLDocument, CharacterData, Text, CDATASection, ProcessingInstruction, Comment, DocumentType, DOMImplementation, NodeList, HTMLCollection, HTMLOptionsCollection, DOMStringMap, DOMTokenList, SVGAnimatedString, SVGNumber, SVGStringList, Event, CloseEvent, CustomEvent, MessageEvent, ErrorEvent, HashChangeEvent, FocusEvent, PopStateEvent, UIEvent, MouseEvent, KeyboardEvent, TouchEvent, ProgressEvent, CompositionEvent, WheelEvent, EventTarget, BarProp, Location, History, Screen, Performance, Blob, File, FileList, DOMParser, FormData, XMLHttpRequestEventTarget, XMLHttpRequestUpload, NodeIterator, TreeWalker, HTMLElement, HTMLAnchorElement, HTMLAreaElement, HTMLAudioElement, HTMLBaseElement, HTMLBodyElement, HTMLBRElement, HTMLButtonElement, HTMLCanvasElement, HTMLDataElement, HTMLDataListElement, HTMLDetailsElement, HTMLDialogElement, HTMLDirectoryElement, HTMLDivElement, HTMLDListElement, HTMLEmbedElement, HTMLFieldSetElement, HTMLFontElement, HTMLFormElement, HTMLFrameElement, HTMLFrameSetElement, HTMLHeadingElement, HTMLHeadElement, HTMLHRElement, HTMLHtmlElement, HTMLIFrameElement, HTMLImageElement, HTMLInputElement, HTMLLabelElement, HTMLLegendElement, HTMLLIElement, HTMLLinkElement, HTMLMapElement, HTMLMarqueeElement, HTMLMediaElement, HTMLMenuElement, HTMLMetaElement, HTMLMeterElement, HTMLModElement, HTMLObjectElement, HTMLOListElement, HTMLOptGroupElement, HTMLOptionElement, HTMLOutputElement, HTMLParagraphElement, HTMLParamElement, HTMLPictureElement, HTMLPreElement, HTMLProgressElement, HTMLQuoteElement, HTMLScriptElement, HTMLSelectElement, HTMLSourceElement, HTMLSpanElement, HTMLStyleElement, HTMLTableCaptionElement, HTMLTableCellElement, HTMLTableColElement, HTMLTableElement, HTMLTimeElement, HTMLTitleElement, HTMLTableRowElement, HTMLTableSectionElement, HTMLTemplateElement, HTMLTextAreaElement, HTMLTrackElement, HTMLUListElement, HTMLUnknownElement, HTMLVideoElement, SVGElement, SVGGraphicsElement, SVGSVGElement, StyleSheet, MediaList, CSSStyleSheet, CSSRule, CSSStyleRule, CSSMediaRule, CSSImportRule, CSSStyleDeclaration, StyleSheetList, XPathException, XPathExpression, XPathResult, XPathEvaluator, NodeFilter, Window, _globalProxy, _document, _sessionHistory, _virtualConsole, _runScripts, _top, _parent, _frameElement, _length, _pretendToBeVisual, length, window, frameElement, frames, self, parent, top, document, external, location, history, navigator, locationbar, menubar, personalbar, scrollbars, statusbar, toolbar, performance, screen, addEventListener, removeEventListener, dispatchEvent, __stopAllTimers, Option, Image, Audio, postMessage, atob, btoa, FileReader, WebSocket, AbortSignal, AbortController, XMLHttpRequest, stop, close, getComputedStyle, captureEvents, releaseEvents, name, devicePixelRatio, innerWidth, innerHeight, outerWidth, outerHeight, pageXOffset, pageYOffset, screenX, screenY, scrollX, scrollY, screenLeft, screenTop, alert, blur, confirm, focus, moveBy, moveTo, open, print, prompt, resizeBy, resizeTo, scroll, scrollBy, scrollTo
+
+
+## Coverage
+Threshold: 100%
+Coverage: 0.00% (0/0)
+
+
+
+## Linting
+Warnings threshold: 0
+Errors threshold: 0
+No issues
+
links:
- db
db:
- image: rethinkdb:2.3.7
+ image: rethinkdb:2.4
ports:
- "8080:8080"
"@hapi/joi": "16.x.x"
}
},
+ "@hapi/code": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@hapi/code/-/code-7.0.0.tgz",
+ "integrity": "sha512-fTq1x12vpchD/+9WfxhUbEnlEPVv5QNrsymw9/fSyN/mKNBfQmkv4Ssq3cDgW6mDyN4oiVFJBdLw6jpkmWZ9dQ==",
+ "dev": true,
+ "requires": {
+ "@hapi/hoek": "8.x.x"
+ }
+ },
"@hapi/eslint-config-hapi": {
"version": "12.3.0",
"resolved": "https://registry.npmjs.org/@hapi/eslint-config-hapi/-/eslint-config-hapi-12.3.0.tgz",
"supports-color": "7.x.x",
"typescript": "3.6.x",
"will-call": "1.x.x"
- },
- "dependencies": {
- "array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true
- },
- "dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
- "requires": {
- "path-type": "^4.0.0"
- }
- },
- "globby": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz",
- "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==",
- "dev": true,
- "requires": {
- "@types/glob": "^7.1.1",
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.0.3",
- "glob": "^7.1.3",
- "ignore": "^5.1.1",
- "merge2": "^1.2.3",
- "slash": "^3.0.0"
- }
- },
- "ignore": {
- "version": "5.1.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz",
- "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==",
- "dev": true
- },
- "path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true
- },
- "seedrandom": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz",
- "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==",
- "dev": true
- },
- "slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true
- }
}
},
"@hapi/pinpoint": {
"integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
"dev": true
},
+ "array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true
+ },
"array-unique": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
"randombytes": "^2.0.0"
}
},
+ "dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "requires": {
+ "path-type": "^4.0.0"
+ }
+ },
"dmd": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/dmd/-/dmd-4.0.6.tgz",
"flat-cache": "^2.0.1"
}
},
+ "file-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/file-match/-/file-match-1.0.2.tgz",
+ "integrity": "sha1-ycrSZdLIrfOoFHWw30dYWQafrvc=",
+ "dev": true,
+ "requires": {
+ "utils-extend": "^1.0.6"
+ }
+ },
"file-set": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/file-set/-/file-set-3.0.0.tgz",
"glob": "^7.1.5"
}
},
+ "file-system": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/file-system/-/file-system-2.2.2.tgz",
+ "integrity": "sha1-fWWDPjojR9zZVqgTxncVPtPt2Yc=",
+ "dev": true,
+ "requires": {
+ "file-match": "^1.0.1",
+ "utils-extend": "^1.0.4"
+ }
+ },
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"type-fest": "^0.8.1"
}
},
+ "globby": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz",
+ "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==",
+ "dev": true,
+ "requires": {
+ "@types/glob": "^7.1.1",
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.0.3",
+ "glob": "^7.1.3",
+ "ignore": "^5.1.1",
+ "merge2": "^1.2.3",
+ "slash": "^3.0.0"
+ },
+ "dependencies": {
+ "ignore": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz",
+ "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==",
+ "dev": true
+ }
+ }
+ },
"graceful-fs": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
}
}
},
+ "parcel-plugin-static-files-copy": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/parcel-plugin-static-files-copy/-/parcel-plugin-static-files-copy-2.2.1.tgz",
+ "integrity": "sha512-Mj//+258Q05ZL72uD1VDJZ7jOW4PuwJO5WNM7ODpgHtDwXlhIURklSX0Ua8J4d/Vr1xWkNCg2HIVlhacdZ3M3w==",
+ "dev": true,
+ "requires": {
+ "file-system": "2.2.2",
+ "minimatch": "3.0.4",
+ "path": "0.12.7"
+ }
+ },
"parcel-plugin-svelte": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/parcel-plugin-svelte/-/parcel-plugin-svelte-4.0.5.tgz",
"integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
"dev": true
},
+ "path": {
+ "version": "0.12.7",
+ "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
+ "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=",
+ "dev": true,
+ "requires": {
+ "process": "^0.11.1",
+ "util": "^0.10.3"
+ },
+ "dependencies": {
+ "util": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ }
+ }
+ },
"path-browserify": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
"dev": true
},
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true
+ },
"pbkdf2": {
"version": "3.0.17",
"resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
"xmlchars": "^1.3.1"
}
},
+ "seedrandom": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz",
+ "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==",
+ "dev": true
+ },
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
}
}
},
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true
+ },
"slice-ansi": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
"object.getownpropertydescriptors": "^2.0.3"
}
},
+ "utils-extend": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/utils-extend/-/utils-extend-1.0.8.tgz",
+ "integrity": "sha1-zP17ZFQPjpDuIe7Fd2nQZRyril8=",
+ "dev": true
+ },
"uuid": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
- "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==",
- "dev": true
+ "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
},
"v8-compile-cache": {
"version": "2.1.0",
"koa": "^2.11.0",
"koa-send": "^5.0.0",
"koa-static": "^5.0.0",
- "rethinkdb": "^2.4.2"
+ "rethinkdb": "^2.4.2",
+ "uuid": "^3.3.3"
},
"devDependencies": {
+ "@hapi/code": "^7.0.0",
"@hapi/eslint-config-hapi": "^12.3.0",
"@hapi/eslint-plugin-hapi": "^4.3.4",
"@hapi/lab": "^21.0.0",
"jsdoc-to-markdown": "^5.0.3",
"lab-markdown-reporter": "^1.0.2",
"parcel-bundler": "^1.12.4",
+ "parcel-plugin-static-files-copy": "^2.2.1",
"parcel-plugin-svelte": "^4.0.5",
"svelte": "^3.16.5"
},
--- /dev/null
+/* TEAM */
+Maintainer: Rubén Beltrán del Río
+Site: https://unlimited.pizza
+Twitter: @pigeonfolk
+From: Berlin, Germany
+
+/* THANKS */
+Essau Ramirez: https://saumotions.com
+Twitter: @saumotions
+From: Guadalajara, Jalisco, Mexico
+
+/* SITE */
+Last update: 2019/12/26
+Language: English
+Components: Svelte
--- /dev/null
+User-agent: *
+Disallow:
--- /dev/null
+const { expect } = require('@hapi/code');
+const Lab = require('@hapi/lab');
+const Forum = require('../lib/forum');
+
+const { it, describe } = exports.lab = Lab.script();
+
+describe('Forum Backend Library', () => {
+
+ it('Should initialize the server', () => {
+
+ expect(true).to.equal(true);
+ });
+});
--- /dev/null
+const { expect } = require('@hapi/code');
+const Lab = require('@hapi/lab');
+const Forum = require('../lib/forum');
+
+const { it, describe } = exports.lab = Lab.script();
+
+describe('Forum Backend Library', () => {
+
+ it('Should initialize the server', () => {
+
+ expect(true).to.equal(true);
+ });
+});