]> git.r.bdr.sh - rbdr/forum/blobdiff - src/components/topic/topic.svelte
Add components to view topics and posts
[rbdr/forum] / src / components / topic / topic.svelte
index 2aff79a6ce42ef33b64b463a19dd5aab3c2baf3f..9be7346b76f39088166107c5c18728670259e217 100644 (file)
@@ -1,59 +1,46 @@
 <script>
+  export let id;
+
   import { _ } from 'svelte-i18n';
+  import { getTopic } from '$/stores/topic';
 
-  import Glyph from '../glyph/glyph.svelte';
-</script>
+  import ErrorBlock from '$/components/error_block/error_block.svelte';
+  import Loader from '$/components/loader/loader.svelte';
+  import PostContent from '$/components/post_content/post_content.svelte';
+  import { readableTime } from '$/utils/readable_time.js';
 
-<div class="h-entry" title="{$_('topic.title')}">
-  <h1 class="p-name">This is a post in the forum.</h1>
-  <aside class="topic-meta" title="{$_('topic.metadata_title')}">
-    <span class="topic-location">{$_('topic.category_location')} <a href="/f/interaction"
-        class="p-category">{$_('forum.name.interaction')}</a>.</span>
-    <span class="topic-ttl"><a class="u-url u-uid" title="{$_('topic.permalink_title')}" href="/t/2a3fc567af8c897ca6f55fb5fj">{$_('topic.remaining_time', { values: { remaining: $_('time.days', { values: { count: 3 } }) } })}</a>.</span>
-  </aside>
-  <aside class="topic-tags" title="{$_('topic.tags_title')}">
-    {$_('topic.tags_location')}
-    <a href="/g/question" class="p-category">question<span class="tag-weight">(5)</span></a>
-    <a href="/g/meta" class="p-category">meta<span class="tag-weight">(34)</span></a>
-    <a href="/g/carrots" class="p-category">carrots<span class="tag-weight">(1)</span></a>
-    <a href="/g/tpbo" class="p-category">tpbo<span class="tag-weight">(2)</span></a>
-  </aside>
-  <aside class="post-meta" title="{$_('post.metadata_title', { values: { count: 1, total: 2 } })}">
-    <Glyph uuid="3cd8c84e18144a2da71f6bace9392abc" />
-    <span class="h-card">
-      {$_('post.author_credit')} <a href="/a/rbdr" class="p-nickname u-url">rbdr</a>.
-    </span>
-    <time role="presentation" class="dt-published" datetime="2018-08-14T03:32:10.929Z">
-      <a title="{$_('post.permalink_title')}" href="/p/a80c70ea0120387123097ce1907ff">
-        2018-08-14 03:32:10
-      </a>
-    </time>
-  </aside>
-  <article class="e-content" title="{$_('post.title', { values: { count: 1, total: 2, author: '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.metadata_title', { values: { count: 2, total: 2 } })}">
-    <Glyph uuid="b33f0339f7d64d1ca27f1c0aefb7d753" />
-    <span class="h-card">
-      {$_('post.author_credit')} <a href="/a/time4carrots" class="p-nickname u-url">time4carrots</a>.
-    </span>
-    <time role="presentation" 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.title', { values: { count: 1, total: 2, author: 'time4carrots' } })}">
-    <p>It's just how it is...</p>
-  </article>
-  <hr/>
-</div>
+  $: store = getTopic(id);
+  $: topic = $store.data;
+  $: remainingTime = topic ? (topic.updated_at + topic.ttl) - Date.now() : 0;
+  $: remaining = readableTime(remainingTime);
+</script>
 
-<style>
-  .post-meta * {
-    vertical-align: top;
-  }
-</style>
+{#if $store.loading}
+  <Loader />
+{/if}
+{#if $store.error}
+  <ErrorBlock message={$_('topic.error.unavailable')} />
+{/if}
+{#if topic}
+  <div class="h-entry" title="{$_('topic.title')}">
+    <h1 class="p-name">{topic.title}</h1>
+    <aside class="topic-meta" title="{$_('topic.metadata_title')}">
+      {#if topic.forum}
+      <span class="topic-location">{$_('topic.category_location')} <a href="/f/{topic.forum.id}"
+          class="p-category">{topic.forum.glyph} {$_(topic.forum.label)}</a>.</span>
+      {/if}
+      <span class="topic-ttl"><a class="u-url u-uid" title="{$_('topic.permalink_title')}" href="/t/{topic.id}">({$_('topic.remaining_time', { values: { remaining: $_(remaining.label, { values: { count: remaining.count } }) } })})</a>.</span>
+    </aside>
+    {#if topic.tags.length > 0}
+      <aside class="topic-tags" title="{$_('topic.tags_title')}">
+        {$_('topic.tags_location')}
+        {#each topic.tags as tag}
+          <a href="/g/{tag.id}" class="p-category">{tag.id}<span class="tag-weight">({tag.weight})</span></a>{' '}
+        {/each}
+      </aside>
+    {/if}
+    {#each topic.posts as post, index}
+      <PostContent post={post} index={index} count={topic.posts.length} />
+    {/each}
+  </div>
+{/if}