Replace raw anchor tags with Link component across views
Use Link component in Chat, CommitHistory, Stamps, Demoman, and fix Navbar to use span instead of nested anchors. Also updates Navbar inHome check for /stp route. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -16,7 +16,7 @@ const parentPath = computed(() => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const inHome = computed(() => {
|
const inHome = computed(() => {
|
||||||
return route.path == "/";
|
return route.path == "/" || route.path == "/stp";
|
||||||
});
|
});
|
||||||
|
|
||||||
const faces = [
|
const faces = [
|
||||||
@@ -47,10 +47,10 @@ const faces_string = faces.join(" ");
|
|||||||
<template>
|
<template>
|
||||||
<nav class="flex flex-row w-full h-fit border border-primary bg-bg_primary">
|
<nav class="flex flex-row w-full h-fit border border-primary bg-bg_primary">
|
||||||
<RouterLink class="bdr-2 bg-bg_primary" to="/" v-if="!inHome">
|
<RouterLink class="bdr-2 bg-bg_primary" to="/" v-if="!inHome">
|
||||||
<a>HOME</a>
|
<span>HOME</span>
|
||||||
</RouterLink>
|
</RouterLink>
|
||||||
<RouterLink class="bdr-2 bg-bg_primary" v-if="parentPath" :to="parentPath">
|
<RouterLink class="bdr-2 bg-bg_primary" v-if="parentPath" :to="parentPath">
|
||||||
<a>UP</a>
|
<span>UP</span>
|
||||||
</RouterLink>
|
</RouterLink>
|
||||||
<Headline class="border flex-1 max-w-full">
|
<Headline class="border flex-1 max-w-full">
|
||||||
<code class="whitespace-pre">{{ faces_string }}</code>
|
<code class="whitespace-pre">{{ faces_string }}</code>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import Button from "@/components/input/Button.vue";
|
|||||||
import { useMessagesStore } from "@/stores/messages";
|
import { useMessagesStore } from "@/stores/messages";
|
||||||
import { useAuthStore } from "@/stores/auth";
|
import { useAuthStore } from "@/stores/auth";
|
||||||
import Header from "@/components/text/Header.vue";
|
import Header from "@/components/text/Header.vue";
|
||||||
|
import Link from "@/components/text/Link.vue";
|
||||||
|
|
||||||
const messagesStore = useMessagesStore();
|
const messagesStore = useMessagesStore();
|
||||||
const authStore = useAuthStore();
|
const authStore = useAuthStore();
|
||||||
@@ -79,7 +80,7 @@ onUnmounted(() => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="flex-col flex min-h-0">
|
<div class="chat-root flex-col flex min-h-0">
|
||||||
<Header>Chat</Header>
|
<Header>Chat</Header>
|
||||||
<div ref="messagesContainer" class="flex flex-col flex-1 min-h-0 overflow-y-auto overflow-x-hidden p-2 min-w-0">
|
<div ref="messagesContainer" class="flex flex-col flex-1 min-h-0 overflow-y-auto overflow-x-hidden p-2 min-w-0">
|
||||||
<p v-for="message in messages" :key="message.id" class="break-words min-w-0 w-full">
|
<p v-for="message in messages" :key="message.id" class="break-words min-w-0 w-full">
|
||||||
@@ -88,13 +89,13 @@ onUnmounted(() => {
|
|||||||
v-for="(part, i) in parseMessageParts(message.text || '')"
|
v-for="(part, i) in parseMessageParts(message.text || '')"
|
||||||
:key="i"
|
:key="i"
|
||||||
>
|
>
|
||||||
<a
|
<Link
|
||||||
v-if="part.type === 'link'"
|
v-if="part.type === 'link'"
|
||||||
|
bare
|
||||||
:href="part.value"
|
:href="part.value"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
|
||||||
class="text-primary underline break-all"
|
class="text-primary underline break-all"
|
||||||
>{{ part.value }}</a
|
>{{ part.value }}</Link
|
||||||
>
|
>
|
||||||
<span v-else>{{ part.value }}</span>
|
<span v-else>{{ part.value }}</span>
|
||||||
</template>
|
</template>
|
||||||
@@ -112,9 +113,9 @@ onUnmounted(() => {
|
|||||||
class="w-full max-w-full max-h-48 rounded block"
|
class="w-full max-w-full max-h-48 rounded block"
|
||||||
@loadedmetadata="scrollToBottom"
|
@loadedmetadata="scrollToBottom"
|
||||||
/>
|
/>
|
||||||
<a v-else :href="message.fileUrl" target="_blank" class="underline break-all">{{
|
<Link v-else bare :href="message.fileUrl" target="_blank" class="underline break-all">{{
|
||||||
message.fileUrl.split("/").pop()
|
message.fileUrl.split("/").pop()
|
||||||
}}</a>
|
}}</Link>
|
||||||
</template>
|
</template>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -139,3 +140,11 @@ onUnmounted(() => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
@media (max-width: 850px) {
|
||||||
|
.chat-root {
|
||||||
|
max-height: 400px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
import { useHomeDataStore } from "@/stores/homeData";
|
import { useHomeDataStore } from "@/stores/homeData";
|
||||||
import { storeToRefs } from "pinia";
|
import { storeToRefs } from "pinia";
|
||||||
import Header from "@/components/text/Header.vue";
|
import Header from "@/components/text/Header.vue";
|
||||||
|
import Link from "@/components/text/Link.vue";
|
||||||
|
|
||||||
const homeData = useHomeDataStore();
|
const homeData = useHomeDataStore();
|
||||||
const { gitFeed: feed, loaded } = storeToRefs(homeData);
|
const { gitFeed: feed, loaded } = storeToRefs(homeData);
|
||||||
@@ -18,9 +19,9 @@ const { gitFeed: feed, loaded } = storeToRefs(homeData);
|
|||||||
<div v-else-if="feed" class="flex-1 flex flex-col overflow-y-auto">
|
<div v-else-if="feed" class="flex-1 flex flex-col overflow-y-auto">
|
||||||
<h3>Last git activity</h3>
|
<h3>Last git activity</h3>
|
||||||
<img :src="feed.avatarUrl" alt="User avatar" class="avatar" />
|
<img :src="feed.avatarUrl" alt="User avatar" class="avatar" />
|
||||||
<a :href="feed.repoUrl">
|
<Link :href="feed.repoUrl">
|
||||||
<h3>repo: {{ feed.repoName }}</h3>
|
<h3>repo: {{ feed.repoName }}</h3>
|
||||||
</a>
|
</Link>
|
||||||
<p>Action: {{ feed.opType }}</p>
|
<p>Action: {{ feed.opType }}</p>
|
||||||
<p>Message: {{ feed.commitMessage }}</p>
|
<p>Message: {{ feed.commitMessage }}</p>
|
||||||
<small> {{ new Date(feed.createdAt).toLocaleString() }}</small>
|
<small> {{ new Date(feed.createdAt).toLocaleString() }}</small>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
import { ref } from "vue";
|
import { ref } from "vue";
|
||||||
|
|
||||||
import Touchscreen from "@/components/util/Touchscreen.vue";
|
import Touchscreen from "@/components/util/Touchscreen.vue";
|
||||||
|
import Link from "@/components/text/Link.vue";
|
||||||
import { shuffleArray } from "@/js/utils.js";
|
import { shuffleArray } from "@/js/utils.js";
|
||||||
|
|
||||||
let srcs = [
|
let srcs = [
|
||||||
@@ -23,15 +24,15 @@ shuffleArray(srcs);
|
|||||||
<template>
|
<template>
|
||||||
<Touchscreen>
|
<Touchscreen>
|
||||||
<div class="flex flex-wrap tst">
|
<div class="flex flex-wrap tst">
|
||||||
<a href="https://www.adam-french.co.uk">
|
<Link bare href="https://www.adam-french.co.uk">
|
||||||
<img src="https://www.adam-french.co.uk/img/stamps/mine.gif" />
|
<img src="https://www.adam-french.co.uk/img/stamps/mine.gif" />
|
||||||
</a>
|
</Link>
|
||||||
<a href="https://jacobbarron.xyz">
|
<Link bare href="https://jacobbarron.xyz">
|
||||||
<img
|
<img
|
||||||
src="https://jacobbarron.xyz/Banneh.gif"
|
src="https://jacobbarron.xyz/Banneh.gif"
|
||||||
alt="jacobbarron.xyz"
|
alt="jacobbarron.xyz"
|
||||||
/>
|
/>
|
||||||
</a>
|
</Link>
|
||||||
<img v-for="src in srcs" :src="src" />
|
<img v-for="src in srcs" :src="src" />
|
||||||
</div>
|
</div>
|
||||||
</Touchscreen>
|
</Touchscreen>
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import VideoTable from "@/components/util/VideoTable.vue";
|
import VideoTable from "@/components/util/VideoTable.vue";
|
||||||
|
import Link from "@/components/text/Link.vue";
|
||||||
|
|
||||||
const videoSources = [
|
const videoSources = [
|
||||||
{ name: "demoman", link: "/img/demoman/1760582395316219.webm" },
|
{ name: "demoman", link: "/img/demoman/1760582395316219.webm" },
|
||||||
@@ -16,8 +17,8 @@ const videoSources = [
|
|||||||
class="a4page-portrait bdr-1 flex flex-row relative overflow-scroll items-center"
|
class="a4page-portrait bdr-1 flex flex-row relative overflow-scroll items-center"
|
||||||
>
|
>
|
||||||
<p>
|
<p>
|
||||||
<a href="https://wiki.teamfortress.com/wiki/Demoman"
|
<Link href="https://wiki.teamfortress.com/wiki/Demoman"
|
||||||
>The goat</a
|
>The goat</Link
|
||||||
>
|
>
|
||||||
</p>
|
</p>
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
Reference in New Issue
Block a user