Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upstream docs for v1.3 #147

Merged
merged 2 commits into from
Oct 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: Documentation Checks

on:
push:
branches:
- main
paths:
- 'docs/**'
- '.github/workflows/docs.yml'
pull_request:
paths:
- 'docs/**'
- '.github/workflows/docs.yml'

jobs:
check_formatting:
runs-on: ubuntu-latest
name: Check Documentation Formatting

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'
cache-dependency-path: './docs/package-lock.json'

- name: Install dependencies
working-directory: ./docs
run: npm ci

- name: Check formatting
working-directory: ./docs
run: npm run format:check
14 changes: 13 additions & 1 deletion .github/workflows/push.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,18 @@
name: Testing

on: [push, pull_request]
on:
push:
branches:
- master
paths-ignore:
- 'docs/**'
- '.github/workflows/docs.yml'
- '**.md'
pull_request:
paths-ignore:
- 'docs/**'
- '.github/workflows/docs.yml'
- '**.md'

jobs:
test:
Expand Down
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Unreleased

### Added

* Inertia Rails documentation (@skryukov)

## [3.2.0] - 2024-06-19

Expand Down
3 changes: 3 additions & 0 deletions docs/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
node_modules
.vitepress/dist
.vitepress/cache
3 changes: 3 additions & 0 deletions docs/.prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
**/node_modules
**/dist
**/cache
156 changes: 156 additions & 0 deletions docs/.vitepress/config.mts
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
import { defineConfig } from 'vitepress'
import { tabsMarkdownPlugin } from './vitepress-plugin-tabs/tabsMarkdownPlugin'

const title = 'Inertia Rails'
const description = 'Documentation for Inertia.js Rails adapter'
const site = 'https://inertia-rails.dev'
const image = `${site}/og_image.jpg`

// https://vitepress.dev/reference/site-config
export default defineConfig({
title,
description,

markdown: {
config(md) {
md.use(tabsMarkdownPlugin)
},
},

head: [
['link', { rel: 'icon', href: '/favicon.ico', sizes: '32x32' }],
['link', { rel: 'icon', href: '/icon.svg', type: 'image/svg+xml' }],

['meta', { name: 'twitter:card', content: 'summary_large_image' }],
['meta', { name: 'twitter:site', content: site }],
['meta', { name: 'twitter:description', value: description }],
['meta', { name: 'twitter:image', content: image }],

['meta', { property: 'og:type', content: 'website' }],
['meta', { property: 'og:locale', content: 'en_US' }],
['meta', { property: 'og:site', content: site }],
['meta', { property: 'og:site_name', content: title }],
['meta', { property: 'og:image', content: image }],
['meta', { property: 'og:description', content: description }],
],
themeConfig: {
// https://vitepress.dev/reference/default-theme-config
nav: [
{ text: 'Home', link: '/' },
{ text: 'Guide', link: '/guide' },
{ text: 'Cookbook', link: '/cookbook/integrating-shadcn-ui' },
{
text: 'Links',
items: [
{ text: 'Official Inertia.js docs', link: 'https://inertiajs.com' },
{
text: 'Gems',
items: [
{
text: 'inertia_rails',
link: 'https://github.com/inertiajs/inertia-rails',
},
{
text: 'inertia_rails-contrib',
link: 'https://github.com/skryukov/inertia_rails-contrib',
},
],
},
],
},
],

logo: '/logo.svg',

sidebar: {
'/guide': [
{
items: [
{ text: 'Introduction', link: '/guide' },
{ text: 'Demo app', link: '/guide/demo-application' },
],
},
{
text: 'Installation',
items: [
{ text: 'Server-side', link: '/guide/server-side-setup' },
{ text: 'Client-side', link: '/guide/client-side-setup' },
],
},
{
text: 'Core concepts',
items: [
{ text: 'Who is it for', link: '/guide/who-is-it-for' },
{ text: 'How it works', link: '/guide/how-it-works' },
{ text: 'The protocol', link: '/guide/the-protocol' },
],
},
{
text: 'The basics',
items: [
{ text: 'Pages', link: '/guide/pages' },
{ text: 'Responses', link: '/guide/responses' },
{ text: 'Redirects', link: '/guide/redirects' },
{ text: 'Routing', link: '/guide/routing' },
{ text: 'Title & meta', link: '/guide/title-and-meta' },
{ text: 'Links', link: '/guide/links' },
{ text: 'Manual visits', link: '/guide/manual-visits' },
{ text: 'Forms', link: '/guide/forms' },
{ text: 'File uploads', link: '/guide/file-uploads' },
{ text: 'Validation', link: '/guide/validation' },
{ text: 'Shared data', link: '/guide/shared-data' },
],
},
{
text: 'Advanced',
items: [
{ text: 'Events', link: '/guide/events' },
{ text: 'Testing', link: '/guide/testing' },
{ text: 'Partial reloads', link: '/guide/partial-reloads' },
{ text: 'Scroll management', link: '/guide/scroll-management' },
{ text: 'Authentication', link: '/guide/authentication' },
{ text: 'Authorization', link: '/guide/authorization' },
{ text: 'CSRF protection', link: '/guide/csrf-protection' },
{ text: 'Error handling', link: '/guide/error-handling' },
{ text: 'Asset versioning', link: '/guide/asset-versioning' },
{ text: 'Progress indicators', link: '/guide/progress-indicators' },
{ text: 'Remembering state', link: '/guide/remembering-state' },
{ text: 'Code splitting', link: '/guide/code-splitting' },
{
text: 'Server-side rendering',
link: '/guide/server-side-rendering',
},
],
},
],
'/cookbook': [
{
items: [
{
text: 'Integrations',
items: [
{ text: 'shadcn/ui', link: '/cookbook/integrating-shadcn-ui' },
],
},
],
},
],
},

search: {
provider: 'local',
},

editLink: {
pattern:
'https://github.com/inertiajs/inertia-rails/edit/master/docs/:path',
text: 'Edit this page on GitHub',
},

socialLinks: [
{ icon: 'github', link: 'https://github.com/inertiajs/inertia-rails' },
{ icon: 'x', link: 'https://x.com/inertiajs' },
{ icon: 'discord', link: 'https://discord.gg/inertiajs' },
],
},
})
24 changes: 24 additions & 0 deletions docs/.vitepress/theme/frameworksTabs.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
const localStorageKey = 'vitepress:tabsSharedState'
const ls = typeof localStorage !== 'undefined' ? localStorage : null

const getLocalStorageValue = (): Record<string, string> => {
const rawValue = ls?.getItem(localStorageKey)
if (rawValue) {
try {
return JSON.parse(rawValue)
} catch {}
}
return {}
}

const setLocalStorageValue = (v: Record<string, string>) => {
if (!ls) return
ls.setItem(localStorageKey, JSON.stringify(v))
}

export const setupFrameworksTabs = () => {
const v = getLocalStorageValue()
if (!v.frameworks) {
setLocalStorageValue({ frameworks: 'React' })
}
}
22 changes: 22 additions & 0 deletions docs/.vitepress/theme/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// https://vitepress.dev/guide/custom-theme
import type { Theme } from 'vitepress'
import { enhanceAppWithTabs } from 'vitepress-plugin-tabs/client'
import DefaultTheme from 'vitepress/theme'
import { h } from 'vue'
import { setupFrameworksTabs } from './frameworksTabs'
import './style.css'

export default {
extends: DefaultTheme,
Layout: () => {
return h(DefaultTheme.Layout, null, {
// https://vitepress.dev/guide/extending-default-theme#layout-slots
})
},
enhanceApp({ app, router, siteData }) {
enhanceAppWithTabs(app)
},
setup() {
setupFrameworksTabs()
},
} satisfies Theme
Loading