Commit 79b245a0 authored by Anthony Fu's avatar Anthony Fu

chore: migrate eslint config

parent 84b66b17
{ {
"extends": "@nuxtjs/eslint-config-typescript", "extends": "@nuxt",
"rules": { "rules": {
"vue/no-v-html": "off", "vue/no-v-html": "off",
"vue/no-multiple-template-root": "off" "vue/no-multiple-template-root": "off"
......
...@@ -10,15 +10,27 @@ const hasMore = computed(() => props.page < props.maxPage) ...@@ -10,15 +10,27 @@ const hasMore = computed(() => props.page < props.maxPage)
<template> <template>
<div class="news-list-nav"> <div class="news-list-nav">
<NuxtLink v-if="page > 1" :to="`/${feed}/${page - 1}`"> <NuxtLink
v-if="page > 1"
:to="`/${feed}/${page - 1}`"
>
&lt; prev &lt; prev
</NuxtLink> </NuxtLink>
<span v-else class="disabled">&lt; prev</span> <span
v-else
class="disabled"
>&lt; prev</span>
<span class="page">{{ page }}/{{ maxPage }}</span> <span class="page">{{ page }}/{{ maxPage }}</span>
<NuxtLink v-if="hasMore" :to="`/${feed}/${page + 1}`"> <NuxtLink
v-if="hasMore"
:to="`/${feed}/${page + 1}`"
>
more &gt; more &gt;
</NuxtLink> </NuxtLink>
<span v-else class="disabled">more &gt;</span> <span
v-else
class="disabled"
>more &gt;</span>
</div> </div>
</template> </template>
......
...@@ -5,7 +5,10 @@ defineProps<{ ...@@ -5,7 +5,10 @@ defineProps<{
</script> </script>
<template> <template>
<div v-if="loading" style="text-align:center"> <div
v-if="loading"
style="text-align:center"
>
<LoadSpinner /> <LoadSpinner />
</div> </div>
<slot v-else /> <slot v-else />
......
...@@ -16,20 +16,37 @@ function pluralize (n: number) { ...@@ -16,20 +16,37 @@ function pluralize (n: number) {
</script> </script>
<template> <template>
<li v-if="comment && comment.user" class="comment"> <li
v-if="comment && comment.user"
class="comment"
>
<div class="by"> <div class="by">
<NuxtLink :to="'/user/' + comment.user"> <NuxtLink :to="'/user/' + comment.user">
{{ comment.user }} {{ comment.user }}
</NuxtLink> </NuxtLink>
{{ timeAgo(comment.time) }} ago {{ timeAgo(comment.time) }} ago
</div> </div>
<div class="text" v-html="comment.content" /> <div
<div v-if="comment.comments && comment.comments.length" :class="{ open }" class="toggle"> class="text"
v-html="comment.content"
/>
<div
v-if="comment.comments && comment.comments.length"
:class="{ open }"
class="toggle"
>
<a @click="open = !open">{{ open ? '[-]' : '[+] ' + pluralize(comment.comments.length) + ' collapsed' }} <a @click="open = !open">{{ open ? '[-]' : '[+] ' + pluralize(comment.comments.length) + ' collapsed' }}
</a> </a>
</div> </div>
<ul v-show="open" class="comment-children"> <ul
<PostComment v-for="childComment in comment.comments" :key="childComment.id" :comment="childComment" /> v-show="open"
class="comment-children"
>
<PostComment
v-for="childComment in comment.comments"
:key="childComment.id"
:comment="childComment"
/>
</ul> </ul>
</li> </li>
</template> </template>
......
...@@ -8,10 +8,17 @@ defineProps<{ ...@@ -8,10 +8,17 @@ defineProps<{
<template> <template>
<li class="news-item"> <li class="news-item">
<span class="score" title="Score">{{ item.points }}</span> <span
class="score"
title="Score"
>{{ item.points }}</span>
<span class="title"> <span class="title">
<template v-if="isAbsolute(item.url)"> <template v-if="isAbsolute(item.url)">
<a :href="item.url" target="_blank" rel="noopener">{{ item.title }}</a> <a
:href="item.url"
target="_blank"
rel="noopener"
>{{ item.title }}</a>
<span class="host"> ({{ host(item.url) }})</span> <span class="host"> ({{ host(item.url) }})</span>
</template> </template>
<template v-else> <template v-else>
...@@ -20,7 +27,10 @@ defineProps<{ ...@@ -20,7 +27,10 @@ defineProps<{
</span> </span>
<br> <br>
<span class="meta"> <span class="meta">
<span v-if="item.type !== 'job'" class="by"> <span
v-if="item.type !== 'job'"
class="by"
>
by by
<NuxtLink :to="'/user/' + item.user">{{ item.user }}</NuxtLink> <NuxtLink :to="'/user/' + item.user">{{ item.user }}</NuxtLink>
</span> </span>
...@@ -28,7 +38,10 @@ defineProps<{ ...@@ -28,7 +38,10 @@ defineProps<{
{{ timeAgo(item.time) }} ago {{ timeAgo(item.time) }} ago
</span> </span>
| |
<span v-if="item.type !== 'job'" class="comments-link"> <span
v-if="item.type !== 'job'"
class="comments-link"
>
<NuxtLink :to="'/item/' + item.id">{{ item.comments_count }} comments</NuxtLink> <NuxtLink :to="'/item/' + item.id">{{ item.comments_count }} comments</NuxtLink>
</span> </span>
</span> </span>
......
...@@ -17,14 +17,33 @@ useHead({ ...@@ -17,14 +17,33 @@ useHead({
<template> <template>
<div> <div>
<header class="header"> <header class="header">
<nav class="inner" role="navigation"> <nav
<NuxtLink to="/" exact> class="inner"
<img class="logo" src="/logo.svg" alt="logo"> role="navigation"
>
<NuxtLink
to="/"
exact
>
<img
class="logo"
src="/logo.svg"
alt="logo"
>
</NuxtLink> </NuxtLink>
<NuxtLink v-for="(list, key) in feedsInfo" :key="key" :to="`/${key}`"> <NuxtLink
v-for="(list, key) in feedsInfo"
:key="key"
:to="`/${key}`"
>
{{ list.title }} {{ list.title }}
</NuxtLink> </NuxtLink>
<a class="github" href="https://github.com/nuxt/hackernews" target="_blank" rel="noopener banner"> <a
class="github"
href="https://github.com/nuxt/hackernews"
target="_blank"
rel="noopener banner"
>
Built with Nuxt3 Built with Nuxt3
</a> </a>
</nav> </nav>
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
"node": ">=v18.13.0" "node": ">=v18.13.0"
}, },
"devDependencies": { "devDependencies": {
"@nuxtjs/eslint-config-typescript": "^12.0.0", "@nuxt/eslint-config": "^0.1.1",
"@types/node": "^18.14.6", "@types/node": "^18.14.6",
"eslint": "^8.35.0", "eslint": "^8.35.0",
"nuxt": "^3.2.3", "nuxt": "^3.2.3",
......
...@@ -31,7 +31,7 @@ const maxPage = computed(() => { ...@@ -31,7 +31,7 @@ const maxPage = computed(() => {
return +(feedsInfo[feed.value]?.pages) || 0 return +(feedsInfo[feed.value]?.pages) || 0
}) })
function pageChanged (to: number, _from = -1) { function pageChanged (to: number) {
if (!isValidFeed.value) { return } if (!isValidFeed.value) { return }
if (to <= 0 || to > maxPage.value) { if (to <= 0 || to > maxPage.value) {
...@@ -55,20 +55,35 @@ function pageChanged (to: number, _from = -1) { ...@@ -55,20 +55,35 @@ function pageChanged (to: number, _from = -1) {
} }
onMounted(() => pageChanged(page.value)) onMounted(() => pageChanged(page.value))
watch(page, (to, old) => pageChanged(to, old)) watch(page, to => pageChanged(to))
</script> </script>
<template> <template>
<div class="view"> <div class="view">
<ItemListNav :feed="feed" :page="page" :max-page="maxPage" /> <ItemListNav
:feed="feed"
<div :key="displayedPage" class="news-list"> :page="page"
:max-page="maxPage"
/>
<div
:key="displayedPage"
class="news-list"
>
<LoadSpinner v-if="loading" /> <LoadSpinner v-if="loading" />
<template v-else> <template v-else>
<ul> <ul>
<PostItem v-for="item in items" :key="item.id" :item="item" /> <PostItem
v-for="item in items"
:key="item.id"
:item="item"
/>
</ul> </ul>
<ItemListNav :feed="feed" :page="page" :max-page="maxPage" /> <ItemListNav
:feed="feed"
:page="page"
:max-page="maxPage"
/>
</template> </template>
</div> </div>
</div> </div>
......
...@@ -15,13 +15,20 @@ useHead({ ...@@ -15,13 +15,20 @@ useHead({
<template> <template>
<div class="item-view view"> <div class="item-view view">
<div v-if="!item?.url" class="item-view-header"> <div
v-if="!item?.url"
class="item-view-header"
>
<h1>Page not found</h1> <h1>Page not found</h1>
</div> </div>
<template v-else> <template v-else>
<div class="item-view-header"> <div class="item-view-header">
<template v-if="isAbsolute(item.url)"> <template v-if="isAbsolute(item.url)">
<a :href="item.url" target="_blank" rel="noopener"><h1 v-text="item.title" /></a> <a
:href="item.url"
target="_blank"
rel="noopener"
><h1 v-text="item.title" /></a>
<span class="host"> ({{ host(item.url) }})</span> <span class="host"> ({{ host(item.url) }})</span>
</template> </template>
<template v-else> <template v-else>
...@@ -41,7 +48,11 @@ useHead({ ...@@ -41,7 +48,11 @@ useHead({
{{ comments ? comments.length + ' comments' : 'No comments yet.' }} {{ comments ? comments.length + ' comments' : 'No comments yet.' }}
</p> </p>
<ul class="comment-children"> <ul class="comment-children">
<PostComment v-for="comment in comments" :key="comment.id" :comment="comment" /> <PostComment
v-for="comment in comments"
:key="comment.id"
:comment="comment"
/>
</ul> </ul>
</LoadingWrapper> </LoadingWrapper>
</div> </div>
......
...@@ -28,7 +28,11 @@ useHead({ ...@@ -28,7 +28,11 @@ useHead({
<li> <li>
<span class="label">Karma:</span> {{ user.karma || '-' }} <span class="label">Karma:</span> {{ user.karma || '-' }}
</li> </li>
<li v-if="user.about" class="about" v-html="user.about" /> <li
v-if="user.about"
class="about"
v-html="user.about"
/>
</ul> </ul>
<p class="links"> <p class="links">
<a :href="'https://news.ycombinator.com/submitted?id=' + user.id">submissions</a> | <a :href="'https://news.ycombinator.com/submitted?id=' + user.id">submissions</a> |
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment