Intial commit from techit@Techits-Mac-Pro
This commit is contained in:
Executable
+4
@@ -0,0 +1,4 @@
|
||||
NUXT_PUBLIC_SITE_URL=example.com
|
||||
NUXT_PUBLIC_BASE_URL=https://example.com
|
||||
NUXT_PUBLIC_AUTHOR=John Doe
|
||||
NUXT_PUBLIC_SITE_NAME=John's Blog
|
||||
Executable
+24
@@ -0,0 +1,24 @@
|
||||
# Nuxt dev/build outputs
|
||||
.output
|
||||
.data
|
||||
.nuxt
|
||||
.nitro
|
||||
.cache
|
||||
dist
|
||||
|
||||
# Node dependencies
|
||||
node_modules
|
||||
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
|
||||
# Misc
|
||||
.DS_Store
|
||||
.fleet
|
||||
.idea
|
||||
|
||||
# Local env files
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
@@ -0,0 +1,75 @@
|
||||
# Nuxt Minimal Starter
|
||||
|
||||
Look at the [Nuxt documentation](https://nuxt.com/docs/getting-started/introduction) to learn more.
|
||||
|
||||
## Setup
|
||||
|
||||
Make sure to install dependencies:
|
||||
|
||||
```bash
|
||||
# npm
|
||||
npm install
|
||||
|
||||
# pnpm
|
||||
pnpm install
|
||||
|
||||
# yarn
|
||||
yarn install
|
||||
|
||||
# bun
|
||||
bun install
|
||||
```
|
||||
|
||||
## Development Server
|
||||
|
||||
Start the development server on `http://localhost:3000`:
|
||||
|
||||
```bash
|
||||
# npm
|
||||
npm run dev
|
||||
|
||||
# pnpm
|
||||
pnpm dev
|
||||
|
||||
# yarn
|
||||
yarn dev
|
||||
|
||||
# bun
|
||||
bun run dev
|
||||
```
|
||||
|
||||
## Production
|
||||
|
||||
Build the application for production:
|
||||
|
||||
```bash
|
||||
# npm
|
||||
npm run build
|
||||
|
||||
# pnpm
|
||||
pnpm build
|
||||
|
||||
# yarn
|
||||
yarn build
|
||||
|
||||
# bun
|
||||
bun run build
|
||||
```
|
||||
|
||||
Locally preview production build:
|
||||
|
||||
```bash
|
||||
# npm
|
||||
npm run preview
|
||||
|
||||
# pnpm
|
||||
pnpm preview
|
||||
|
||||
# yarn
|
||||
yarn preview
|
||||
|
||||
# bun
|
||||
bun run preview
|
||||
```
|
||||
|
||||
Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.
|
||||
Executable
+10
@@ -0,0 +1,10 @@
|
||||
export default defineAppConfig({
|
||||
ui: {
|
||||
colors: {
|
||||
primary: 'amber',
|
||||
secondary: 'green',
|
||||
neutral: 'zinc'
|
||||
},
|
||||
fonts: false
|
||||
}
|
||||
})
|
||||
Executable
+7
@@ -0,0 +1,7 @@
|
||||
<template>
|
||||
<UApp>
|
||||
<NuxtLayout>
|
||||
<NuxtPage/>
|
||||
</NuxtLayout>
|
||||
</UApp>
|
||||
</template>
|
||||
Executable
+130
@@ -0,0 +1,130 @@
|
||||
@import "tailwindcss";
|
||||
@import "@nuxt/ui";
|
||||
|
||||
@theme {
|
||||
--ui-container-lg: var(--container-5xl);
|
||||
--ui-container-md: var(--container-3xl);
|
||||
--ui-container-sm: var(--container-2xl);
|
||||
--ui-container: var(--container-lg);
|
||||
--ui-container-padding: calc(var(--spacing)*4);
|
||||
--ui-header-title-height: calc(var(--spacing)*16);
|
||||
--ui-header-navbar-height: calc(var(--spacing)*10);
|
||||
|
||||
--ui-bg-container: oklch(0.9557 0.1104 102.71);
|
||||
--ui-bg-container-bd: oklch(0.85 0.1104 102.71);
|
||||
--ui-on-bg-container: oklch(0.4644 0.0554 82.5);
|
||||
|
||||
--ui-primary: oklch(0.6358 0.1185 82.5);
|
||||
|
||||
--ui-primary-light: oklch(0.5 0.1185 82.5);
|
||||
--ui-on-primary: oklch(1 0 0);
|
||||
|
||||
--ui-radius: 0.125rem;
|
||||
|
||||
--font-sans: OpenSans, Sarabun, sans-serif;
|
||||
--font-sans--font-feature-settings: "liga", "calt", "ss01", "cv05", "cv06", "cv11";
|
||||
--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||||
--font-serif: "Noto Serif", "Noto Serif Thai", Georgia, Garamond, "Times New Roman", Times, serif;
|
||||
}
|
||||
@supports (font-variation-settings: normal) {
|
||||
:root {
|
||||
--font-sans: OpenSansVariable, Sarabun, sans-serif;
|
||||
font-optical-sizing: auto;
|
||||
}
|
||||
}
|
||||
body {
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
-webkit-font-smoothing: unset!important;
|
||||
-moz-osx-font-smoothing: unset!important;
|
||||
}
|
||||
.container {
|
||||
margin: 0 auto;
|
||||
padding: 0 var(--ui-container-padding);
|
||||
@apply max-w-(--ui-container) sm:max-w-(--ui-container-sm) md:max-w-(--ui-container-md) lg:max-w-(--ui-container-lg);
|
||||
}
|
||||
|
||||
.row {
|
||||
@apply flex items-center;
|
||||
}
|
||||
.nav {
|
||||
@apply pl-0 list-none;
|
||||
}
|
||||
.navbar-nav {
|
||||
@apply md:float-left md:m-0;
|
||||
}
|
||||
.navbar-nav > li {
|
||||
float: left;
|
||||
display: flex;
|
||||
}
|
||||
.navbar-nav > li > a {
|
||||
padding: 10.5px 14px;
|
||||
}
|
||||
.navbar-nav > li > a.router-link-active, .navbar-nav > li > a.router-link-active:hover {
|
||||
@apply bg-linear-[to_bottom,rgba(0,0,0,0.3)_10%,rgba(0,0,0,0)_100%];
|
||||
}
|
||||
.navbar-nav > li > a:hover {
|
||||
@apply bg-linear-[to_bottom,rgba(255,255,255,0)_0%,rgba(255,255,255,0.3)_10%,rgba(255,255,255,0)_100%];
|
||||
}
|
||||
.site-title {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
height: var(--ui-header-title-height);
|
||||
@apply border-t border-t-(--ui-on-bg-container) bg-linear-[to_bottom,var(--ui-bg-container-bd)_0%,var(--ui-bg-container)_35%] text-(--ui-on-bg-container);
|
||||
}
|
||||
.site-navbar {
|
||||
min-height: var(--ui-header-navbar-height);
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
height: auto;
|
||||
@apply bg-linear-[to_bottom,var(--ui-primary)_0%,var(--ui-primary-light)_90%] text-white;
|
||||
}
|
||||
.hero-section {
|
||||
@apply py-16 drop-shadow-md bg-green-50 bg-cover bg-center;
|
||||
}
|
||||
.hero-section > .container > .brace {
|
||||
@apply my-4;
|
||||
}
|
||||
.hero-section > .container > .title {
|
||||
@apply text-4xl font-bold my-4;
|
||||
line-height: 1.4em;
|
||||
}
|
||||
.hero-section > .container > .subtitle {
|
||||
@apply text-xl my-4;
|
||||
line-height: 1.4em;
|
||||
}
|
||||
.page-section {
|
||||
@apply my-16;
|
||||
}
|
||||
.page-section > .container .title {
|
||||
@apply text-2xl font-medium my-[0.75rem];
|
||||
}
|
||||
.page-section > .container p {
|
||||
@apply my-[0.75rem];
|
||||
}
|
||||
.page-section.page-section-alt {
|
||||
@apply my-0;
|
||||
}
|
||||
.page-section.page-section-alt > .container {
|
||||
@apply my-0 flex justify-between items-center;
|
||||
}
|
||||
.page-section.page-section-alt > .container > .section {
|
||||
@apply mb-4;
|
||||
}
|
||||
.page-section.page-section-alt > .container > .section-img {
|
||||
@apply w-[45%];
|
||||
img {
|
||||
@apply my-16;
|
||||
}
|
||||
}
|
||||
.footer {
|
||||
@apply bg-(--ui-bg-muted) py-16;
|
||||
}
|
||||
.site-footer {
|
||||
@apply block;
|
||||
}
|
||||
.footer-notice {
|
||||
@apply block;
|
||||
}
|
||||
Executable
+28
@@ -0,0 +1,28 @@
|
||||
<script setup>
|
||||
const { t, locale, setLocale } = useI18n()
|
||||
const currentLocale = ref(locale.value)
|
||||
|
||||
const toggleLocale = () => {
|
||||
const newLocale = currentLocale.value === 'en' ? 'th' : 'en'
|
||||
setLocale(newLocale).then(() => {
|
||||
window.location.reload()
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<ClientOnly>
|
||||
<UTooltip :text="t('ui.language.tooltip')">
|
||||
<UButton
|
||||
@click="toggleLocale"
|
||||
variant="outline"
|
||||
color="neutral"
|
||||
size="sm"
|
||||
:label="t('ui.language.switch')"
|
||||
/>
|
||||
</UTooltip>
|
||||
<template #fallback>
|
||||
<USkeleton class="size-8" />
|
||||
</template>
|
||||
</ClientOnly>
|
||||
</template>
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
<template>
|
||||
<footer class="footer site-footer">
|
||||
<div class="site-footer">
|
||||
<div class="container">
|
||||
<section class="row">
|
||||
<section class="footer-notice">
|
||||
<img width="48" height="48" src="/favicon.ico" alt="*nix" class="text-2xl"></img>
|
||||
<h2 class="text-2xl font-bold my-[0.5em]">*nix in Thailand (นิกซ์ในประเทศไทย)</h2>
|
||||
<p class="my-[0.5em]">{{t('footer.copyright.notice', {'year': year, 'yearB': year + 543})}}</p>
|
||||
<LanguageSwitcher/>
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
const {t} = useI18n();
|
||||
const year = 2025
|
||||
</script>
|
||||
Executable
+78
@@ -0,0 +1,78 @@
|
||||
<template>
|
||||
<header>
|
||||
<div class="site-title">
|
||||
<div class="container flex justify-between">
|
||||
<div class="row w-fit items-center">
|
||||
<div class="row flex">
|
||||
<img width="48" height="48" src="/favicon.ico" alt="*nix" class="text-2xl mr-4"></img>
|
||||
<img width="124" height="20" src="/wordmark.svg" alt="in Thailand" class="text-2xl my-[13px]"></img>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hidden sm:flex w-fit items-center justify-end">
|
||||
<div class="row">
|
||||
<UFieldGroup>
|
||||
<UButton size="sm" :label="t('sites.join-discord')" to="https://discord.gg/p5wuX5GwB7" icon="i-lucide-users" />
|
||||
<UDropdownMenu
|
||||
size="sm"
|
||||
:items="siteTitleItems"
|
||||
:content="{
|
||||
align: 'end',
|
||||
side: 'bottom',
|
||||
sideOffset: 8
|
||||
}"
|
||||
:ui="{
|
||||
content: 'w-36'
|
||||
}"
|
||||
>
|
||||
<UButton size="sm" :label="t('sites.all')" icon="i-lucide-map" color="neutral" variant="outline" />
|
||||
</UDropdownMenu>
|
||||
</UFieldGroup>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<nav class="site-navbar">
|
||||
<div class="container">
|
||||
<div class="hidden sm:flex">
|
||||
<ul class="nav navbar-nav">
|
||||
<li class="nav-link">
|
||||
<NuxtLinkLocale href="/">{{ t('nav.home') }}</NuxtLinkLocale>
|
||||
</li>
|
||||
<li class="nav-link">
|
||||
<NuxtLinkLocale href="/about">{{ t('nav.about') }}</NuxtLinkLocale>
|
||||
</li>
|
||||
<li class="nav-link">
|
||||
<NuxtLinkLocale href="/contact">{{ t('nav.contact') }}</NuxtLinkLocale>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
const { t } = useI18n();
|
||||
const siteTitleItems = ref<DropdownMenuItem[]>([
|
||||
{
|
||||
label: t('sites.wiki'),
|
||||
icon: 'i-lucide-book-open-text',
|
||||
to: 'https://wiki.unix.in.th'
|
||||
},
|
||||
{
|
||||
label: t('sites.identity'),
|
||||
icon: 'i-lucide-user',
|
||||
to: 'https://identity.unix.in.th'
|
||||
},
|
||||
{
|
||||
label: t('sites.forum'),
|
||||
icon: 'i-lucide-messages-square',
|
||||
to: 'https://forum.unix.in.th'
|
||||
},
|
||||
{
|
||||
label: t('sites.status'),
|
||||
icon: 'i-lucide-activity',
|
||||
to: 'https://status.unix.in.th'
|
||||
},
|
||||
])
|
||||
</script>
|
||||
Executable
+7
@@ -0,0 +1,7 @@
|
||||
<template>
|
||||
<div>
|
||||
<WebHeader/>
|
||||
<slot/>
|
||||
<WebFooter/>
|
||||
</div>
|
||||
</template>
|
||||
Executable
+29
@@ -0,0 +1,29 @@
|
||||
<template>
|
||||
<main>
|
||||
<article class="article">
|
||||
<section class="hero-section">
|
||||
<div class="container">
|
||||
<h1 :id="t('about.hero.title').replace(/ /g, '_')" class="title">{{ t('about.hero.title') }}</h1>
|
||||
<!-- <p :id="t('about.hero.sub').replace(/ /g, '_')" class="subtitle">{{ t('about.hero.sub') }}</p> -->
|
||||
</div>
|
||||
</section>
|
||||
<section class="container">
|
||||
|
||||
</section>
|
||||
</article>
|
||||
</main>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
const {t} = useI18n();
|
||||
const config = useRuntimeConfig();
|
||||
const baseUrl = config.public.baseUrl
|
||||
|
||||
useHead({
|
||||
title: '*nix in Thailand',
|
||||
titleTemplate: '%s',
|
||||
meta: [
|
||||
{ property: 'og:type', content: 'website' }
|
||||
]
|
||||
})
|
||||
</script>
|
||||
Executable
+28
@@ -0,0 +1,28 @@
|
||||
<template>
|
||||
<main>
|
||||
<article class="article">
|
||||
<section class="hero-section">
|
||||
<div class="container">
|
||||
<img></img>
|
||||
<h2 class="text-3xl ">contact page</h2>
|
||||
</div>
|
||||
</section>
|
||||
<section class="container">
|
||||
|
||||
</section>
|
||||
</article>
|
||||
</main>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
const config = useRuntimeConfig();
|
||||
const baseUrl = config.public.baseUrl
|
||||
|
||||
useHead({
|
||||
title: '*nix in Thailand',
|
||||
titleTemplate: '%s',
|
||||
meta: [
|
||||
{ property: 'og:type', content: 'website' }
|
||||
]
|
||||
})
|
||||
</script>
|
||||
Executable
+69
@@ -0,0 +1,69 @@
|
||||
<template>
|
||||
<main>
|
||||
<article class="article">
|
||||
<section class="hero-section">
|
||||
<div class="container">
|
||||
<img class="brace" width="100" src="/brace-smile.svg"></img>
|
||||
<h1 :id="t('home.hero.title').replace(/ /g, '_')" class="title">{{ t('home.hero.title') }}</h1>
|
||||
<p :id="t('home.hero.sub').replace(/ /g, '_')" class="subtitle">{{ t('home.hero.sub') }}</p>
|
||||
</div>
|
||||
</section>
|
||||
<!-- <section class="page-section page-section-alt">
|
||||
<div class="container">
|
||||
<section class="section">
|
||||
<h2 class="title">{{ t('home.wiki.title') }}</h2>
|
||||
<p>{{ t('home.wiki.paragraph') }}</p>
|
||||
<UButton to="https://wiki.unix.in.th" :label="t('home.wiki.go')"/>
|
||||
</section>
|
||||
<section class="section-img">
|
||||
<img class="aspect-[4/3]" src="/wiki-mac.png"></img>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
<section class="page-section page-section-alt">
|
||||
<div class="container">
|
||||
<section class="section">
|
||||
<h2 class="title">{{ t('home.forum.title') }}</h2>
|
||||
<p>{{ t('home.forum.paragraph') }}</p>
|
||||
<UButton to="https://forum.unix.in.th" :label="t('home.forum.go')"/>
|
||||
</section>
|
||||
<section class="section-img">
|
||||
<img class="aspect-[4/3]" src="/wiki-mac.png"></img>
|
||||
</section>
|
||||
</div>
|
||||
</section> -->
|
||||
<section class="page-section" :aria-labelledby="t('home.wiki.title').replace(/ /g, '_')" :aria-describedby="t('home.wiki.paragraph').replace(/ /g, '_')">
|
||||
<div class="container">
|
||||
<section class="section">
|
||||
<h2 :id="t('home.wiki.title').replace(/ /g, '_')" class="title">{{ t('home.wiki.title') }}</h2>
|
||||
<p :id="t('home.wiki.paragraph').replace(/ /g, '_')">{{ t('home.wiki.paragraph') }}</p>
|
||||
<UButton to="https://wiki.unix.in.th" :label="t('home.wiki.go')"/>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
<section class="page-section" :aria-labelledby="t('home.forum.title').replace(/ /g, '_')" :aria-describedby="t('home.forum.paragraph').replace(/ /g, '_')">
|
||||
<div class="container">
|
||||
<section class="section">
|
||||
<h2 :id="t('home.forum.title').replace(/ /g, '_')" class="title">{{ t('home.forum.title') }}</h2>
|
||||
<p :id="t('home.forum.paragraph').replace(/ /g, '_')">{{ t('home.forum.paragraph') }}</p>
|
||||
<UButton to="https://forum.unix.in.th" :label="t('home.forum.go')"/>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
</main>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
const {t} = useI18n();
|
||||
const config = useRuntimeConfig();
|
||||
const baseUrl = config.public.baseUrl
|
||||
|
||||
useHead({
|
||||
title: '*nix in Thailand',
|
||||
titleTemplate: '%s',
|
||||
meta: [
|
||||
{ property: 'og:type', content: 'website' }
|
||||
]
|
||||
})
|
||||
</script>
|
||||
Executable
+12
@@ -0,0 +1,12 @@
|
||||
import en from './locales/en.json'
|
||||
import th from './locales/th.json'
|
||||
|
||||
export default defineI18nConfig(() => ({
|
||||
legacy: false,
|
||||
locale: 'en',
|
||||
fallbackLocale: 'en',
|
||||
messages: {
|
||||
en,
|
||||
th
|
||||
},
|
||||
}))
|
||||
Executable
+47
@@ -0,0 +1,47 @@
|
||||
{
|
||||
"sites": {
|
||||
"wiki": "Wiki",
|
||||
"identity": "Identity services",
|
||||
"status": "Status",
|
||||
"forum": "Forum",
|
||||
"all": "unix.in.th sites",
|
||||
"join-discord": "Join Discord"
|
||||
},
|
||||
"nav": {
|
||||
"home": "Home",
|
||||
"about": "About",
|
||||
"contact": "Contact"
|
||||
},
|
||||
"ui": {
|
||||
"language": {
|
||||
"switch": "Switch language",
|
||||
"tooltip": "Switch between English and Thai as the user interface language"
|
||||
}
|
||||
},
|
||||
"home": {
|
||||
"hero": {
|
||||
"title": "Hi! Welcome to *nix in Thailand, free computer knowledge for everyone.",
|
||||
"sub": "A place for everything Unix and Unix-like system including its software. And provide a free documentation and universal access to other free software."
|
||||
},
|
||||
"wiki": {
|
||||
"title": "Wiki",
|
||||
"paragraph": "Central of computer software and hardware knowledge, free to all, shaped by all.",
|
||||
"go": "Go to wiki"
|
||||
},
|
||||
"forum": {
|
||||
"title": "Forum",
|
||||
"paragraph": "A place to ask, discuss, and chit-chat about UNIX and Unix-like software and hardware.",
|
||||
"go": "Go to forum"
|
||||
}
|
||||
},
|
||||
"footer": {
|
||||
"copyright": {
|
||||
"notice": "Copyleft 🄯 *nix in Thailand, {year} ({yearB}). All rights reversed."
|
||||
}
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
"title": "About us"
|
||||
}
|
||||
}
|
||||
}
|
||||
Executable
+47
@@ -0,0 +1,47 @@
|
||||
{
|
||||
"sites": {
|
||||
"wiki": "วิกิ",
|
||||
"identity": "ระบบบัญชี",
|
||||
"status": "สถานะ",
|
||||
"forum": "ลานประชาคม",
|
||||
"all": "ไซต์ของ unix.in.th",
|
||||
"join-discord": "เข้าร่วมดิสคอร์ด"
|
||||
},
|
||||
"nav": {
|
||||
"home": "หน้าหลัก",
|
||||
"about": "เกี่ยวกับ",
|
||||
"contact": "ติดต่อ"
|
||||
},
|
||||
"ui": {
|
||||
"language": {
|
||||
"switch": "สลับภาษา",
|
||||
"tooltip": "เปลี่ยนภาษาของส่วนต่อประสานผู้ใช้ระหว่างภาษาอังกฤษหรือภาษาไทย"
|
||||
}
|
||||
},
|
||||
"home": {
|
||||
"hero": {
|
||||
"title": "สวัสดี! ยินดีต้อนรับสู่ *nix in Thailand สาระคอมพิวเตอร์ที่ทุกคนสามารถเข้าถึงได้",
|
||||
"sub": "พื้นที่สำหรับการซักถาม คุยเล่น และเอกสารสาระคอมพิวเตอร์ต่าง ๆ โดยที่เน้นระบบ UNIX และ Unix-like ไม่ว่าจะเป็น GNU, Linux, macOS, Android, ฯลฯ"
|
||||
},
|
||||
"wiki": {
|
||||
"title": "สารคอมพิวเตอร์เสรี (วิกิ)",
|
||||
"paragraph": "ศูนย์รวมความรู้ซอฟต์แวร์และฮาร์ดแวร์คอมพิวเตอร์ ที่ทุกคนสามารถสามารถแก้ไขได้",
|
||||
"go": "ไปที่วิกิ"
|
||||
},
|
||||
"forum": {
|
||||
"title": "ลานประชาคม\n",
|
||||
"paragraph": "พื้นที่สอบถาม อภิปราย และคุยเล่น เกี่ยวกับซอฟต์แวร์และฮาร์ดแวร์ UNIX และ Unix-like",
|
||||
"go": "ไปที่ลานประชาคม"
|
||||
}
|
||||
},
|
||||
"footer": {
|
||||
"copyright": {
|
||||
"notice": "นิรสิทธิ์ 🄯 *nix in Thailand, {year} ({yearB}), ไม่สงวนสิทธิ์ทุกประการ"
|
||||
}
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
"title": "เกี่ยวกับเรา"
|
||||
}
|
||||
}
|
||||
}
|
||||
Executable
+95
@@ -0,0 +1,95 @@
|
||||
// https://nuxt.com/docs/api/configuration/nuxt-config
|
||||
import tailwindcss from "@tailwindcss/vite";
|
||||
|
||||
export default defineNuxtConfig({
|
||||
compatibilityDate: '2025-07-15',
|
||||
devtools: { enabled: false },
|
||||
ssr: true,
|
||||
modules: ['@nuxt/ui', '@nuxtjs/i18n'],
|
||||
css: ['~/assets/css/main.css'],
|
||||
vite: {
|
||||
plugins: [
|
||||
tailwindcss(),
|
||||
]
|
||||
},
|
||||
runtimeConfig: {
|
||||
public: {
|
||||
baseUrl: process.env.NUXT_PUBLIC_BASE_URL,
|
||||
siteAuthor: process.env.NUXT_PUBLIC_SITE_AUTHOR,
|
||||
siteName: process.env.NUXT_PUBLIC_SITE_NAME,
|
||||
twitterUsername: process.env.NUXT_PUBLIC_TWITTER_USERNAME
|
||||
}
|
||||
},
|
||||
app: {
|
||||
// pageTransition: { name: 'page', mode: 'out-in' },
|
||||
head: {
|
||||
titleTemplate: `%s / ${process.env.NUXT_PUBLIC_SITE_NAME || '*nix in Thailand'}`,
|
||||
meta: [
|
||||
{ name: 'description', content: 'A place for everything Unix and Unix-like system including its software. And provide a free documentation and universal access to other free software.' },
|
||||
{ name: 'referrer', content: 'strict-origin-when-cross-origin' },
|
||||
{ name: 'canonical', content: process.env.NUXT_PUBLIC_BASE_URL },
|
||||
{ name: 'robots', content: 'index,follow' },
|
||||
// UNUSED { name: 'author', content: process.env.NUXT_PUBLIC_AUTHOR },
|
||||
{ name: 'application-name', content: process.env.NUXT_PUBLIC_SITE_NAME },
|
||||
{ name: 'theme-color', content: '#ae8324' },
|
||||
// Open Graph
|
||||
{ property: 'og:title', content: `${process.env.NUXT_PUBLIC_SITE_NAME}` },
|
||||
{ property: 'og:description', content: 'A place for everything Unix and Unix-like system including its software. And provide a free documentation and universal access to other free software.' },
|
||||
{ property: 'og:url', content: process.env.NUXT_PUBLIC_BASE_URL },
|
||||
{ property: 'og:site_name', content: process.env.NUXT_PUBLIC_BASE_URL },
|
||||
{ property: 'og:type', content: 'website' },
|
||||
{ property: 'og:locale', content: 'en_US' },
|
||||
// Twitter
|
||||
// { name: 'twitter:creator', content: '@techitwinner' },
|
||||
// { name: 'twitter:site', content: '@techitwinner' },
|
||||
{ name: 'twitter:card', content: 'summary' },
|
||||
{ name: 'twitter:url', content: process.env.NUXT_PUBLIC_BASE_URL },
|
||||
{ name: 'twitter:image', content: '' },
|
||||
// Apple Web App
|
||||
{ name: 'mobile-web-app-capable', content: 'yes' },
|
||||
{ name: 'apple-mobile-web-app-capable', content: 'yes' },
|
||||
{ name: 'apple-mobile-web-app-status-bar-style', content: 'black' },
|
||||
// { name: 'apple-mobile-web-app-title', content: process.env.NUXT_PUBLIC_AUTHOR }
|
||||
],
|
||||
htmlAttrs: {
|
||||
lang: 'en',
|
||||
},
|
||||
charset: 'utf-8',
|
||||
viewport: 'width=device-width, initial-scale=1',
|
||||
link: [
|
||||
{ rel: 'icon', type: 'image/vnd.microsoft.icon', href: '/favicon.ico' },
|
||||
// { rel: 'stylesheet', href: '/style.css' },
|
||||
// TYPEFACES
|
||||
{ rel: 'preconnect', href: 'https://fonts.thawiang.com/' },
|
||||
{ rel: 'stylesheet', href: 'https://fonts.thawiang.com/open-sans/open-sans-less.css' },
|
||||
{ rel: 'stylesheet', href: 'https://fonts.thawiang.com/sarabun/sarabun.css' }
|
||||
]
|
||||
},
|
||||
},
|
||||
i18n: {
|
||||
baseUrl: process.env.NUXT_PUBLIC_BASE_URL,
|
||||
strategy: 'prefix_and_default',
|
||||
defaultLocale: 'th',
|
||||
locales: [
|
||||
{
|
||||
code: 'th',
|
||||
language: 'th-TH',
|
||||
name: 'ภาษาไทย',
|
||||
file: 'th.json',
|
||||
isCatchallLocale: true,
|
||||
},
|
||||
{
|
||||
code: 'en',
|
||||
language: 'en-US',
|
||||
name: 'English',
|
||||
file: 'en.json',
|
||||
}
|
||||
],
|
||||
detectBrowserLanguage: {
|
||||
useCookie: true,
|
||||
cookieKey: 'i18n_language',
|
||||
fallbackLocale: 'th',
|
||||
},
|
||||
vueI18n: 'i18n.config.ts',
|
||||
}
|
||||
})
|
||||
Executable
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"name": "nuxt-app",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "nuxt build",
|
||||
"dev": "nuxt dev",
|
||||
"generate": "nuxt generate",
|
||||
"preview": "nuxt preview",
|
||||
"postinstall": "nuxt prepare"
|
||||
},
|
||||
"dependencies": {
|
||||
"@nuxt/ui": "4.0.0-alpha.1",
|
||||
"@tailwindcss/vite": "^4.1.13",
|
||||
"nuxt": "^4.1.1",
|
||||
"tailwindcss": "^4.1.13",
|
||||
"vue": "^3.5.21",
|
||||
"vue-router": "^4.5.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@iconify-json/lucide": "^1.2.67",
|
||||
"@nuxtjs/i18n": "^10.1.0",
|
||||
"@types/node": "^24.3.3"
|
||||
}
|
||||
}
|
||||
+8994
File diff suppressed because it is too large
Load Diff
Executable
+5
@@ -0,0 +1,5 @@
|
||||
onlyBuiltDependencies:
|
||||
- '@parcel/watcher'
|
||||
- '@tailwindcss/oxide'
|
||||
- esbuild
|
||||
- vue-demi
|
||||
Executable
+46
@@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="171.19638"
|
||||
height="215.51926"
|
||||
viewBox="0 0 171.19638 215.51926"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<g
|
||||
id="layer1"
|
||||
transform="translate(-133.66724,-115.4906)">
|
||||
<path
|
||||
style="font-weight:300;font-size:192px;line-height:0.83;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans Light';letter-spacing:0px;word-spacing:0px;text-orientation:upright;stroke-width:5;stroke-linecap:square;stroke-miterlimit:10;stroke-dashoffset:2.25"
|
||||
d="m 212.99239,315.95999 q -5.568,0 -8.448,-3.264 -2.88,-3.264 -2.88,-8.256 v -51.648 q 0,-8.448 -5.184,-12.48 -4.992,-4.224 -13.44,-4.224 v -12.672 q 8.448,0 13.44,-4.032 5.184,-4.224 5.184,-12.672 v -51.648 q 0,-4.992 2.88,-8.256 2.88,-3.264 8.448,-3.264 h 17.28 v 8.64 h -19.008 v 53.376 q 0,9.216 -5.184,15.552 -4.992,6.144 -13.248,7.104 v 3.072 q 8.256,0.96 13.248,7.296 5.184,6.144 5.184,15.36 v 53.376 h 19.008 v 8.64 z"
|
||||
id="text1"
|
||||
aria-label="{" />
|
||||
<path
|
||||
d="m -203.40436,254.07473 q -5.97505,0 -8.88184,-3.06827 -2.90678,-3.22976 -2.90678,-7.91292 v -2.42232 q 0,-4.68315 2.90678,-7.75142 2.90679,-3.22976 8.88184,-3.22976 5.97506,0 8.88184,3.22976 2.90679,3.06827 2.90679,7.75142 v 2.42232 q 0,4.68316 -2.90679,7.91292 -2.90678,3.06827 -8.88184,3.06827 z m 0,-63.46479 q -5.97505,0 -8.88184,-3.06827 -2.90678,-3.22976 -2.90678,-7.91291 v -2.42232 q 0,-4.68316 2.90678,-7.75143 2.90679,-3.22976 8.88184,-3.22976 5.97506,0 8.88184,3.22976 2.90679,3.06827 2.90679,7.75143 v 2.42232 q 0,4.68315 -2.90679,7.91291 -2.90678,3.06827 -8.88184,3.06827 z"
|
||||
id="text2"
|
||||
style="font-weight:500;font-size:161.488px;line-height:0.83;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans Medium';letter-spacing:0px;word-spacing:0px;text-orientation:upright;stroke-width:4.20543;stroke-linecap:square;stroke-miterlimit:10;stroke-dashoffset:2.25"
|
||||
transform="rotate(-90)"
|
||||
aria-label=":" />
|
||||
<path
|
||||
d="m 282.97613,-212.89616 q 0,7.008 -1.344,13.44 -1.248,6.432 -3.552,12 -2.304,5.568 -5.472,10.08 -3.072,4.512 -6.72,7.584 h -9.888 q 3.936,-3.552 7.104,-8.16 3.168,-4.512 5.376,-9.6 2.208,-5.088 3.36,-10.56 1.248,-5.472 1.248,-10.944 v -7.68 q 0,-5.472 -1.248,-10.944 -1.152,-5.472 -3.36,-10.56 -2.208,-5.088 -5.376,-9.6 -3.168,-4.512 -7.104,-8.16 h 9.888 q 3.648,3.072 6.72,7.584 3.168,4.512 5.472,10.08 2.304,5.568 3.552,12 1.344,6.432 1.344,13.44 z"
|
||||
id="text4"
|
||||
style="font-weight:500;font-size:96px;line-height:0.83;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans Medium';letter-spacing:0px;word-spacing:0px;text-orientation:upright;stroke-width:5;stroke-linecap:square;stroke-miterlimit:10;stroke-dashoffset:2.25"
|
||||
transform="rotate(90)"
|
||||
aria-label=")" />
|
||||
<path
|
||||
style="font-weight:200;font-size:240px;line-height:0.83;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans Ultra-Light';letter-spacing:0px;word-spacing:0px;text-orientation:upright;stroke-width:5;stroke-linecap:square;stroke-miterlimit:10;stroke-dashoffset:2.25"
|
||||
d="m 304.86357,115.4902 v 215.52 h -32.16 v -6.96 h 24.48 v -201.6 h -24.48 v -6.96 z"
|
||||
id="text5"
|
||||
aria-label="]" />
|
||||
<path
|
||||
style="font-weight:200;font-size:240px;line-height:0.83;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans Ultra-Light';letter-spacing:0px;word-spacing:0px;text-orientation:upright;stroke-width:5;stroke-linecap:square;stroke-miterlimit:10;stroke-dashoffset:2.25"
|
||||
d="m -133.66729,115.4902 v 215.52 h -32.16 v -6.96 h 24.48 v -201.6 h -24.48 v -6.96 z"
|
||||
id="text5-0"
|
||||
transform="scale(-1,1)"
|
||||
aria-label="]" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.8 KiB |
Executable
BIN
Binary file not shown.
|
After Width: | Height: | Size: 1.7 MiB |
Executable
+2
@@ -0,0 +1,2 @@
|
||||
User-Agent: *
|
||||
Disallow:
|
||||
Executable
BIN
Binary file not shown.
|
After Width: | Height: | Size: 332 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 306 KiB |
Executable
+84
@@ -0,0 +1,84 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="123.99991"
|
||||
height="20"
|
||||
viewBox="0 0 32.808308 5.2916666"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||
sodipodi:docname="main.svg"
|
||||
inkscape:export-filename="workmark124x20.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="px"
|
||||
inkscape:zoom="6.1433221"
|
||||
inkscape:cx="52.089081"
|
||||
inkscape:cy="16.115059"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1115"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs1">
|
||||
<linearGradient
|
||||
id="linearGradient1"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
style="stop-color:#757575;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop9" />
|
||||
<stop
|
||||
style="stop-color:#1a1a1a;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop10" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient1"
|
||||
id="linearGradient10"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.78489115,0,0,0.81024636,17.578967,74.161838)"
|
||||
x1="256"
|
||||
y1="180.78256"
|
||||
x2="256"
|
||||
y2="382.74677" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient1"
|
||||
id="linearGradient13"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.84155607,0,0,0.81024636,-8.3279133,74.161838)"
|
||||
x1="256"
|
||||
y1="180.78256"
|
||||
x2="256"
|
||||
y2="382.74677" />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<path
|
||||
style="font-weight:bold;font-size:6.43426px;line-height:0.83;font-family:'TeX Gyre Adventor';-inkscape-font-specification:'TeX Gyre Adventor';letter-spacing:0px;word-spacing:0px;text-orientation:upright;stroke-width:0.0448609;stroke-miterlimit:10;paint-order:markers fill stroke"
|
||||
d="M 6.7813396e-6,5.2080302 H 0.85576335 v -3.56458 H 6.7813396e-6 Z M 0.00644104,1.1287095 H 0.86219761 V 0.27295289 H 0.00644104 Z M 1.5442277,5.2080302 H 2.3999843 V 3.5286884 c 0,-0.4761352 0.032171,-0.6820316 0.1415537,-0.8557566 0.1351194,-0.2123305 0.3603185,-0.3281472 0.6305575,-0.3281472 0.4246611,0 0.6820315,0.1672907 0.6820315,1.1195612 V 5.2080302 H 4.7098836 V 3.297055 c 0,-0.6369917 -0.064343,-0.9458362 -0.2573704,-1.2225093 -0.2316334,-0.3345816 -0.617689,-0.5147408 -1.113127,-0.5147408 -0.4053584,0 -0.6884658,0.1222509 -1.0037445,0.4246611 V 1.6434502 h -0.791414 z m 5.3597454,-3.91203 h 0.8814936 v 3.91203 h 0.8814936 v -3.91203 H 9.5484539 V 0.45311216 H 6.9039731 Z m 3.0047995,3.91203 h 0.8557564 v -1.808027 c 0,-0.7849797 0.263805,-1.0552186 0.752809,-1.0552186 0.501872,0 0.6949,0.2959759 0.6949,1.0423501 v 1.8208955 h 0.855756 V 3.1941069 c 0,-1.1710353 -0.540478,-1.6407363 -1.396234,-1.6407363 -0.366753,0 -0.64986,0.1029482 -0.907231,0.3345815 V 0.45311216 H 9.9087726 Z M 13.614909,3.4386088 c 0,1.0745214 0.752808,1.8530668 1.795158,1.8530668 0.501873,0 0.842888,-0.1608565 1.183904,-0.5469121 v 0.4632667 h 0.78498 v -3.56458 h -0.78498 V 2.1195855 C 16.297995,1.7270956 15.944111,1.5598049 15.42937,1.5598049 c -1.055218,0 -1.814461,0.7914139 -1.814461,1.8788039 z m 0.862191,0.019303 c 0,-0.6498602 0.431095,-1.1131269 1.04235,-1.1131269 0.611254,0 1.048784,0.4568324 1.048784,1.1066927 0,0.5919519 -0.386055,1.0552186 -1.035916,1.0552186 -0.624123,0 -1.055218,-0.4246612 -1.055218,-1.0487844 z m 3.538843,1.7501187 h 0.855756 v -3.56458 h -0.855756 z m 0.0064,-4.0793207 h 0.855757 V 0.27295289 h -0.855757 z m 1.537786,4.0793207 h 0.855756 V 0.45311216 h -0.855756 z m 1.389799,-1.7694214 c 0,1.0745214 0.752809,1.8530668 1.795159,1.8530668 0.501872,0 0.842888,-0.1608565 1.183904,-0.5469121 v 0.4632667 h 0.784979 v -3.56458 H 23.929025 V 2.1195855 C 23.633049,1.7270956 23.279164,1.5598049 22.764424,1.5598049 c -1.055219,0 -1.814462,0.7914139 -1.814462,1.8788039 z m 0.862191,0.019303 c 0,-0.6498602 0.431096,-1.1131269 1.04235,-1.1131269 0.611255,0 1.048785,0.4568324 1.048785,1.1066927 0,0.5919519 -0.386056,1.0552186 -1.035916,1.0552186 -0.624123,0 -1.055219,-0.4246612 -1.055219,-1.0487844 z m 3.538842,1.7501187 h 0.855757 V 3.5286884 c 0,-0.4761352 0.03217,-0.6820316 0.141553,-0.8557566 0.13512,-0.2123305 0.360319,-0.3281472 0.630558,-0.3281472 0.424661,0 0.682031,0.1672907 0.682031,1.1195612 v 1.7436844 h 0.855757 V 3.297055 c 0,-0.6369917 -0.06434,-0.9458362 -0.25737,-1.2225093 -0.231634,-0.3345816 -0.617689,-0.5147408 -1.113127,-0.5147408 -0.405359,0 -0.688466,0.1222509 -1.003745,0.4246611 V 1.6434502 H 25.350995 Z M 29.05713,3.419306 c 0,1.0552186 0.778546,1.8723696 1.788725,1.8723696 0.482569,0 0.836454,-0.1608565 1.177469,-0.5469121 v 0.4632667 h 0.78498 V 0.45311216 H 31.952547 V 1.958729 C 31.701611,1.6820558 31.289819,1.514765 30.83942,1.514765 c -0.99731,0 -1.78229,0.8364538 -1.78229,1.904541 z m 0.862191,-0.038606 c 0,-0.6048204 0.456833,-1.0809556 1.04235,-1.0809556 0.598387,0 1.055219,0.4825694 1.055219,1.1066927 0,0.6176889 -0.456832,1.1002584 -1.035916,1.1002584 -0.598386,0 -1.061653,-0.495438 -1.061653,-1.1259955 z"
|
||||
id="text1"
|
||||
aria-label="in Thailand" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.8 KiB |
Executable
+23
@@ -0,0 +1,23 @@
|
||||
{
|
||||
// https://nuxt.com/docs/guide/concepts/typescript
|
||||
"compilerOptions": {
|
||||
"types": [
|
||||
"node"
|
||||
]
|
||||
},
|
||||
"files": [],
|
||||
"references": [
|
||||
{
|
||||
"path": "./.nuxt/tsconfig.app.json"
|
||||
},
|
||||
{
|
||||
"path": "./.nuxt/tsconfig.server.json"
|
||||
},
|
||||
{
|
||||
"path": "./.nuxt/tsconfig.shared.json"
|
||||
},
|
||||
{
|
||||
"path": "./.nuxt/tsconfig.node.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user