diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml
index ea249b0..b846abe 100644
--- a/.github/workflows/pages.yml
+++ b/.github/workflows/pages.yml
@@ -1,53 +1,47 @@
-name: Deploy Jekyll site to Pages
+name: Build and deploy Telar with Hugo
on:
push:
- branches: ["main"]
+ branches: [main]
+ pull_request:
workflow_dispatch:
permissions:
contents: read
- pages: write
- id-token: write
concurrency:
- group: "pages"
- cancel-in-progress: false
+ group: pages-${{ github.ref }}
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
build:
runs-on: ubuntu-latest
steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Setup Ruby
- uses: ruby/setup-ruby@v1
+ - uses: actions/checkout@v4
+ - uses: actions/setup-node@v4
with:
- ruby-version: '3.1'
- bundler-cache: true
-
- - name: Setup Pages
- id: pages
- uses: actions/configure-pages@v4
-
- - name: Build with Jekyll
- run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}"
- env:
- JEKYLL_ENV: production
-
- - name: Build search index with Pagefind
- run: npx -y pagefind --site _site
-
- - name: Upload artifact
- uses: actions/upload-pages-artifact@v3
+ node-version: '22'
+ cache: npm
+ - uses: actions/setup-python@v5
+ with:
+ python-version: '3.12'
+ - run: npm ci
+ - run: npm run build
+ - run: npm test
+ - uses: actions/upload-pages-artifact@v3
+ with:
+ path: public
deploy:
+ if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request'
+ needs: build
+ runs-on: ubuntu-latest
+ permissions:
+ pages: write
+ id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
- runs-on: ubuntu-latest
- needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
diff --git a/.gitignore b/.gitignore
index 51a6793..e592766 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,28 +1,8 @@
-# Jekyll build files
-_site/
-.jekyll-cache/
-.jekyll-metadata
-.sass-cache/
-
-# Ruby/Bundler
-vendor/
-.bundle/
-Gemfile.lock
-
-# macOS
+node_modules/
+public/
+resources/
+.hugo_build.lock
.DS_Store
-
-# IDEs
-.vscode/
-.idea/
-*.swp
-*.swo
-*~
-
-# Logs
*.log
-
-# Screenshot automation
-screenshots/google-auth.json
-screenshots/gifs/_tmp_video/
-screenshots/gifs/_tmp_frames/
+reports/
+.build-result.json
diff --git a/.nojekyll b/.nojekyll
new file mode 100644
index 0000000..e69de29
diff --git a/Gemfile b/Gemfile
deleted file mode 100644
index ada9ea3..0000000
--- a/Gemfile
+++ /dev/null
@@ -1,11 +0,0 @@
-source "https://rubygems.org"
-
-gem "jekyll", "~> 4.3.4"
-gem "just-the-docs", "0.10.0"
-gem "csv"
-gem "base64"
-
-group :jekyll_plugins do
- gem "jekyll-seo-tag"
- gem "jekyll-last-modified-at"
-end
diff --git a/MIGRATION.md b/MIGRATION.md
new file mode 100644
index 0000000..a1f38a7
--- /dev/null
+++ b/MIGRATION.md
@@ -0,0 +1,52 @@
+# Jekyll → Hugo migration
+
+Pre-publication validation recorded 1 November 2026 on `site/hugo-migration`. This document records the migration scope, local checks and publication checklist.
+
+## Scope
+
+The migration starts from the approved redesigned Jekyll working tree, including its uncommitted changes, rebased onto main at `143fc62`, including its v1.8.3 release notes. Its original checkout and a separate source/rendered snapshot were preserved.
+
+All 234 existing HTML routes are retained. The native site contains 233 non-homepage pages plus English and Spanish homepages. These include all 160 canonical documentation pages, the 118-route legacy inventory, showcase pages/forms, the workshop and worksheet redirects, and the internal manual review page. The latter remains available but is excluded from search and marked noindex.
+
+The approved design, credits, screenshots, animations, video integration and copy are retained. The Spanish title is **Planea el recorrido de la historia**, with its former anchor preserved. The native Spanish homepage is `/es/`; old `?lang=` links forward while preserving the section fragment.
+
+## Native implementation
+
+Content is authored in Hugo's English and Spanish directories. Existing published URLs are explicit in front matter, and `translationKey` supplies native pairing. Shared data controls editorial navigation order, labels and media; the duplicate per-page title/translation registry is removed.
+
+The three shared page shells use native Go templates. Includes for diagrams, media, callouts and repeated guide content use shortcodes. Interactive configuration tools and showcase browser code are retained as source components. No Jekyll-generated page body is embedded in the site. The former Ruby/theme/Sass build has been removed from this worktree.
+
+Metadata, canonicals, language alternates, sitemaps and robots rules are generated by Hugo. Local builds use a separate preview configuration. Search indexes all 160 guide pages in two languages. The build uses pinned Hugo Extended 0.160.1 and Pagefind 1.5.2 dependencies installed by `npm ci`, without referencing another repository's tools.
+
+The production service addresses remain the existing showcase Worker. Local integration testing uses a separate Worker copy, database and test Turnstile keys, with no Slack destination. The documented preview harness was started successfully against the separate Worker checkout.
+
+## Validation
+
+- Clean `npm ci` succeeded.
+- Production: **20,441 checks; zero failures**.
+- Preview: **20,370 checks; zero failures**.
+- Source-to-output comparison: all 233 non-homepage pages and 160 canonical docs; **zero outstanding differences** under the recorded comparison rules.
+- Every existing served HTML route and all 118 legacy inventory entries remain available. Internal links, fragments, heading aliases, image targets and alt attributes pass.
+- Browser testing covered language pairing, both searches, slash/Escape search navigation, the configuration tools, math rendering, the gallery and both forms. English and Spanish teaching requests and one showcase request were stored locally. The three local notification jobs had zero delivery attempts and no sent timestamp.
+- Seven representative pages were measured at 390×844 and four at 768×1024. None had page-level horizontal overflow. The viewport capability affects the selected browser tab, which was explicitly verified before recording these results.
+- `git diff --check` passed. The prepared GitHub workflow has not yet run on GitHub.
+
+Machine-readable inventory and evidence are in `migration/`. Fresh test results are written to the ignored `reports/` directory. Route/content contracts are snapshots for regression checking; they are not runtime dependencies or copied page bodies.
+
+## Rendering and tool corrections
+
+The port preserves Kramdown heading IDs explicitly, converts callout annotations, supplies Chroma styles for native highlighting, and renders the approved HTML in quick-guide data as HTML. Large interactive HTML forms use native source components so CommonMark does not reinterpret their indentation as code.
+
+Two existing configuration-tool bugs were corrected during browser testing: the generator quoted its version/date twice, producing invalid YAML; and the validator did not recognise the existing `trama` theme. The generator now emits valid quoted values and the validator accepts all five installed theme names. No surrounding instructional wording was rewritten.
+
+One precisely recorded prose comparison exception covers stray visible Markdown delimiters around the Spanish “View full site” troubleshooting label. Hugo formats the unchanged words correctly. This is a rendering correction, not a new translation.
+
+## Publication checklist
+
+1. Review the complete local site at port 4004. The remaining Spanish editorial batches remain separate from this technical migration.
+2. Commit and push the migration branch when ready, then run the prepared pull-request build on GitHub. Remote CI and production deployment have not been exercised here.
+3. After the review and checks, merge to switch the existing Pages build to Hugo. No DNS or hosting migration is needed for the proposed workflow.
+4. Verify the live language homepages, old workshop links, search, gallery, Vimeo and both forms. Any live notification test should be deliberate; this migration's tests did not send notices.
+5. For rollback, restore the pre-release source/workflow commit or redeploy the previous Pages artifact. The old Jekyll working tree remains available locally for comparison.
+
+Telar exhibition sites and the Compositor's application build are unchanged by this documentation-site migration.
diff --git a/README.md b/README.md
index aacee18..34ea557 100644
--- a/README.md
+++ b/README.md
@@ -1,94 +1,58 @@
-# Telar Documentation
+# Telar project website
-Official documentation site for [Telar](https://github.com/UCSB-AMPLab/telar), a minimal-computing framework that weaves together IIIF images, audio, video, and texts to create layered visual narratives for digital scholarship, public exhibitions, community storytelling, and classroom projects.
+The bilingual documentation and project website for [Telar](https://telar.org), built with Hugo Extended and Pagefind. This repository publishes the manuals, exhibition-planning guides, teaching resources, showcase and landing pages. Telar exhibitions themselves still use the separate Telar framework and its Jekyll build.
-## About
+## Install and preview
-This is a bilingual (English/Spanish) documentation site built with Jekyll using a custom docs theme with [Pagefind](https://pagefind.app/) search.
+Requires Node.js 22 or later. Regression checks additionally use Python 3, with no Python packages required.
-## Local Development
-
-### Prerequisites
-
-- Ruby 3.0+
-- Bundler
-- Node.js (for Pagefind search indexing)
-
-### Basic Setup (without search)
-
-```bash
-# Install dependencies
-bundle install
-
-# Serve locally with live reload
-bundle exec jekyll serve --livereload
-
-# View at http://localhost:4000
+```sh
+npm ci
+npm run build:preview
+npm run preview
```
-### With Search
+Open
Redirecting to {{ page.redirect_to }}…
- - diff --git a/_sass/color_schemes/telar.scss b/_sass/color_schemes/telar.scss deleted file mode 100644 index acfc7a0..0000000 --- a/_sass/color_schemes/telar.scss +++ /dev/null @@ -1,56 +0,0 @@ -// Telar Color Scheme - New Visual Identity -// Terracotta, lavender, gold, cream, dark grey - -// Primary Colors -$telar-heading: #333333; -$telar-link: #883C36; // Terracotta for links -$telar-accent: #883C36; // Terracotta accent - -// Body colors -$body-background-color: #ffffff; -$body-text-color: #333333; -$body-heading-color: $telar-heading; - -// Links -$link-color: $telar-link; -$btn-primary-color: $telar-link; - -// Navigation -$nav-child-link-color: #666666; -$sidebar-color: #ffffff; - -// Search -$search-background-color: #fafafa; -$search-result-preview-color: $body-text-color; - -// Code blocks - lavender-tinted -$code-background-color: rgba(198, 208, 248, 0.2); -$code-snippet-color: $telar-accent; - -// Borders -$border-color: #C6D0F8; - -// Tables -$table-background-color: #ffffff; -$table-header-background-color: #fafafa; - -// Callout colors - cream/gold/terracotta identity -$blue-000: #FFF6EF; -$blue-100: #FFF6EF; -$blue-200: #FFF6EF; -$blue-300: #DAB95C; - -$green-000: #FFF6EF; -$green-100: #FFF6EF; -$green-200: #FFF6EF; -$green-300: #DAB95C; - -$yellow-000: #FFF6EF; -$yellow-100: #FFF6EF; -$yellow-200: #FFF6EF; -$yellow-300: #883C36; - -$red-000: #FFF6EF; -$red-100: #FFF6EF; -$red-200: #FFF6EF; -$red-300: #883C36; diff --git a/_sass/custom/_base.scss b/_sass/custom/_base.scss deleted file mode 100644 index 120d9c4..0000000 --- a/_sass/custom/_base.scss +++ /dev/null @@ -1,50 +0,0 @@ -// Base resets and foundational styles - -// FORCE REMOVE ALL GRADIENTS -* { - background-image: none !important; -} - -// Override any theme gradients -.site-header, -.site-footer, -.main-content, -.sidebar, -.search, -.nav-list, -body, -html { - background-image: none !important; - background: transparent !important; -} - -// Links - no effects -a { - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -// Remove ALL dividing lines/borders (except search input) -.site-header, -.site-footer, -.main-content, -.sidebar, -.side-bar, -.nav-list, -.nav-list-item, -.search, -.main-content-wrap { - border: none !important; - border-top: none !important; - border-bottom: none !important; - border-left: none !important; - border-right: none !important; -} - -// Remove any horizontal rules -hr { - display: none !important; -} diff --git a/_sass/custom/_components.scss b/_sass/custom/_components.scss deleted file mode 100644 index a392178..0000000 --- a/_sass/custom/_components.scss +++ /dev/null @@ -1,159 +0,0 @@ -// Shared components: buttons, callouts, code blocks - -// Button Styling - Telar Pill Style -.main-content .btn, -.btn.btn-primary, -button[type="submit"] { - border-radius: 50px !important; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.025em; - padding: 0.5rem 1.25rem; - font-size: 0.9rem; - text-decoration: none; - display: inline-block; - border: 1px solid var(--btn-primary-color, #883C36); -} - -// Default button (outline style) -.main-content .btn { - background-color: transparent; - color: var(--btn-primary-color, #883C36); -} - -.main-content .btn:hover { - background-color: var(--btn-primary-color, #883C36); - color: #ffffff; - text-decoration: none; -} - -// Primary buttons (filled) -.btn-primary, -button[type="submit"] { - background-color: var(--btn-primary-color, #883C36) !important; - color: #ffffff !important; - border: none !important; -} - -.btn-primary:hover, -button[type="submit"]:hover { - background-color: #333333 !important; - text-decoration: none; -} - -// Callouts - New identity (cream bg, rounded, gold/terracotta borders) -.label, -.label-blue, -.label-green, -.label-yellow, -.label-red { - border-radius: 12px; - padding: 1rem; - border: none !important; - border-left: 4px solid #DAB95C !important; - font-size: 0.95rem; - line-height: 1.6; - background-color: #FFF6EF; -} - -// Note callout -.label-blue, -div[class*="note"] { - background-color: #FFF6EF; - border-left-color: #DAB95C !important; - color: #333333; -} - -// Warning callout -.label-yellow, -div[class*="warning"] { - background-color: #FFF6EF; - border-left-color: #883C36 !important; - color: #333333; -} - -// Tip callout -.label-green, -div[class*="tip"] { - background-color: #FFF6EF; - border-left-color: #DAB95C !important; - color: #333333; -} - -// Beta callout -.label-red, -div[class*="beta"] { - background-color: #FFF6EF; - border-left-color: #883C36 !important; - color: #333333; -} - -// Getting Started Cards -.getting-started-cards { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 1.25rem; - margin: 1.5rem 0; -} - -.gs-card { - display: flex; - flex-direction: column; - padding: 1.25rem; - border-radius: 12px; - background-color: rgba(198, 208, 248, 0.2); - border: 1px solid rgba(198, 208, 248, 0.5); - text-decoration: none; - color: #333333; - transition: border-color 0.2s, box-shadow 0.2s; - - &:hover { - border-color: #C6D0F8; - box-shadow: 0 2px 8px rgba(198, 208, 248, 0.4); - text-decoration: none; - color: #333333; - } - - h3 { - margin: 0 0 0.5rem 0; - font-size: 1.05rem; - color: #333333; - } - - p { - margin: 0 0 1rem 0; - font-size: 0.9rem; - line-height: 1.5; - flex-grow: 1; - color: #555555; - } -} - -.gs-card__cta { - font-size: 0.85rem; - font-weight: 600; - color: var(--btn-primary-color, #883C36); - text-transform: uppercase; - letter-spacing: 0.025em; -} - -@media (max-width: 768px) { - .getting-started-cards { - grid-template-columns: 1fr; - } -} - -// Code blocks - lavender-tinted -code { - border-radius: 3px; - font-size: 0.9em; - background-color: rgba(198, 208, 248, 0.2); - border: 1px solid rgba(198, 208, 248, 0.4) !important; -} - -pre { - border-radius: 0; - border: none !important; - border-left: 3px solid rgba(198, 208, 248, 0.5) !important; - background-color: #f8f9fa; -} diff --git a/_sass/custom/_config-generator.scss b/_sass/custom/_config-generator.scss deleted file mode 100644 index 8dfa279..0000000 --- a/_sass/custom/_config-generator.scss +++ /dev/null @@ -1,253 +0,0 @@ -// Config Generator (docs/6-6-config-generator.md) - -.cg-container { - max-width: 680px; - margin: 0 auto; -} - -.cg-section { - margin-bottom: 2rem; -} - -.cg-section h3 { - color: var(--terracotta, #883C36); - border-bottom: 1px solid #e0e0e0; -} - -.cg-section-desc { - color: var(--text-medium, #555); - font-size: 0.92rem; - text-transform: none !important; -} - -.cg-row { - display: flex; - align-items: flex-start; - gap: 0.75rem; - margin-bottom: 0.75rem; -} - -.cg-label { - width: 140px; - flex-shrink: 0; - padding-top: 6px; - font-size: 0.93rem; - color: var(--text-dark, #333333); - text-transform: none !important; -} - -.cg-optional { - font-size: 0.78rem; - color: var(--text-light, #888); - text-transform: none !important; -} - -.cg-field { - flex: 1; -} - -.cg-hint { - font-size: 0.8rem; - color: var(--text-light, #888); - text-transform: none !important; -} - -.cg-input, -.cg-textarea-input { - width: 100%; - padding: 6px 10px; - border: 1px solid #d0d5db; - border-radius: 4px; - font-family: 'IBM Plex Mono', monospace; - font-size: 0.80rem; - box-sizing: border-box; -} - -.cg-select { - width: 100%; - padding: 6px 10px; - border: 1px solid #d0d5db; - border-radius: 4px; - font-family: 'IBM Plex Mono', monospace; - font-size: 0.80rem; - box-sizing: border-box; -} - -.cg-input:focus, -.cg-select:focus, -.cg-textarea-input:focus { - border-color: var(--terracotta, #883C36); - box-shadow: 0 0 0 3px rgba(136, 60, 54, 0.1); - outline: none; -} - -.cg-input--number { - width: 70px; - text-align: center; -} - -.cg-toggle-row { - display: flex; - align-items: center; - gap: 0.75rem; - margin-bottom: 0.6rem; -} - -.cg-toggle { - position: relative; - width: 36px; - height: 20px; - flex-shrink: 0; -} - -.cg-toggle input { - opacity: 0; - width: 0; - height: 0; - position: absolute; -} - -.cg-toggle .cg-track { - position: absolute; - top: 0; left: 0; right: 0; bottom: 0; - background: #ccc; - border-radius: 10px; - cursor: pointer; - transition: background 0.15s; -} - -.cg-toggle .cg-track::after { - content: ""; - position: absolute; - top: 2px; - left: 2px; - width: 16px; - height: 16px; - background: white; - border-radius: 50%; - transition: transform 0.15s; -} - -.cg-toggle input:checked + .cg-track { - background: var(--terracotta, #883C36); -} - -.cg-toggle input:checked + .cg-track::after { - transform: translateX(16px); -} - -.cg-toggle-label { - font-size: 0.93rem; - cursor: pointer; - text-transform: none !important; -} - -.cg-toggle-hint { - font-size: 0.8rem; - text-transform: none !important; -} - -.cg-toggle-info { - flex: 1; -} - -.cg-optional-fields { - display: none; - padding-left: 1rem; - border-left: 2px solid #e0e0e0; -} - -.cg-optional-fields.cg-visible { - display: block; -} - -.cg-actions { - display: flex; - gap: 1rem; - margin: 1.5rem 0; - align-items: center; -} - -.cg-button { - display: inline-block; - padding: 10px 28px; - background: var(--terracotta, #883C36); - color: white; - border: none; - border-radius: 50px; - font-family: 'Roboto Condensed', sans-serif; - font-size: 15px; - font-weight: 600; - cursor: pointer; - transition: all 0.15s ease; -} - -.cg-button:hover { - background: var(--dark-grey, #333333); -} - -.cg-copied { - font-size: 0.85rem; - opacity: 0; - transition: opacity 0.3s; - text-transform: none !important; -} - -.cg-copied.cg-show { - opacity: 1; -} - -.cg-error-msg, -.cg-warn-msg { - font-size: 0.78rem; - margin-top: 3px; - display: none; - text-transform: none !important; -} - -.cg-error-msg.cg-visible { display: block; } -.cg-warn-msg.cg-visible { display: block; } -.cg-error-msg { color: #c0392b; } -.cg-warn-msg { color: #b7621a; } - -.cg-input--error, -.cg-textarea-input--error { - border-color: #c0392b !important; - box-shadow: 0 0 0 3px rgba(192, 57, 43, 0.1) !important; -} - -.cg-input--warn, -.cg-textarea-input--warn { - border-color: #e67e22 !important; - box-shadow: 0 0 0 3px rgba(230, 126, 34, 0.08) !important; -} - -.cg-output-wrapper { - display: none; -} - -.cg-output-wrapper.cg-visible { - display: block; -} - -.cg-output-heading { - font-size: 0.85rem; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.05em; -} - -// Output area — fixed-height overrides for the generator -.cg-output-wrapper .cv-lines { - height: 400px; - padding: 16px 10px 16px 12px; - box-sizing: border-box; -} - -.cg-output-wrapper .cv-textarea { - height: 400px; - resize: none; - white-space: pre; - overflow: auto; - box-sizing: border-box; -} diff --git a/_sass/custom/_config-validator.scss b/_sass/custom/_config-validator.scss deleted file mode 100644 index 45fb94d..0000000 --- a/_sass/custom/_config-validator.scss +++ /dev/null @@ -1,128 +0,0 @@ -// Config Validator (docs/6-5-config-validator.md) - -.cv-container { - margin: 1.5rem 0; -} - -.cv-editor { - display: flex; - border: 1px solid #d0d5db; - border-radius: 4px; - background: var(--bg-light, #f8f9fa); - overflow: hidden; -} - -.cv-editor:focus-within { - border-color: var(--terracotta, #883C36); - box-shadow: 0 0 0 3px rgba(136, 60, 54, 0.1); -} - -.cv-lines { - padding: 16px 10px 16px 12px; - font-family: 'IBM Plex Mono', monospace; - font-size: 0.85rem; - line-height: 1.5; - color: var(--text-light, #AEB3BB); - text-align: right; - user-select: none; - border-right: 1px solid #e9ecef; - overflow: hidden; - min-width: 44px; - background: var(--bg-sidebar, #fafafa); - white-space: pre; -} - -.cv-textarea { - flex: 1; - min-height: 320px; - font-family: 'IBM Plex Mono', monospace; - font-size: 0.85rem; - line-height: 1.5; - padding: 16px; - border: none; - background: transparent; - resize: vertical; - tab-size: 2; - color: var(--text-dark, #333333); - outline: none; -} - -.cv-actions { - margin-top: 12px; -} - -.cv-button { - display: inline-block; - padding: 10px 28px; - background: var(--terracotta, #883C36); - color: white; - border: none; - border-radius: 50px; - font-family: 'Roboto Condensed', sans-serif; - font-size: 15px; - font-weight: 600; - cursor: pointer; - transition: all 0.15s ease; -} - -.cv-button:hover { - background: var(--dark-grey, #333333); -} - -.cv-results { - margin-top: 20px; -} - -.cv-summary { - margin-bottom: 12px; - color: var(--text-medium, #6C7A89); - font-size: 14px; -} - -.cv-issue { - display: flex; - align-items: flex-start; - gap: 10px; - padding: 10px 14px; - margin-bottom: 8px; - border-radius: 4px; - font-size: 14px; - line-height: 1.5; -} - -.cv-issue--error { background: #fef2f2; border-left: 3px solid #dc2626; } -.cv-issue--warning { background: #fffbeb; border-left: 3px solid #d97706; } -.cv-issue--info { background: #eff6ff; border-left: 3px solid #2563eb; } -.cv-issue--success { background: #f0fdf4; border-left: 3px solid #16a34a; } - -.cv-badge { - display: inline-block; - padding: 1px 8px; - border-radius: 20px; - font-size: 11px; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.3px; - white-space: nowrap; - flex-shrink: 0; - margin-top: 2px; -} - -.cv-badge--error { background: #dc2626; color: white; } -.cv-badge--warning { background: #d97706; color: white; } -.cv-badge--info { background: #2563eb; color: white; } -.cv-badge--success { background: #16a34a; color: white; } - -.cv-line { - color: var(--text-medium, #6C7A89); - font-size: 12px; - white-space: nowrap; -} - -.cv-detail { - display: block; - margin-top: 4px; - font-size: 12px; - color: var(--text-medium, #6C7A89); - font-family: 'IBM Plex Mono', monospace; -} diff --git a/_sass/custom/_header.scss b/_sass/custom/_header.scss deleted file mode 100644 index 2ba0b63..0000000 --- a/_sass/custom/_header.scss +++ /dev/null @@ -1,14 +0,0 @@ -// Site header and top bar - -// Style the top bar - keep it minimal -.site-header, -.main-header, -#main-header { - background: transparent !important; - border-bottom: none !important; - padding: 0.5rem 1rem !important; -} - -.site-nav { - padding-top: 0rem; -} diff --git a/_sass/custom/_layout.scss b/_sass/custom/_layout.scss deleted file mode 100644 index ef72df4..0000000 --- a/_sass/custom/_layout.scss +++ /dev/null @@ -1,51 +0,0 @@ -// Layout: footer, last-modified timestamp, responsive breakpoints - -// Footer - clean spacing -.site-footer { - margin-top: 1rem; - padding: 1rem 0; - font-size: 0.875rem; - line-height: 1.6; - border-top: none !important; -} - -// Last Modified Timestamp -.page-last-modified { - margin-top: 3rem; - padding-top: 1.5rem; - border-top: 1px solid #f0f0f0; - font-size: 0.875rem; - color: #666666; - font-family: 'Roboto Condensed', sans-serif; - - .last-modified-label { - font-weight: 600; - margin-right: 0.5rem; - } - - time { - color: #999999; - } -} - -// Responsive adjustments -@media (max-width: 768px) { - .btn, .site-button { - font-size: 0.875rem; - padding: 0.4rem 0.8rem; - } - - .language-switcher { - font-size: 0.8rem; - } - - .lang-switcher { - padding: 0.5rem; - font-size: 0.8rem; - } - - .page-last-modified { - font-size: 0.8rem; - margin-top: 2rem; - } -} diff --git a/_sass/custom/_navigation.scss b/_sass/custom/_navigation.scss deleted file mode 100644 index 6bb984a..0000000 --- a/_sass/custom/_navigation.scss +++ /dev/null @@ -1,119 +0,0 @@ -// Navigation: sidebar, nav lists, language switcher, breadcrumbs - -// Navigation uses Roboto Condensed -.site-header, -.site-nav, -.nav-list, -.nav-list-item, -.nav-list .nav-list-item > a, -.aux-nav { - font-family: 'Roboto Condensed', -apple-system, sans-serif !important; -} - -// Logo at top of navigation menu -.nav-logo { - padding: 1rem 0; - margin-top: 2rem; - margin-bottom: 1rem; - text-align: center; - - a { - display: block; - } - - img { - max-width: 100%; - height: auto; - max-height: 12rem; - } -} - -// Navigation - clean -.nav-list { - font-family: 'Roboto Condensed', sans-serif; - line-height: 1.6; -} - -.nav-list .nav-list-item .nav-list-link { - padding-bottom: 0rem; - margin-bottom: 0rem; - line-height: 0.75rem; -} - -.nav-list-item { - margin-bottom: 0; -} - -// Language Switcher Styling - Minimal -.language-switcher { - display: flex; - gap: 0.5rem; - align-items: center; - font-family: 'Roboto Condensed', sans-serif; - font-weight: 400; - font-size: 0.875rem; -} - -.language-switcher a { - color: #666666; - text-decoration: none; -} - -.language-switcher a:hover { - color: #1a1a1a; - text-decoration: underline; -} - -.language-switcher a.active { - color: #1a1a1a; - font-weight: 600; -} - -.language-switcher .separator { - color: #cccccc; -} - -// Page header bar with language switcher -.page-header-bar { - margin-bottom: 1rem !important; - text-align: right !important; -} - -// Language Switcher -.page-header-bar .lang-switcher { - font-family: 'Roboto Condensed', sans-serif; - - .lang-link { - color: #666666; - text-decoration: none; - font-size: 0.875rem; - font-weight: 500; - - &:hover { - color: #1a1a1a; - text-decoration: underline; - } - } -} - -// Breadcrumbs wrapper -.breadcrumb-nav-wrapper { - margin-bottom: 1.5rem; -} - -// Language Section Headers in Navigation -.nav-lang-header { - margin-top: 1rem; - margin-bottom: 0rem; - padding-bottom: 0.5rem; - border-bottom: 1px solid #e0e0e0 !important; - font-weight: 600; - font-size: 0.875rem; - text-transform: uppercase; - letter-spacing: 0.05em; - color: #333333; - - &:first-child { - margin-top: 0; - } -} diff --git a/_sass/custom/_typography.scss b/_sass/custom/_typography.scss deleted file mode 100644 index 32181a6..0000000 --- a/_sass/custom/_typography.scss +++ /dev/null @@ -1,76 +0,0 @@ -// Typography: font imports, body stack, and heading sizes - -// Import Google Fonts - Telar Typography -@import url('https://fonts.googleapis.com/css2?family=Roboto+Condensed:ital,wght@0,400;0,700;1,400&family=Space+Grotesk:wght@400;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap'); - -// Typography Overrides - Telar Font Stack -body { - font-family: 'Roboto Condensed', -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif; - font-weight: 400; - line-height: 1.6; -} - -h1, h2, h3, h4, h5, h6, -.site-title { - font-family: 'Space Grotesk', sans-serif; -} - -// Headings - Space Grotesk -h1, h2, h3, h4, h5, h6 { - text-transform: none !important; - font-weight: 600 !important; - line-height: 1.2; - margin-bottom: 0.5rem; - font-family: 'Space Grotesk', sans-serif !important; -} - -h1, -.main-content h1, -#main-content h1 { - font-size: 2.5rem !important; - margin-top: 0 !important; - margin-bottom: 1rem !important; -} - -h2, -.main-content h2, -#main-content h2 { - font-size: 2rem !important; - margin-top: 2rem !important; - margin-bottom: 0.75rem !important; -} - -h3, -.main-content h3, -#main-content h3, -.main-content-wrap h3, -main h3, -article h3 { - font-size: 1.75rem !important; - margin-top: 1.5rem !important; - margin-bottom: 0.75rem !important; -} - -h4, -.main-content h4, -#main-content h4 { - font-size: 1.5rem !important; - margin-top: 1.25rem !important; - margin-bottom: 0.5rem !important; -} - -h5, -.main-content h5, -#main-content h5 { - font-size: 1.25rem !important; - margin-top: 1rem !important; - margin-bottom: 0.5rem !important; -} - -h6, -.main-content h6, -#main-content h6 { - font-size: 1rem !important; - margin-top: 1rem !important; - margin-bottom: 0.5rem !important; -} diff --git a/_sass/custom/custom.scss b/_sass/custom/custom.scss deleted file mode 100644 index 06ff045..0000000 --- a/_sass/custom/custom.scss +++ /dev/null @@ -1,11 +0,0 @@ -// Telar Documentation Site - Custom Styles -// Incorporates Telar design elements into just-the-docs - -@import 'base'; -@import 'typography'; -@import 'header'; -@import 'navigation'; -@import 'components'; -@import 'layout'; -@import 'config-validator'; -@import 'config-generator'; diff --git a/content/en/_index.md b/content/en/_index.md new file mode 100644 index 0000000..d90e85a --- /dev/null +++ b/content/en/_index.md @@ -0,0 +1,5 @@ +--- +title: Telar +type: landing +translationKey: home +--- diff --git a/content/en/docs/_index.md b/content/en/docs/_index.md new file mode 100644 index 0000000..a6f8f50 --- /dev/null +++ b/content/en/docs/_index.md @@ -0,0 +1,10 @@ +--- +title: Guides +url: /docs/ +translationKey: docs +type: guide +docs_hub: true +docs_section: guides +--- + +{{< guides-hub >}} diff --git a/docs/3-0-configure.md b/content/en/docs/configure/_index.md similarity index 79% rename from docs/3-0-configure.md rename to content/en/docs/configure/_index.md index 4681850..ff8ff34 100644 --- a/docs/3-0-configure.md +++ b/content/en/docs/configure/_index.md @@ -1,20 +1,18 @@ --- -layout: docs -title: 3. Configure Your Site -parent: Documentation -nav_order: 3 -lang: en -permalink: /docs/configure/ -has_children: true +title: Configure Your Site +url: /docs/configure/ +translationKey: docs-configure +type: guide +docs_section: reference --- -# Configure Your Site +# Configure Your Site {#configure-your-site} Telar's behavior is controlled through `_config.yml`, a YAML file in the root of your repository. It sets your site's title, theme, language, Google Sheets connection, and feature toggles. If you used the [Google Sheets setup](/docs/getting-started/google-sheets/), you already have a working `_config.yml`. This section helps you understand what's in it and how to change it. -## In This Section +## In This Section {#in-this-section} - [Config Generator and Editor](/docs/configure/config-generator/) — Build a new `_config.yml` from scratch or load an existing one to edit - [Configuration Reference](/docs/configure/configuration/) — Complete list of every setting and what it does diff --git a/docs/3-1-config-generator.md b/content/en/docs/configure/config-generator.md similarity index 68% rename from docs/3-1-config-generator.md rename to content/en/docs/configure/config-generator.md index c64ea07..fab00c7 100644 --- a/docs/3-1-config-generator.md +++ b/content/en/docs/configure/config-generator.md @@ -1,390 +1,19 @@ --- -layout: docs -title: "3.1. Config Generator and Editor" -parent: "3. Configure Your Site" -grand_parent: Documentation -nav_order: 1 -lang: en -permalink: /docs/configure/config-generator/ +title: Config Generator and Editor +url: /docs/configure/config-generator/ +translationKey: docs-configure-config-generator +type: guide extra_css: - - config-tools +- config-tools +docs_section: reference --- -# Config Generator and Editor +# Config Generator and Editor {#config-generator-and-editor} Fill in your site details to generate a ready-to-use `_config.yml` file for your Telar site. Your configuration is never sent to any server — everything runs in your browser. -Paste your existing _config.yml below, then click Load to populate the form.
Basic site information and appearance. These are the most important settings for your site.
- -telar-content/objects/. Recommended: max 80px tall, 200–300px wide, PNG/JPG/SVGTelar is designed to work with GitHub Pages — most users just need their username and repository name.
- -Manage your content via Google Sheets instead of editing CSV files directly. Telar fetches your data automatically during each build.
- -telar-content/spreadsheets/Control how stories display and behave on your site. These settings affect the story viewer and homepage presentation.
- -Control how the objects gallery displays and behaves, including filtering, search, and homepage presentation.
- -Encrypt stories so only viewers with the correct key can access them. Stories with private: yes in your project.csv (or Google Sheets Project tab) will be encrypted during build.
?key=your-secret-keyGenerated _config.yml
-#s3 opens the third content step, #s3l1 opens its first panel, and #s3l1g1 targets its first glossary link. These are distinct from the unsupported ?section= parameter. Test a manually constructed embedded link in the host environment before sharing it.
-## Related Documentation
+## Related Documentation {#related-documentation}
- **Educator Guide**: [Embedding in LMS & Websites](/docs/site-features/embedding/)
- **Development Setup**: [Local Development](/docs/developers/local-development/)
diff --git a/docs/8-2-github-actions.md b/content/en/docs/developers/github-actions.md
similarity index 86%
rename from docs/8-2-github-actions.md
rename to content/en/docs/developers/github-actions.md
index c5db843..35ba390 100644
--- a/docs/8-2-github-actions.md
+++ b/content/en/docs/developers/github-actions.md
@@ -1,22 +1,20 @@
---
-layout: docs
-title: "8.2. GitHub Actions"
-parent: "8. For Developers"
-grand_parent: Documentation
-nav_order: 2
-lang: en
-permalink: /docs/developers/github-actions/
+title: GitHub Actions Workflow
+url: /docs/developers/github-actions/
+translationKey: docs-developers-github-actions
+type: guide
+docs_section: developers
---
-# GitHub Actions Workflow
+# GitHub Actions Workflow {#github-actions-workflow}
Telar uses GitHub Actions to automatically build and deploy your site. Understanding this workflow helps you troubleshoot issues and optimize your development process.
-## What GitHub Actions Does
+## What GitHub Actions Does {#what-github-actions-does}
When you deploy via GitHub Pages, the build process is **fully automated**. No manual steps required!
-### User Actions (You)
+### User Actions (You) {#user-actions-you}
Edit content directly on GitHub or push from local:
@@ -25,7 +23,7 @@ Edit content directly on GitHub or push from local:
3. **Add images** to `telar-content/objects/`
4. **Commit and push** to main branch
-### Automated Actions (GitHub)
+### Automated Actions (GitHub) {#automated-actions-github}
The workflow (`.github/workflows/build.yml`) automatically:
@@ -72,7 +70,7 @@ The workflow (`.github/workflows/build.yml`) automatically:
- Publishes `_site/` directory
- Site goes live at your GitHub Pages URL
-## Build Triggers
+## Build Triggers {#build-triggers}
The workflow runs automatically when:
@@ -80,11 +78,11 @@ The workflow runs automatically when:
- **CSV or markdown changes**: Content updates deploy immediately
- **Config changes**: `_config.yml` modifications rebuild site
-## Manual Build Trigger
+## Manual Build Trigger {#manual-build-trigger}
Sometimes you need to rebuild without making code changes (e.g., after editing Google Sheets).
-### How to Manually Trigger
+### How to Manually Trigger {#how-to-manually-trigger}
1. Go to your repository on GitHub
2. Click **Actions** tab
@@ -94,14 +92,14 @@ Sometimes you need to rebuild without making code changes (e.g., after editing G
6. Click green **Run workflow** button
7. Wait 2-5 minutes for completion
-### When to Trigger Manually
+### When to Trigger Manually {#when-to-trigger-manually}
- After editing Google Sheets content
- After adding objects or story steps in Google Sheets
- To rebuild without code changes
- To force a clean build
-## Workflow File
+## Workflow File {#workflow-file}
The workflow is defined in `.github/workflows/build.yml`. The following is a simplified outline — the actual file contains caching logic and conditional steps:
@@ -172,25 +170,25 @@ jobs:
On a manual run, the **force_iiif** and **force_audio** checkboxes decide whether IIIF tiles and audio are regenerated. Both are ticked by default. Untick one to take that part from the cache instead, and the build finishes sooner.
-## Build Status
+## Build Status {#build-status}
-### Checking Build Status
+### Checking Build Status {#checking-build-status}
1. Go to **Actions** tab in your repository
2. See list of recent workflow runs
3. Green checkmark = successful build
4. Red X = failed build
-### Viewing Build Logs
+### Viewing Build Logs {#viewing-build-logs}
1. Click on a workflow run
2. Click on the job name (e.g., "build-and-deploy")
3. Expand steps to see detailed logs
4. Use logs to troubleshoot errors
-## Common Build Errors
+## Common Build Errors {#common-build-errors}
-### CSV Parsing Error
+### CSV Parsing Error {#csv-parsing-error}
**Error:** `Failed to parse story-1.csv`
@@ -199,7 +197,7 @@ On a manual run, the **force_iiif** and **force_audio** checkboxes decide whethe
- Ensure all required columns are present
- Verify no special characters breaking CSV format
-### Spreadsheet Refused
+### Spreadsheet Refused {#spreadsheet-refused}
**Error:** `Two columns in this spreadsheet mean the same thing: ...` (fails at the "Convert CSV to JSON" step; the message names the file)
@@ -212,7 +210,7 @@ On a manual run, the **force_iiif** and **force_audio** checkboxes decide whethe
**Solution:**
- Rename the `_metadata` column and rebuild. Telar keeps that name for its own use: if a row has anything in that column, Telar reads it as its own data and leaves the row off the published site.
-### IIIF Generation Error
+### IIIF Generation Error {#iiif-generation-error}
**Error:** `Failed to process image textile-001.jpg`
@@ -222,7 +220,7 @@ On a manual run, the **force_iiif** and **force_audio** checkboxes decide whethe
- Check image isn't corrupted
- Ensure image format is supported (JPG, PNG, TIFF)
-### Jekyll Build Error
+### Jekyll Build Error {#jekyll-build-error}
**Error:** `Liquid syntax error`
@@ -231,7 +229,7 @@ On a manual run, the **force_iiif** and **force_audio** checkboxes decide whethe
- Verify frontmatter is properly formatted
- Look for unclosed tags or brackets
-### Google Sheets Fetch Error
+### Google Sheets Fetch Error {#google-sheets-fetch-error}
**Error:** `Failed to fetch Google Sheets`
@@ -240,7 +238,7 @@ On a manual run, the **force_iiif** and **force_audio** checkboxes decide whethe
- Ensure sheet is published to web (not just shared)
- Check sheet has proper permissions
-### Private Story Build Failure
+### Private Story Build Failure {#private-story-build-failure}
**Error:** `story/stories are marked protected but no story_key is set` (fails at the "Convert CSV
to JSON" step)
@@ -263,7 +261,7 @@ before "Upload artifact")
have been encrypted away. This is a bug, not a configuration issue — [report
it](https://github.com/UCSB-AMPLab/telar/issues) with the workflow run link.
-## Build Performance
+## Build Performance {#build-performance}
Typical build times:
@@ -271,15 +269,15 @@ Typical build times:
- **Medium sites** (10-50 objects, multiple stories): 3-5 minutes
- **Large sites** (50+ objects, many stories): 5-10 minutes
-### Optimizing Build Time
+### Optimizing Build Time {#optimizing-build-time}
- **Use external IIIF** for large images (skips tile generation)
- **Commit fewer images** at once (split large uploads)
- **Clean repository** periodically (remove unused files)
-## Troubleshooting
+## Troubleshooting {#troubleshooting}
-### Build Fails Every Time
+### Build Fails Every Time {#build-fails-every-time}
1. Check recent commits for errors
2. Review build logs for specific error messages
@@ -289,21 +287,21 @@ Typical build times:
Reference](/docs/developers/local-development/))
4. Revert to last working commit if needed
-### Build Succeeds But Site Not Updating
+### Build Succeeds But Site Not Updating {#build-succeeds-but-site-not-updating}
1. Clear browser cache (hard refresh: Cmd+Shift+R or Ctrl+Shift+R)
2. Wait 5 minutes for CDN propagation
3. Check GitHub Pages settings (Settings → Pages)
4. Verify correct branch is set for Pages deployment
-### Google Sheets Not Updating
+### Google Sheets Not Updating {#google-sheets-not-updating}
1. Manually trigger workflow (see above)
2. Verify the published URL in `_config.yml`
3. Check the sheet is published to web
4. Review fetch logs in Actions tab
-## Next Steps
+## Next Steps {#next-steps}
- [Local Development Reference](/docs/developers/local-development/)
- [Configuration Guide](/docs/configure/configuration/)
diff --git a/docs/8-1-local-development.md b/content/en/docs/developers/local-development.md
similarity index 87%
rename from docs/8-1-local-development.md
rename to content/en/docs/developers/local-development.md
index 521ae4b..9c15f48 100644
--- a/docs/8-1-local-development.md
+++ b/content/en/docs/developers/local-development.md
@@ -1,25 +1,23 @@
---
-layout: docs
-title: "8.1. Local Dev Setup"
-parent: "8. For Developers"
-grand_parent: Documentation
-nav_order: 1
-lang: en
-permalink: /docs/developers/local-development/
+title: Local Development
+url: /docs/developers/local-development/
+translationKey: docs-developers-local-development
+type: guide
+docs_section: developers
---
-# Local Development
+# Local Development {#local-development}
Complete reference for local development, build commands, and troubleshooting.
-## Prerequisites
+## Prerequisites {#prerequisites}
-### Required Software
+### Required Software {#required-software}
- **Ruby 3.2+**: Jekyll runtime
- **Bundler**: Ruby dependency management
-- **Python 3.9+**: IIIF generation and CSV processing
-- **Node.js 18+**: JavaScript bundling (esbuild)
+- **Python 3.12**: IIIF generation and CSV processing
+- **Node.js 22**: JavaScript bundling (esbuild)
- **Git**: Version control
Telar needs Ruby 3.2 or newer, and continuous integration builds with 3.2.11.
@@ -28,7 +26,7 @@ version managers such as rbenv, chruby and asdf pick it up on their own. On an
older Ruby, `bundle install` stops and says which version it expected, rather
than continuing with a different set of gems.
-### Installation Guides
+### Installation Guides {#installation-guides}
**macOS (Homebrew):**
```bash
@@ -48,7 +46,7 @@ gem install bundler
- Install [Node.js](https://nodejs.org/) (LTS version recommended)
- Install [Git for Windows](https://gitforwindows.org/)
-### Optional (Recommended)
+### Optional (Recommended) {#optional-recommended}
- **libvips**: Fast image processing for IIIF tile generation. Telar falls back to pure Python if not installed, but libvips is roughly 28x faster.
@@ -62,26 +60,25 @@ brew install vips
sudo apt-get install libvips-dev
```
-### Optional (Audio Objects Only)
+### Optional (Audio Objects Only) {#optional-audio-objects-only}
-If your site includes audio objects, two additional tools enable clip extraction and waveform peak data generation. Sites without audio objects do not need these tools.
+If your site includes audio objects, audiowaveform prepares waveform peak data; clip boundaries are applied in the browser. Sites without audio objects do not need these tools.
-- **ffmpeg**: Audio clip extraction
- **audiowaveform**: Waveform peak data for the WaveSurfer player
**macOS:**
```bash
-brew install ffmpeg audiowaveform
+brew install audiowaveform
```
**Ubuntu/Debian:**
```bash
-sudo apt install ffmpeg audiowaveform
+sudo apt install audiowaveform
```
-## Project Setup
+## Project Setup {#project-setup}
-### Initial Setup
+### Initial Setup {#initial-setup}
```bash
# Clone repository
@@ -98,7 +95,7 @@ pip install -r requirements.txt
npm install
```
-### Configuration
+### Configuration {#configuration}
Edit `_config.yml` for local development:
@@ -107,9 +104,9 @@ baseurl: "" # Empty for local development
url: "http://localhost:4001"
```
-## Build Commands
+## Build Commands {#build-commands}
-### Quick Start: Build Script (Recommended)
+### Quick Start: Build Script (Recommended) {#quick-start-build-script-recommended}
The easiest way to build and serve your Telar site locally is with the all-in-one build script:
@@ -135,7 +132,7 @@ python3 scripts/build_local_site.py --skip-audio
This script runs all necessary build steps in sequence, mimicking what GitHub Actions does during deployment. It automatically kills any running Jekyll instances before starting.
-### Core Commands (Manual)
+### Core Commands (Manual) {#core-commands-manual}
If you prefer to run individual scripts:
@@ -149,10 +146,10 @@ python3 scripts/csv_to_json.py
# 3. Generate Jekyll collection files
python3 scripts/generate_collections.py
-# 4. Process audio files (if any — requires ffmpeg and audiowaveform)
+# 4. Process audio files (if any — requires audiowaveform)
# Note: basic audio detection works without this step (csv_to_json.py
# generates the audio manifest automatically). This script is only
-# needed for waveform peak data and clip extraction.
+# needed for precomputed waveform peak data.
python3 scripts/process_audio.py
# 5. Generate IIIF tiles
@@ -172,7 +169,7 @@ bundle exec jekyll build
bundle exec jekyll clean
```
-### Command Options
+### Command Options {#command-options}
**Jekyll Serve Options:**
```bash
@@ -201,9 +198,9 @@ python3 scripts/generate_iiif.py --base-url https://mysite.org
python3 scripts/generate_iiif.py --image textile-001.jpg
```
-## Development Workflow
+## Development Workflow {#development-workflow}
-### Daily Workflow
+### Daily Workflow {#daily-workflow}
**Using the build script (recommended):**
@@ -240,7 +237,7 @@ python3 scripts/generate_iiif.py
# Site updates automatically
```
-### Working with Google Sheets Locally
+### Working with Google Sheets Locally {#working-with-google-sheets-locally}
For local development with Google Sheets:
@@ -266,7 +263,7 @@ For local development with Google Sheets:
See [`docs/google_sheets_integration/README.md`](https://github.com/UCSB-AMPLab/telar/blob/main/docs/google_sheets_integration/README.md) in the main Telar repository for details.
-## Directory Structure
+## Directory Structure {#directory-structure}
```
your-telar-site/
@@ -300,14 +297,14 @@ your-telar-site/
│ ├── fetch_google_sheets.py
│ ├── csv_to_json.py
│ ├── generate_collections.py
-│ ├── process_audio.py # Audio clip and peak data
+│ ├── process_audio.py # Audio waveform peak data
│ └── generate_iiif.py
└── _site/ # Built site (don't edit!)
```
-## Troubleshooting
+## Troubleshooting {#troubleshooting}
-### Common Issues
+### Common Issues {#common-issues}
**Jekyll won't start:**
```bash
@@ -351,7 +348,7 @@ ls -la telar-content/texts/stories/
python3 scripts/csv_to_json.py --verbose
```
-### Dependency Issues
+### Dependency Issues {#dependency-issues}
**Bundle install fails:**
```bash
@@ -374,7 +371,7 @@ source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
```
-### Performance Issues
+### Performance Issues {#performance-issues}
**Slow build times:**
```bash
@@ -397,7 +394,7 @@ rm -rf _site/
# Restart Jekyll server
```
-### Embedding Issues
+### Embedding Issues {#embedding-issues}
**Navigation buttons not working in iframe:**
@@ -502,9 +499,9 @@ When changing width/height inputs:
3. Check if preset dropdown is interfering (select "Custom" preset)
4. Verify JavaScript is running without errors
-## Testing
+## Testing {#testing}
-### Local Testing Checklist
+### Local Testing Checklist {#local-testing-checklist}
Before deploying:
@@ -517,7 +514,7 @@ Before deploying:
- [ ] Mobile responsive
- [ ] Cross-browser compatible
-### Browser Testing
+### Browser Testing {#browser-testing}
Test in:
- Chrome/Edge (latest)
@@ -525,7 +522,7 @@ Test in:
- Safari (latest)
- Mobile browsers (iOS Safari, Chrome Mobile)
-### Validation
+### Validation {#validation}
```bash
# Check HTML validity
@@ -535,7 +532,7 @@ bundle exec htmlproofer ./_site --disable-external
bundle exec jekyll doctor
```
-### Automated Tests
+### Automated Tests {#automated-tests}
Telar includes automated tests for Python scripts and JavaScript modules. Running tests is optional for storytellers but recommended for developers contributing to the framework.
@@ -576,9 +573,9 @@ python3 -m pytest tests/e2e/ -v
Tests run automatically on GitHub via the `telar-tests.yml` workflow whenever you push to main or open a pull request.
-## Publishing
+## Publishing {#publishing}
-### Prepare for Publishing
+### Prepare for Publishing {#prepare-for-publishing}
```bash
# 1. Test locally
@@ -598,7 +595,7 @@ git push origin main
# 5. GitHub Actions builds automatically
```
-### Manual Publishing
+### Manual Publishing {#manual-publishing}
If not using GitHub Actions:
@@ -609,7 +606,7 @@ JEKYLL_ENV=production bundle exec jekyll build
# Publish _site/ directory to your host
```
-## Best Practices
+## Best Practices {#best-practices}
1. **Commit frequently**: Small, focused commits
2. **Test locally first**: Always preview before pushing
@@ -619,13 +616,13 @@ JEKYLL_ENV=production bundle exec jekyll build
6. **Version control**: Track all content in git
7. **Clean builds**: Periodic `jekyll clean` helps
-## Getting Help
+## Getting Help {#getting-help}
- [GitHub Issues](https://github.com/UCSB-AMPLab/telar/issues)
- [Jekyll Documentation](https://jekyllrb.com/docs/)
- [IIIF Documentation](https://iiif.io/get-started/)
-## Next Steps
+## Next Steps {#next-steps}
- [GitHub Actions Reference](/docs/developers/github-actions/)
- [Customization Guide](/docs/customization/)
diff --git a/docs/8-6-mobile.md b/content/en/docs/developers/mobile.md
similarity index 87%
rename from docs/8-6-mobile.md
rename to content/en/docs/developers/mobile.md
index c8e29b6..e68e03d 100644
--- a/docs/8-6-mobile.md
+++ b/content/en/docs/developers/mobile.md
@@ -1,18 +1,16 @@
---
-layout: docs
-title: "8.6. Layouts and Small Screens"
-parent: "8. For Developers"
-grand_parent: Documentation
-nav_order: 6
-lang: en
-permalink: /docs/developers/mobile/
+title: Layouts and Small Screens
+url: /docs/developers/mobile/
+translationKey: docs-developers-mobile
+type: guide
+docs_section: developers
---
-# Layouts and Small Screens
+# Layouts and Small Screens {#layouts-and-small-screens}
A story page has two layouts, horizontal and vertical, and chooses between them from the size and shape of the window rather than from the kind of device. This page describes what each layout does and how the rest of the site adapts to small and short windows. The terms it uses are defined in [8.7 Story Engine Vocabulary](/docs/developers/story-engine/).
-## The Two Layouts
+## The Two Layouts {#the-two-layouts}
In the horizontal layout, the text card sits beside the object as a side card, and the reader moves through the story by scrolling. In the vertical layout, the text card sits below the object as a bottom card, and the reader moves with previous and next buttons.
@@ -25,7 +23,7 @@ The page uses the vertical layout when any of these is true of the window:
Otherwise it uses the horizontal layout. The layout follows the window as it is resized.
-### The text card
+### The text card {#the-text-card}
In the horizontal layout, the side card is between 37% and 52% of the window's width, set by the window's height, and white, over the object. In the vertical layout, the bottom card is anchored to the bottom of the window and white, up to 40% of the window's height (35% for a video or audio object).
@@ -33,7 +31,7 @@ On a window 480px tall or shorter, such as a phone on its side, the card returns
The text inside a card also sizes itself to the card: when the card is 480px wide or narrower, and again at 360px, its padding and type get smaller. An answer longer than 15 lines is set at 90% of the card's answer size, so that an answer at the 18-line limit fits the side card without scrolling.
-### Navigation
+### Navigation {#navigation}
How the reader moves is decided once, when the story loads:
@@ -44,38 +42,38 @@ Because the choice is made at load, a window opened wide and then narrowed keeps
In the vertical layout, the back button becomes a 44px round icon, the step counter moves to the center of the top edge, and the credits badge shrinks to one line.
-### Loading
+### Loading {#loading}
Both layouts load objects the same way: the viewers for the next `preload_steps` steps (6 by default) and the previous 2, up to `max_viewer_cards`. See [3.2 Configuration](/docs/configure/configuration/). When a story has `loading_threshold` or more distinct objects (5 by default), a shimmer shows while the first viewers load; in button navigation it also shows when the reader reaches an object that is not ready yet.
-## Compact Type Size
+## Compact Type Size {#compact-type-size}
On any window 600px tall or shorter, whatever its width, Telar uses a compact type size: smaller type and tighter spacing in page content, the objects gallery, the navigation bar, the panels and their titles, and the story's navigation buttons, which become 45px.
-## iOS Safari and Notches
+## iOS Safari and Notches {#ios-safari-and-notches}
- **Stable heights:** layout heights use dynamic viewport units (`dvh`) with a `vh` fallback, so the layout does not jump when Safari's address bar appears or disappears.
- **Notch safe areas:** the credits badge, the navigation buttons, the bottom card and the panels keep clear of the device notch and home indicator.
- **Hover:** hover styles apply only on devices with a fine pointer (`@media (hover: hover) and (pointer: fine)`), so they do not stick after a tap on a touchscreen.
- **Reduced motion:** when the operating system asks for reduced motion, smooth scrolling is off, the camera moves to each framing at once, and card and panel transitions are off.
-## Panels
+## Panels {#panels}
Panels slide in from the right in both layouts. In the horizontal layout, layer 1 takes 65% of the window (at most 800px), layer 2 55% (at most 750px) and the glossary 50% (at most 700px); on windows between 1025px and 1200px wide they take 80%, 75% and 70%. In the vertical layout they take nearly the whole width (98%, 96% and 94%) and 76% of the height, show only the close button, and use less padding.
Panel type gets smaller only in the compact type size: titles go from 2rem to 1.4rem, body text from 1.05rem to 0.9rem, and line height from 1.8 to 1.35.
-## Objects Gallery
+## Objects Gallery {#objects-gallery}
The gallery fills the width with columns at least 250px wide. In the vertical layout it shows two columns, and on windows 441px wide or narrower, one.
-## Glossary Index
+## Glossary Index {#glossary-index}
In the vertical layout, the glossary index tightens its spacing: letter headings get smaller and their margins shrink by a third, and the space between terms is halved.
-## Testing Your Site on Small Screens
+## Testing Your Site on Small Screens {#testing-your-site-on-small-screens}
-### Browser DevTools
+### Browser DevTools {#browser-devtools}
Use your browser's developer tools to try different window sizes:
@@ -92,14 +90,14 @@ Use your browser's developer tools to try different window sizes:
Resize the window across the layout thresholds: 1024px wide, a 3:4 aspect ratio, and 480px and 600px tall. Reload after a resize to see the navigation a reader with that window would get.
-### Real Devices
+### Real Devices {#real-devices}
Test on real devices when you can:
- **iOS**: Safari on iPhone and iPad
- **Android**: Chrome on a phone and a tablet
-### Common Screen Sizes
+### Common Screen Sizes {#common-screen-sizes}
- **iPhone SE**: 375 × 667px
- **iPhone 12/13/14**: 390 × 844px
@@ -108,27 +106,27 @@ Test on real devices when you can:
- **Samsung Galaxy S**: 360 × 740px
- **Samsung Galaxy Note**: 412 × 915px
-## Content on Small Screens
+## Content on Small Screens {#content-on-small-screens}
-### Images
+### Images {#images}
- Make sure IIIF images have enough detail when zoomed.
- Check that the features a step points to are visible on a small screen.
- Check how your framings look in both layouts.
-### Text
+### Text {#text}
- Keep answer paragraphs short (3 to 5 sentences).
- Use lists to break up long passages.
- Put essential information in layer 1 and supplementary detail in layer 2, since readers on phones may not open every layer.
-### Widgets
+### Widgets {#widgets}
- **Carousels:** 3 to 5 images, with short captions.
- **Tabs:** 2 or 3 tabs with short labels; on narrow screens the tab row scrolls sideways.
- **Accordions:** work well on small screens; use clear titles.
-## Performance
+## Performance {#performance}
Readers on phones often have slow or metered connections:
@@ -136,32 +134,32 @@ Readers on phones often have slow or metered connections:
- Choose external IIIF sources with fast servers, and test how quickly their manifests load.
- Keep images in panels to the ones the text needs.
-## Accessibility
+## Accessibility {#accessibility}
- Most controls are at least 44 × 44px, the WCAG 2.1 minimum touch target; the story's navigation buttons are 66px, or 45px in the compact type size.
- Navigation buttons and other controls carry ARIA labels.
-## Troubleshooting
+## Troubleshooting {#troubleshooting}
-### Content overflowing
+### Content overflowing {#content-overflowing}
- Check custom CSS for fixed-width elements.
- Make sure images have `max-width: 100%`.
- Try the page in your browser's responsive mode.
-### Navigation not working
+### Navigation not working {#navigation-not-working}
- Clear the browser cache, or try a private window.
- Check the JavaScript console for errors.
- Check that custom code does not block touch or wheel events.
-### Slow performance
+### Slow performance {#slow-performance}
- Reduce image file sizes.
- Check how quickly IIIF manifests respond.
- Test on a throttled connection in DevTools.
-## Testing Checklist
+## Testing Checklist {#testing-checklist}
- [ ] The home page loads and displays correctly
- [ ] The objects gallery shows two columns in the vertical layout, and one on a narrow phone
diff --git a/docs/8-7-story-engine.md b/content/en/docs/developers/story-engine.md
similarity index 93%
rename from docs/8-7-story-engine.md
rename to content/en/docs/developers/story-engine.md
index 4f1b7db..29150ac 100644
--- a/docs/8-7-story-engine.md
+++ b/content/en/docs/developers/story-engine.md
@@ -1,20 +1,18 @@
---
-layout: docs
-title: "8.7. Story Engine Vocabulary"
-parent: "8. For Developers"
-grand_parent: Documentation
-nav_order: 7
-lang: en
-permalink: /docs/developers/story-engine/
+title: Story Engine Vocabulary
+url: /docs/developers/story-engine/
+translationKey: docs-developers-story-engine
+type: guide
+docs_section: developers
---
-# Story Engine Vocabulary
+# Story Engine Vocabulary {#story-engine-vocabulary}
The story engine is the code that runs a story page: it lays out the cards and the object, moves between steps, and decides what to keep loaded. Its code lives in `assets/js/telar-story/` and is built into `assets/js/telar-story.js`. This page defines the terms the code, its comments and these docs use for the parts of a story and the ways it moves, so that each term names one thing.
CSS classes, `data-*` attributes and the `max_viewer_cards` setting keep their older names, because sites and the Compositor read them. Where an older name differs from a term on this page, the entry says so.
-## The Parts of a Story
+## The Parts of a Story {#the-parts-of-a-story}
A story is built from these parts:
@@ -27,7 +25,7 @@ A story is built from these parts:
- **Viewer**: the image viewer (OpenSeadragon) on an image plate.
- **Player**: the video or audio player on a media plate.
-## Moving Between Steps
+## Moving Between Steps {#moving-between-steps}
These terms describe what happens when the reader goes from one step to the next:
@@ -43,7 +41,7 @@ These terms describe what happens when the reader goes from one step to the next
Developers can tune the move duration for testing with `?nav=base,perUnit,maxSeconds` in the page URL. `?nav=1.2,0` gives every move the base duration, whatever the camera travels.
-## Layouts
+## Layouts {#layouts}
A story page uses one of two layouts.
@@ -68,7 +66,7 @@ The terms for the cards and the space around them:
- **Button navigation**: previous and next buttons move the story one step at a time. It runs in the vertical layout, in embedded stories, and on iOS in either layout. Its buttons keep the class `.mobile-nav`.
- **Scroll navigation**: the reader's scroll moves the story. It runs in the horizontal layout everywhere but iOS.
-## What Stays Loaded
+## What Stays Loaded {#what-stays-loaded}
The engine keeps a capped number of objects loaded, so a long story does not hold every image and player in memory:
@@ -77,6 +75,6 @@ The engine keeps a capped number of objects loaded, so a long story does not hol
These are the only uses of "pool" in the engine.
-## Stacking
+## Stacking {#stacking}
Each scene's cards and plate use their own block of `z-index` values, its **z-range**, so a later scene covers an earlier one as a unit.
diff --git a/docs/8-5-styling.md b/content/en/docs/developers/styling.md
similarity index 84%
rename from docs/8-5-styling.md
rename to content/en/docs/developers/styling.md
index adb874d..ab11441 100644
--- a/docs/8-5-styling.md
+++ b/content/en/docs/developers/styling.md
@@ -1,20 +1,18 @@
---
-layout: docs
-title: "8.5. Advanced Styling"
-parent: "8. For Developers"
-grand_parent: Documentation
-nav_order: 5
-lang: en
-permalink: /docs/developers/styling/
+title: Advanced Styling
+url: /docs/developers/styling/
+translationKey: docs-developers-styling
+type: guide
+docs_section: developers
---
-# Advanced Styling
+# Advanced Styling {#advanced-styling}
Go beyond themes with custom CSS, layout modifications, and component styling.
-## Custom CSS
+## Custom CSS {#custom-css}
-### Method 1: Add to telar.scss
+### Method 1: Add to telar.scss {#method-1-add-to-telarscss}
Edit `assets/css/telar.scss` to add custom styles:
@@ -35,7 +33,7 @@ Edit `assets/css/telar.scss` to add custom styles:
}
```
-### Method 2: Create Custom Stylesheet
+### Method 2: Create Custom Stylesheet {#method-2-create-custom-stylesheet}
Create `assets/css/custom.css`:
@@ -54,10 +52,10 @@ Create `assets/css/custom.css`:
Then include it in your `_layouts/default.html`:
```html
-
+
```
-## CSS Variables
+## CSS Variables {#css-variables}
Telar uses CSS custom properties that you can override:
@@ -86,9 +84,9 @@ Telar uses CSS custom properties that you can override:
Override these in your custom CSS to make global changes.
-## Layout Customization
+## Layout Customization {#layout-customization}
-### Modify Layouts
+### Modify Layouts {#modify-layouts}
Edit files in `_layouts/` directory:
@@ -98,7 +96,7 @@ Edit files in `_layouts/` directory:
- `glossary.html`: Glossary term page
- `home.html`: Homepage layout
-### Modify Includes
+### Modify Includes {#modify-includes}
Edit reusable components in `_includes/`:
@@ -107,9 +105,9 @@ Edit reusable components in `_includes/`:
- `story-step.html`: Individual story step
- `object-card.html`: Object grid card
-## Component Styling
+## Component Styling {#component-styling}
-### Story Steps
+### Story Steps {#story-steps}
```scss
.story-step {
@@ -128,7 +126,7 @@ Edit reusable components in `_includes/`:
}
```
-### Layered Panels
+### Layered Panels {#layered-panels}
```scss
.layer-panel {
@@ -144,7 +142,7 @@ Edit reusable components in `_includes/`:
}
```
-### Object Cards
+### Object Cards {#object-cards}
```scss
.object-card {
@@ -163,7 +161,7 @@ Edit reusable components in `_includes/`:
}
```
-## Responsive Design
+## Responsive Design {#responsive-design}
Telar's story layout switches to its vertical layout when the viewport is narrower than 1024px or has an aspect ratio narrower than 3:4 (see [Mobile Optimization](/docs/developers/mobile/) for details). When you add responsive rules to your own components, match those breakpoints so your styles change in step with the layout:
@@ -185,7 +183,7 @@ Telar's story layout switches to its vertical layout when the viewport is narrow
}
```
-## Cascade Layers
+## Cascade Layers {#cascade-layers}
As of v1.4.0, Telar's styles are organized into CSS cascade layers, declared in this order:
@@ -197,9 +195,9 @@ Bootstrap loads into the `third-party` layer and Telar's own styles load into th
This also helps your own customizations: **unlayered CSS always wins over layered CSS**, regardless of selector specificity. Any plain CSS rule you add outside of these layers takes precedence over Telar's styles, so you can usually override appearance without reaching for `!important`. If a custom rule unexpectedly fails to apply, check that it isn't being pulled into one of Telar's layers.
-## JavaScript Customization
+## JavaScript Customization {#javascript-customization}
-### Modify Story Behavior
+### Modify Story Behavior {#modify-story-behavior}
The story engine's source lives in `assets/js/telar-story/` (one module per concern — scroll engine, navigation, card pool, panels) and is bundled into `assets/js/telar-story.js`, which is the file pages actually load. To change story behavior, edit the modules and rebuild the bundle:
@@ -209,7 +207,7 @@ npm run build:js
Never edit `assets/js/telar-story.js` directly — it is generated, and the next rebuild overwrites it. The directory map in `assets/js/README.md` describes what each module does and where to make which kind of change.
-### Add Custom Interactions
+### Add Custom Interactions {#add-custom-interactions}
Create `assets/js/custom.js`:
@@ -239,9 +237,9 @@ document.addEventListener('DOMContentLoaded', function() {
});
```
-## Typography Customization
+## Typography Customization {#typography-customization}
-### Heading Styles
+### Heading Styles {#heading-styles}
```scss
h1, h2, h3, h4, h5, h6 {
@@ -257,7 +255,7 @@ h2 { font-size: 2rem; }
h3 { font-size: 1.75rem; }
```
-### Body Text
+### Body Text {#body-text}
```scss
body {
@@ -272,7 +270,7 @@ p {
}
```
-## Animation
+## Animation {#animation}
Add subtle animations:
@@ -304,7 +302,7 @@ Add subtle animations:
}
```
-## Best Practices
+## Best Practices {#best-practices}
1. **Use CSS variables** for values that repeat
2. **Test responsive** on multiple screen sizes
@@ -313,7 +311,7 @@ Add subtle animations:
5. **Comment your code** for future reference
6. **Test in multiple browsers** (Chrome, Firefox, Safari)
-## Performance Optimization
+## Performance Optimization {#performance-optimization}
```scss
// Use will-change for animations
@@ -332,7 +330,7 @@ Add subtle animations:
}
```
-## Next Steps
+## Next Steps {#next-steps}
- [Learn about Themes](/docs/customization/themes/)
- [View Example Sites](https://ampl.clair.ucsb.edu/telar)
diff --git a/content/en/docs/getting-started/_index.md b/content/en/docs/getting-started/_index.md
new file mode 100644
index 0000000..2b2fb12
--- /dev/null
+++ b/content/en/docs/getting-started/_index.md
@@ -0,0 +1,14 @@
+---
+title: Get started
+url: /docs/getting-started/
+translationKey: docs-getting-started
+type: guide
+docs_hub: true
+docs_section: guides
+---
+
+
+
+
+
+Start with a question and your sources, then choose the authoring method that suits your work.
{{< build-options >}} diff --git a/content/en/docs/getting-started/add-content.md b/content/en/docs/getting-started/add-content.md new file mode 100644 index 0000000..485c2ae --- /dev/null +++ b/content/en/docs/getting-started/add-content.md @@ -0,0 +1,71 @@ +--- +title: Add an object and a first story +url: /docs/getting-started/add-content/ +translationKey: docs-getting-started-add-content +type: guide +docs_section: sheets +--- + +# Add an object and a first story {#add-an-object-and-a-first-story} + +Start with one object and a short sequence. Once the full route works, extend it with more sources and optional layers. + + + + +## Add the source {#add-the-source} + +In the **objects** tab, add an ID, title, source address and useful metadata. For an external IIIF source, put the manifest URL in `source_url`. + +Use this example if you need a source for practice: + +```text +https://juancobo.com/138la/iiif/khipu/p7/manifest.json +``` + +Choose the ID `khipu` and a title such as “Haptic khipu”. Add a description of the visible activity and retain the source's catalogue information and credit. + +For a file you host yourself, upload it to `telar-content/objects/` in your repository, use its filename as the object ID and leave `source_url` blank. Read [self-hosted images](/docs/your-content/self-hosted-images/) for supported formats and processing. + + + + +## Register the story {#register-the-story} + +In **project**, add a story row with an order, stable story ID and title. For example: + +| order | story_id | title | +|---|---|---| +| 1 | khipu-story | Examining a khipu | + +Create or rename the story tab to `khipu-story`. The ID and tab name must match. Keep the template's column headers. + +## Add the first step {#add-the-first-step} + +Fill one row: + +| Column | Example | +|---|---| +| `step` | `1` | +| `object` | `khipu` | +| `x`, `y`, `zoom` | `0.5`, `0.5`, `1` | +| `question` | Which activity does this image document? | +| `answer` | Sampling a khipu for radiocarbon dating in spring 2025. | +| `alt_text` | Gloved hands working with knotted cords on a white surface. | + +Add another numbered row for the next observation. You can use the same object with a different framing. For multi-page objects, the optional `page` column chooses the page first. + +For recordings, use `clip_start` and `clip_end` in seconds and `loop` where needed. Read [video](/docs/your-content/video-objects/) and [audio](/docs/your-content/audio-objects/) before using a provider with different playback behaviour. + +## Add optional depth {#add-optional-depth} + +Write additional context in `layer1_content`. Give the opening button a useful name in `layer1_button`. A second panel uses `layer2_content` and opens from the first. + +For longer texts, use a Markdown file reference. Add glossary terms in the **glossary** tab and insert `[[term-id]]` links in supported text fields. + + +## Build the first edition {#build-the-first-edition} + +Save the sheet changes. In your repository, open **Actions**, select **Build and Deploy**, then **Run workflow**. The build fetches the published sheet. + +Wait for that run to complete, then open the site. Next, [capture the framing and review the result](/docs/getting-started/review-refine/). diff --git a/docs/1-1-compositor.md b/content/en/docs/getting-started/compositor.md similarity index 60% rename from docs/1-1-compositor.md rename to content/en/docs/getting-started/compositor.md index 644866a..5c1e078 100644 --- a/docs/1-1-compositor.md +++ b/content/en/docs/getting-started/compositor.md @@ -1,38 +1,41 @@ --- -layout: docs -title: "1.1. Option A: Use the Compositor" -parent: 1. Getting Started -grand_parent: Documentation -nav_order: 1 -lang: en -permalink: /docs/getting-started/compositor/ +title: Use the Compositor +url: /docs/getting-started/compositor/ +translationKey: docs-getting-started-compositor +type: guide +docs_section: compositor --- -# Use the Compositor +# Use the Compositor {#use-the-compositor} The Telar Compositor is a visual tool for building exhibitions. You can add objects, write stories, arrange steps, and preview your site — all in your browser, with no coding required. When you're ready, the Compositor publishes a complete Telar site to GitHub Pages. -## What you'll need +## What you'll need {#what-youll-need} - A [GitHub account](https://github.com/join) (free) - Images, videos, or audio files for your exhibition -## Get started +## Get started {#get-started} Go to [compositor.telar.org](https://compositor.telar.org) and sign in with your GitHub account. The Compositor will ask you to install the Telar Compositor GitHub App — this gives it permission to create and manage repositories on your behalf. Once signed in, you have two options: -### Create a new site +### Create a new site {#create-a-new-site} -Click **Create new site**, type a name for your repository — **use lowercase letters and hyphens** (e.g., `my-exhibition`) — and the Compositor will set everything up for you: it creates the repository from the Telar template, configures GitHub Pages, and gets your site ready to edit. +Open the project menu and choose **Add or create a repo**, then **A Telar site**. Enter a repository name, a visible title, a language and a theme. Use a short repository name with lowercase letters and hyphens, such as `my-exhibition`. -{: .warning } -> **Your repository will be public.** GitHub Pages requires a public repository unless you have a paid GitHub plan. +Choose **Create site** when those details are ready. The Compositor creates the repository from the Telar template and prepares the site for editing. -### Connect an existing repository +{{< callout "warning" >}} +**Your repository will be public.** GitHub Pages requires a public repository unless you have a paid GitHub plan. +{{< /callout >}} + +{{< media id="create-site" >}} + +### Connect an existing repository {#connect-an-existing-repository} If you already created a repository from the [Telar template](https://github.com/UCSB-AMPLab/telar) or have an existing Telar site, select it from the list and the Compositor will import your content. @@ -62,7 +65,7 @@ Once that's done, return to [compositor.telar.org](https://compositor.telar.org) -## What the Compositor can do +## What the Compositor can do {#what-the-compositor-can-do} - **Edit stories visually** — add steps, write text, set image coordinates, and preview your narrative in real time - **Upload images** — drag and drop images directly; IIIF tiles are generated automatically @@ -71,9 +74,13 @@ Once that's done, return to [compositor.telar.org](https://compositor.telar.org) For the full guide, see [The Compositor](/docs/the-compositor/). -## Next steps +{{< media id="editor-overview" >}} + +## Next steps {#next-steps} -Once your site is live, continue with the tutorial to learn more about Telar's narrative model and how to refine your exhibition: +Continue with the visual authoring workflow: -- **[Plan Your Narrative](/docs/getting-started/narrative-structure/)** — Understand how stories, steps, and panels fit together -- **[Review and Refine](/docs/getting-started/review-refine/)** — Set image coordinates, review your site, and polish +- [Objects](/docs/the-compositor/objects/) — Add sources and review their metadata. +- [Use an IIIF object in a story](/docs/the-compositor/iiif-to-story/) — Follow the illustrated khipu example. +- [Story Editor](/docs/the-compositor/story-editor/) — Write steps, capture views and develop panels. +- [Publishing](/docs/the-compositor/publishing/) — Review changes and check the built site. diff --git a/docs/1-2-google-sheets-option.md b/content/en/docs/getting-started/google-sheets.md similarity index 91% rename from docs/1-2-google-sheets-option.md rename to content/en/docs/getting-started/google-sheets.md index 77b494f..4774507 100644 --- a/docs/1-2-google-sheets-option.md +++ b/content/en/docs/getting-started/google-sheets.md @@ -1,20 +1,14 @@ --- -layout: docs -title: "1.2. Option B: Set Up with Google Sheets" -parent: 1. Getting Started -grand_parent: Documentation -nav_order: 2 -lang: en -permalink: /docs/getting-started/google-sheets/ +title: Set Up with Google Sheets +url: /docs/getting-started/google-sheets/ +translationKey: docs-getting-started-google-sheets +type: guide extra_css: - - config-tools -tutorial_next: - title: "Plan Your Narrative" - url: /docs/getting-started/narrative-structure/ -tutorial_hide_top: true +- config-tools +docs_section: sheets --- -# Set Up with Google Sheets +# Set Up with Google Sheets {#set-up-with-google-sheets} This guide walks you through setting up a Telar exhibition using Google Sheets to manage your content. Interactive tools on this page generate your configuration file automatically. @@ -24,12 +18,13 @@ You will need: - A [GitHub account](https://github.com/join) (free) - A [Google account](https://accounts.google.com/) for Google Sheets (free) -{: .tip } -> **Already familiar with GitHub Pages and YAML?** You can configure everything manually with the [Manual Setup guide](/docs/setup/manual/). +{{< callout "tip" >}} +**Already familiar with GitHub Pages and YAML?** You can configure everything manually with the [Manual Setup guide](/docs/setup/manual/). +{{< /callout >}} The setup might feel like a lot of steps, but you only have to do it once. After that, everything happens in your Google Sheets spreadsheet. -## Create Your Repository +## Create Your Repository {#create-your-repository} A repository is your project's home on GitHub — it holds your configuration and image files. @@ -42,8 +37,9 @@ A repository is your project's home on GitHub — it holds your configuration an  -{: .warning } -> **Keep your repository public.** Private repositories will not work with GitHub Pages unless you have a paid GitHub plan. +{{< callout "warning" >}} +**Keep your repository public.** Private repositories will not work with GitHub Pages unless you have a paid GitHub plan. +{{< /callout >}} Enter your GitHub details below. These are used to build your site's web address and to generate your configuration file at the end. @@ -73,7 +69,7 @@ Enter your GitHub details below. These are used to build your site's web address -## Enable GitHub Pages +## Enable GitHub Pages {#enable-github-pages} GitHub Pages turns your repository into a live website for free. @@ -83,7 +79,7 @@ GitHub Pages turns your repository into a live website for free.  -## Duplicate the Google Sheets Template +## Duplicate the Google Sheets Template {#duplicate-the-google-sheets-template} Your Google Sheets spreadsheet is where you manage all your content — objects, stories, and text. @@ -91,7 +87,7 @@ Your Google Sheets spreadsheet is where you manage all your content — objects, 2. Click **File** → **Make a copy** 3. Save to your Google Drive with a name you will remember (e.g., "My Telar Exhibition") -## Publish Your Sheet +## Publish Your Sheet {#publish-your-sheet} Your spreadsheet needs to be published so Telar can read your content during builds. @@ -112,7 +108,7 @@ Your spreadsheet needs to be published so Telar can read your content during bui -## Generate Your Configuration +## Generate Your Configuration {#generate-your-configuration} Fill in the remaining details and this page will create your configuration file. @@ -188,7 +184,7 @@ Once generated: 2. Select all the existing content and replace it with what you copied or downloaded 3. Click **Commit changes** to save -## Verify Your Setup +## Verify Your Setup {#verify-your-setup} After committing, GitHub Actions will automatically build and publish your site. This takes 2–5 minutes. @@ -198,14 +194,15 @@ After committing, GitHub Actions will automatically build and publish your site.  -{: .warning } -> **Build problems?** Check that your Google Sheets published URL is correct — it should come from File → Share → Publish to web. If your site does not appear at all, check the Actions tab for error details. You can also paste your `_config.yml` into the [Telar Config Validator](/docs/configure/config-validator/) to check for errors. +{{< callout "warning" >}} +**Build problems?** Check that your Google Sheets published URL is correct — it should come from File → Share → Publish to web. If your site does not appear at all, check the Actions tab for error details. You can also paste your `_config.yml` into the [Telar Config Validator](/docs/configure/config-validator/) to check for errors. +{{< /callout >}} --- -## Next Steps +## Next Steps {#next-steps} -Your Telar site is up and running. Follow this tutorial to learn how Telar stories work and add your own content, or jump ahead to any section: +The connection is ready. Continue with [the spreadsheet model](/docs/your-data/google-sheets/), then add an object and your first story. Use [the planning guide](/docs/plan/) if you have not yet drafted the narrative. - **[Plan Your Narrative](/docs/getting-started/narrative-structure/)** — Understand how stories, steps, and panels fit together - **[Add Your Content](/docs/getting-started/add-content/)** — Upload images, fill in your spreadsheet, and create your first story @@ -522,8 +519,8 @@ show_drafts: false # Telar Settings (version information) telar: - version: "{{ site.telar_version }}" - release_date: "{{ site.telar_release_date }}" + version: "{{< site-value "telar_version" >}}" + release_date: "{{< site-value "telar_release_date" >}}" # Plugins plugins: diff --git a/content/en/docs/getting-started/how-telar-works.md b/content/en/docs/getting-started/how-telar-works.md new file mode 100644 index 0000000..6a3cf09 --- /dev/null +++ b/content/en/docs/getting-started/how-telar-works.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /docs/getting-started/how-telar-works/ +translationKey: redirects-en-gs-how-telar-works-md +type: redirect +docs_section: reference +redirect_to: /docs/getting-started/narrative-structure/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/content/en/docs/getting-started/local-dev.md b/content/en/docs/getting-started/local-dev.md new file mode 100644 index 0000000..24dbe91 --- /dev/null +++ b/content/en/docs/getting-started/local-dev.md @@ -0,0 +1,112 @@ +--- +title: Install and run Telar locally +url: /docs/getting-started/local-dev/ +translationKey: docs-getting-started-local-dev +type: guide +docs_section: local +--- + +# Install and run Telar locally {#install-and-run-telar-locally} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Build an exhibition from CSV and Markdown files on your computer. This route gives you control of the source files, build process and hosting. You can also preview a site whose content comes from Google Sheets. + +## Prerequisites {#prerequisites} + +The current Telar build uses Ruby 3.2, Python 3.12 and Node.js 22. Use Ruby 3.2 or newer within the 3.x series and Bundler. The template's dependency files are the authority for the version you are building. + +Check the programs in the terminal: + +```bash +ruby -v +bundle -v +python3 --version +node --version +npm --version +git --version +``` + +Install missing programs with the package manager or version manager you use on your operating system. On macOS, the system Ruby may be too old; check the version rather than assuming the preinstalled program is suitable. + +## Get your own source copy {#get-your-own-source-copy} + +Create a repository from the [Telar template](https://github.com/UCSB-AMPLab/telar), then clone your repository. Replace the example address with your own: + +```bash +git clone https://github.com/YOUR-ACCOUNT/YOUR-REPOSITORY.git +cd YOUR-REPOSITORY +``` + +You can also download a source archive if you do not plan to use Git. Keep a separate backup of your editable files. + + +## Install dependencies {#install-dependencies} + +Use a Python virtual environment so the project's packages remain separate from other Python work: + +```bash +python3 -m venv .venv +source .venv/bin/activate +python3 -m pip install -r requirements.txt +bundle install +npm ci +``` + +On Windows, activate with `.venv\Scripts\Activate.ps1` in PowerShell. Reopen and activate the same environment when returning to the project. If dependency installation fails, check the program versions before changing the lockfiles. + + +For audio objects, install the system tool audiowaveform to prepare waveform data. Clip boundaries are applied in the browser; the audio-processing script does not extract separate clip files. + +## Configure the site {#configure-the-site} + +Edit the author-facing section of `_config.yml`: title, description, author, language and theme. If editing CSV files directly, set: + +```yaml +google_sheets: + enabled: false +``` + +Keep the template's build settings below the author-facing section. For a site served at a domain root, `baseurl` is empty; for a project site it is the repository path. + + + +## Build the first preview {#build-the-first-preview} + +From the repository root, with the environment active: + +```bash +python3 scripts/build_local_site.py +``` + +The helper processes content, audio and IIIF tiles, bundles JavaScript and starts Jekyll on port 4001. Open the address with the configured base path, for example `http://127.0.0.1:4001/my-exhibition/`. + +Stop the server with Ctrl+C. Use `--port 4003` if another site already uses 4001. + +**Check your work:** the homepage and a sample object should load. Next, [edit the content files](/docs/local-authoring/content/). diff --git a/content/en/docs/getting-started/narrative-structure.md b/content/en/docs/getting-started/narrative-structure.md new file mode 100644 index 0000000..62381e4 --- /dev/null +++ b/content/en/docs/getting-started/narrative-structure.md @@ -0,0 +1,53 @@ +--- +title: Sketch the narrative arc +url: /docs/getting-started/narrative-structure/ +translationKey: docs-getting-started-narrative-structure +type: guide +docs_draft: true +docs_section: planning +--- + +# Sketch the narrative arc {#sketch-the-narrative-arc} + + + + + + + + + +A story leads visitors from an opening to an ending through a sequence of close looks. Its steps should develop the guiding question in your exhibition brief. + +## Give the opening a job {#give-the-opening-a-job} + +Introduce the source, the question and the context visitors need to begin. Offer a first view that helps them orient themselves. Save details that matter later for the steps where they become useful. + +The opening square in the [narrative planner](/assets/templates/telar-worksheet.pdf) marks this introduction. It is not an extra question to squeeze into the first step. + +## Build a string of questions {#build-a-string-of-questions} + +Write one question or observation for each circle. Move from something visitors can recognise towards the relationships or interpretation you want them to understand. + +For a painting, a possible sequence is: What do we see? Which details identify the place? Why were those details included? What does their arrangement suggest? These are prompts to investigate, not claims the image proves by itself. + +Put a source or source detail beside each question. If you cannot show the evidence for an answer, revise the answer, add a source or acknowledge the uncertainty. + +{{< story-arc >}} + +## Write an ending that follows from the steps {#write-an-ending-that-follows-from-the-steps} + +The upward triangle marks the ending. Return to the guiding question and draw together what the visitor has examined. Do not introduce the source on which the whole interpretation depends only at the end. + +Ask whether the ending would make sense to someone who read only the main route. Optional panels can enrich the argument, but the central thread should remain understandable without them. + +## Try the sequence aloud {#try-the-sequence-aloud} + +Read just the questions and short answers in order. Then ask a colleague to do the same while looking at the proposed views. + +- Remove repeated explanations. +- Divide a step that asks visitors to make two unrelated observations. +- Add a transition where a change of source, place or time is hard to follow. +- Move specialist context into a panel when it interrupts the main route. + +**Your result:** an opening, a numbered sequence of questions with sources, and a provisional ending. Next, [choose the framing for each step](/docs/plan/sources-and-framing/). diff --git a/content/en/docs/getting-started/quick-start.md b/content/en/docs/getting-started/quick-start.md new file mode 100644 index 0000000..6f8e8bc --- /dev/null +++ b/content/en/docs/getting-started/quick-start.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /docs/getting-started/quick-start/ +translationKey: redirects-en-gs-quick-start-md +type: redirect +docs_section: reference +redirect_to: /docs/getting-started/google-sheets/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/content/en/docs/getting-started/review-refine.md b/content/en/docs/getting-started/review-refine.md new file mode 100644 index 0000000..71aafa5 --- /dev/null +++ b/content/en/docs/getting-started/review-refine.md @@ -0,0 +1,58 @@ +--- +title: Frame, review and publish from Sheets +url: /docs/getting-started/review-refine/ +translationKey: docs-getting-started-review-refine +type: guide +docs_section: sheets +--- + +# Frame, review and publish from Sheets {#frame-review-and-publish-from-sheets} + + + + + + + +Use the first build to choose precise views and test the narrative. Keep the sheet as your source while you revise. + + +## Set each image's framing {#set-each-images-framing} + +1. Open the intended object's page on the built site. +2. Choose **Identify coordinates**. +3. Select the document page if it has more than one. +4. Pan and zoom to the detail for your step. +5. Copy the X, Y and Zoom values into that step's row. +6. Rebuild and revisit the step. + +For the khipu example, frame the khipu image itself. Do not substitute a view from another object just because its coordinate tool is already open. + +{{< media id="coordinates" >}} + + +## Check the main story and optional routes {#check-the-main-story-and-optional-routes} + +Read the questions and short answers in sequence. Verify that the source and view support each observation. + +Open every first and second panel, follow glossary links and return to the story. Check the ending, the homepage story order and the menu. Test a narrow window and keyboard navigation. + +Use [the reader-testing guide](/docs/plan/review/) for a structured review with another person. + +## Publish a sheet revision {#publish-a-sheet-revision} + +A sheet edit does not trigger the repository workflow by itself. Run **Build and Deploy** from **Actions** when you want to publish the latest sheet content. + +Open the run's log if it fails. Confirm the published spreadsheet address and that the required tabs remain published. If the site loads but a source does not, check the object ID and source URL rather than changing unrelated configuration. + +## Handle private or unfinished work {#handle-private-or-unfinished-work} + +A private story uses the `private` project column and a `story_key` in the configuration. Read [private stories](/docs/site-features/private-stories/) before using it. A key does not make externally hosted images private. + +Keep unfinished work out of the published story list until it is ready. The Compositor's draft flag is an editor workflow; do not assume that marking a row private removes it from publication. + +## Complete the exhibition {#complete-the-exhibition} + +Edit the homepage introduction and supporting pages, review credits and disable demo content when the examples no longer belong. Rebuild and inspect the public result once more. + +Keep the spreadsheet, repository and public-site addresses together. Record which one is the editing source so collaborators know where to make the next change. diff --git a/content/en/docs/google-sheets.md b/content/en/docs/google-sheets.md new file mode 100644 index 0000000..95ab869 --- /dev/null +++ b/content/en/docs/google-sheets.md @@ -0,0 +1,9 @@ +--- +title: Google Sheets manual +url: /docs/google-sheets/ +translationKey: docs-google-sheets +type: guide +docs_section: sheets +--- + +{{< section-overview >}} diff --git a/content/en/docs/iiif-integration.md b/content/en/docs/iiif-integration.md new file mode 100644 index 0000000..09216b4 --- /dev/null +++ b/content/en/docs/iiif-integration.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /docs/iiif-integration/ +translationKey: redirects-en-iiif-integration-md +type: redirect +docs_section: reference +redirect_to: /docs/your-content/self-hosted-images/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/content/en/docs/iiif/_index.md b/content/en/docs/iiif/_index.md new file mode 100644 index 0000000..c26b95b --- /dev/null +++ b/content/en/docs/iiif/_index.md @@ -0,0 +1,5 @@ +--- +build: + list: never + render: never +--- diff --git a/content/en/docs/iiif/demo-content.md b/content/en/docs/iiif/demo-content.md new file mode 100644 index 0000000..dc23277 --- /dev/null +++ b/content/en/docs/iiif/demo-content.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /docs/iiif/demo-content/ +translationKey: redirects-en-iiif-demo-content-md +type: redirect +docs_section: reference +redirect_to: /docs/customization/demo-content/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/content/en/docs/local-authoring/_index.md b/content/en/docs/local-authoring/_index.md new file mode 100644 index 0000000..db3d1a0 --- /dev/null +++ b/content/en/docs/local-authoring/_index.md @@ -0,0 +1,9 @@ +--- +title: Local authoring & builds +url: /docs/local-authoring/ +translationKey: docs-local-authoring +type: guide +docs_section: local +--- + +{{< section-overview >}} diff --git a/content/en/docs/local-authoring/content.md b/content/en/docs/local-authoring/content.md new file mode 100644 index 0000000..b03d8cf --- /dev/null +++ b/content/en/docs/local-authoring/content.md @@ -0,0 +1,64 @@ +--- +title: Edit objects, stories and text files +url: /docs/local-authoring/content/ +translationKey: docs-local-authoring-content +type: guide +docs_draft: true +docs_section: local +--- + +# Edit objects, stories and text files {#edit-objects-stories-and-text-files} + +The editable content lives in `telar-content/`. Generated JSON, collections and the built `_site/` directory are outputs; changes made only there disappear at the next build. + +## Know the source folders {#know-the-source-folders} + +| Location | What to edit | +|---|---| +| `telar-content/spreadsheets/` | Object catalogue, story list, story steps and glossary CSV files | +| `telar-content/objects/` | Images, PDFs and audio hosted by your site | +| `telar-content/texts/stories/` | Longer panel texts referenced from story rows | +| `telar-content/texts/glossary/` | Glossary text files where used | +| `_config.yml` | Site identity and configuration | +| `_data/navigation.yml` | Published menu | + +## Register one object {#register-one-object} + +For a local file, use a simple filename such as `khipu.jpg` and put it in the objects folder. Match that name with the object ID. + +For an external IIIF object, add its manifest to `source_url`. No image download is required. A minimal `objects.csv` example is: + +```csv +object_id,title,source_url,alt_text +khipu,Haptic khipu,https://juancobo.com/138la/iiif/khipu/p7/manifest.json,Gloved hands working with knotted cords on a white surface +``` + +Keep catalogue information and credits in the other supported columns. See [object columns](/docs/your-data/csv-objects/) for the complete schema. + +{{< media id="public-object" >}} + +## Connect a story and its steps {#connect-a-story-and-its-steps} + +Add a story to `project.csv`: + +```csv +order,story_id,title +1,khipu-story,Examining a khipu +``` + +Create `khipu-story.csv` in the same folder. Its filename matches the story ID: + +```csv +step,object,x,y,zoom,question,answer +1,khipu,0.5,0.5,1,Which activity is shown?,The photograph documents sampling for radiocarbon dating. +``` + +Use the object page's coordinate tool to refine the starting view. A new row can return to the same object at another view. Keep steps numbered in order. + +## Add panels and glossary links {#add-panels-and-glossary-links} + +Use `layer1_content` and `layer2_content` for inline panel text or a Markdown file path relative to the stories text folder. Use the matching button columns to describe what opens. + +Glossary definitions can live in `glossary.csv`; link them as `[[term-id]]`. Read [story columns](/docs/your-data/csv-stories/) and [glossary columns](/docs/your-data/csv-glossary/) before adding more complex content. + +Next, [rebuild and inspect the result](/docs/local-authoring/preview/). diff --git a/content/en/docs/local-authoring/preview.md b/content/en/docs/local-authoring/preview.md new file mode 100644 index 0000000..8b18fb1 --- /dev/null +++ b/content/en/docs/local-authoring/preview.md @@ -0,0 +1,59 @@ +--- +title: Rebuild and inspect the local site +url: /docs/local-authoring/preview/ +translationKey: docs-local-authoring-preview +type: guide +docs_draft: true +docs_section: local +--- + +# Rebuild and inspect the local site {#rebuild-and-inspect-the-local-site} + +The local helper prepares content before it starts Jekyll. Jekyll's file watcher alone does not rerun every preprocessing step. + +## Rebuild after content changes {#rebuild-after-content-changes} + +Stop the running server with Ctrl+C, then run: + +```bash +python3 scripts/build_local_site.py +``` + +After changing CSV files, the conversion and collection-generation steps must run again. After adding or replacing an image or PDF, regenerate its IIIF tiles. The helper handles these stages. + +If images and the Google Sheet have not changed, use: + +```bash +python3 scripts/build_local_site.py --skip-iiif --skip-fetch +``` + +Do not skip a stage whose inputs changed. For Markdown or styling work, Jekyll can update some output while serving, but use the helper again when checking the complete result. + +## Check the actual source in each step {#check-the-actual-source-in-each-step} + +Open the objects gallery, the object page and the story. For the khipu example, all three should show the khipu. Check the framing, alt text, credits, panels and glossary links. + +Test with a smaller browser window and keyboard navigation. Use the [reader-review guide](/docs/plan/review/) to check the narrative as well as the build. + +{{< media id="coordinates" >}} + +## Test private stories separately {#test-private-stories-separately} + +The development server shows private-story content in plaintext. It continually regenerates pages, so its output does not stay encrypted. + +To test the locked behaviour, stop Jekyll. Temporarily set `baseurl: ""` in your configuration so the static server can serve the output at its root, then run: + +```bash +python3 scripts/build_local_site.py --port 4003 --build-only +python3 -m http.server 4003 --directory _site +``` + +Restore your production base path after this test. This build runs the post-build encryption step. Open the story from the static server and check both locked and unlocked views. Treat the live development preview as local working material. + +## Read failures at the stage that reports them {#read-failures-at-the-stage-that-reports-them} + +A missing image may come from an object ID mismatch, an unreachable source or a tile-generation failure. A missing story may come from a mismatched filename and story ID. The terminal output helps identify which stage failed. + +Fix the source and rebuild. Avoid editing generated JSON or HTML to conceal a source problem. + +Next, [publish and maintain the site](/docs/local-authoring/publish/). diff --git a/content/en/docs/local-authoring/publish.md b/content/en/docs/local-authoring/publish.md new file mode 100644 index 0000000..4a688b0 --- /dev/null +++ b/content/en/docs/local-authoring/publish.md @@ -0,0 +1,49 @@ +--- +title: Publish and maintain a local project +url: /docs/local-authoring/publish/ +translationKey: docs-local-authoring-publish +type: guide +docs_draft: true +docs_section: local +--- + +# Publish and maintain a local project {#publish-and-maintain-a-local-project} + +Keep the editable source and the published output distinct. Your source lets you revise the exhibition; the generated site is the edition visitors read. + +## Publish through GitHub Actions {#publish-through-github-actions} + +Confirm `url` and `baseurl` in the configuration. Enable GitHub Pages with **GitHub Actions** as its source. + +Review the files you changed, commit the intended source files and push them to your repository. The template's deployment workflow processes content, generates media assets, builds the site and applies private-story encryption before deploying. + +Open **Actions**, inspect the run and wait for successful deployment. Then test the public address. A local preview is not evidence that deployment finished. + +Keep virtual environments, dependencies and temporary output out of the source commit. Review `git status` before committing. + +## Publish to another static host {#publish-to-another-static-host} + +The local helper generates IIIF addresses for its local preview. Do not upload that preview unchanged to a public host. + +For a standalone deployment, first run the complete build pipeline, then regenerate hosted-image addresses with the full public site address and rebuild: + +```bash +python3 scripts/build_local_site.py --build-only +python3 scripts/generate_iiif.py --base-url https://example.org/my-exhibition +bundle exec jekyll build +python3 scripts/encrypt_protected_stories.py +``` + +Replace the example address with the actual domain and path. Set `url` and `baseurl` to match. Upload the resulting `_site/` directory to your host after the encryption command succeeds. Check any destination-conflict warnings before treating the build as ready. + +If you rebuild Jekyll afterwards, run encryption again before publishing private stories. See [private stories](/docs/site-features/private-stories/) for the full model. + +## Keep a reproducible source copy {#keep-a-reproducible-source-copy} + +Back up configuration, content, media and custom themes. Keep the dependency files and a note of the Telar version. External IIIF sources remain external dependencies; retain their catalogue and manifest addresses. + +## Upgrade in a separate step {#upgrade-in-a-separate-step} + +Back up or commit your current work, read the release notes and follow [upgrading Telar](/docs/setup/upgrading/). Review changes before publishing, then retest a representative image, story, panel, glossary entry and any private story. + +Separate an upgrade from a large content revision where possible. That makes a failure easier to trace. diff --git a/content/en/docs/plan/_index.md b/content/en/docs/plan/_index.md new file mode 100644 index 0000000..ad758f4 --- /dev/null +++ b/content/en/docs/plan/_index.md @@ -0,0 +1,34 @@ +--- +title: Plan an exhibition +url: /docs/plan/ +translationKey: docs-plan +type: guide +docs_draft: true +docs_section: planning +--- + +Chapter 1 · Purpose, audience and sources
+An exhibition brings sources and interpretation together. Before choosing an editor, decide what you want visitors to explore and which materials can help them do it.
+You will have a short exhibition brief: a guiding question, an intended audience and a small set of sources to examine.
A topic gives your exhibition a subject. A question gives visitors a reason to look closely. Start with something that can be explored through your materials.
+An example to think with
A painting of the Bogotá savanna.
What can this painting help us understand about people and land?
This is a possible starting question, not a finished interpretation. The details you examine will shape the argument.
Write the idea you want visitors to leave with, even if it is provisional. Then consider which questions could help them reach it. The opening should give them a way in; the ending should return to what the exhibition has helped them see.
+Imagine someone arriving without the knowledge you bring to the material. What can they recognise? What will need an introduction? Which words or assumptions could get in the way?
+Use those answers to choose your opening, your language and the amount of context you offer. A glossary can explain recurring terms; a panel can develop the context of a particular step.
+Choose a manageable starting set: an image, a document, an audio recording, a video, or a few related items. You can return to the same source in more than one step.
+Look and listen closely. Note significant elements, how they relate to one another, the questions they raise and what remains uncertain. Connect each possible observation to a detail you can actually show.
+People, words, symbols, sounds, gestures, arrangements and absences.
Questions about making, use, audience, time, place and interpretation.
Keep the source address, catalogue information and credit alongside your notes. Identify what can be shared and what needs further checking. Mark uncertain interpretations as questions to investigate.
+On paper or in a document, finish these four prompts:
+Planning is iterative. As you examine the sources and try the story with readers, revise the question, the sequence and the conclusion.
Turn your brief into an opening, a sequence of questions and an ending. Continue with the narrative arc, then connect each step to a source view, plan optional layers and arrange the whole exhibition.
+The narrative planner gives you a beginning and ending to build between. The workshop slides demonstrate how to add questions, sources and layers.
+Sketch the narrative arc → diff --git a/content/en/docs/plan/exhibition-layout.md b/content/en/docs/plan/exhibition-layout.md new file mode 100644 index 0000000..e085281 --- /dev/null +++ b/content/en/docs/plan/exhibition-layout.md @@ -0,0 +1,44 @@ +--- +title: Arrange the whole exhibition +url: /docs/plan/exhibition-layout/ +translationKey: docs-plan-exhibition-layout +type: guide +docs_draft: true +docs_section: planning +--- + +# Arrange the whole exhibition {#arrange-the-whole-exhibition} + +An exhibition includes its homepage, stories, objects, glossary and supporting pages. Plan how someone will find a route through them before polishing individual screens. + +## Decide what the homepage introduces {#decide-what-the-homepage-introduces} + +State the exhibition's subject, its guiding question and who made it. Offer enough context to choose a story without reproducing the whole introduction to every story. + +Give story cards distinct titles and useful subtitles. Put the suggested starting story first when order matters. If stories can be read independently, make that clear. + +{{< media id="public-home" >}} + +## Decide how stories relate {#decide-how-stories-relate} + +Use one story for a continuous argument or guided examination. Split material into several stories when each has a distinct question, audience or source group. + +Write a one-sentence description of each story's role. If two descriptions are interchangeable, reconsider the division. If a later story depends on earlier knowledge, explain or link that relationship. + +## Offer other ways into the sources {#offer-other-ways-into-the-sources} + +The objects gallery supports browsing beyond the guided narratives. Meaningful titles, credits, descriptions and consistent metadata help visitors understand what they find there. + +The glossary provides recurring context. An About or methodology page can explain contributors, research choices, source selection and acknowledgements without interrupting every story. + +## Sketch the navigation {#sketch-the-navigation} + +List the menu entries and the page each should open. Keep the list short enough to understand at a glance. Use names that describe the destination. + +In the Compositor, arrange the menu in **Home and Pages** and adjust homepage and collection display in **Site settings**. With files, the navigation lives in `_data/navigation.yml`; see [navigation reference](/docs/customization/navigation-menu/). + +## Choose a manageable first version {#choose-a-manageable-first-version} + +Build one complete route through the exhibition first: homepage → story → source or panel → ending. Then add the other stories and supporting pages. + +**Your result:** a simple site map, ordered story list and homepage outline. Next, [test the exhibition with readers](/docs/plan/review/). diff --git a/content/en/docs/plan/layers-and-glossary.md b/content/en/docs/plan/layers-and-glossary.md new file mode 100644 index 0000000..e664570 --- /dev/null +++ b/content/en/docs/plan/layers-and-glossary.md @@ -0,0 +1,42 @@ +--- +title: Plan panels and glossary links +url: /docs/plan/layers-and-glossary/ +translationKey: docs-plan-layers-and-glossary +type: guide +docs_draft: true +docs_section: planning +--- + +# Plan panels and glossary links {#plan-panels-and-glossary-links} + +Keep the main route readable, then offer further context where readers may want it. Panels belong to a particular step; glossary entries explain terms that can recur across the exhibition. + +## Write the short answer first {#write-the-short-answer-first} + +Answer the step's question in a sentence or two. Keep the observation and the inference distinct: what does the source show, and what do you argue it means? + +Read the questions and answers without opening anything else. If an essential explanation is missing, bring it into this main route before adding optional detail. + +## Give each panel a purpose {#give-each-panel-a-purpose} + +A first panel might explain the source's making, introduce a comparison or show the evidence behind an interpretation. A second panel opens from the first and can develop that discussion further. + +In the planner, draw the first branch from its question and the second branch from the first panel. This represents how readers encounter them: step → first panel → second panel. + +Choose a button label that tells visitors what they will find. “How the sample was taken” is more informative than repeating “More” everywhere. A panel need not contain every piece of research you collected. + +{{< media id="panels" >}} + +## Use the glossary for recurring context {#use-the-glossary-for-recurring-context} + +Define a term when its explanation will help more than one passage. Keep the definition understandable on its own; link related entries where useful. + +For example, a story about a khipu may need a short explanation of the term and a panel about the particular activity shown in one photograph. These serve different purposes. + +The link syntax is `[[term-id]]`, or `[[term-id|visible text]]` when the sentence needs different wording. The Compositor also provides an insertion control. + +## Review optional routes {#review-optional-routes} + +Open each panel and glossary link in the order a reader would encounter them. Check that the title, button and first paragraph agree. Make it clear which source supports a claim and where a comparison comes from. + +**Your result:** short answers, purposeful panel outlines and a list of shared terms. Next, [arrange the exhibition as a whole](/docs/plan/exhibition-layout/). diff --git a/content/en/docs/plan/review.md b/content/en/docs/plan/review.md new file mode 100644 index 0000000..029ca3e --- /dev/null +++ b/content/en/docs/plan/review.md @@ -0,0 +1,43 @@ +--- +title: Test the exhibition with readers +url: /docs/plan/review/ +translationKey: docs-plan-review +type: guide +docs_draft: true +docs_section: planning +--- + +# Test the exhibition with readers {#test-the-exhibition-with-readers} + +A successful build shows that the site was generated. A reader test shows whether the exhibition makes sense to someone encountering it for the first time. Do both before sharing it widely. + +## Rehearse the main route {#rehearse-the-main-route} + +Start at the homepage without using your editor bookmarks. Choose a story, follow every step and reach the ending. + +Check that each source appears at the intended page, framing or time segment. Read the question and answer against that view. Open all panels and glossary links, then return to the story. + +## Ask someone to try it {#ask-someone-to-try-it} + +Give a reader a small task: find the first story, explain what changed between two views, or locate the source behind a claim. Observe before explaining the interface. + +Ask what they noticed, what they understood and where they lost the thread. Separate an interface problem from an interpretation that needs rewriting. Revise, then try the changed passage again. + +## Test other ways of reading {#test-other-ways-of-reading} + +- Use a narrow window and a phone if one is available. +- Navigate with the keyboard and check that links and controls have a visible focus. +- Read alternative text and transcripts alongside the visual and audio material. +- Check text size, contrast and button wording. +- Follow external source links and verify credits. +- Check the interface language and any text the site supplies automatically. + +If a source fails, test its catalogue page and manifest independently. If the framing is wrong, return to that step and capture or copy the intended view again. + +## Prepare the version you will share {#prepare-the-version-you-will-share} + +Remove unfinished material from the publication route. In the Compositor, a draft is excluded from publication; making a story private is a different choice and uses a key. Verify the published result, not only the editor. + +Record the public address, the date tested and any known limitations. Keep the source files and a short note explaining how to rebuild the exhibition. + +**Your result:** a tested first edition and a short list of improvements for the next one. Choose the [Compositor](/docs/the-compositor/), [Google Sheets](/docs/google-sheets/) or [local authoring](/docs/local-authoring/) manual for the build process. diff --git a/content/en/docs/plan/sources-and-framing.md b/content/en/docs/plan/sources-and-framing.md new file mode 100644 index 0000000..49f21bf --- /dev/null +++ b/content/en/docs/plan/sources-and-framing.md @@ -0,0 +1,42 @@ +--- +title: Choose sources and framing +url: /docs/plan/sources-and-framing/ +translationKey: docs-plan-sources-and-framing +type: guide +docs_draft: true +docs_section: planning +--- + +# Choose sources and framing {#choose-sources-and-framing} + +Choose a view because it helps visitors examine the question in that step. A closer view is useful when it reveals evidence; an overview is useful when the relationship between details matters. + +## Keep a source register {#keep-a-source-register} + +For each object, record its title, creator when known, date or period, holding institution, catalogue address and credit. Keep the IIIF manifest address separately from the catalogue page: the former supplies the image; the latter gives readers its context. + +Note what you can publish and any uncertainties in attribution or interpretation. For your own material, keep the original file as well as the copy prepared for the exhibition. + +## Pair each step with a view {#pair-each-step-with-a-view} + +Add three notes to each question in your plan: + +1. Which object, page or time segment will visitors see? +2. Which detail should they notice? +3. What does the short answer help them understand about it? + +You can return to the same object several times. Changing the framing can build an argument without introducing a new source at every step. Use a wider view when moving between distant details so visitors can understand their relationship. + +## Plan images, documents and recordings {#plan-images-documents-and-recordings} + +For a multi-page document, choose the page before choosing the framing. For video or audio, identify a segment and write down the proposed start and end. Check whether the segment needs a transcript or other explanation. + +The [khipu walkthrough](/docs/the-compositor/iiif-to-story/) demonstrates the full image workflow: add the manifest, select that khipu in a story step, frame the khipu and capture the position. The source shown in the framing step must match the object you added. + +## Write the description alongside the interpretation {#write-the-description-alongside-the-interpretation} + +Describe the relevant visible or audible details in the step's alternative text or accompanying prose. Do not rely on “look here” or colour alone to identify the evidence. + +Test the view at a smaller window size. A tiny label that you can read on your own monitor may need a closer view, a transcription or an explanation in text. + +**Your result:** a source register and a proposed view or segment for every step. Next, [decide what belongs in panels and the glossary](/docs/plan/layers-and-glossary/). diff --git a/content/en/docs/reference/_index.md b/content/en/docs/reference/_index.md new file mode 100644 index 0000000..726fbc4 --- /dev/null +++ b/content/en/docs/reference/_index.md @@ -0,0 +1,9 @@ +--- +title: Reference +url: /docs/reference/ +translationKey: docs-reference +type: guide +docs_section: reference +--- + +{{< section-overview >}} diff --git a/content/en/docs/reference/config-generator.md b/content/en/docs/reference/config-generator.md new file mode 100644 index 0000000..557fb1f --- /dev/null +++ b/content/en/docs/reference/config-generator.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /docs/reference/config-generator/ +translationKey: redirects-en-ref-config-generator-md +type: redirect +docs_section: reference +redirect_to: /docs/configure/config-generator/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/content/en/docs/reference/config-validator.md b/content/en/docs/reference/config-validator.md new file mode 100644 index 0000000..729dacc --- /dev/null +++ b/content/en/docs/reference/config-validator.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /docs/reference/config-validator/ +translationKey: redirects-en-ref-config-validator-md +type: redirect +docs_section: reference +redirect_to: /docs/configure/config-validator/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/content/en/docs/reference/configuration.md b/content/en/docs/reference/configuration.md new file mode 100644 index 0000000..82d1512 --- /dev/null +++ b/content/en/docs/reference/configuration.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /docs/reference/configuration/ +translationKey: redirects-en-ref-configuration-md +type: redirect +docs_section: reference +redirect_to: /docs/configure/configuration/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/content/en/docs/reference/csv-project-objects.md b/content/en/docs/reference/csv-project-objects.md new file mode 100644 index 0000000..9698b96 --- /dev/null +++ b/content/en/docs/reference/csv-project-objects.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /docs/reference/csv-project-objects/ +translationKey: redirects-en-ref-csv-project-objects-md +type: redirect +docs_section: reference +redirect_to: /docs/your-data/csv-project/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/content/en/docs/reference/csv-stories-glossary.md b/content/en/docs/reference/csv-stories-glossary.md new file mode 100644 index 0000000..7a9bce0 --- /dev/null +++ b/content/en/docs/reference/csv-stories-glossary.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /docs/reference/csv-stories-glossary/ +translationKey: redirects-en-ref-csv-stories-glossary-md +type: redirect +docs_section: reference +redirect_to: /docs/your-data/csv-stories/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/content/en/docs/reference/markdown-syntax.md b/content/en/docs/reference/markdown-syntax.md new file mode 100644 index 0000000..d745a57 --- /dev/null +++ b/content/en/docs/reference/markdown-syntax.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /docs/reference/markdown-syntax/ +translationKey: redirects-en-ref-markdown-syntax-md +type: redirect +docs_section: reference +redirect_to: /docs/your-content/markdown-syntax/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/docs/2-0-setup.md b/content/en/docs/setup/_index.md similarity index 64% rename from docs/2-0-setup.md rename to content/en/docs/setup/_index.md index 5af4126..066b523 100644 --- a/docs/2-0-setup.md +++ b/content/en/docs/setup/_index.md @@ -1,25 +1,23 @@ --- -layout: docs -title: 2. Set Up Your Site -parent: Documentation -nav_order: 2 -has_children: true -lang: en -permalink: /docs/setup/ +title: Set Up Your Site +url: /docs/setup/ +translationKey: docs-setup +type: guide +docs_section: reference --- -# Set Up Your Site +# Set Up Your Site {#set-up-your-site} Looking for setup instructions? Head to **[Getting Started](/docs/getting-started/)** to choose between the Compositor, Google Sheets, or local development. This section covers manual configuration and maintenance for existing sites. -### Manual Setup +### Manual Setup {#manual-setup} The step-by-step manual approach for users already comfortable with GitHub and YAML. Build a complete exhibition in your browser with no software to install. -[Manual Setup](/docs/setup/manual/){: .btn .btn-primary } +Manual Setup -## Maintenance +## Maintenance {#maintenance} - [Upgrading Telar](/docs/setup/upgrading/) — Keep your site up to date with the latest features diff --git a/content/en/docs/setup/local-dev.md b/content/en/docs/setup/local-dev.md new file mode 100644 index 0000000..778c78e --- /dev/null +++ b/content/en/docs/setup/local-dev.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /docs/setup/local-dev/ +translationKey: redirects-en-setup-local-dev-md +type: redirect +docs_section: reference +redirect_to: /docs/getting-started/local-dev/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/docs/2-1-manual-setup.md b/content/en/docs/setup/manual.md similarity index 68% rename from docs/2-1-manual-setup.md rename to content/en/docs/setup/manual.md index 07e060f..cd62380 100644 --- a/docs/2-1-manual-setup.md +++ b/content/en/docs/setup/manual.md @@ -1,14 +1,12 @@ --- -layout: docs -title: 2.1. Manual Setup -parent: 2. Set Up Your Site -grand_parent: Documentation -nav_order: 1 -lang: en -permalink: /docs/setup/manual/ +title: Manual Setup +url: /docs/setup/manual/ +translationKey: docs-setup-manual +type: guide +docs_section: sheets --- -# Manual Setup +# Manual Setup {#manual-setup} Build a complete Telar exhibition in your browser using GitHub and Google Sheets. No software to install. @@ -18,11 +16,11 @@ You will need: --- -## Part 1: Set Up All the Technical Bits +## Part 1: Set Up All the Technical Bits {#part-1-set-up-all-the-technical-bits} This part might feel daunting, but you only have to do it once. Once everything is set up, you won't need to come back here — everything else is creative work in your spreadsheet. -### Create Your Repository +### Create Your Repository {#create-your-repository} A repository is your project's home on GitHub — it holds your images and configuration files. @@ -34,7 +32,7 @@ A repository is your project's home on GitHub — it holds your images and confi  -### Enable GitHub Pages +### Enable GitHub Pages {#enable-github-pages} GitHub Pages turns your repository into a live website for free. @@ -44,7 +42,7 @@ GitHub Pages turns your repository into a live website for free.  -### Duplicate the Google Sheets Template +### Duplicate the Google Sheets Template {#duplicate-the-google-sheets-template} Your Google Sheets spreadsheet is where you manage all your content — objects, stories, and text. @@ -52,7 +50,7 @@ Your Google Sheets spreadsheet is where you manage all your content — objects, 2. Click **File** → **Make a copy** 3. Save to your Google Drive with a descriptive name (e.g., "My Telar Exhibition") -### Publish Your Sheet +### Publish Your Sheet {#publish-your-sheet} Your spreadsheet needs to be published so Telar can read it during builds. @@ -60,10 +58,11 @@ Your spreadsheet needs to be published so Telar can read it during builds. 2. Click **Publish** 3. Copy the published URL -{: .note } -> **Simplified in v0.9.0.** Previous versions required both a shared URL and a published URL. From v0.9.0, only the published URL is needed. If your `_config.yml` still has a `shared_url` line, it is safely ignored. +{{< callout "note" >}} +**Simplified in v0.9.0.** Previous versions required both a shared URL and a published URL. From v0.9.0, only the published URL is needed. If your `_config.yml` still has a `shared_url` line, it is safely ignored. +{{< /callout >}} -### Configure Your Site +### Configure Your Site {#configure-your-site} Edit the `_config.yml` file in your repository to connect everything: @@ -86,7 +85,7 @@ Edit the `_config.yml` file in your repository to connect everything: Your site will be available at `https://yourgithubusername.github.io/your-repository-name`. - {: .warning } +{.warning} > It is very important that your baseurl matches the name of your repository exactly. Baseurl must be in all lowercase, so if you gave your repository a name with capitals please go and change it now. 4. **Google Sheets** — paste in the published URL you copied: @@ -108,7 +107,7 @@ Edit the `_config.yml` file in your repository to connect everything:   -### Verify Your Setup +### Verify Your Setup {#verify-your-setup} After committing, GitHub Actions will automatically build and publish your site. This takes 2–5 minutes. @@ -118,19 +117,20 @@ After committing, GitHub Actions will automatically build and publish your site.  -{: .warning } -> If the build fails or your site doesn't look right, double-check your `_config.yml` carefully. Common mistakes: -> - **Unclosed quotes** — every `"` needs a matching `"` -> - **Missing space after colon** — write `title: "My Site"`, not `title:"My Site"` -> - **Wrong indentation** — nested settings like `published_url` must be indented with spaces, not tabs -> - **Mismatched baseurl** — must match your repository name exactly, in all lowercase -> - **Wrong Google Sheets URL** — make sure you use the published URL from File → Share → Publish to web -> -> See the [Configuration Reference](/docs/configure/configuration/) for the full list of settings. You can also paste your `_config.yml` into the [Telar Config Validator](/docs/configure/config-validator/) to check for errors, or use the [Config Generator and Editor](/docs/configure/config-generator/) to build one from scratch. +{{< callout "warning" >}} +If the build fails or your site doesn't look right, double-check your `_config.yml` carefully. Common mistakes: +- **Unclosed quotes** — every `"` needs a matching `"` +- **Missing space after colon** — write `title: "My Site"`, not `title:"My Site"` +- **Wrong indentation** — nested settings like `published_url` must be indented with spaces, not tabs +- **Mismatched baseurl** — must match your repository name exactly, in all lowercase +- **Wrong Google Sheets URL** — make sure you use the published URL from File → Share → Publish to web +See the [Configuration Reference](/docs/configure/configuration/) for the full list of settings. You can also paste your `_config.yml` into the [Telar Config Validator](/docs/configure/config-validator/) to check for errors, or use the [Config Generator and Editor](/docs/configure/config-generator/) to build one from scratch. +{{< /callout >}} -## Next Steps + +## Next Steps {#next-steps} Your site is configured and running. Continue with the Getting Started tutorial: diff --git a/docs/2-3-upgrading.md b/content/en/docs/setup/upgrading.md similarity index 83% rename from docs/2-3-upgrading.md rename to content/en/docs/setup/upgrading.md index be898b5..b20e9e3 100644 --- a/docs/2-3-upgrading.md +++ b/content/en/docs/setup/upgrading.md @@ -1,32 +1,31 @@ --- -layout: docs -title: 2.3. Upgrading Telar -parent: 2. Set Up Your Site -grand_parent: Documentation -nav_order: 3 -lang: en -permalink: /docs/setup/upgrading/ +title: Upgrading Telar +url: /docs/setup/upgrading/ +translationKey: docs-setup-upgrading +type: guide +docs_section: reference --- -# Upgrading Telar +# Upgrading Telar {#upgrading-telar} Keep your Telar site up to date with the latest features, bug fixes, and improvements. -{: .note } -> **Using the Telar Compositor?** If you manage your site through the [Telar Compositor](https://compositor.telar.org), you can upgrade with one click from its Upgrade screen — the manual steps below aren't needed. If it asks you to approve updated GitHub permissions first, accept them and retry. The instructions below are for upgrading directly on GitHub instead. +{{< callout "note" >}} +**Using the Telar Compositor?** If you manage your site through the [Telar Compositor](https://compositor.telar.org), you can upgrade with one click from its Upgrade screen — the manual steps below aren't needed. If it asks you to approve updated GitHub permissions first, accept them and retry. The instructions below are for upgrading directly on GitHub instead. +{{< /callout >}} -## Overview +## Overview {#overview} Telar v0.3.4 introduced an automated upgrade system that makes updating your site simple and safe. The upgrade process depends on which version you're currently running: - **v0.3.4 or later**: Use the automated upgrade workflow (one-click upgrades) - **v0.2.0 to v0.3.3**: Manual setup required first (one-time only) -## Automated Upgrades (v0.3.4+) +## Automated Upgrades (v0.3.4+) {#automated-upgrades-v034} If your site is already running Telar v0.3.4 or later, upgrading is fully automated. -### How It Works +### How It Works {#how-it-works} The upgrade system: 1. Detects your current Telar version from `_config.yml` @@ -35,10 +34,11 @@ The upgrade system: 4. Creates an upgrade branch and issue with detailed summary 5. Highlights any manual steps you need to complete -### Running an Automated Upgrade +### Running an Automated Upgrade {#running-an-automated-upgrade} -{: .note } -> **Forked repositories only**: If you forked your site from another repository, you'll need to enable issues in your repository settings (**Settings** → **General** → check **Issues**). Sites created using the "Use this template" button already have issues enabled. +{{< callout "note" >}} +**Forked repositories only**: If you forked your site from another repository, you'll need to enable issues in your repository settings (**Settings** → **General** → check **Issues**). Sites created using the "Use this template" button already have issues enabled. +{{< /callout >}} 1. Go to your repository on GitHub 2. Click the **Actions** tab @@ -50,11 +50,12 @@ The upgrade system: 8. Click the link in the issue to create a pull request 9. Review changes and merge the pull request to complete the upgrade -{: .note } -> **Safe and Reversible** -> The upgrade creates an issue and branch, giving you full control. Review the changes via the compare link, create a PR when ready, and merge only after verification. +{{< callout "note" >}} +**Safe and Reversible** +The upgrade creates an issue and branch, giving you full control. Review the changes via the compare link, create a PR when ready, and merge only after verification. +{{< /callout >}} -### After Upgrading +### After Upgrading {#after-upgrading} 1. Visit your site to verify it's working correctly 2. **Check the upgrade issue** for any manual steps (visible in the "After Merging" section) @@ -62,13 +63,13 @@ The upgrade system: 4. **Close the upgrade issue** once everything is working - this marks the upgrade as complete 5. If you encounter issues, check the [GitHub Issues](https://github.com/UCSB-AMPLab/telar/issues) or report a bug -### v1.8.3 Upgrade Notes +### v1.8.3 Upgrade Notes {#v183-upgrade-notes} **Upgrade with the "Upgrade Telar" workflow or through the Telar Compositor.** It takes a site from v1.8.2 to v1.8.3, and chains through from earlier versions. No manual steps: only the Telar files that changed are installed, and your site's content and settings are left as they are. The upgrade installs a `Gemfile.lock` that includes the `x86_64-linux` platform. If your site's build has been failing on GitHub's Ubuntu 26.04 runners while installing `google-protobuf`, the first build after the upgrade installs prebuilt gems and succeeds. -### v1.8.2 Upgrade Notes +### v1.8.2 Upgrade Notes {#v182-upgrade-notes} **Upgrade with the "Upgrade Telar" workflow or through the Telar Compositor.** It takes a site from v1.8.1 to v1.8.2, and chains through from earlier versions. @@ -78,13 +79,13 @@ On sites that upgrade with `scripts/upgrade.py`, the upgrade also deletes the ol If you upgrade with the workflow or from your own computer, you can delete `.github/workflows/telar-tests.yml`. It runs Telar's own tests, which are always skipped on your site. An upgrade through the Compositor deletes it for you. -### v1.8.1 Upgrade Notes +### v1.8.1 Upgrade Notes {#v181-upgrade-notes} **Upgrade with the "Upgrade Telar" workflow or through the Telar Compositor.** It takes a site from v1.8.0 to v1.8.1, and chains through from earlier versions. No manual steps: only the Telar files that changed are installed, and your site's content and settings are left as they are. The upgrade does not add the new [`hide_warnings`](/docs/configure/configuration/#hide_warnings) setting to `_config.yml`, so your site keeps showing warnings as before. To hide them, add `hide_warnings: true` to the `development-features` block. -### v1.8.0 Upgrade Notes +### v1.8.0 Upgrade Notes {#v180-upgrade-notes} **Upgrade with the "Upgrade Telar" workflow.** It takes a site from v1.7.0 to v1.8.0, and chains through from earlier versions. Before your first build, the upgrade repairs a sheet whose duplicate columns would now stop the build (one column holds the values, the others are empty) and lists the answers the build will shorten. @@ -94,7 +95,7 @@ The upgrade does not add the new [`hide_warnings`](/docs/configure/configuration **If your site reads a Google Sheet**, delete from the sheet any column the upgrade summary names: the upgrade fixed your local copy, but the build reads the sheet again. -### v1.7.0 Upgrade Notes +### v1.7.0 Upgrade Notes {#v170-upgrade-notes} **Upgrading on GitHub is unchanged.** If you use the **Upgrade Telar** workflow, run it as usual — there is nothing new to do. @@ -109,7 +110,7 @@ The upgrade does not add the new [`hide_warnings`](/docs/configure/configuration After either, your site's `scripts/upgrade.py` is the new launcher and no manual step is needed again. -### v1.6.0 Upgrade Notes +### v1.6.0 Upgrade Notes {#v160-upgrade-notes} v1.6.0 changes how private stories are built. Existing stories, objects, and general configuration continue to work unchanged — but **if your site has any story marked `private: yes` (or @@ -135,14 +136,15 @@ has (or might ever have) a private story, you must add the new encryption step t 4. Select all and replace with the copied contents 5. Commit the change -{: .warning } -> If you skip this step and mark a story `private: yes`, your build will fail at the "Convert CSVs -> to JSON" step with an error telling you the workflow doesn't run the encryption script. This is -> intentional — without the new step, your site would otherwise publish the "private" story as -> plaintext. -> -> If your site has no private stories, nothing breaks if you skip this step — but you won't be -> able to add one later without applying this update first. +{{< callout "warning" >}} +If you skip this step and mark a story `private: yes`, your build will fail at the "Convert CSVs +to JSON" step with an error telling you the workflow doesn't run the encryption script. This is +intentional — without the new step, your site would otherwise publish the "private" story as +plaintext. + +If your site has no private stories, nothing breaks if you skip this step — but you won't be +able to add one later without applying this update first. +{{< /callout >}} **Testing locally:** neither `bundle exec jekyll serve` nor `scripts/build_local_site.py`'s default serve mode encrypts anything — private stories preview as plaintext under both. To test the @@ -156,7 +158,7 @@ The automated upgrade handles all other framework file replacements. If you have any private story, you must still copy the updated `build.yml` as described above — this one is not optional. -### v1.5.0 Upgrade Notes +### v1.5.0 Upgrade Notes {#v150-upgrade-notes} v1.5.0 is a robustness and security release. It is runtime and tooling only — existing stories, objects, and configuration continue to work unchanged, with no CSV edits and no config changes. The automated upgrade handles all framework file replacements; two optional manual steps are described below. @@ -171,8 +173,9 @@ For security, GitHub does not allow the automated upgrade to modify workflow fil To apply them, use the copy-from-Raw steps in the "Manual Setup for Earlier Versions" section below, once for each file. If you skip this, your site keeps building and deploying normally — these changes only harden your workflows. -{: .warning } -> **If you update `build.yml`, also add `package-lock.json`.** The new `build.yml` installs Node dependencies with `npm ci`, which requires a committed `package-lock.json`. Copy it from the Telar repository (open [package-lock.json](https://github.com/UCSB-AMPLab/telar/blob/main/package-lock.json), click **Copy raw contents**) into your repository's root, or the build will fail. New sites created from the template already include it. +{{< callout "warning" >}} +**If you update `build.yml`, also add `package-lock.json`.** The new `build.yml` installs Node dependencies with `npm ci`, which requires a committed `package-lock.json`. Copy it from the Telar repository (open [package-lock.json](https://github.com/UCSB-AMPLab/telar/blob/main/package-lock.json), click **Copy raw contents**) into your repository's root, or the build will fail. New sites created from the template already include it. +{{< /callout >}} **Language pack — new protected-story sharing keys:** @@ -182,7 +185,7 @@ This release adds keys to the built-in language files (`en.yml` and `es.yml`) fo The automated upgrade handles all framework file replacements. The workflow updates above are optional hardening; if you apply the `build.yml` update, remember the `package-lock.json` note. -### v1.4.0 Upgrade Notes +### v1.4.0 Upgrade Notes {#v140-upgrade-notes} v1.4.0 is a runtime-only upgrade. Existing stories, objects, and configuration continue to work unchanged — no CSV edits, no config changes, and no workflow updates are required. @@ -200,7 +203,7 @@ If you have a customized language file (a copy of `en.yml` or `es.yml` with your No manual steps are required. The upgrade handles all file replacements automatically. -### v1.3.0 Upgrade Notes +### v1.3.0 Upgrade Notes {#v130-upgrade-notes} v1.3.0 fixes i18n coverage across the site and introduces a sister-file convention for localizing user pages. No CSV changes are required. @@ -216,13 +219,13 @@ Two new keys are added to the built-in language files. If you have a customized No manual steps are required beyond reviewing the automatically created upgrade issue for any files flagged as not matching the default (meaning your customizations were detected and preserved). -### v1.2.1 Upgrade Notes +### v1.2.1 Upgrade Notes {#v121-upgrade-notes} v1.2.1 is a patch release. No manual steps are required. The upgrade fixes a silent failure in the demo content fetch script that affected sites whose `_config.yml` carried a v-prefixed version string (e.g. `version: "v1.2.0"`). If your site showed no demo content after a previous upgrade, this patch resolves it. No config edits are needed; the fix is in the build script. -### v1.2.0 Upgrade Notes +### v1.2.0 Upgrade Notes {#v120-upgrade-notes} v1.2.0 adds a section table of contents, a Back to Start button, and in-story navigation. No manual steps are required. @@ -232,7 +235,7 @@ All new features activate automatically. The section TOC is opt-in per story: ad No action required. -### v1.1.0 Upgrade Notes +### v1.1.0 Upgrade Notes {#v110-upgrade-notes} v1.1.0 adds deep linking, title cards, collection mode, bibliography styling, and a share panel position tab. No manual steps are required. @@ -242,7 +245,7 @@ Deep linking and the updated share panel activate automatically. Collection mode No action required. -### v1.0.0-beta Upgrade Notes +### v1.0.0-beta Upgrade Notes {#v100-beta-upgrade-notes} v1.0.0-beta adds multimedia support (video and audio objects), an updated build pipeline, and renames the `object_type` CSV column to `medium`. @@ -276,7 +279,7 @@ The `object_type` column in `objects.csv` has been renamed to `medium`. This cha **If you only use GitHub's web interface:** - Copy the updated `build.yml` as described above. No other manual steps are required. -### v0.7.0 Upgrade Notes +### v0.7.0 Upgrade Notes {#v070-upgrade-notes} v0.7.0 adds Node.js as a requirement for local development builds: @@ -293,15 +296,15 @@ v0.7.0 adds Node.js as a requirement for local development builds: **If you only use GitHub's web interface:** - No action required — your site will continue to build automatically -## Manual Setup for Earlier Versions +## Manual Setup for Earlier Versions {#manual-setup-for-earlier-versions} If your site is running **v0.2.0 through v0.3.3**, you'll need to add the upgrade workflow files to your repository first. This is a **one-time setup**—after this, all future upgrades will be automated. -### Step 1: Add the Upgrade Workflow File +### Step 1: Add the Upgrade Workflow File {#step-1-add-the-upgrade-workflow-file} You need to add **two files** to enable automated upgrades: the upgrade workflow and the updated build workflow. The upgrade workflow will automatically fetch all necessary scripts when it runs. -#### Method A: GitHub Web Interface (Recommended) +#### Method A: GitHub Web Interface (Recommended) {#method-a-github-web-interface-recommended} Work entirely in the browser without installing anything: @@ -318,7 +321,7 @@ Work entirely in the browser without installing anything: - Add commit message: "Add automated upgrade workflow" - Click **Commit changes** -#### Method B: Desktop/Local Development +#### Method B: Desktop/Local Development {#method-b-desktoplocal-development} If you have your repository cloned locally: @@ -334,14 +337,15 @@ If you have your repository cloned locally: git push ``` -{: .note } -> **That's it!** The workflow automatically downloads the latest upgrade scripts from the Telar repository each time it runs, so you don't need to copy any Python files manually. +{{< callout "note" >}} +**That's it!** The workflow automatically downloads the latest upgrade scripts from the Telar repository each time it runs, so you don't need to copy any Python files manually. +{{< /callout >}} -### Step 2: Replace the Build Workflow File +### Step 2: Replace the Build Workflow File {#step-2-replace-the-build-workflow-file} If you're upgrading from **v0.2.0 through v0.3.3**, you also need to replace your `.github/workflows/build.yml` file with the latest version. This removes deprecated features (cron schedule and git push step) that are no longer needed in v0.3.4+. -#### Method A: GitHub Web Interface (Recommended) +#### Method A: GitHub Web Interface (Recommended) {#method-a-github-web-interface-recommended-1} Work entirely in the browser: @@ -359,7 +363,7 @@ Work entirely in the browser: - Add commit message: "Update build workflow to v0.3.4" - Click **Commit changes** -#### Method B: Desktop/Local Development +#### Method B: Desktop/Local Development {#method-b-desktoplocal-development-1} If you have your repository cloned locally: @@ -375,10 +379,11 @@ If you have your repository cloned locally: git push ``` -{: .note } -> **Optional Step**: If you skip this step now, the upgrade summary will include instructions to update build.yml manually after your first upgrade. However, doing it now ensures a smoother upgrade experience. +{{< callout "note" >}} +**Optional Step**: If you skip this step now, the upgrade summary will include instructions to update build.yml manually after your first upgrade. However, doing it now ensures a smoother upgrade experience. +{{< /callout >}} -### Step 3: Run Your First Automated Upgrade +### Step 3: Run Your First Automated Upgrade {#step-3-run-your-first-automated-upgrade} That's all the setup needed! Now follow the [Automated Upgrades](#automated-upgrades-v034) instructions above to upgrade to the latest version. @@ -388,9 +393,9 @@ The workflow will automatically: 3. Apply all necessary migrations 4. Create a pull request with the upgraded files -## Troubleshooting +## Troubleshooting {#troubleshooting} -### Upgrade Workflow Not Appearing +### Upgrade Workflow Not Appearing {#upgrade-workflow-not-appearing} **Problem**: The "Upgrade Telar" workflow doesn't appear in the Actions tab. @@ -399,7 +404,7 @@ The workflow will automatically: - Refresh the Actions tab in your browser - Check that the YAML file is valid (no syntax errors) -### Upgrade Fails with Error +### Upgrade Fails with Error {#upgrade-fails-with-error} **Problem**: The upgrade workflow fails with an error message. @@ -409,7 +414,7 @@ The workflow will automatically: - The workflow downloads scripts automatically, so network issues could cause failures - If the error persists, [report an issue](https://github.com/UCSB-AMPLab/telar/issues) with the error message -### Issue Not Created +### Issue Not Created {#issue-not-created} **Problem**: The upgrade completes but no issue is created. @@ -419,7 +424,7 @@ The workflow will automatically: - Check that issues are enabled in your repository settings - Try running the workflow again -### Merge Conflicts +### Merge Conflicts {#merge-conflicts} **Problem**: The upgrade PR has merge conflicts. @@ -429,12 +434,12 @@ The workflow will automatically: - If conflicts are in framework files, the upgrade version should usually be preferred - If unsure, [ask for help](https://github.com/UCSB-AMPLab/telar/issues) -## Version History +## Version History {#version-history} For a complete list of changes in each version, see the [Changelog](https://github.com/UCSB-AMPLab/telar/blob/main/CHANGELOG.md) in the Telar repository. -## Need Help? +## Need Help? {#need-help} - **Documentation**: [telar.org/docs](https://telar.org/docs) -- **Example Site**: [telar.org/demo](https://telar.org/demo) +- **Example Site**: [telar.org/demo](https://landscapes.telar.org/) - **Report Issues**: [GitHub Issues](https://github.com/UCSB-AMPLab/telar/issues) diff --git a/docs/6-0-site-features.md b/content/en/docs/site-features/_index.md similarity index 84% rename from docs/6-0-site-features.md rename to content/en/docs/site-features/_index.md index 20068e6..7cbcd94 100644 --- a/docs/6-0-site-features.md +++ b/content/en/docs/site-features/_index.md @@ -1,14 +1,12 @@ --- -layout: docs -title: 6. Site Features -parent: Documentation -nav_order: 6 -lang: en -permalink: /docs/site-features/ -has_children: true +title: Site Features +url: /docs/site-features/ +translationKey: docs-site-features +type: guide +docs_section: reference --- -# Site Features +# Site Features {#site-features} Telar includes several built-in features that enhance your exhibition beyond the core story experience. diff --git a/docs/6-4-custom-pages.md b/content/en/docs/site-features/custom-pages.md similarity index 83% rename from docs/6-4-custom-pages.md rename to content/en/docs/site-features/custom-pages.md index fb6b152..ca84a02 100644 --- a/docs/6-4-custom-pages.md +++ b/content/en/docs/site-features/custom-pages.md @@ -1,18 +1,19 @@ --- -layout: docs -title: "6.4. Custom Pages" -parent: "6. Site Features" -grand_parent: Documentation -nav_order: 4 -lang: en -permalink: /docs/site-features/custom-pages/ +title: Custom Pages +url: /docs/site-features/custom-pages/ +translationKey: docs-site-features-custom-pages +type: guide +docs_section: reference --- -# Custom Pages +# Custom Pages {#custom-pages} Create custom pages for credits, methodology, team information, or any other content that doesn't fit into the story structure. -## What are Custom Pages? + +For visual authoring, see [homepage and pages](/docs/the-compositor/pages/). + +## What are Custom Pages? {#what-are-custom-pages} Custom pages are standalone pages that appear in your site's navigation menu but aren't part of the story viewer. Unlike story layers, which are tightly integrated with IIIF objects and step navigation, custom pages are flexible containers for any content you want to share. @@ -23,9 +24,9 @@ Custom pages are standalone pages that appear in your site's navigation menu but - **Bibliography**: List sources and further reading - **Contact**: Provide ways to get in touch -## Creating a Custom Page +## Creating a Custom Page {#creating-a-custom-page} -### Step 1: Create the Markdown File +### Step 1: Create the Markdown File {#step-1-create-the-markdown-file} Add a new `.md` file in the `telar-content/texts/pages/` directory: @@ -36,7 +37,7 @@ telar-content/texts/pages/ └── methodology.md # Your custom methodology page ``` -### Step 2: Write Your Content +### Step 2: Write Your Content {#step-2-write-your-content} Custom pages use standard markdown with full widget and glossary support: @@ -70,25 +71,26 @@ This project was made possible by... ``` -{: .note } -> The frontmatter (`---`) lines are required but can be empty. They tell Jekyll to process the file. +{{< callout "note" >}} +The frontmatter (`---`) lines are required but can be empty. They tell Jekyll to process the file. +{{< /callout >}} -### Step 3: Add to Navigation +### Step 3: Add to Navigation {#step-3-add-to-navigation} Update `_data/navigation.yml` to include your new page in the menu. See [Navigation Configuration](/docs/customization/navigation-menu/) for details. -## Supported Features +## Supported Features {#supported-features} Custom pages support the same markdown features as story layers: -### Markdown Formatting +### Markdown Formatting {#markdown-formatting} - **Headings** (h1-h6) - **Bold**, *italic*, and other text formatting - Lists (bulleted and numbered) - Links and images - Blockquotes -### Widgets +### Widgets {#widgets} All Telar widgets work on custom pages: - **Accordion**: Collapsible sections @@ -97,7 +99,7 @@ All Telar widgets work on custom pages: See [Markdown Syntax Reference](/docs/your-content/markdown-syntax/) for complete widget documentation. -### Glossary Links +### Glossary Links {#glossary-links} Glossary auto-linking works the same way: @@ -107,7 +109,7 @@ The [[encomienda]] system was a key institution... When users click the link, the glossary panel opens with the definition. -## Layout and Styling +## Layout and Styling {#layout-and-styling} Custom pages use the `user-page` layout, which provides: @@ -118,7 +120,7 @@ Custom pages use the `user-page` layout, which provides: Jekyll's conventional `layout: page` is also available if you add your own markdown files with front matter: a minimal centered prose column with the site header and footer, without widget processing or glossary integration. -## File Naming +## File Naming {#file-naming} File names determine the page URL: @@ -134,7 +136,7 @@ File names determine the page URL: - Use hyphens for spaces (not underscores) - Use descriptive names (the filename becomes the URL) -## Example: Credits Page +## Example: Credits Page {#example-credits-page} Here's a complete example showing credits with an accordion for detailed acknowledgments: @@ -187,7 +189,7 @@ We are grateful to the following individuals and institutions: ``` -## Differences from Story Layers +## Differences from Story Layers {#differences-from-story-layers} | Feature | Story Layers | Custom Pages | |---------|--------------|--------------| @@ -199,7 +201,7 @@ We are grateful to the following individuals and institutions: | Navigation | Via story interface | Via site menu | | URL structure | `/story-name/` | `/page-name/` | -## Next Steps +## Next Steps {#next-steps} - Learn how to [configure navigation](/docs/customization/navigation-menu/) to add pages to your menu - Explore [widget syntax](/docs/your-content/markdown-syntax/) for accordion, tabs, and carousels diff --git a/docs/6-5-embedding.md b/content/en/docs/site-features/embedding.md similarity index 75% rename from docs/6-5-embedding.md rename to content/en/docs/site-features/embedding.md index 0ed8e41..1defb2a 100644 --- a/docs/6-5-embedding.md +++ b/content/en/docs/site-features/embedding.md @@ -1,18 +1,16 @@ --- -layout: docs -title: "6.5. Embedding in Canvas" -parent: "6. Site Features" -grand_parent: Documentation -nav_order: 5 -lang: en -permalink: /docs/site-features/embedding/ +title: Embedding Telar Stories in LMS & Websites +url: /docs/site-features/embedding/ +translationKey: docs-site-features-embedding +type: guide +docs_section: reference --- -# Embedding Telar Stories in LMS & Websites +# Embedding Telar Stories in LMS & Websites {#embedding-telar-stories-in-lms--websites} Embed individual Telar stories into Canvas, Moodle, WordPress, or any website that supports iframes. -## What is Embedding? +## What is Embedding? {#what-is-embedding} Embedding lets you display a Telar story inside another website or learning management system (LMS). Your story appears as part of the host page, allowing students or visitors to explore it without leaving the platform. @@ -22,7 +20,7 @@ Embedding lets you display a Telar story inside another website or learning mana - Maintain consistent navigation and branding - No separate login or external links required -## When to Use Embedding +## When to Use Embedding {#when-to-use-embedding} **Best for:** - Canvas LMS course modules @@ -35,7 +33,7 @@ Embedding lets you display a Telar story inside another website or learning mana - Sharing direct links (use the share link feature instead) - Full-site integration (link to your Telar homepage) -## Prerequisites +## Prerequisites {#prerequisites} Before embedding: @@ -43,9 +41,9 @@ Before embedding: - You need edit access to the destination platform (Canvas, WordPress, etc.) - The platform must support HTML/iframe embedding -## How to Embed a Story +## How to Embed a Story {#how-to-embed-a-story} -### Step 1: Open the Share & Embed Panel +### Step 1: Open the Share & Embed Panel {#step-1-open-the-share--embed-panel} **On a story page:** @@ -59,12 +57,12 @@ Before embedding: 1. Go to your Telar site homepage 2. Click the **Share** button in the navigation bar (top right) -### Step 2: Switch to Embed Code Tab +### Step 2: Switch to Embed Code Tab {#step-2-switch-to-embed-code-tab} 1. In the share panel, click the **Embed Code** tab 2. Read the introductory text for platform-specific guidance -### Step 3: Select a Story (Homepage Only) +### Step 3: Select a Story (Homepage Only) {#step-3-select-a-story-homepage-only} If you opened the share panel from the homepage: @@ -72,11 +70,11 @@ If you opened the share panel from the homepage: 2. Choose the story you want to embed 3. The embed code will update automatically -### Step 4: Choose Dimensions +### Step 4: Choose Dimensions {#step-4-choose-dimensions} Select a preset that matches your platform, or enter custom dimensions. -#### Dimension Presets +#### Dimension Presets {#dimension-presets} | Preset | Width | Height | Best For | |--------|-------|--------|----------| @@ -89,11 +87,12 @@ Select a preset that matches your platform, or enter custom dimensions. | **Fixed** | 800px | 600px | Fixed-size containers | | **Custom** | Your choice | Your choice | Manual control | -{: .tip } -> **Tip: Start with the preset** -> Use the preset for your platform, then adjust if needed. Most platforms work best with 100% width and 600-800px height. +{{< callout "tip" >}} +**Tip: Start with the preset** +Use the preset for your platform, then adjust if needed. Most platforms work best with 100% width and 600-800px height. +{{< /callout >}} -#### Custom Dimensions +#### Custom Dimensions {#custom-dimensions} For the **Custom** preset or to modify a preset: @@ -104,13 +103,14 @@ For the **Custom** preset or to modify a preset: - Usually pixels: `600` or `600px` - Percentage works but may behave unexpectedly in iframes -{: .note } -> **Understanding Width and Height** -> - **Width: 100%** fills the available horizontal space (recommended for most uses) -> - **Height: Fixed pixels** provides consistent display across devices -> - The embed code will automatically add "px" to plain numbers +{{< callout "note" >}} +**Understanding Width and Height** +- **Width: 100%** fills the available horizontal space (recommended for most uses) +- **Height: Fixed pixels** provides consistent display across devices +- The embed code will automatically add "px" to plain numbers +{{< /callout >}} -### Step 5: Copy the Embed Code +### Step 5: Copy the Embed Code {#step-5-copy-the-embed-code} 1. Review the generated code in the text box 2. Click the **Copy Embed Code** button @@ -127,12 +127,13 @@ The embed code looks like this: ``` -{: .tip } -> To start an embedded story at a specific step, append a deep link fragment to the embed URL — for example, `?embed=true#s3` opens at step 3. See [Sharing and deep linking](/docs/your-content/stories-panels/#sharing-and-deep-linking) for the fragment format. +{{< callout "tip" >}} +To start an embedded story at a specific step, append a deep link fragment to the embed URL — for example, `?embed=true#s3` opens at step 3. See [Sharing and deep linking](/docs/your-content/stories-panels/#sharing-and-deep-linking) for the fragment format. +{{< /callout >}} -## Platform-Specific Instructions +## Platform-Specific Instructions {#platform-specific-instructions} -### Canvas LMS +### Canvas LMS {#canvas-lms} **To embed in a Canvas course page:** @@ -145,9 +146,10 @@ The embed code looks like this: 7. Click **Save** or **Update** 8. View the page to see your embedded story -{: .note } -> **Canvas Embed Confirmation** -> Canvas may show a blank box in the editor. This is normal—the story will display correctly when you view the published page. +{{< callout "note" >}} +**Canvas Embed Confirmation** +Canvas may show a blank box in the editor. This is normal—the story will display correctly when you view the published page. +{{< /callout >}} **Testing your embed:** @@ -157,7 +159,7 @@ The embed code looks like this: 4. Ensure the IIIF image viewer works 5. Check that the "View full site" banner appears (it's dismissible) -### WordPress +### WordPress {#wordpress} **To embed in a WordPress post or page:** @@ -176,7 +178,7 @@ The Custom HTML block is the recommended approach. Do not use the "Embed" block **Classic Editor:** Switch to the **Text** tab (not Visual), paste the code, then switch back to **Visual** to see a preview. -### Moodle +### Moodle {#moodle} **To embed in a Moodle course:** @@ -189,7 +191,7 @@ Switch to the **Text** tab (not Visual), paste the code, then switch back to **V Alternatively, use the **Page** resource type and paste the embed code in HTML mode. -### Other Platforms +### Other Platforms {#other-platforms} Most website builders and CMS platforms support iframe embedding: @@ -200,9 +202,9 @@ Most website builders and CMS platforms support iframe embedding: Consult your platform's documentation for instructions on adding custom HTML or iframes. -## What Users Will See +## What Users Will See {#what-users-will-see} -### Embed Mode Features +### Embed Mode Features {#embed-mode-features} When a story is embedded, users experience: @@ -228,7 +230,7 @@ When a story is embedded, users experience: - Home button (not shown in embed mode) - Share button (not shown in embed mode) -### Accessibility +### Accessibility {#accessibility} Embedded stories maintain full accessibility: @@ -237,9 +239,9 @@ Embedded stories maintain full accessibility: - Screen reader compatible - Text content remains accessible -## Tips for Successful Embedding +## Tips for Successful Embedding {#tips-for-successful-embedding} -### Choose Appropriate Dimensions +### Choose Appropriate Dimensions {#choose-appropriate-dimensions} **For LMS platforms (Canvas, Moodle):** - Use 100% width to fill the content area @@ -256,7 +258,7 @@ Embedded stories maintain full accessibility: - Or use 100% width with 500-600px height - Test on actual mobile devices -### Test Before Publishing +### Test Before Publishing {#test-before-publishing} 1. Preview the embedded story before making it public 2. Test navigation (buttons, keyboard, scroll) @@ -264,7 +266,7 @@ Embedded stories maintain full accessibility: 4. Check on mobile devices and tablets 5. Ensure the embedded story doesn't break page layout -### Multiple Stories on One Page +### Multiple Stories on One Page {#multiple-stories-on-one-page} You can embed multiple stories on a single page: @@ -273,7 +275,7 @@ You can embed multiple stories on a single page: 3. Add text or headings between embedded stories 4. Consider page length and loading time -### Security Considerations +### Security Considerations {#security-considerations} **Embed URLs are public:** - Anyone with the embed code can view your story @@ -285,7 +287,7 @@ You can embed multiple stories on a single page: - Students can view the story even outside the course by accessing the URL directly - Consider this when embedding sensitive content -## Updating Embedded Stories +## Updating Embedded Stories {#updating-embedded-stories} **Changes to your Telar site automatically appear in embeds:** @@ -301,11 +303,12 @@ If you need to change the width or height: 2. Replace the old code in your platform 3. Save/publish the update -{: .tip } -> **Tip: Version Compatibility** -> As long as you keep the embed URL format (`?embed=true`), embedded stories will work across Telar version updates. +{{< callout "tip" >}} +**Tip: Version Compatibility** +As long as you keep the embed URL format (`?embed=true`), embedded stories will work across Telar version updates. +{{< /callout >}} -## Troubleshooting +## Troubleshooting {#troubleshooting} **iframe not displaying:** - Check that `?embed=true` parameter is included in URL @@ -321,7 +324,7 @@ If you need to change the width or height: - Increase iframe height (recommended: 800px minimum) - Set `width: 100%` for responsive behavior -## Next Steps +## Next Steps {#next-steps} - **Share Links**: Use the Share Link tab for direct links instead of embedding - **Customization**: Learn about [customizing your Telar site](/docs/customization/) diff --git a/docs/6-2-glossary.md b/content/en/docs/site-features/glossary.md similarity index 78% rename from docs/6-2-glossary.md rename to content/en/docs/site-features/glossary.md index 3e6cb8c..734bfa4 100644 --- a/docs/6-2-glossary.md +++ b/content/en/docs/site-features/glossary.md @@ -1,22 +1,23 @@ --- -layout: docs -title: "6.2. Glossary" -parent: "6. Site Features" -grand_parent: Documentation -nav_order: 2 -lang: en -permalink: /docs/site-features/glossary/ +title: Glossary +url: /docs/site-features/glossary/ +translationKey: docs-site-features-glossary +type: guide +docs_section: reference --- -# Glossary +# Glossary {#glossary} The glossary lets you define terms that viewers can look up without leaving a story. When a viewer clicks a glossary link, the definition appears in a slide-over panel. -## Creating a Glossary + +For visual authoring, see [create and link glossary entries](/docs/the-compositor/glossary/). + +## Creating a Glossary {#creating-a-glossary} There are two ways to define glossary terms. The CSV format (new in v0.8.0) is recommended for most projects. -### CSV Format (Recommended) +### CSV Format (Recommended) {#csv-format-recommended} Add a `glossary.csv` file to `telar-content/spreadsheets/`: @@ -34,9 +35,9 @@ Each row defines one term: - **`definition`** — The definition text (supports basic markdown) - **`related_terms`** — Other `term_id` values, separated by `|`, for cross-referencing -The CSV format works with Google Sheets — the glossary tab is fetched automatically like your other CSVs. Column names can be in English or Spanish (see [CSV Reference: Glossary](/docs/your-data/csv-glossary/#glossary-csv-aliases) for aliases). +The CSV format works with Google Sheets — the glossary tab is fetched automatically like your other CSVs. Column names can be in English or Spanish (see [CSV Reference: Glossary](/docs/your-data/csv-glossary/#column-aliases) for aliases). -### Markdown Format (Legacy) +### Markdown Format (Legacy) {#markdown-format-legacy} Individual markdown files in `telar-content/texts/glossary/`: @@ -55,14 +56,15 @@ European colonizers in the late 15th century... Each file defines one term. The body of the file is the definition. In these files, `related_terms` is written as a YAML list, not with the `|` that separates values in the CSV: Telar does not reinterpret the frontmatter of a markdown file. -{: .note } -> If both a CSV glossary and markdown glossary files exist, Telar uses the CSV and ignores the markdown files (with a build warning). +{{< callout "note" >}} +If both a CSV glossary and markdown glossary files exist, Telar uses the CSV and ignores the markdown files (with a build warning). +{{< /callout >}} -## Linking to Glossary Terms +## Linking to Glossary Terms {#linking-to-glossary-terms} Link to glossary terms from your story text and panels using double-bracket syntax: -### Shorthand +### Shorthand {#shorthand} Uses the term's `title` as the link text: @@ -72,7 +74,7 @@ The [[loom]] was central to textile production. Renders as: The Loom was central to textile production. -### Custom Display Text +### Custom Display Text {#custom-display-text} Use a pipe separator to specify different link text: @@ -82,7 +84,7 @@ The [[loom|weaving device]] was central to textile production. Renders as: The weaving device was central to textile production. -### Where Links Work +### Where Links Work {#where-links-work} Glossary auto-links work in: @@ -94,10 +96,11 @@ The step **question** is a heading, so glossary links there are intentionally le If a `term_id` is not found in the glossary, a warning icon and error message appear in the build output and in the story panel. -{: .note } -> Term matching is case-insensitive. `[[loom]]`, `[[Loom]]`, and `[[LOOM]]` all resolve to the same entry, so you can write a term however reads best — for example an acronym as `[[IIIF]]`. +{{< callout "note" >}} +Term matching is case-insensitive. `[[loom]]`, `[[Loom]]`, and `[[LOOM]]` all resolve to the same entry, so you can write a term however reads best — for example an acronym as `[[IIIF]]`. +{{< /callout >}} -## Viewer Experience +## Viewer Experience {#viewer-experience} When a viewer clicks a glossary link: @@ -111,14 +114,14 @@ The viewer stays on the current story step throughout — glossary lookups don't  -## Tips +## Tips {#tips} - **Keep definitions concise** — Viewers are reading them mid-story. A sentence or two is ideal; save extended explanations for story panels. - **Use related terms** to build a network of cross-references. This helps viewers explore connected concepts. - **Prefix demo terms** with `demo-` (e.g., `demo-loom`) to tag them as demo content. - **Test your links** by building the site and checking for glossary warnings in the build output. -## See Also +## See Also {#see-also} - [CSV Reference: Glossary](/docs/your-data/csv-glossary/) — Complete glossary CSV column reference and aliases - [Stories & Panels](/docs/your-content/stories-panels/) — Where glossary links are used diff --git a/docs/6-1-objects-gallery.md b/content/en/docs/site-features/objects-gallery.md similarity index 86% rename from docs/6-1-objects-gallery.md rename to content/en/docs/site-features/objects-gallery.md index d07cdec..7725934 100644 --- a/docs/6-1-objects-gallery.md +++ b/content/en/docs/site-features/objects-gallery.md @@ -1,22 +1,20 @@ --- -layout: docs -title: "6.1. Objects Gallery" -parent: "6. Site Features" -grand_parent: Documentation -nav_order: 1 -lang: en -permalink: /docs/site-features/objects-gallery/ +title: Objects Gallery +url: /docs/site-features/objects-gallery/ +translationKey: docs-site-features-objects-gallery +type: guide +docs_section: reference --- -# Objects Gallery +# Objects Gallery {#objects-gallery} The objects gallery provides a browsable, searchable interface for your collection at `/objects/`. -## Gallery Page +## Gallery Page {#gallery-page} There are two modes, controlled by the `browse_and_search` setting in your `_config.yml`: -### Browse and Search Mode +### Browse and Search Mode {#browse-and-search-mode} When `browse_and_search` is `true` (the default), the gallery includes a **filter sidebar** and a **search bar** for exploring your collection. @@ -54,11 +52,11 @@ Video and audio objects display icon placeholder thumbnails in the gallery grid Active filters and search terms appear as removable chips above the grid. Click **Clear all** to reset. -### Simple Grid Mode +### Simple Grid Mode {#simple-grid-mode} When `browse_and_search` is `false`, the gallery shows a plain grid of object cards without filtering or search. -### Populating Gallery Metadata +### Populating Gallery Metadata {#populating-gallery-metadata} For the best gallery experience, fill in these columns in your `objects.csv`: @@ -70,10 +68,11 @@ For the best gallery experience, fill in these columns in your `objects.csv`: Without these columns, the gallery still works but filtering and sorting options are limited. -{: .note } -> Objects added or uploaded via the Compositor appear in the gallery after publishing. +{{< callout "note" >}} +Objects added or uploaded via the Compositor appear in the gallery after publishing. +{{< /callout >}} -## Featured Objects on the Homepage +## Featured Objects on the Homepage {#featured-objects-on-the-homepage} You can showcase a selection of objects on your homepage by marking them as featured: @@ -88,7 +87,7 @@ collection_interface: The homepage displays up to `featured_count` objects (default: 4). If you mark fewer objects as featured than the count allows, the remaining slots are filled randomly from your collection. -### Homepage Objects Link +### Homepage Objects Link {#homepage-objects-link} The "View the objects" link on the homepage is controlled separately: @@ -99,7 +98,7 @@ collection_interface: Even when the link is hidden, the gallery page remains accessible through the navigation menu. -## Configuration +## Configuration {#configuration} All gallery settings live under `collection_interface` in `_config.yml`: @@ -113,7 +112,7 @@ collection_interface: See [Configuration Reference](/docs/configure/configuration/#collection-interface-settings) for full details on each setting. -## See Also +## See Also {#see-also} - [Objects](/docs/your-content/objects/) — Defining objects and object pages - [Object Columns](/docs/your-data/csv-objects/) — Complete column reference for objects.csv diff --git a/docs/6-3-private-stories.md b/content/en/docs/site-features/private-stories.md similarity index 85% rename from docs/6-3-private-stories.md rename to content/en/docs/site-features/private-stories.md index a07554b..1a76ec6 100644 --- a/docs/6-3-private-stories.md +++ b/content/en/docs/site-features/private-stories.md @@ -1,14 +1,12 @@ --- -layout: docs -title: "6.3. Private Stories" -parent: "6. Site Features" -grand_parent: Documentation -nav_order: 3 -lang: en -permalink: /docs/site-features/private-stories/ +title: Private Stories +url: /docs/site-features/private-stories/ +translationKey: docs-site-features-private-stories +type: guide +docs_section: reference --- -# Private Stories +# Private Stories {#private-stories} Private stories are encrypted so that only viewers with the correct key can read them. Use this feature to share work-in-progress stories with collaborators, restrict access to classroom @@ -16,7 +14,7 @@ materials, or keep sensitive content from public view. **New in v0.8.0.** -## How It Works +## How It Works {#how-it-works} Telar builds every story — private or not — through the same templates. A private story renders exactly like an open one during the Jekyll build. Only after the build finishes does a separate @@ -39,11 +37,11 @@ content is encrypted.  -## Setup +## Setup {#setup} Two things are needed: a key in your config and a flag on each story you want to protect. -### 1. Set the Story Key +### 1. Set the Story Key {#1-set-the-story-key} Add `story_key` to your `_config.yml`: @@ -54,7 +52,7 @@ story_key: "your-secret-key" This key is used to encrypt all private stories. Choose something memorable but not easily guessed. -### 2. Mark Stories as Private +### 2. Mark Stories as Private {#2-mark-stories-as-private} In your `project.csv`, set the `private` column to `yes` for each story you want to encrypt: @@ -66,12 +64,13 @@ order,story_id,title,subtitle,private Stories without `private: yes` remain public. -{: .note } -> `protected` (and the Spanish `protegida`) also work as column names — Telar treats them the -> same as `private`/`privada`. New sites and the examples in this documentation use -> `private`/`privada`. +{{< callout "note" >}} +`protected` (and the Spanish `protegida`) also work as column names — Telar treats them the +same as `private`/`privada`. New sites and the examples in this documentation use +`private`/`privada`. +{{< /callout >}} -## Testing Locally +## Testing Locally {#testing-locally} Plain `bundle exec jekyll serve`, and `scripts/build_local_site.py` in its default (serve) mode, never encrypt anything — Jekyll regenerates `_site` continuously while serving, and encryption is @@ -89,17 +88,17 @@ Then serve the resulting `_site/` directory with a static file server (for examp `python3 -m http.server` run from inside `_site/`). This runs the same encryption step the GitHub Actions build runs, so it can also fail the way a real build would — see Build Failures below. -## Sharing Protected Stories +## Sharing Protected Stories {#sharing-protected-stories} There are two ways viewers can unlock a protected story: -### Key Entry Form +### Key Entry Form {#key-entry-form} When a viewer opens a protected story, they see an overlay with a key entry field. They type the key and press **Enter**. If the key is correct, the overlay fades away and the story appears. If the key is wrong, the form displays an error message and lets them try again. -### Link with Key Parameter +### Link with Key Parameter {#link-with-key-parameter} You can share a direct link that includes the key as a URL parameter: @@ -109,14 +108,15 @@ https://your-site.com/stories/draft-analysis/?key=your-secret-key Viewers who open this link skip the entry form — the story decrypts automatically. -{: .warning } -> The key is visible in the URL when shared this way. Anyone who sees the link (in browser history, chat logs, or email) will have access to the story. +{{< callout "warning" >}} +The key is visible in the URL when shared this way. Anyone who sees the link (in browser history, chat logs, or email) will have access to the story. +{{< /callout >}} -### Session Caching +### Session Caching {#session-caching} Once a viewer unlocks a story, it stays unlocked for the rest of their browser session. Navigating away and returning to the story does not require re-entering the key. Closing the browser clears the cache. -## Security Considerations +## Security Considerations {#security-considerations} Story protection is a **weak privacy guard**, not a security measure. It deters casual access — visitors cannot simply open browser DevTools and read the story content. It does not protect content from a determined person. @@ -144,7 +144,7 @@ site nor its files are publicly reachable, so only people you have granted repos view anything at all. Story protection alone is not a substitute for a private repository when the content genuinely must not be read by unauthorized people. -## Build Failures +## Build Failures {#build-failures} Telar refuses to publish a private story as plaintext. The build can fail in two places rather than deploy unprotected content: @@ -158,7 +158,7 @@ than deploy unprotected content: Either failure prints a message identifying which one happened, in English and Spanish. -## Configuration Reference +## Configuration Reference {#configuration-reference} | Setting | Location | Purpose | |---------|----------|---------| @@ -168,7 +168,7 @@ Either failure prints a message identifying which one happened, in English and S See [Configuration](/docs/configure/configuration/#story-protection) for details on the `story_key` setting. -## See Also +## See Also {#see-also} - [Stories & Panels](/docs/your-content/stories-panels/) — How to build stories - [CSV Reference: Project](/docs/your-data/csv-project/) — The `private` column in project.csv diff --git a/content/en/docs/teaching/_index.md b/content/en/docs/teaching/_index.md new file mode 100644 index 0000000..b4b2d76 --- /dev/null +++ b/content/en/docs/teaching/_index.md @@ -0,0 +1,11 @@ +--- +title: Teaching with Telar +url: /docs/teaching/ +translationKey: docs-teaching +type: guide +extra_css: +- teaching-contact +docs_section: teaching +--- + +{{< section-overview >}} diff --git a/content/en/docs/teaching/request-access.md b/content/en/docs/teaching/request-access.md new file mode 100644 index 0000000..8772430 --- /dev/null +++ b/content/en/docs/teaching/request-access.md @@ -0,0 +1,13 @@ +--- +title: Request teaching-mode access +url: /docs/teaching/request-access/ +translationKey: docs-teaching-request-access +type: guide +docs_hub: true +extra_css: +- showcase +- teaching-contact +docs_section: teaching +--- + +{{< teaching-request >}} diff --git a/content/en/docs/the-compositor/_index.md b/content/en/docs/the-compositor/_index.md new file mode 100644 index 0000000..2bcabde --- /dev/null +++ b/content/en/docs/the-compositor/_index.md @@ -0,0 +1,48 @@ +--- +title: Compositor manual +url: /docs/the-compositor/ +translationKey: docs-the-compositor +type: guide +docs_section: compositor +--- + +# Compositor manual {#compositor-manual} + + + + + +The Telar Compositor is a visual authoring tool for creating and managing Telar exhibitions. It runs in your browser at [compositor.telar.org](https://compositor.telar.org), where you can bring images, video, audio and text together into layered visual narratives without writing code. + +You can use it for digital scholarship, public exhibitions, community storytelling and classroom projects, working on your own or with collaborators. The interface is available in English and Spanish. + +Telar provides the framework for the exhibition your visitors explore. The Compositor gives you a workspace to assemble its content, preview your stories and publish the site. Your published site's content and configuration are kept as files in a GitHub repository. + +## The parts of an exhibition {#the-parts-of-an-exhibition} + +- **Objects** are your source materials: images, video or audio, with their descriptions, sources and credits. +- **Stories** guide visitors through those materials in a sequence of **steps**. Each step combines narrative text with a view of an object or a media clip. +- **Panels and glossary entries** offer further context that visitors can open as they explore. +- **The homepage and supporting pages** introduce the exhibition and help visitors find their way around it. + +You can manage all of these in the Compositor, along with the site's appearance and navigation. + +## How it works {#how-it-works} + +1. **Start a site.** Create a new Telar site or connect one you already have. +2. **Compose your exhibition.** Add your sources, write stories, choose the details each step will show and develop the surrounding context. +3. **Review and publish.** Check your work and publish the changes to GitHub. Telar then builds the public website. + +Your work is saved as you edit. Publishing is a separate action, so you can develop a draft before updating the public site. After publishing, check the website once its build has finished. + + + +## Before you begin {#before-you-begin} + +You need a GitHub account. The [first-site guide](/docs/getting-started/compositor/) takes you through signing in, granting the Telar GitHub App access and creating a site. If you already have a Telar repository, follow [Connect an existing site](/docs/the-compositor/getting-started/). + +If you are still developing your idea, start with [Plan an exhibition](/docs/plan/). For a practical first exercise, the illustrated [khipu walkthrough](/docs/the-compositor/iiif-to-story/) takes one image from an IIIF collection into a story step and shows how to save its framing. + + + +{{< manual-contents >}} diff --git a/content/en/docs/the-compositor/courses.md b/content/en/docs/the-compositor/courses.md new file mode 100644 index 0000000..c3d43f0 --- /dev/null +++ b/content/en/docs/the-compositor/courses.md @@ -0,0 +1,50 @@ +--- +title: Run a course with student sites +url: /docs/the-compositor/courses/ +translationKey: docs-the-compositor-courses +type: guide +docs_draft: true +docs_section: compositor +--- + +# Run a course with student sites {#run-a-course-with-student-sites} + +A course shares an object collection with sites made by student groups. Each group works on its own exhibition; course staff can enter its site through the course screen. + +Course creation appears only for accounts with course access. If the option is absent, you can still create a normal exhibition site. + +## Create the course collection {#create-the-course-collection} + +When creating a project, choose the course option. Add the objects the class will work with and review their titles, credits and source addresses. + +Prepare a small sample narrative and the [workshop quick guide](/start/) before the session. Students need both a technical route and a question they can investigate with the materials. + +Open the course's management screen with its access password when prompted. Keep that password separate from the join codes you give students. + +## Give students a class code {#give-students-a-class-code} + +Open **Course**, choose **New code** and select the class-code option. Add a label so you can distinguish sections and set an expiry where needed. + +Students enter this code when creating their site. The convenor of an existing site can also enter it in that site's settings. Joining attaches the site to the course and brings in its collection. + +A student group should join with its site, rather than treating a staff code as a class code. + +## Add teaching staff {#add-teaching-staff} + +Create a separate staff code for instructors. Whoever enters it joins as an instructor, so share it only with the intended teaching team. + +The course screen lists enrolled sites and their members. Open a site from that list to review its stories and help with authoring. Instructor access is tied to course membership. + +## Manage the course over time {#manage-the-course-over-time} + +Deactivate a code when it should admit no one else. Deactivation does not remove sites or staff who already joined. + +Removing a site from a course lets the group continue independently. The site keeps the objects it received as ordinary objects, and course staff lose their course-derived membership in that site. Review the confirmation before removing it. + +## Understand what a code protects {#understand-what-a-code-protects} + +A join code controls course membership. It does not restrict access to externally hosted images. Those images remain on the servers their manifests point to; a class code or story key does not make a public image private. + +Check the material's publication conditions before sharing it through a course. + +**Before the workshop:** test the join process with a teaching example, confirm the object collection and give students the short guide link. Use [planning an exhibition](/docs/plan/) for the narrative exercise. diff --git a/content/en/docs/the-compositor/dashboard.md b/content/en/docs/the-compositor/dashboard.md new file mode 100644 index 0000000..f219712 --- /dev/null +++ b/content/en/docs/the-compositor/dashboard.md @@ -0,0 +1,67 @@ +--- +title: Start and navigation +url: /docs/the-compositor/dashboard/ +translationKey: docs-the-compositor-dashboard +type: guide +docs_section: compositor +--- + + + +# Start and navigation {#start-and-navigation} + +The **Start** page introduces the active project, shows its recent activity and links to the main parts of the Compositor. Use the navigation across the top to move between **Objects**, **Stories**, **Glossary**, **Home and Pages**, **Site settings** and **Publish**. + +## Site preview {#site-preview} + +Edit your exhibition's landing-page content in **Home and Pages**. The **Start** page is a project overview; it is not the editor for the public homepage. + +## Welcome message {#welcome-message} + +Open **Home and Pages** to edit the introduction that visitors see on your site. Review the site's title, description and interface language in **Site settings**. Publish when you want these changes to reach the public site. + +## Stories {#stories} + +The **Stories** page lists the narratives in your exhibition. + +### View and open stories {#view-and-open-stories} + +Choose **Edit** on a story to open the [Story Editor](/docs/the-compositor/story-editor/). Each row shows its title and number of steps. + +### Create a new story {#create-a-new-story} + +1. Choose **+ New Story**. +2. Enter a title and, if needed, a subtitle and byline. +3. Choose **Save** to create the story and open its editor. + +### Reorder stories {#reorder-stories} + +Drag a story by its handle to change the order in which stories appear on the public site. The new order is included when you publish. + +### Delete a story {#delete-a-story} + +Use **Delete story** and read the confirmation before continuing. Your public site changes when the deletion is published. Check the available **Undo** control if you removed something by mistake. + +### Draft and private toggles {#draft-and-private-toggles} + +- **Draft** excludes a story from the public exhibition. Use it while preparing work that should not appear. +- **Private** controls access to the story's content. Read [Private Stories](/docs/site-features/private-stories/) before relying on this for a project. + +{{< media id="stories" >}} + +## Project switching {#project-switching} + +Use the project name in the header to switch between connected sites. Each site has its own collection, stories and unpublished changes. + +## Status bar {#status-bar} + +The header shows the connection state and whether the active project has unpublished changes. Wait for the connection to be ready before editing. Use **Publish** to review the changes and follow the resulting site build. + +The collaboration control opens information about the project's team and activity. Your user menu leads to **Account**, where **Interface language** changes the Compositor's labels. It does not translate your exhibition's text; the public site's interface language is a separate setting. + +## See also {#see-also} + +- [Workshop quick guide](/start/) — A short path through the first story +- [Objects](/docs/the-compositor/objects/) — Add and manage sources +- [Story Editor](/docs/the-compositor/story-editor/) — Compose steps and panels +- [Publishing](/docs/the-compositor/publishing/) — Review and publish diff --git a/docs/9-1-getting-started.md b/content/en/docs/the-compositor/getting-started.md similarity index 53% rename from docs/9-1-getting-started.md rename to content/en/docs/the-compositor/getting-started.md index a21153f..1667fa2 100644 --- a/docs/9-1-getting-started.md +++ b/content/en/docs/the-compositor/getting-started.md @@ -1,18 +1,18 @@ --- -layout: docs -title: "9.1. Getting Started" -parent: "9. The Compositor" -grand_parent: Documentation -nav_order: 1 -lang: en -permalink: /docs/the-compositor/getting-started/ +title: Connect an existing site +url: /docs/the-compositor/getting-started/ +translationKey: docs-the-compositor-getting-started +type: guide +docs_section: compositor --- -# Getting started with the Compositor + -This page walks you through signing in to the Compositor, connecting a repository, and importing your content. By the end, you will have your exhibition loaded in the Compositor and ready to edit. +# Connect an existing site {#connect-an-existing-site} -## Prerequisites +Use this guide when your Telar repository already exists. To start a new project, follow [Create your first site](/docs/getting-started/compositor/). + +## Prerequisites {#prerequisites} Before you begin, make sure you have: @@ -20,7 +20,7 @@ Before you begin, make sure you have: - A **Telar repository** — create one from the [Telar template](https://github.com/UCSB-AMPLab/telar) (see [Use the Compositor](/docs/getting-started/compositor/) for step-by-step instructions) - **GitHub Pages enabled** — in your repository settings, set the Pages source to **GitHub Actions** -## Sign in +## Sign in {#sign-in} The Compositor uses your GitHub account for authentication and publishing. No separate account is needed. @@ -28,7 +28,7 @@ The Compositor uses your GitHub account for authentication and publishing. No se 2. Click **Sign in with GitHub** 3. Authorize the Telar Compositor when GitHub prompts you -## Install the GitHub App +## Install the GitHub App {#install-the-github-app} On your first sign-in, the Compositor asks you to install the Telar GitHub App. This app gives the Compositor permission to read and write to your repositories. @@ -36,10 +36,11 @@ On your first sign-in, the Compositor asks you to install the Telar GitHub App. 2. Choose whether to grant access to all repositories or only specific ones 3. Confirm the installation -{: .tip } -> If you only want the Compositor to access one repository, select **Only select repositories** and choose it from the list. You can change this later in your GitHub settings under **Applications**. +{{< callout "tip" >}} +If you only want the Compositor to access one repository, select **Only select repositories** and choose it from the list. You can change this later in your GitHub settings under **Applications**. +{{< /callout >}} -## Connect a repository +## Connect a repository {#connect-a-repository} After signing in, you select which repository to work with. @@ -49,20 +50,15 @@ After signing in, you select which repository to work with. If the repository was created from the Telar template and has content in `telar-content/`, the Compositor imports it automatically. -## Import from Google Sheets - -If your Telar site uses Google Sheets as its data source, the Compositor can import directly from your spreadsheet. +## Import from Google Sheets {#import-from-google-sheets} -1. When the Compositor detects a Google Sheets URL in your site configuration, it offers to import from Sheets -2. Confirm the import to pull your current content into the Compositor -3. After your first publish through the Compositor, you can optionally disable the Google Sheets connection — the Compositor becomes your primary editor +If the site uses Google Sheets, follow the import and settings checks shown by the Compositor. Review the content that is imported and any request to switch off the Sheets connection before proceeding with visual authoring. -{: .note } -> Importing from Google Sheets does not delete or modify your spreadsheet. It copies the data into the Compositor so you can edit it visually. +Your spreadsheet is not deleted by importing it. Decide which authoring method will manage future changes; do not assume edits in the Compositor automatically update the original sheet. -## After import +## After import {#after-import} -Once the import completes, you land on the [Dashboard](/docs/the-compositor/dashboard/). From here you can: +After import and the setup checks, use the [main navigation](/docs/the-compositor/dashboard/) to: - View and manage your stories - Browse and edit your objects @@ -70,8 +66,8 @@ Once the import completes, you land on the [Dashboard](/docs/the-compositor/dash Your imported content is saved on the server. Changes you make are not sent to GitHub until you publish — so you can explore and experiment freely. -## See also +## See also {#see-also} -- [Dashboard](/docs/the-compositor/dashboard/) — Navigate your project and manage stories +- [Start and navigation](/docs/the-compositor/dashboard/) — Navigate your project and manage stories - [Objects](/docs/the-compositor/objects/) — Browse, edit, and add objects - [Use the Compositor](/docs/getting-started/compositor/) — Create a repository and enable GitHub Pages diff --git a/content/en/docs/the-compositor/glossary.md b/content/en/docs/the-compositor/glossary.md new file mode 100644 index 0000000..83d185e --- /dev/null +++ b/content/en/docs/the-compositor/glossary.md @@ -0,0 +1,53 @@ +--- +title: Create and link glossary entries +url: /docs/the-compositor/glossary/ +translationKey: docs-the-compositor-glossary +type: guide +docs_draft: true +docs_section: compositor +--- + +# Create and link glossary entries {#create-and-link-glossary-entries} + +Use the glossary for definitions and context that readers may need in more than one place. A term has an ID used in links, a title readers see, a kind and a definition. + +## Add an entry {#add-an-entry} + +1. Open **Glossary** in the main navigation. +2. If you are the site's convenor, choose **+ New Term**. +3. Write a useful title and a definition that can stand on its own. +4. Choose the kind: key term, primary source, person or entity, or place. +5. Check **How readers see this**. + +The convenor adds and deletes entries and changes their IDs. Other team members can work on the content of existing entries. If the creation control is absent, ask your convenor to add the term. + +{{< media id="glossary" >}} + +## Link it from a story {#link-it-from-a-story} + +In a panel's text editor, use **Insert glossary link** and search for the term. Choose custom link text when the sentence needs a different form. + +You can also write the link directly: + +```text +[[khipu]] +[[khipu|knotted cords]] +``` + +The text before the vertical bar is the term ID, not its display title. Use the ID of the entry you created. Check the link in the preview and again on the published site. + +## Review where a term is used {#review-where-a-term-is-used} + +The **Used in** list shows references in stories, pages and other terms. Open a reference to inspect its context before changing a definition that several passages rely on. + +A short definition works best when it answers the reader's immediate question. Place a longer discussion of one source in that step's panel and link to the glossary where shared context is needed. + +## Change an ID or a kind carefully {#change-an-id-or-a-kind-carefully} + +The convenor can change a term ID. The Compositor updates its internal links, but the public address changes on the next publication. Links shared outside the project will still point to the old address. + +**Edit kinds** lets the convenor add site-specific categories with an ID, a label shown in the panel and a heading for the glossary page. These labels should be in the exhibition's language. + +Deleting an entry leaves references to it unresolved. Use **Used in** first and replace or remove the links before publishing. + +**Check your work:** open the term from a story panel, verify the displayed wording and return to the same step. Then [arrange the homepage and pages](/docs/the-compositor/pages/). diff --git a/content/en/docs/the-compositor/iiif-to-story.md b/content/en/docs/the-compositor/iiif-to-story.md new file mode 100644 index 0000000..820a1ae --- /dev/null +++ b/content/en/docs/the-compositor/iiif-to-story.md @@ -0,0 +1,115 @@ +--- +title: Use an IIIF object in a story +url: /docs/the-compositor/iiif-to-story/ +translationKey: docs-the-compositor-iiif-to-story +type: guide +docs_section: compositor +--- + +# Use an IIIF object in a story {#use-an-iiif-object-in-a-story} + +Connect an image held elsewhere to your exhibition, choose it for a story step and capture the view you want visitors to see.
+ + + +If the khipu is already in your collection, go straight to Use it in a step.
+ +Three separate actions: adding an object makes it available in the Compositor. Choosing it in a step brings it into your story. Publishing sends your changes to the repository so your site can rebuild.
https://juancobo.com/138la/iiif/khipu/p7/manifest.json+ + + + +Wait for the preview to load. This example is labelled “Haptic khipu — Taking a sample from the khipu for radio-carbon dating, Spring 2025”. + +## 3. Review the object {#metadata} + +Review **Title**, **Creator**, **Year**, **Description**, **Source** and **Credit**. The provider may supply only some of them. Retain the source and credit information and fill any gaps from reliable cataloguing information. + +Scroll within the dialog to review the remaining fields. + +The interface language does not translate the metadata supplied by a manifest. You can review the wording for your exhibition. + +{{< media id="import" >}} + +Choose **Add object**. The object should appear in your collection. Open its record to check the image and add a **Description for accessibility**. + + + +## 4. Use it in a step {#choose} + +1. Open **Stories** and choose the story you want to edit. +2. Choose **+ Add step**. +3. If the new-step dialog offers to keep the previous object, choose **Choose another object**. +4. Select the khipu from the object picker. You can also use **Change object** on an existing step. + +The step should now show the imported image. Write a question and a short answer. For this exercise, you could use: + +**Question:** Which activity does this image document? + +**Answer:** Sampling a khipu for radiocarbon dating in spring 2025. + +These sentences describe this example. Your own story should develop the questions you want your visitors to explore. + +{{< media id="editor-overview" >}} + +## 5. Capture the framing {#frame} + +1. Pan and zoom to the detail you want to show. +2. Use the framing guides to understand the area the step will preserve. +3. Choose **Capture position**. +4. Check that the control confirms **Captured**. + +
Capture after framing. Moving the viewer lets you explore the object. Capture position records the view for this step. Capture it again if you change the framing you want to preserve.
Review the proposed screencast and its exact captions →
diff --git a/content/en/docs/the-compositor/objects.md b/content/en/docs/the-compositor/objects.md new file mode 100644 index 0000000..bbb6a79 --- /dev/null +++ b/content/en/docs/the-compositor/objects.md @@ -0,0 +1,106 @@ +--- +title: Objects +url: /docs/the-compositor/objects/ +translationKey: docs-the-compositor-objects +type: guide +docs_section: compositor +--- + +# Objects {#objects} + +The Objects page in the Compositor lets you browse, edit, and add the visual items that make up your exhibition. Every object you manage here — images, IIIF manifests, videos, audio files — is tracked in your repository's `objects.csv` file. The Compositor handles that file for you, so you never need to edit it directly. + +## Object list {#object-list} + +The object list shows all objects in your exhibition as a list with thumbnails. Each object displays: + +- A **thumbnail** preview of the image or media +- The object's **title** +- A **status indicator** showing its current state + +### Status indicators {#status-indicators} + +The status reports availability; it does not mean the catalogue description has been fully reviewed. + +- **Ready** — The object has a title and passes the image-availability check where that check applies. +- **No metadata** — The title is missing. Review the record and add its title and other useful catalogue information. +- **Needs tiles** — The image is not yet available. For a hosted file, check its build and generated tiles; for an external source, check the manifest. +- **Missing from repo** — The record has been flagged as absent from the repository. Review the repository comparison before deciding what to keep. + +### Featured toggle {#featured-toggle} + +You can mark any object as featured. Featured objects appear prominently on your site's home page and in the objects gallery. + +To toggle an object's featured status, click the featured indicator on the object row. + +{{< media id="objects" >}} + +## Edit metadata {#edit-metadata} + +Select an object to open its metadata editor. Here you can fill in or update the information that describes the object in your exhibition. + +The metadata fields are: + +| Field | Description | +|---|---| +| **Title** | The name of the object as it appears on your site | +| **Creator** | The person or organization that created the object | +| **Year** | When the object was created or published | +| **Description** | A short summary of what the object depicts or contains | +| **Source** | Where the object comes from — a collection, archive, or URL | +| **Alt text** | A description for screen readers and accessibility | +| **Genre / Medium** | The type of object — photograph, painting, map, manuscript, etc. | + +{{< callout "tip" >}} +Alt text is important for accessibility. Write a brief, descriptive sentence that conveys what the image shows to someone who cannot see it. +{{< /callout >}} + +{{< media id="object-metadata" >}} + +## Add external IIIF {#add-external-iiif} + +1. Open **Objects** and choose **+ Add object**. +2. Select **IIIF manifest**. +3. Paste the manifest URL and choose **Fetch manifest**. +4. Review the preview, title, source, credit and any other supplied metadata. +5. Choose **Add object**. + +Adding the object makes it available in the collection. Select it separately in a story step using **Change object**. + +Follow [Use an IIIF object in a story](/docs/the-compositor/iiif-to-story/) for the complete illustrated khipu example. See [External IIIF Images](/docs/your-content/external-iiif/) for background. + +{{< media id="import" >}} + +## Upload images {#upload-images} + +You can upload your own images directly through the Compositor. Uploaded images are committed to your repository and IIIF tiles are generated automatically during the next build. + +1. Click **Add object** and select the upload option +2. Drag files into the upload area, or click to select files from your computer +3. Fill in metadata while the upload processes +4. Save the object to your project + +Supported formats are JPG, PNG, and TIFF, with a maximum file size of 25 MB per image. + +{{< callout "note" >}} +After uploading, the object's status may show **Needs tiles** until you publish and the GitHub Actions build generates the IIIF tiles. The object is still usable in the Compositor — tiles will be available on your live site after the build completes. +{{< /callout >}} + +## Save to repository {#save-to-repository} + +When you save changes to objects — whether editing metadata, adding IIIF, or uploading images — those changes are saved in the Compositor draft. To send them to GitHub, you need to publish. + +Publishing commits an updated `objects.csv` to your repository along with any uploaded image files. See [Publishing](/docs/the-compositor/publishing/) for the full workflow. + +## Sync {#sync} + +When objects change outside the Compositor, use the project's **Changes on GitHub** review. Read the differences and choose which version to keep before applying them. See [Sync and Updates](/docs/the-compositor/sync-updates/). + +Unpublished editing and publishing are separate. Review the consequences shown for the affected object rather than re-importing the entire project. + +## See also {#see-also} + +- [Start and navigation](/docs/the-compositor/dashboard/) — Return to the project overview +- [Objects](/docs/your-content/objects/) — How objects work in Telar +- [External IIIF Images](/docs/your-content/external-iiif/) — Background on IIIF manifests and sources +- [Self-Hosted Images](/docs/your-content/self-hosted-images/) — How uploaded images become IIIF tiles diff --git a/content/en/docs/the-compositor/pages.md b/content/en/docs/the-compositor/pages.md new file mode 100644 index 0000000..f433dab --- /dev/null +++ b/content/en/docs/the-compositor/pages.md @@ -0,0 +1,53 @@ +--- +title: Arrange the homepage and pages +url: /docs/the-compositor/pages/ +translationKey: docs-the-compositor-pages +type: guide +docs_draft: true +docs_section: compositor +--- + +# Arrange the homepage and pages {#arrange-the-homepage-and-pages} + +Open **Home and Pages** to edit the exhibition's introduction, arrange its menu and create supporting pages. + +## Edit the homepage {#edit-the-homepage} + +Select the pinned **Home** entry. Edit the site title and description, welcome text, and headings or introductions for the stories and objects sections. + +These fields describe the whole exhibition. Explain what visitors can explore and give them a clear starting point. Keep the longer introduction to an individual story inside that story. + +Arrange story cards in the order you want readers to encounter them. Story drafts remain excluded from publication. The collection's display settings live in **Site settings**, while the objects' featured status and metadata are edited in **Objects**. + +{{< media id="homepage" >}} + +## Add a supporting page {#add-a-supporting-page} + +1. Choose **Add page**. +2. Add a title, such as About, Team or Methodology. +3. Write the page's content using the text editor. +4. Check its URL and the menu preview. + +A page is useful for information that should remain available outside a story: credits, contributors, research methods or acknowledgements. It does not have the sequence of framed steps that a story has. + +If the Compositor finds existing pages in the repository, it offers to import them. Review the imported content before replacing or duplicating it. + +{{< media id="pages" >}} + +## Arrange the menu {#arrange-the-menu} + +Use the navigation preview to reorder the menu items and choose the page you want to edit. Keep destination names short and recognisable. + +The pinned Home entry in the editing sidebar does not force Home to be first in the published menu. Check the menu preview itself to confirm the public order. + +## Check page addresses {#check-page-addresses} + +A page's URL must be unique and cannot use an address reserved by the site. The Compositor explains collisions beside the field. + +Changing an address affects the next publication. Existing links to the old address will no longer reach the page. Update links in your content and any places where you have shared it. + +## Review the complete route {#review-the-complete-route} + +After publishing, begin at the homepage, open each menu item and check that the intended title, content and story order appear. A change saved in the editor is not yet a change to the public site. + +Next, [adjust appearance and site settings](/docs/the-compositor/settings/). diff --git a/docs/9-6-publishing.md b/content/en/docs/the-compositor/publishing.md similarity index 76% rename from docs/9-6-publishing.md rename to content/en/docs/the-compositor/publishing.md index b09c0c7..89b624b 100644 --- a/docs/9-6-publishing.md +++ b/content/en/docs/the-compositor/publishing.md @@ -1,24 +1,22 @@ --- -layout: docs -title: "9.6. Publishing" -parent: "9. The Compositor" -grand_parent: Documentation -nav_order: 6 -lang: en -permalink: /docs/the-compositor/publishing/ +title: Publishing +url: /docs/the-compositor/publishing/ +translationKey: docs-the-compositor-publishing +type: guide +docs_section: compositor --- -# Publishing +# Publishing {#publishing} Publishing sends your changes from the Compositor to your GitHub repository. Until you publish, all edits — to objects, stories, and settings — are saved on the server. Publishing creates a single commit in your repository, triggers a GitHub Pages build, and makes your changes live on your site. -## Change summary +## Change summary {#change-summary} Before publishing, the Compositor shows a summary of everything that has changed since your last publish. This lets you review your work before committing. The change summary lists additions, modifications, and deletions across your project — new objects, edited story steps, updated metadata, and any other changes you have made. Review this summary carefully to make sure it reflects what you intend to publish. -## Pre-publish validation +## Pre-publish validation {#pre-publish-validation} The Compositor validates your project before allowing you to publish. Validation catches issues that could cause problems on your live site. @@ -27,13 +25,15 @@ There are two levels of validation: - **Errors** — Critical issues that block publishing. For example, a required field might be missing or a story might reference an object that does not exist. You must fix errors before you can publish. - **Warnings** — Non-critical issues that do not block publishing but are worth reviewing. For example, an object might be missing alt text or a story might have only one step. You can publish with warnings, but addressing them improves your exhibition. -## Publish +{{< media id="upgrade" >}} -When you are ready, click the publish button. The Compositor creates a single atomic commit in your GitHub repository containing all your changes. The commit is attributed to your GitHub account — your name and email appear in the repository's commit history, not the Compositor's. +## Publish {#publish} -Publishing triggers a GitHub Pages build automatically. You do not need to visit GitHub or run any additional steps. +When you are ready, use the publish control. The Compositor sends the reviewed changes to your repository through its installed GitHub App. The commit body records **Published by @your-github-login**. -## Build tracking +Publishing and completing the site build are separate stages. Follow the build status before checking the public site. + +## Build tracking {#build-tracking} After publishing, the Compositor tracks the progress of your GitHub Pages build in real time. A progress indicator shows the current status: @@ -44,11 +44,11 @@ After publishing, the Compositor tracks the progress of your GitHub Pages build If a build fails, the Compositor displays the error information so you can diagnose the issue. Common causes include invalid YAML in configuration files or missing required files. You can fix the issue and publish again. -## Post-publish +## Post-publish {#post-publish} Once the build completes successfully, the Compositor provides a direct link to your live site. Click it to see your published changes immediately. -## Config editor +## Config editor {#config-editor} The Compositor includes a configuration editor for essential site settings. Instead of editing your `_config.yml` file directly through GitHub, you can update key fields through a form in the Compositor. @@ -56,12 +56,13 @@ The config editor lets you change settings like your site title, theme options, If your site's `_config.yml` is written in a way that doesn't let the Compositor save your **Site settings** in it, the **Publish** page tells you and offers to rewrite the file. Click **Review the rewrite** to see what will happen. The Compositor rebuilds `_config.yml` from the template for the version of Telar your site uses and keeps the settings from your file as they are. The review lists the settings that will take their value from **Site settings** or from the template, and any lines the Compositor can't read, which will be removed. Comments between settings aren't kept. When you click **Accept the rewrite**, the Compositor writes the new file the next time you publish; the old one stays in your site's history on GitHub. Anyone who can edit **Site settings** can accept the rewrite. -{: .note } -> The config editor covers the most commonly used settings. For advanced configuration options, you can still edit `_config.yml` directly in your repository. See [Configuration](/docs/configuration/) for the full reference. +{{< callout "note" >}} +The config editor covers the most commonly used settings. For advanced configuration options, you can still edit `_config.yml` directly in your repository. See [Configuration](/docs/configure/configuration/) for the full reference. +{{< /callout >}} -## See also +## See also {#see-also} - [Story Editor](/docs/the-compositor/story-editor/) — Building and editing your stories - [Objects](/docs/the-compositor/objects/) — Managing objects in the Compositor - [Sync and Updates](/docs/the-compositor/sync-updates/) — Keeping your project in sync with your repository -- [Dashboard](/docs/the-compositor/dashboard/) — Return to the project overview +- [Start and navigation](/docs/the-compositor/dashboard/) — Return to the project overview diff --git a/content/en/docs/the-compositor/settings.md b/content/en/docs/the-compositor/settings.md new file mode 100644 index 0000000..ffd3a4f --- /dev/null +++ b/content/en/docs/the-compositor/settings.md @@ -0,0 +1,53 @@ +--- +title: Adjust appearance and site settings +url: /docs/the-compositor/settings/ +translationKey: docs-the-compositor-settings +type: guide +docs_draft: true +docs_section: compositor +--- + +# Adjust appearance and site settings {#adjust-appearance-and-site-settings} + +Use **Site settings** for the exhibition's identity, language, theme, display options and hosting address. The page distinguishes settings that every editor can change from those reserved for the convenor. + +## Set the identity and language {#set-the-identity-and-language} + +Review the site title, description, author and contact email. The title and description should agree with the homepage introduction. + +The site's language controls interface text supplied by Telar. Your account's language controls the Compositor interface. Changing either setting does not translate the content you wrote. + +Choose a theme from those available in your repository. The convenor can refresh the list when themes have changed on GitHub. Preview the result with your actual text and images. + +{{< media id="theme-language" >}} + +## Decide what the homepage shows {#decide-what-the-homepage-shows} + +Story settings control story visibility on the homepage, the step indicator and object credits. Collection settings control browsing, the collection link, featured objects and whether objects or stories appear first. + +Use a story-led homepage when a guided route is the main invitation. Use collection mode when visitors should first explore a set of objects. Check the resulting homepage after publication. + +## Understand the convenor's settings {#understand-the-convenors-settings} + +Only the convenor can change the hosting URL and base path, the story key, Google Sheets integration and inclusion of demo content. Other members can change editorial settings such as titles, theme and display options. + +- **Site URL** is the domain, such as `https://example.github.io`. +- **Base URL** is the path, such as `/my-exhibition`; leave it empty for a domain-root site. +- The story key is used for stories marked private. It is separate from the draft flag. +- Demo content is sample material; turn it off when it no longer belongs in your exhibition. + +An address change affects links throughout the site. Confirm the address and hosting arrangement before publishing it. + +## Choose one content source {#choose-one-content-source} + +If Google Sheets remains enabled, a build can fetch the sheet and replace the objects and stories you edited visually. Read the notice in settings. The Compositor's object-saving workflow switches the project to Compositor-managed content. + +Before switching methods, review the latest sheet content and the unpublished editor changes. The Compositor does not write your edits back to Google Sheets. + +{{< media id="preferences" >}} + +## Save and publish {#save-and-publish} + +Use **Save Changes** on the settings page and wait for confirmation. Then review the publication separately. Check the live homepage, menu and a story after the build completes. + +See [publishing](/docs/the-compositor/publishing/) for the complete process. diff --git a/content/en/docs/the-compositor/story-editor.md b/content/en/docs/the-compositor/story-editor.md new file mode 100644 index 0000000..985240c --- /dev/null +++ b/content/en/docs/the-compositor/story-editor.md @@ -0,0 +1,90 @@ +--- +title: Story Editor +url: /docs/the-compositor/story-editor/ +translationKey: docs-the-compositor-story-editor +type: guide +docs_section: compositor +--- + +# Story Editor {#story-editor} + +Open a story from **Stories** to write its questions, brief answers and optional panels. The editor combines the story outline, editable text and the view visitors will see. + +The sidebar uses a **square** for the title card, **circles** for steps and an **upward triangle** for the final step. A step's first panel branches from it; a second panel branches from the first. + +{{< media id="editor-overview" >}} + +## Title card {#title-card} + +Select the title card at the top of the outline. Click its title, subtitle or byline, or the corresponding editing icon, to change the field. Your edits are saved as you work. + + + +## IIIF viewer {#iiif-viewer} + +Select an image step and choose **Change object** to pick its source. Pan and zoom to the detail you want visitors to see. + +To save the view: + +1. Select the step. +2. Pan and zoom to the intended framing. +3. Choose **Capture position**. +4. Check the **Captured** confirmation. +5. Move to the title card or another step, then return and check the saved view. + +{{< callout "note" >}} +Panning and zooming explore the object. **Capture position** records the framing for the selected step. Capture again if you change the view you want to preserve. +{{< /callout >}} + +{{< media id="framing" >}} + +The guides indicate the frame and the centre of the view. The text-limit guide helps you see how much of the brief answer fits in the public card. + +## Step management {#step-management} + +- **+ Add step** creates a step. If you are offered the previous object, you can keep it or choose another. +- **Change object** selects a different source for the current step. +- Drag a step by its handle to change its position. +- Use the step's delete control and read the confirmation before removing it. +- **Add section title** inserts a heading that groups parts of the story. + +Write a question and a brief answer on each step card. Click the text or its editing icon. The answer field accepts Markdown; click outside it to review the rendered text. + +Video and audio steps have media controls in place of the image viewer. See [Video and Audio](/docs/the-compositor/video-audio/). + +## Layer editing {#layer-editing} + +Choose **+ Add panel** on a step card, or open an existing panel using its button. Edit the panel's title and content in place using the text or editing icons. The first panel can offer a button to a second panel. + +Keep the main answer concise. Use panels for the context, evidence and nuance a reader may choose to explore. + +{{< media id="panels" >}} + +### Formatting toolbar {#formatting-toolbar} + +When editing panel content, use the formatting controls or write Markdown directly. Review the rendered panel after editing. See [Markdown Syntax](/docs/your-content/markdown-syntax/) and [Rich Content](/docs/your-content/rich-content/) for supported content. + +{{< media id="panel-editor" >}} + +### Keyboard shortcuts {#keyboard-shortcuts} + +Standard editing shortcuts depend on the focused field. Keep the text editor focused when applying a formatting command. Use the toolbar when you are unsure which command is available. + +### Image insertion {#image-insertion} + +Use the panel editor's image controls to add an image, and supply the information the dialog requests. A panel image is part of the explanation; the step's main source is selected separately through **Change object**. + +### Rich paste {#rich-paste} + +When bringing text from another application, check the resulting formatting, links and spacing in the rendered panel before publishing. + +### Embed preservation {#embed-preservation} + +For embedded media and interactive content inside panels, follow [Rich Content](/docs/your-content/rich-content/) and [Widgets](/docs/your-content/widgets/). Check the actual published result as well as the editor preview. + +## See also {#see-also} + +- [Use an IIIF object in a story](/docs/the-compositor/iiif-to-story/) +- [Start and navigation](/docs/the-compositor/dashboard/) +- [Video and Audio](/docs/the-compositor/video-audio/) +- [Publishing](/docs/the-compositor/publishing/) diff --git a/content/en/docs/the-compositor/sync-updates.md b/content/en/docs/the-compositor/sync-updates.md new file mode 100644 index 0000000..7d9e0d8 --- /dev/null +++ b/content/en/docs/the-compositor/sync-updates.md @@ -0,0 +1,55 @@ +--- +title: Sync and Updates +url: /docs/the-compositor/sync-updates/ +translationKey: docs-the-compositor-sync-updates +type: guide +docs_section: compositor +--- + +# Sync and Updates {#sync-and-updates} + +The Compositor checks for changes made on GitHub as well as available Telar updates. A change made outside the editor needs review before it is applied to your draft. + +## On return detection {#on-return-detection} + +When you open a connected project, the Compositor checks its repository. If GitHub has changed, follow the review prompt. The review covers the affected objects, stories, settings, glossary terms and pages. + +## Re-sync {#re-sync} + +The **Changes on GitHub** review shows what differs and asks which version to keep where a choice is needed. + +1. Read each change and its consequence. +2. Choose GitHub's version or the Compositor's version, as appropriate. +3. Resolve the choices the review requires. +4. Choose **Apply these choices** when the result is the one you intend. + +Keeping the Compositor's version means the next publish sends that version to GitHub. Taking GitHub's version applies the corresponding content to the Compositor. Unpublished changes made only in the Compositor are kept. + +{{< callout "note" >}} +Sync review and publishing are separate actions. Review the consequences shown for each item; do not use re-importing as a routine way to undo a small editing mistake. +{{< /callout >}} + +If files cannot be read or the repository changes while you are reviewing, follow the message and refresh the comparison before applying it. + +## Version detection {#version-detection} + +The Compositor checks the version of Telar used by your site and may ask you to upgrade before continuing. + +## Upgrade page {#upgrade-page} + +Review the current and target versions, release notes and grouped file changes. An upgrade can update framework files and migrate settings needed by the new version. Read the proposed changes before accepting them. + +{{< media id="upgrade" >}} + +## One-click upgrade {#one-click-upgrade} + +Follow the upgrade controls, wait for the operation and site build to complete, then follow the return link. Check the site before continuing with the work that prompted the upgrade. + +Your repository's history records the changes made by the upgrade. If something does not look right, use the build information and the proposed file list to understand what changed. + +## See also {#see-also} + +- [Publishing](/docs/the-compositor/publishing/) +- [Start and navigation](/docs/the-compositor/dashboard/) +- [Connect an existing site](/docs/the-compositor/getting-started/) +- [Upgrading Telar](/docs/setup/upgrading/) — Framework upgrade reference diff --git a/content/en/docs/the-compositor/team.md b/content/en/docs/the-compositor/team.md new file mode 100644 index 0000000..bb895a7 --- /dev/null +++ b/content/en/docs/the-compositor/team.md @@ -0,0 +1,44 @@ +--- +title: Work with a team +url: /docs/the-compositor/team/ +translationKey: docs-the-compositor-team +type: guide +docs_draft: true +docs_section: compositor +--- + +# Work with a team {#work-with-a-team} + +Team members work on the same project in the Compositor. The project role and GitHub repository access are related but separate: someone may be able to edit in the Compositor while a GitHub invitation still needs attention. + +## Invite a collaborator {#invite-a-collaborator} + +The convenor can use the project's team controls to choose **+ Invite Collaborator** and enter a GitHub username. + +If that person already has a Compositor account, the project can be added to their account. Otherwise, the Compositor supplies an invitation link for you to share within 48 hours. Check the pending invitations list if they have not joined. + +Invite the account the person actually uses to sign in. A display name or email address is not a GitHub username. + +## Understand project roles {#understand-project-roles} + +- The **convenor** manages project membership and structural settings. +- A **collaborator** edits content and can publish, upload files and run an upgrade. +- An **instructor** receives editorial access through a course and has the same publishing rights. + +Some structural controls, including creating glossary entries and changing their IDs, belong to the convenor. Deletion controls also consider who created an item. The interface explains when your role cannot perform an action. + +## Check repository access {#check-repository-access} + +Open **Repository access** to see the GitHub status for each member. A pending invitation needs acceptance; an expired invitation can be reissued by the convenor. + +Members can accept their own invitation from this page or follow the GitHub invitation link if the Compositor cannot accept it. The convenor can add or withdraw repository access for other members where the controls allow it. + +Publishing uses the installed GitHub App. A successful Compositor publish does not by itself confirm that every member has accepted personal GitHub access. + +## Coordinate edits and publication {#coordinate-edits-and-publication} + +Wait for the collaboration connection to settle before starting. Agree who will edit a passage and who will publish the shared changes. Review the publication list together when several people have been working. + +Removing a collaborator takes away project access. Course instructors are managed through the course and cannot be removed individually while the site remains attached to it. + +**Check your work:** ask the collaborator to sign in, open the intended project and confirm their role. Continue with [course projects](/docs/the-compositor/courses/) if you are teaching a class. diff --git a/content/en/docs/the-compositor/troubleshooting.md b/content/en/docs/the-compositor/troubleshooting.md new file mode 100644 index 0000000..fc01ba7 --- /dev/null +++ b/content/en/docs/the-compositor/troubleshooting.md @@ -0,0 +1,44 @@ +--- +title: Resolve problems and recover stories +url: /docs/the-compositor/troubleshooting/ +translationKey: docs-the-compositor-troubleshooting +type: guide +docs_draft: true +docs_section: compositor +--- + +# Resolve problems and recover stories {#resolve-problems-and-recover-stories} + +First identify which version you are looking at: the editor's saved content, the files on GitHub or the built public site. Each has a different route to a correction. + +## The editor changed but the site did not {#the-editor-changed-but-the-site-did-not} + +Saving content keeps it in the Compositor. Publish the changes, then wait for the site's build to finish. If the publication succeeded but the build failed, read the build error rather than repeatedly publishing the same changes. + +Check the repository and language in the header, then open the public address from the project. A browser tab may still show an older page; reload it after the successful build. + +## An object or framing is wrong {#an-object-or-framing-is-wrong} + +Open the object and check its source address. A catalogue page is not an IIIF manifest. Use **Fetch Manifest** to check the address and verify the preview before adding a new object. + +If the story shows the wrong image, select the intended object in that step. If it shows the right image at the wrong view, choose the correct document page where relevant, adjust the framing and use **Capture position**. Wait for the captured confirmation, then revisit the step. + +## GitHub has different content {#github-has-different-content} + +Use [Changes on GitHub](/docs/the-compositor/sync-updates/) and review the affected items. Choose which version to keep for each one. The review preserves editor-only unpublished work; it is not a command to discard everything in the editor. + +If Google Sheets is enabled, check whether a build fetched content from the sheet. Decide which authoring method will supply future builds before editing both copies again. + +## Restore an unlisted story {#restore-an-unlisted-story} + +When story files exist on GitHub but are missing from the Compositor, **Start** can offer the convenor **Restore as drafts**. + +Restoration reads those files and brings the stories into the editor as drafts. Read any warnings, open the restored story and inspect its steps and panel references before making it publishable. + +**Ignore** dismisses this recovery route for the detected stories. It is not the same as deleting their files from GitHub. + +## A control is missing or an action is refused {#a-control-is-missing-or-an-action-is-refused} + +Check your project role and the [team and repository access guide](/docs/the-compositor/team/). Some controls belong to the convenor, and course membership controls come from the course. + +For help, record the project address, the action you attempted, the visible error and whether the problem affects the editor, publication or build. Share those details with the maintainer or in a [Telar issue](https://github.com/UCSB-AMPLab/telar/issues). Exclude access keys and private content. diff --git a/docs/9-5-video-audio.md b/content/en/docs/the-compositor/video-audio.md similarity index 79% rename from docs/9-5-video-audio.md rename to content/en/docs/the-compositor/video-audio.md index c7ec73d..0a41430 100644 --- a/docs/9-5-video-audio.md +++ b/content/en/docs/the-compositor/video-audio.md @@ -1,20 +1,18 @@ --- -layout: docs -title: "9.5. Video and Audio" -parent: "9. The Compositor" -grand_parent: Documentation -nav_order: 5 -lang: en -permalink: /docs/the-compositor/video-audio/ +title: Video and Audio +url: /docs/the-compositor/video-audio/ +translationKey: docs-the-compositor-video-audio +type: guide +docs_section: compositor --- -# Video and Audio +# Video and Audio {#video-and-audio} The Compositor supports video and audio objects alongside images. When a story step references a video or audio object, the viewer column shows the appropriate media player — an embedded video player or a waveform audio player — and provides tools for setting clip times and loop behavior. For background on how video and audio objects work in Telar, see [Video Objects](/docs/your-content/video-objects/) and [Audio Objects](/docs/your-content/audio-objects/). -## Media type detection +## Media type detection {#media-type-detection} The Compositor detects the media type of each object automatically based on its source URL. You do not need to configure the type manually — the Compositor reads the URL and determines whether the object is an image, a video, or an audio file. @@ -24,7 +22,7 @@ Each step in the sidebar displays a media type badge to help you identify what k - **Audio** — A music icon for audio objects - **Text** — A text icon for steps with no media object -## Supported video sources +## Supported video sources {#supported-video-sources} The Compositor recognizes video URLs from three platforms: @@ -34,17 +32,19 @@ The Compositor recognizes video URLs from three platforms: When a step references a video object, an inline video player appears in the viewer column with standard playback controls. -## Audio objects +{{< media id="external-media" >}} + +## Audio objects {#audio-objects} Audio objects use self-hosted files stored in your repository at `telar-content/objects/`. The Compositor supports MP3, OGG, and M4A formats. When a step references an audio object, the viewer column displays a WaveSurfer waveform player. The waveform provides a visual representation of the audio and includes play and pause controls. -## Clip range +## Clip range {#clip-range} A clip is the segment of a video or audio file that plays during one step. You set it visually in the viewer rather than typing timestamps into a spreadsheet. -### Video +### Video {#video} A clip timeline sits in the bar below the video. It spans the whole file, showing the clip as a highlighted region, with a thin marker that follows playback. @@ -54,35 +54,37 @@ A clip timeline sits in the bar below the video. It spans the whole file, showin The times at either end of the bar are where the clip begins and ends, and between them the bar gives the clip's length as **0:07 clip**. A brief **Clip saved** confirmation takes its place each time you change the range. -### Audio +### Audio {#audio} Audio has no separate timeline. The waveform carries the clip region directly — drag its handles to set the start and end. -### Checking a clip +### Checking a clip {#checking-a-clip} Below the player, the current clip reads as `clip 0:05 → 0:12`, or **No clip set** when the step plays the whole file. **Preview clip** plays the clip on its own, so you can check exactly what a visitor will get without sitting through the rest of the file. -{: .note } -> Google Drive videos cannot be clipped. In place of the clip times, the viewer shows **Google Drive does not support clipping**. +{{< callout "note" >}} +Google Drive videos cannot be clipped. In place of the clip times, the viewer shows **Google Drive does not support clipping**. +{{< /callout >}} -{: .tip } -> The Compositor sets the same `clip_start` and `clip_end` values described in [Video Objects](/docs/your-content/video-objects/) and [Audio Objects](/docs/your-content/audio-objects/). The two are interchangeable, so you can set a clip here and edit it later in your spreadsheet, or the other way round. +{{< callout "tip" >}} +The Compositor sets the same `clip_start` and `clip_end` values described in [Video Objects](/docs/your-content/video-objects/) and [Audio Objects](/docs/your-content/audio-objects/). The two are interchangeable, so you can set a clip here and edit it later in your spreadsheet, or the other way round. +{{< /callout >}} -## Loop toggle +## Loop toggle {#loop-toggle} Each step has a **Loop** switch that controls whether the clip repeats continuously when the audience reaches that step. When it is on, the clip plays in a loop until the audience advances to the next step. The loop setting persists when you save and applies to both video and audio steps. -## Genre and medium +## Genre and medium {#genre-and-medium} Objects have a type field that maps to the `medium_genre` column in `objects.csv`. The Compositor manages this field through the [Objects](/docs/the-compositor/objects/) metadata editor — you can set it when adding or editing an object. The genre or medium value helps the objects gallery organize items by type and provides additional context for your audience when browsing the exhibition. -## See also +## See also {#see-also} - [Story Editor](/docs/the-compositor/story-editor/) — Building stories with the visual editor - [Publishing](/docs/the-compositor/publishing/) — Review and publish your changes diff --git a/content/en/docs/workflows/_index.md b/content/en/docs/workflows/_index.md new file mode 100644 index 0000000..4d4db6b --- /dev/null +++ b/content/en/docs/workflows/_index.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /docs/workflows/ +translationKey: redirects-en-wf-workflows-md +type: redirect +docs_section: reference +redirect_to: /docs/setup/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/content/en/docs/workflows/embedding.md b/content/en/docs/workflows/embedding.md new file mode 100644 index 0000000..d50b95e --- /dev/null +++ b/content/en/docs/workflows/embedding.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /docs/workflows/embedding/ +translationKey: redirects-en-wf-embedding-md +type: redirect +docs_section: reference +redirect_to: /docs/site-features/embedding/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/content/en/docs/workflows/github-web.md b/content/en/docs/workflows/github-web.md new file mode 100644 index 0000000..3104a25 --- /dev/null +++ b/content/en/docs/workflows/github-web.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /docs/workflows/github-web/ +translationKey: redirects-en-wf-github-web-md +type: redirect +docs_section: reference +redirect_to: /docs/setup/manual/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/content/en/docs/workflows/google-sheets.md b/content/en/docs/workflows/google-sheets.md new file mode 100644 index 0000000..03f61e8 --- /dev/null +++ b/content/en/docs/workflows/google-sheets.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /docs/workflows/google-sheets/ +translationKey: redirects-en-wf-google-sheets-md +type: redirect +docs_section: reference +redirect_to: /docs/your-data/google-sheets/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/content/en/docs/workflows/guided-quickstart.md b/content/en/docs/workflows/guided-quickstart.md new file mode 100644 index 0000000..3eb351b --- /dev/null +++ b/content/en/docs/workflows/guided-quickstart.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /docs/workflows/guided-quickstart/ +translationKey: redirects-en-wf-guided-quickstart-md +type: redirect +docs_section: reference +redirect_to: /docs/getting-started/google-sheets/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/content/en/docs/workflows/hybrid.md b/content/en/docs/workflows/hybrid.md new file mode 100644 index 0000000..da81c78 --- /dev/null +++ b/content/en/docs/workflows/hybrid.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /docs/workflows/hybrid/ +translationKey: redirects-en-wf-hybrid-md +type: redirect +docs_section: reference +redirect_to: /docs/your-content/rich-content/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/content/en/docs/workflows/local-dev.md b/content/en/docs/workflows/local-dev.md new file mode 100644 index 0000000..6d6012c --- /dev/null +++ b/content/en/docs/workflows/local-dev.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /docs/workflows/local-dev/ +translationKey: redirects-en-wf-local-dev-md +type: redirect +docs_section: reference +redirect_to: /docs/getting-started/local-dev/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/content/en/docs/workflows/upgrading.md b/content/en/docs/workflows/upgrading.md new file mode 100644 index 0000000..86d83c1 --- /dev/null +++ b/content/en/docs/workflows/upgrading.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /docs/workflows/upgrading/ +translationKey: redirects-en-wf-upgrading-md +type: redirect +docs_section: reference +redirect_to: /docs/setup/upgrading/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/docs/4-0-your-content.md b/content/en/docs/your-content/_index.md similarity index 64% rename from docs/4-0-your-content.md rename to content/en/docs/your-content/_index.md index 9ece51b..8b68c84 100644 --- a/docs/4-0-your-content.md +++ b/content/en/docs/your-content/_index.md @@ -1,16 +1,14 @@ --- -layout: docs -title: "4. Your Content" -parent: Documentation -nav_order: 4 -has_children: true -lang: en -permalink: /docs/your-content/ +title: Your Content +url: /docs/your-content/ +translationKey: docs-your-content +type: guide +docs_section: reference --- -# Your Content +# Your Content {#your-content} -Your exhibition is built from several types of content — objects, images, stories, and supporting pages. All source content lives in the `telar-content/` folder of your repository. You define the structure through spreadsheet files (via [Google Sheets](/docs/your-data/google-sheets/) or [CSV](/docs/your-data/csv-project/)), and write longer narrative content in markdown files. +Objects, stories, panels and supporting pages make up an exhibition. This reference describes their source files and formats. Use the [Compositor manual](/docs/the-compositor/) for visual editing, the [Sheets manual](/docs/google-sheets/) for spreadsheet authoring or the [local manual](/docs/local-authoring/) for CSV and Markdown files. All three routes produce a static site. - [Objects](/docs/your-content/objects/) — The visual items your stories explore — images, maps, documents, photographs - [Self-Hosted Images](/docs/your-content/self-hosted-images/) — Upload your own images and Telar generates zoomable tiles automatically diff --git a/docs/4-10-audio-objects.md b/content/en/docs/your-content/audio-objects.md similarity index 77% rename from docs/4-10-audio-objects.md rename to content/en/docs/your-content/audio-objects.md index 48c16e0..3cddcc5 100644 --- a/docs/4-10-audio-objects.md +++ b/content/en/docs/your-content/audio-objects.md @@ -1,26 +1,24 @@ --- -layout: docs -title: "4.10. Audio Objects" -parent: "4. Your Content" -grand_parent: Documentation -nav_order: 10 -lang: en -permalink: /docs/your-content/audio-objects/ +title: Audio Objects +url: /docs/your-content/audio-objects/ +translationKey: docs-your-content-audio-objects +type: guide +docs_section: reference --- -# Audio Objects +# Audio Objects {#audio-objects} Telar can display self-hosted audio files as objects in your exhibition. Audio works just like images and videos — you can build stories around recordings, focus on specific moments with clip control, and include them alongside your other objects. Unlike video objects (which embed from external platforms), audio files live directly in your repository. Place your MP3, OGG, or M4A files in `telar-content/objects/` and Telar handles the rest. -## Adding an audio object +## Adding an audio object {#adding-an-audio-object} To add an audio file, place it in `telar-content/objects/` with a filename matching the `object_id` in your objects spreadsheet. For example, if your spreadsheet has an object with `object_id` = `field-recording-01`, name your file `field-recording-01.mp3`. -### Supported formats +### Supported formats {#supported-formats} Telar recognizes three audio formats: @@ -28,21 +26,21 @@ Telar recognizes three audio formats: - **OGG** — open format with good compression - **M4A** — common format from Apple devices and professional recorders -## How audio appears +## How audio appears {#how-audio-appears} -### In stories +### In stories {#in-stories} When a story step references an audio object, a WaveSurfer waveform visualisation fills the viewer area with play/pause controls. If you set `clip_start` and `clip_end` values in your story spreadsheet, the player plays only the specified segment. This is useful for drawing attention to a particular moment in a longer recording. -### On object pages +### On object pages {#on-object-pages} Each audio object has its own page (`/objects/{object-id}/`) with a full waveform player. Below the waveform, a clip picker lets you select start and end times by dragging region edges on the waveform — useful when building story steps. Copy the values directly into your story spreadsheet. -### In the gallery +### In the gallery {#in-the-gallery} Audio objects appear in the objects gallery with a waveform icon on a grey background. The gallery's **Type** filter lets visitors browse by media type (Image, Video, or Audio). -## Clip control +## Clip control {#clip-control} Story steps can specify a start time, end time, and loop setting for audio objects. The columns work exactly the same way as they do for video — see [Video Objects: Clip control](/docs/your-content/video-objects/#clip-control) for the full column reference and examples. @@ -52,14 +50,15 @@ Story steps can specify a start time, end time, and loop setting for audio objec | `clip_end` | `fin_clip` | End time in seconds | | `loop` | `bucle` | Loop the clip (`true`, `yes`, or `sí`) | -{: .tip } -> You can also set clip times visually in the Compositor. See [Video and Audio in the Compositor](/docs/the-compositor/video-audio/) for details. +{{< callout "tip" >}} +You can also set clip times visually in the Compositor. See [Video and Audio in the Compositor](/docs/the-compositor/video-audio/) for details. +{{< /callout >}} -## Audio build pipeline +## Audio build pipeline {#audio-build-pipeline} Telar processes audio files during the build to extract clips and generate peak data for the waveform display. This is handled by `process_audio.py`, which runs automatically as part of the build. -### Optional dependencies +### Optional dependencies {#optional-dependencies} Audio processing requires two external tools. These are only needed if your site includes audio objects — sites without audio do not need them. @@ -80,10 +79,11 @@ brew install ffmpeg audiowaveform sudo apt install ffmpeg audiowaveform ``` -{: .note } -> **GitHub Actions handles this automatically.** The `build.yml` workflow detects audio files in your repository and installs these tools during the build. No manual setup is needed for deployed sites. +{{< callout "note" >}} +**GitHub Actions handles this automatically.** The `build.yml` workflow detects audio files in your repository and installs these tools during the build. No manual setup is needed for deployed sites. +{{< /callout >}} -## See also +## See also {#see-also} - [Video Objects](/docs/your-content/video-objects/) — Embedding video from external platforms - [Objects](/docs/your-content/objects/) — Defining objects in your spreadsheet diff --git a/docs/4-3-external-iiif.md b/content/en/docs/your-content/external-iiif.md similarity index 82% rename from docs/4-3-external-iiif.md rename to content/en/docs/your-content/external-iiif.md index 95dfa61..4b1a79f 100644 --- a/docs/4-3-external-iiif.md +++ b/content/en/docs/your-content/external-iiif.md @@ -1,18 +1,16 @@ --- -layout: docs -title: "4.3. External IIIF Images" -parent: "4. Your Content" -grand_parent: Documentation -nav_order: 3 -lang: en -permalink: /docs/your-content/external-iiif/ +title: External IIIF Images +url: /docs/your-content/external-iiif/ +translationKey: docs-your-content-external-iiif +type: guide +docs_section: reference --- -# External IIIF Images +# External IIIF Images {#external-iiif-images} Many museums, libraries, and archives make their collections available through a technology called [IIIF](https://iiif.io/) (International Image Interoperability Framework). This means you can build Telar stories around high-resolution images from institutions worldwide — without downloading or hosting the images yourself. -## Finding IIIF images +## Finding IIIF images {#finding-iiif-images} Look for IIIF resources at: @@ -23,7 +21,7 @@ Look for IIIF resources at: When an institution supports IIIF, you'll typically find a manifest URL — a link that describes the image and its metadata. It usually ends in `info.json` or `manifest.json`. -## Adding an external image +## Adding an external image {#adding-an-external-image} In your objects spreadsheet (Google Sheet or `objects.csv`): @@ -35,7 +33,7 @@ In your objects spreadsheet (Google Sheet or `objects.csv`): That's it. Telar will fetch the image directly from the institution's server when viewers visit your site. -### Manifest URL formats +### Manifest URL formats {#manifest-url-formats} IIIF URLs typically look like: @@ -44,7 +42,7 @@ IIIF URLs typically look like: Telar supports both formats, and both IIIF versions (2.0 and 3.0). -## Mixing self-hosted and external images +## Mixing self-hosted and external images {#mixing-self-hosted-and-external-images} You can use both your own images and external IIIF images in the same project. Leave `source_url` blank for objects that use self-hosted images: @@ -55,7 +53,7 @@ museum-map,Museum Map,...,https://example.org/iiif/manifest.json my-ceramic,My Ceramic,,, ``` -## Multi-page documents +## Multi-page documents {#multi-page-documents} Some IIIF manifests describe multi-page documents — digitized books, manuscripts, legal records, or maps with multiple sheets. These manifests contain multiple canvases, one per page. @@ -66,11 +64,11 @@ object_id,title,source_url new-laws,Recopilación de leyes,https://example.org/iiif/presentation/3/new-laws/manifest.json ``` -### Object pages +### Object pages {#object-pages} On object pages, the viewer shows the full document with page navigation controls — forward/back arrows and a page selector — so visitors can browse through all pages. -### Stories +### Stories {#stories} In stories, each step can reference a specific page using the `page` column: @@ -82,10 +80,11 @@ step,object,x,y,zoom,page,question,answer The `page` column specifies which canvas (page) of the manifest to display. Page numbers start at 1. -{: .tip } -> **Finding coordinates for a specific page.** Navigate to the object page for your multi-page document. Use the page navigation controls to go to the page you want. Then use the coordinate picker — it automatically includes the current page number in the copied values. +{{< callout "tip" >}} +**Finding coordinates for a specific page.** Navigate to the object page for your multi-page document. Use the page navigation controls to go to the page you want. Then use the coordinate picker — it automatically includes the current page number in the copied values. +{{< /callout >}} -### Finding multi-page manifests +### Finding multi-page manifests {#finding-multi-page-manifests} Multi-page IIIF manifests are common at institutions that have digitized books and manuscripts: @@ -96,11 +95,11 @@ Multi-page IIIF manifests are common at institutions that have digitized books a Look for a "IIIF manifest" link on the item's page, or check the institution's IIIF documentation. -## Automatic metadata extraction +## Automatic metadata extraction {#automatic-metadata-extraction} When you provide a `source_url`, Telar can automatically fill in metadata from the IIIF manifest — title, description, creator, period, location, and credit. This saves you from typing information that the institution has already recorded. -### How to use it +### How to use it {#how-to-use-it} Add the IIIF manifest URL to your spreadsheet and leave the metadata fields blank: @@ -116,7 +115,7 @@ When your site builds, Telar will: 3. Fill in any fields you left blank 4. Keep any values you entered yourself -### Your data always takes priority +### Your data always takes priority {#your-data-always-takes-priority} You have full control over what gets extracted: @@ -132,18 +131,18 @@ map-001,My Custom Title,,https://example.org/manifest.json,,,, Telar will use "My Custom Title" (your value) and extract the description, creator, period, location, and credit from the manifest. -### Language detection +### Language detection {#language-detection} Metadata extraction respects your site's language setting (`telar_language` in `_config.yml`): - **English sites** (`en`) — Prioritizes English metadata, falls back to other languages - **Spanish sites** (`es`) — Prioritizes Spanish metadata, then English, then others -### Smart credit detection +### Smart credit detection {#smart-credit-detection} For the `credit` field, Telar filters out legal boilerplate (Creative Commons URLs, generic rights statements) and looks for meaningful attribution lines — the institution name, the rights holder, or the credit line. -### What Telar looks for +### What Telar looks for {#what-telar-looks-for} Different institutions label their metadata differently. Telar searches for common variations: @@ -156,7 +155,7 @@ Different institutions label their metadata differently. Telar searches for comm | location | Repository, Holding Institution, Current Location | | credit | Attribution, Rights Holder, Credit Line, Provider | -### When to override +### When to override {#when-to-override} You might want to enter your own values when: @@ -165,14 +164,14 @@ You might want to enter your own values when: - The description is too technical for your audience - You want a shorter or simpler version of a field -### Build-time processing +### Build-time processing {#build-time-processing} Metadata extraction happens automatically during the site build: - **GitHub Pages**: Runs during deployment — no action needed - **Local development**: Run `python3 scripts/csv_to_json.py` when you add or update manifest URLs -### Validation +### Validation {#validation} During the build, Telar checks each manifest: @@ -182,33 +181,33 @@ During the build, Telar checks each manifest: Check your build logs for extraction status. -### Limitations +### Limitations {#limitations} - Only works with **external IIIF manifests** (self-hosted images don't have manifests to extract from) - Manifests must be publicly accessible (no login required) - HTML tags are removed from extracted text - Some manifests may not include metadata fields -## Troubleshooting +## Troubleshooting {#troubleshooting} -### Image not loading +### Image not loading {#image-not-loading} - Verify the manifest URL is correct — try opening it directly in your browser - Make sure the resource is publicly accessible (no authentication required) - Check that you pasted the full URL including `info.json` or `manifest.json` -### Metadata not appearing +### Metadata not appearing {#metadata-not-appearing} - Check your build logs for extraction warnings - The manifest may not include the fields you expect - Try entering the values manually in your spreadsheet -### Slow loading +### Slow loading {#slow-loading} - External images load from the institution's server — speed depends on their infrastructure - Some institutions may throttle requests from unfamiliar sites -## See also +## See also {#see-also} - [Self-Hosted Images](/docs/your-content/self-hosted-images/) — Upload your own images instead of using external sources - [PDF Documents](/docs/your-content/pdf-documents/) — Self-hosting multi-page PDF documents diff --git a/docs/4-6-markdown-syntax.md b/content/en/docs/your-content/markdown-syntax.md similarity index 75% rename from docs/4-6-markdown-syntax.md rename to content/en/docs/your-content/markdown-syntax.md index dc6b3ae..454e00e 100644 --- a/docs/4-6-markdown-syntax.md +++ b/content/en/docs/your-content/markdown-syntax.md @@ -1,22 +1,21 @@ --- -layout: docs -title: "4.6. Markdown Syntax" -parent: "4. Your Content" -grand_parent: Documentation -nav_order: 6 -lang: en -permalink: /docs/your-content/markdown-syntax/ +title: Markdown Syntax Reference +url: /docs/your-content/markdown-syntax/ +translationKey: docs-your-content-markdown-syntax +type: guide katex: true +docs_section: reference --- -# Markdown Syntax Reference +# Markdown Syntax Reference {#markdown-syntax-reference} Panel content in Telar supports rich markdown formatting. This reference covers the syntax most useful for narrative content. -{: .note } -> **This reference covers panel content**: these options apply to `layer1_content` and `layer2_content`, and to the markdown files they point to. A step's `question` and `answer` work differently. The question is a heading, so it is plain text with no markdown processing. Answers are reduced to plain prose, and Telar cuts any answer over 18 lines. See [Answers Are Plain Prose](/docs/your-data/csv-stories/#answers-are-plain-prose). +{{< callout "note" >}} +**This reference covers panel content**: these options apply to `layer1_content` and `layer2_content`, and to the markdown files they point to. A step's `question` and `answer` work differently. The question is a heading, so it is plain text with no markdown processing. Answers are reduced to plain prose, and Telar cuts any answer over 18 lines. See [Answers Are Plain Prose](/docs/your-data/csv-stories/#answers-are-plain-prose). +{{< /callout >}} -## What is Markdown? +## What is Markdown? {#what-is-markdown} Markdown is a lightweight markup language that lets you format text using simple, readable syntax. Instead of complex HTML tags, you write in plain text with special characters like `*` for emphasis or `#` for headings. Markdown is: @@ -25,7 +24,7 @@ Markdown is a lightweight markup language that lets you format text using simple - **Portable**: Plain text files work everywhere - **Convertible**: Automatically converted to HTML for display -### Learning Resources +### Learning Resources {#learning-resources} New to markdown? These resources will help: @@ -37,14 +36,15 @@ In case you're wondering, Telar uses the [Python Markdown](https://python-markdo --- -## Panel Content Methods +## Panel Content Methods {#panel-content-methods} You can provide panel content in three ways. For full details, see the [CSV Reference: Stories](/docs/your-data/csv-stories/#layer-content). -{: .note } -> The three methods that follow describe authoring in a spreadsheet. In the Compositor, the panel title has its own field, and anything pasted into the **Content** field — a `---` block included — is published as part of the panel's text, not read as a title. +{{< callout "note" >}} +The three methods that follow describe authoring in a spreadsheet. In the Compositor, the panel title has its own field, and anything pasted into the **Content** field — a `---` block included — is published as part of the panel's text, not read as a title. +{{< /callout >}} -### Method 1: Entering Text Directly +### Method 1: Entering Text Directly {#method-1-entering-text-directly} Type panel text directly in your spreadsheet's `layer1_content` column: @@ -54,7 +54,7 @@ Type panel text directly in your spreadsheet's `layer1_content` column: Line breaks in your spreadsheet cell create paragraph breaks. The panel title defaults to the button text. -### Method 2: Pasting Markdown Text +### Method 2: Pasting Markdown Text {#method-2-pasting-markdown-text} Paste text from a plain text editor. You can include headings, widgets, and a custom panel title using YAML frontmatter: @@ -71,10 +71,11 @@ weaving technique that was common in the colonial period. These patterns were created using... ``` -{: .warning } -> If you copy and paste from Microsoft Word, Google Docs, or similar applications, formatting will **not** be preserved. Write in markdown syntax instead. +{{< callout "warning" >}} +If you copy and paste from Microsoft Word, Google Docs, or similar applications, formatting will **not** be preserved. Write in markdown syntax instead. +{{< /callout >}} -### Method 3: Referencing a Markdown File +### Method 3: Referencing a Markdown File {#method-3-referencing-a-markdown-file} For complex content, reference a markdown file saved in `telar-content/texts/stories/`: @@ -91,9 +92,9 @@ The file uses frontmatter for the panel title and supports all markdown features --- -## Basic Formatting +## Basic Formatting {#basic-formatting} -### Headings +### Headings {#headings} ```markdown ## Second Level Heading @@ -101,10 +102,11 @@ The file uses frontmatter for the panel title and supports all markdown features #### Fourth Level Heading ``` -{: .note } -> **Tip**: Don't use `# First Level` in panels — each panel already has a title. +{{< callout "note" >}} +**Tip**: Don't use `# First Level` in panels — each panel already has a title. +{{< /callout >}} -### Text Styling +### Text Styling {#text-styling} ```markdown **Bold text** for emphasis @@ -112,7 +114,7 @@ The file uses frontmatter for the panel title and supports all markdown features ***Bold and italic*** for maximum emphasis ``` -### Lists +### Lists {#lists} Unordered lists: ```markdown @@ -130,14 +132,14 @@ Ordered lists: 3. Third step ``` -### Links +### Links {#links} ```markdown [Link text](https://example.com) [Internal link](/objects/textile-001/) ``` -### Blockquotes +### Blockquotes {#blockquotes} ```markdown > This is a blockquote. @@ -146,17 +148,17 @@ Ordered lists: --- -## Images +## Images {#images} Telar provides special syntax for controlling image sizes in panels. -### Basic Syntax +### Basic Syntax {#basic-syntax} ```markdown {size} ``` -### Size Options +### Size Options {#size-options} | Size | Keyword | Max Width | Use Case | |------|---------|-----------|----------| @@ -165,7 +167,7 @@ Telar provides special syntax for controlling image sizes in panels. | Large | `{lg}` or `{large}` | 700px | Featured images, detailed views | | Full | `{full}` | 100% | Panoramas, full-width visuals | -### Image Paths +### Image Paths {#image-paths} **Relative paths** (no leading slash) automatically load from `/telar-content/objects/`: @@ -186,7 +188,7 @@ Telar provides special syntax for controlling image sizes in panels. {lg} ``` -### Examples +### Examples {#examples} ```markdown {small} @@ -195,10 +197,11 @@ Telar provides special syntax for controlling image sizes in panels. {full} ``` -{: .tip } -> **Default Size**: Images without a size tag default to medium (450px). Always include size tags for clarity. +{{< callout "tip" >}} +**Default Size**: Images without a size tag default to medium (450px). Always include size tags for clarity. +{{< /callout >}} -### Image Captions +### Image Captions {#image-captions} Add a caption to any image by placing text on the line immediately after the image: @@ -222,9 +225,9 @@ The `caption:` prefix is stripped from the displayed text. --- -## Rich Media +## Rich Media {#rich-media} -### YouTube Videos +### YouTube Videos {#youtube-videos} Embed responsive YouTube videos using iframe HTML: @@ -242,7 +245,7 @@ Replace `VIDEO_ID` with your YouTube video ID. The `padding-bottom: 56.25%` creates a 16:9 aspect ratio container. -### Other Iframes +### Other Iframes {#other-iframes} Any iframe-embeddable content works: @@ -256,9 +259,9 @@ Any iframe-embeddable content works: --- -## Code +## Code {#code} -### Inline Code +### Inline Code {#inline-code} Use backticks for `inline code` references: @@ -266,7 +269,7 @@ Use backticks for `inline code` references: The `object_id` field must match the filename. ``` -### Code Blocks +### Code Blocks {#code-blocks} Use triple backticks for code blocks: @@ -289,7 +292,7 @@ description: A compelling narrative --- -## Footnotes +## Footnotes {#footnotes} Create footnotes with `[^1]` syntax: @@ -305,15 +308,15 @@ Footnotes work in panel content only. If you put one in a step's `answer`, Telar --- -## Math and Science Notation (LaTeX) +## Math and Science Notation (LaTeX) {#math-and-science-notation-latex} Telar supports LaTeX math rendering via [KaTeX](https://katex.org/). You can include mathematical formulas, chemical equations, and scientific notation anywhere markdown appears: story panels, glossary definitions, object descriptions, and custom pages. -### How It Works +### How It Works {#how-it-works} Telar automatically detects LaTeX in your content at build time. No configuration is needed — if your text contains LaTeX notation, it will render as formatted math. -### Inline Math +### Inline Math {#inline-math} Wrap expressions in single dollar signs to display math inline with surrounding text: @@ -323,10 +326,11 @@ The coefficient is $C = \frac{8}{35}$ and the polynomial is $P_4(x)$.Renders as: The coefficient is $C = \frac{8}{35}$ and the polynomial is $P_4(x)$.
-{: .warning } -> **Dollar sign heuristic**: To avoid false positives with currency (e.g. "$50"), Telar only treats `$...$` as math when the content contains LaTeX-like characters such as `\`, `^`, `_`, or `{`. Double dollar signs (`$$...$$`) are always treated as math. +{{< callout "warning" >}} +**Dollar sign heuristic**: To avoid false positives with currency (e.g. "$50"), Telar only treats `$...$` as math when the content contains LaTeX-like characters such as `\`, `^`, `_`, or `{`. Double dollar signs (`$$...$$`) are always treated as math. +{{< /callout >}} -### Display Math +### Display Math {#display-math} Wrap expressions in double dollar signs for centered, standalone equations: @@ -343,7 +347,7 @@ You can also use `\[...\]` delimiters: \[E = mc^2\] ``` -### Multi-line Equations +### Multi-line Equations {#multi-line-equations} Use `\begin{align}...\end{align}` for aligned multi-line equations. Use `&` to mark alignment points and `\\` for line breaks: @@ -358,7 +362,7 @@ P_2(x) &= \frac{1}{2}(3x^2 - 1)Renders as:
$$\begin{align} P_0(x) &= 1\\ P_1(x) &= x\\ P_2(x) &= \frac{1}{2}(3x^2 - 1) \end{align}$$
-### Supported Environments +### Supported Environments {#supported-environments} | Environment | Purpose | |------------|---------| @@ -368,7 +372,7 @@ P_2(x) &= \frac{1}{2}(3x^2 - 1) | `pmatrix` | Parenthesized matrices | | `bmatrix` | Bracketed matrices | -### Chemical Formulas +### Chemical Formulas {#chemical-formulas} Telar includes the [mhchem](https://mhchem.github.io/MathJax-mhchem/) extension for chemical notation: @@ -381,7 +385,7 @@ $$\ce{CO2 + C -> 2CO}$$Renders as: The reaction $\ce{2H2 + O2 -> 2H2O}$ produces water.
$$\ce{CO2 + C -> 2CO}$$
-### Where LaTeX Works +### Where LaTeX Works {#where-latex-works} | Content type | How it loads | |-------------|-------------| @@ -392,15 +396,15 @@ $$\ce{CO2 + C -> 2CO}$$ | Custom pages | Always available | | Encrypted stories | Loaded automatically after decryption | -### Full Syntax Reference +### Full Syntax Reference {#full-syntax-reference} For the complete list of supported LaTeX commands, see the [KaTeX function support table](https://katex.org/docs/supported). --- -## Best Practices +## Best Practices {#best-practices} -### Alt Text for Accessibility +### Alt Text for Accessibility {#alt-text-for-accessibility} Always provide descriptive alt text for images: @@ -409,7 +413,7 @@ Always provide descriptive alt text for images: ❌ {lg} ``` -### Image Organization +### Image Organization {#image-organization} Keep panel images in `/telar-content/objects/` for easy reference: @@ -421,14 +425,14 @@ telar-content/objects/ └── ... ``` -### Content Length +### Content Length {#content-length} - **Layer 1**: 2-3 paragraphs of context - **Layer 2**: Longer scholarly content, citations, extended analysis Break up long text with headings, lists, and images for better readability. -### File Naming +### File Naming {#file-naming} Use descriptive, lowercase filenames with hyphens: @@ -439,17 +443,17 @@ Use descriptive, lowercase filenames with hyphens: --- -## Quick Reference +## Quick Reference {#quick-reference} Copy-paste examples for the most common formatting tasks: -### Add an image with caption +### Add an image with caption {#add-an-image-with-caption} ```markdown {lg} Detail of the warp threads, circa 1650. ``` -### Add a YouTube video +### Add a YouTube video {#add-a-youtube-video} ```html ``` -## Diferencias con las capas de historia +## Diferencias con las capas de historia {#diferencias-con-las-capas-de-historia} | Funcionalidad | Capas de Historia | Páginas Personalizadas | |---------|--------------|--------------| @@ -199,7 +201,7 @@ Estamos agradecidos con las siguientes personas e instituciones: | Navegación | Vía interfaz de historia | Vía menú del sitio | | Estructura de URL | `/nombre-historia/` | `/nombre-pagina/` | -## Próximos pasos +## Próximos pasos {#próximos-pasos} - Aprende cómo [configurar la navegación](/guia/personalizacion/menu-navegacion/) para agregar páginas a tu menú - Explora [sintaxis de widgets](/guia/tu-contenido/sintaxis-markdown/) para acordeón, pestañas y carruseles diff --git a/content/es/guia/google-sheets.md b/content/es/guia/google-sheets.md new file mode 100644 index 0000000..dec428d --- /dev/null +++ b/content/es/guia/google-sheets.md @@ -0,0 +1,9 @@ +--- +title: Manual de Google Sheets +url: /guia/google-sheets/ +translationKey: docs-google-sheets +type: guide +docs_section: sheets +--- + +{{< section-overview >}} diff --git a/content/es/guia/iiif/_index.md b/content/es/guia/iiif/_index.md new file mode 100644 index 0000000..c26b95b --- /dev/null +++ b/content/es/guia/iiif/_index.md @@ -0,0 +1,5 @@ +--- +build: + list: never + render: never +--- diff --git a/content/es/guia/iiif/contenido-demostracion.md b/content/es/guia/iiif/contenido-demostracion.md new file mode 100644 index 0000000..bdd8897 --- /dev/null +++ b/content/es/guia/iiif/contenido-demostracion.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /guia/iiif/contenido-demostracion/ +translationKey: redirects-es-iiif-contenido-demo-md +type: redirect +docs_section: reference +redirect_to: /guia/personalizacion/contenido-demostracion/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/content/es/guia/integracion-iiif.md b/content/es/guia/integracion-iiif.md new file mode 100644 index 0000000..b207e08 --- /dev/null +++ b/content/es/guia/integracion-iiif.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /guia/integracion-iiif/ +translationKey: redirects-es-integracion-iiif-md +type: redirect +docs_section: reference +redirect_to: /guia/tu-contenido/imagenes-autoalojadas/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/docs/7-0-customization.es.md b/content/es/guia/personalizacion/_index.md similarity index 73% rename from docs/7-0-customization.es.md rename to content/es/guia/personalizacion/_index.md index 8ed4a72..7985685 100644 --- a/docs/7-0-customization.es.md +++ b/content/es/guia/personalizacion/_index.md @@ -1,18 +1,19 @@ --- -layout: docs -title: "7. Personalización" -parent: Documentación -nav_order: 7 -has_children: true -lang: es -permalink: /guia/personalizacion/ +title: Personalización +url: /guia/personalizacion/ +translationKey: docs-customization +type: guide +docs_section: reference --- -## Personalización +# Personalización {#guide-title} + + +## Personalización {#personalización} Haz Telar tuyo con temas, estilos personalizados y modificaciones de diseño. -## Temas +## Temas {#temas} Telar incluye 4 temas predeterminados que puedes cambiar con una sola línea en `_config.yml`: @@ -23,13 +24,13 @@ Telar incluye 4 temas predeterminados que puedes cambiar con una sola línea en [Conoce sobre temas](/guia/personalizacion/temas/) -## Estilos avanzados +## Estilos avanzados {#estilos-avanzados} Para una personalización más profunda, además de los temas, puedes modificar variables CSS, diseños y estilos de componentes. [Guía de estilos avanzados](/guia/desarrolladores/estilos/) -## Cambio rápido de tema +## Cambio rápido de tema {#cambio-rápido-de-tema} Cambia tu tema en `_config.yml`: diff --git a/docs/7-4-demo-content.es.md b/content/es/guia/personalizacion/contenido-demostracion.md similarity index 84% rename from docs/7-4-demo-content.es.md rename to content/es/guia/personalizacion/contenido-demostracion.md index 11f8db2..550160a 100644 --- a/docs/7-4-demo-content.es.md +++ b/content/es/guia/personalizacion/contenido-demostracion.md @@ -1,24 +1,22 @@ --- -layout: docs -title: "7.4. Contenido de demostración" -parent: "7. Personalización" -grand_parent: Documentación -nav_order: 4 -lang: es -permalink: /guia/personalizacion/contenido-demostracion/ +title: Contenido de demostración +url: /guia/personalizacion/contenido-demostracion/ +translationKey: docs-customization-demo-content +type: guide +docs_section: reference --- -# Contenido de demostración +# Contenido de demostración {#contenido-de-demostración} El contenido de demostración agrega a tu sitio dos historias de ejemplo terminadas. Con ellas puedes ver, antes de escribir la tuya, cómo se arma una historia en Telar y cómo funciona. -## ¿Qué es el contenido de demostración? +## ¿Qué es el contenido de demostración? {#qué-es-el-contenido-de-demostración} Es un conjunto de historias de ejemplo, junto con los objetos y las entradas del glosario que usan. Cada vez que se construye el sitio, Telar lo descarga de [content.telar.org](https://content.telar.org) y lo suma a tu propio contenido. Nunca se guarda en tu repositorio, así que, cuando lo desactivas, el siguiente *build* ya no lo incluye. El contenido de demostración lleva una marca en todos los lugares donde aparece, de modo que siempre puedes distinguirlo de tu propio trabajo. -## Las historias de demostración +## Las historias de demostración {#las-historias-de-demostración} El sitio recibe dos historias, en su mismo idioma: @@ -27,7 +25,7 @@ El sitio recibe dos historias, en su mismo idioma: | The Allegorical Woman | La mujer alegórica | 10 | Una historia sencilla, centrada en una sola imagen | | Colonial Landscapes | Paisajes coloniales | 22 | Una historia más larga, con capítulos, paneles y fuentes primarias | -### La mujer alegórica +### La mujer alegórica {#la-mujer-alegórica} Esta historia, de Natalie Cobo, recorre los detalles de *Aspecto Symbólico del Mundo Hispánico*, un grabado de 1761 de Laureano Atlas que se conserva en la Princeton University Library. En ella se ven: @@ -39,7 +37,7 @@ Esta historia, de Natalie Cobo, recorre los detalles de *Aspecto Symbólico del El primer paso enlaza a la hoja de cálculo de la historia en Google Sheets, para que puedas comparar cada fila con el paso que produce. -### Paisajes coloniales +### Paisajes coloniales {#paisajes-coloniales} Esta historia es una selección de *Paisajes Coloniales*, un proyecto de Santiago Muñoz, Adelaida Ávila y María Alejandra Orduz Avella. Gira en torno a una pintura de 1614 de la Sabana de Bogotá, hecha para un pleito y conservada en el Archivo General de Indias, en Sevilla. @@ -53,7 +51,7 @@ Cada fuente primaria es una entrada del glosario: al hacer clic en su recuadro, El glosario incluye además varias palabras clave y una persona, así que la página del glosario agrupa sus entradas en **Palabras clave**, **Fuentes primarias** y **Personas y entidades**. -## Activar o desactivar el contenido de demostración +## Activar o desactivar el contenido de demostración {#activar-o-desactivar-el-contenido-de-demostración} Un solo ajuste de `_config.yml` controla el contenido de demostración. En un sitio de Telar nuevo viene activado. @@ -72,11 +70,12 @@ Para cambiarlo: GitHub Actions vuelve a construir el sitio, y el cambio se ve en cuanto termina. Si construyes el sitio en tu computador, ejecuta `python3 scripts/csv_to_json.py` y `python3 scripts/generate_collections.py` (o `python3 scripts/build_local_site.py`, que ejecuta ambos) y después Jekyll. Consulta [Desarrollo local](/guia/primeros-pasos/desarrollo-local/). -{: .tip } -> **Conserva las demostraciones mientras aprendes** -> Mientras escribes tu primera historia, vale la pena tener a mano las historias de demostración, al lado de la tuya. Desactívalas antes de compartir el sitio. +{{< callout "tip" >}} +**Conserva las demostraciones mientras aprendes** +Mientras escribes tu primera historia, vale la pena tener a mano las historias de demostración, al lado de la tuya. Desactívalas antes de compartir el sitio. +{{< /callout >}} -## Dónde aparece el contenido de demostración +## Dónde aparece el contenido de demostración {#dónde-aparece-el-contenido-de-demostración} El contenido de demostración aparece en los mismos lugares que tu propio contenido, con una marca: @@ -92,7 +91,7 @@ El contenido de demostración aparece en los mismos lugares que tu propio conten En un sitio en inglés, las marcas dicen **DEMO** y **Demo content**. -## Idioma +## Idioma {#idioma} El contenido de demostración sigue el idioma del sitio, que se define con `telar_language` en `_config.yml`: @@ -103,7 +102,7 @@ El contenido de demostración sigue el idioma del sitio, que se define con `tela Con cualquier otro valor se recibe el contenido de demostración en inglés. Si cambias el idioma del sitio, el siguiente *build* descarga el contenido de demostración en el idioma nuevo. -## El contenido de demostración y tu propio contenido +## El contenido de demostración y tu propio contenido {#el-contenido-de-demostración-y-tu-propio-contenido} El contenido de demostración se suma al tuyo durante el *build* y nunca reemplaza nada de lo que tienes: @@ -117,7 +116,7 @@ El contenido de demostración se suma al tuyo durante el *build* y nunca reempla Todos los identificadores de los objetos y de las entradas del glosario de demostración empiezan con `demo-`, así que normalmente no coinciden con los tuyos. -## Usar las demostraciones como modelo +## Usar las demostraciones como modelo {#usar-las-demostraciones-como-modelo} Las historias de demostración están escritas en el mismo formato de hoja de cálculo que tus historias. Los archivos de origen están publicados en el [repositorio de contenido de demostración](https://github.com/UCSB-AMPLab/demo-content) en GitHub, en `demos/v1.8.0/es/` y `demos/v1.8.0/en/`: @@ -129,9 +128,9 @@ Las historias de demostración están escritas en el mismo formato de hoja de c Para ver cómo se refleja en la página la estructura de una historia, compara las filas de `paisajes.csv` con la historia en tu sitio: las filas con la columna `objeto` vacía son las tarjetas de título de los capítulos. -## Solución de problemas +## Solución de problemas {#solución-de-problemas} -### No aparecen las historias de demostración +### No aparecen las historias de demostración {#no-aparecen-las-historias-de-demostración} Si activaste el contenido de demostración y las historias no aparecen: @@ -140,10 +139,10 @@ Si activaste el contenido de demostración y las historias no aparecen: 3. Abre el registro del *build*, despliega el paso **Convert CSV to JSON** y busca las líneas que empiezan con **Telar Demo Content Fetcher** 4. Haz una recarga forzada de la página (Ctrl+Shift+R en Windows o Linux, Cmd+Shift+R en Mac) -### No se pudo descargar el contenido de demostración +### No se pudo descargar el contenido de demostración {#no-se-pudo-descargar-el-contenido-de-demostración} Si content.telar.org no responde o la descarga falla, el registro del *build* avisa que el sitio se construirá sin las demostraciones, y el *build* continúa. Tu contenido se publica como siempre, sin las historias de demostración. El siguiente *build* vuelve a intentarlo. -### El contenido de demostración está en otro idioma +### El contenido de demostración está en otro idioma {#el-contenido-de-demostración-está-en-otro-idioma} Revisa `telar_language` en `_config.yml`. Debe ser `"en"` o `"es"`; con cualquier otro valor se recibe el contenido de demostración en inglés. diff --git a/content/es/guia/personalizacion/estilos.md b/content/es/guia/personalizacion/estilos.md new file mode 100644 index 0000000..a49f21a --- /dev/null +++ b/content/es/guia/personalizacion/estilos.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /guia/personalizacion/estilos/ +translationKey: redirects-es-pers-estilos-md +type: redirect +docs_section: reference +redirect_to: /guia/desarrolladores/estilos/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/docs/7-3-navigation-menu.es.md b/content/es/guia/personalizacion/menu-navegacion.md similarity index 76% rename from docs/7-3-navigation-menu.es.md rename to content/es/guia/personalizacion/menu-navegacion.md index 693ec8a..7e74c9c 100644 --- a/docs/7-3-navigation-menu.es.md +++ b/content/es/guia/personalizacion/menu-navegacion.md @@ -1,18 +1,19 @@ --- -layout: docs -title: "7.3. Menú de navegación" -parent: "7. Personalización" -grand_parent: Documentación -nav_order: 3 -lang: es -permalink: /guia/personalizacion/menu-navegacion/ +title: Configuración del menú de navegación +url: /guia/personalizacion/menu-navegacion/ +translationKey: docs-customization-navigation-menu +type: guide +docs_section: reference --- -# Configuración del menú de navegación +# Configuración del menú de navegación {#configuración-del-menú-de-navegación} Personaliza el menú de navegación de tu sitio para incluir páginas personalizadas, enlaces externos y etiquetas bilingües. -## ¿Qué es el menú de navegación? + +En el Compositor, organiza la navegación en [Inicio y páginas](/guia/el-compositor/paginas/). Esta página documenta el archivo de navegación. + +## ¿Qué es el menú de navegación? {#qué-es-el-menú-de-navegación} El menú de navegación aparece en el encabezado de tu sitio y proporciona enlaces a: - Tus historias (generados automáticamente) @@ -22,15 +23,15 @@ El menú de navegación aparece en el encabezado de tu sitio y proporciona enlac  -## Cómo funciona +## Cómo funciona {#cómo-funciona} La navegación se configura a través de `_data/navigation.yml`. Este enfoque basado en datos te da control completo sobre la estructura y etiquetas del menú. Cuando existe `navigation.yml`, Telar lo usa para construir el menú. Si el archivo falta, aparece un menú básico incluido en el código, con enlaces a Historias, Objetos y Acerca de. -## Crear tu archivo de navegación +## Crear tu archivo de navegación {#crear-tu-archivo-de-navegación} -### Paso 1: crea el archivo +### Paso 1: crea el archivo {#paso-1-crea-el-archivo} Agrega `navigation.yml` al directorio `_data/`: @@ -41,7 +42,7 @@ _data/ └── project.json # Datos de proyecto generados ``` -### Paso 2: define la estructura de tu menú +### Paso 2: define la estructura de tu menú {#paso-2-define-la-estructura-de-tu-menú} Aquí hay una configuración básica: @@ -64,7 +65,7 @@ menu: url: "/credits/" ``` -### Campos requeridos +### Campos requeridos {#campos-requeridos} Cada elemento del menú necesita: @@ -74,15 +75,15 @@ Cada elemento del menú necesita: | `titulo_es` | Etiqueta en español | `"Acerca de"` | | `url` | URL de la página | `"/about/"` | -### Campos opcionales +### Campos opcionales {#campos-opcionales} | Campo | Propósito | Ejemplo | |-------|---------|---------| | `external` | Abre en nueva pestaña | `true` | -## Tipos de elementos de menú +## Tipos de elementos de menú {#tipos-de-elementos-de-menú} -### Páginas internas +### Páginas internas {#páginas-internas} Enlaza a páginas dentro de tu sitio: @@ -94,7 +95,7 @@ Enlaza a páginas dentro de tu sitio: La URL debe coincidir con el nombre de archivo de tu página (`methodology.md` → `/methodology/`). -### Enlaces externos +### Enlaces externos {#enlaces-externos} Enlaza a recursos externos: @@ -107,7 +108,7 @@ Enlaza a recursos externos: Cuando `external: true`, el enlace se abre en una nueva pestaña con `target="_blank"`. -### Página de inicio de historias +### Página de inicio de historias {#página-de-inicio-de-historias} Enlaza a la lista de historias: @@ -117,7 +118,7 @@ Enlaza a la lista de historias: url: "/" ``` -### Índice de objetos +### Índice de objetos {#índice-de-objetos} Enlaza al catálogo de objetos: @@ -127,7 +128,7 @@ Enlaza al catálogo de objetos: url: "/objects/" ``` -## Ejemplo completo +## Ejemplo completo {#ejemplo-completo} Aquí hay una configuración de navegación completa para un proyecto de investigación: @@ -167,16 +168,16 @@ menu: external: true ``` -## Etiquetas bilingües +## Etiquetas bilingües {#etiquetas-bilingües} -### Cómo funciona la selección de idioma +### Cómo funciona la selección de idioma {#cómo-funciona-la-selección-de-idioma} Telar muestra las etiquetas del menú según la configuración de idioma de tu sitio (`telar_language` en `_config.yml`): - Si `telar_language: en` → Muestra etiquetas `title_en` - Si `telar_language: es` → Muestra etiquetas `titulo_es` -### Cuando falta una etiqueta de idioma +### Cuando falta una etiqueta de idioma {#cuando-falta-una-etiqueta-de-idioma} Si a un elemento del menú le falta la etiqueta del idioma del sitio, Telar sigue este orden: @@ -184,7 +185,7 @@ Si a un elemento del menú le falta la etiqueta del idioma del sitio, Telar sigu 2. Si falta, usa la del otro idioma 3. Si faltan las dos, muestra la URL como etiqueta -## Orden del menú +## Orden del menú {#orden-del-menú} Los elementos del menú aparecen en el orden en que los listas en `navigation.yml`: @@ -198,9 +199,9 @@ menu: ... ``` -## Actualizar el menú +## Actualizar el menú {#actualizar-el-menú} -### Agregar una nueva página +### Agregar una nueva página {#agregar-una-nueva-página} Cuando creas una nueva página personalizada: @@ -217,7 +218,7 @@ Cuando creas una nueva página personalizada: El menú se actualiza automáticamente. -### Eliminar una página +### Eliminar una página {#eliminar-una-página} Para eliminar una página del menú: @@ -233,7 +234,7 @@ Para eliminar una página del menú: El archivo de la página puede permanecer en `telar-content/texts/pages/` pero no aparecerá en la navegación. -### Reordenar elementos +### Reordenar elementos {#reordenar-elementos} Cambia el orden en `navigation.yml`: @@ -251,7 +252,7 @@ menu: # Resto del menú... ``` -## Cuando no hay archivo de navegación +## Cuando no hay archivo de navegación {#cuando-no-hay-archivo-de-navegación} Si `_data/navigation.yml` no existe, Telar muestra un menú básico incluido en el código: @@ -261,9 +262,9 @@ Si `_data/navigation.yml` no existe, Telar muestra un menú básico incluido en Así tu sitio siempre tiene una navegación básica, incluso sin configuración. -## Solución de problemas +## Solución de problemas {#solución-de-problemas} -### El menú no se actualiza +### El menú no se actualiza {#el-menú-no-se-actualiza} Si tus cambios de menú no aparecen: @@ -272,7 +273,7 @@ Si tus cambios de menú no aparecen: 3. **Limpia caché del navegador**: Usa Ctrl+Shift+R (Cmd+Shift+R en Mac) para actualizar forzadamente 4. **Verifica ubicación del archivo**: El archivo debe estar en `_data/navigation.yml` (no `data/` o `_data/nav.yml`) -### Se muestra el idioma incorrecto +### Se muestra el idioma incorrecto {#se-muestra-el-idioma-incorrecto} Si las etiquetas del menú aparecen en el idioma incorrecto: @@ -280,7 +281,7 @@ Si las etiquetas del menú aparecen en el idioma incorrecto: 2. Verifica que estés usando nombres de campo correctos (`title_en` y `titulo_es`, no `title` o `label`) 3. Asegúrate de que ambas etiquetas de idioma estén presentes -### El enlace externo no se abre en nueva pestaña +### El enlace externo no se abre en nueva pestaña {#el-enlace-externo-no-se-abre-en-nueva-pestaña} Agrega el campo `external: true`: @@ -291,9 +292,9 @@ Agrega el campo `external: true`: external: true # Requerido para nueva pestaña ``` -## Mejores prácticas +## Mejores prácticas {#mejores-prácticas} -### Etiquetas claras y descriptivas +### Etiquetas claras y descriptivas {#etiquetas-claras-y-descriptivas} Usa etiquetas que describan claramente el destino: @@ -309,7 +310,7 @@ Usa etiquetas que describan claramente el destino: titulo_es: "Info" ``` -### Ordenamiento consistente +### Ordenamiento consistente {#ordenamiento-consistente} Mantén elementos relacionados juntos: @@ -327,11 +328,11 @@ Mantén elementos relacionados juntos: - title_en: "Archive" ``` -### Limita la longitud del menú +### Limita la longitud del menú {#limita-la-longitud-del-menú} Mantén menús enfocados (5-7 elementos es ideal). Para sitios más grandes, considera agrupar contenido de manera diferente o usar enlaces de pie de página para páginas secundarias. -## Véase también +## Véase también {#véase-también} - [Páginas Personalizadas](/guia/funciones/paginas-personalizadas/) - Crear páginas para enlazar en la navegación - [Referencia de Configuración](/guia/configurar/configuracion/) - Opciones completas de `_config.yml` incluyendo `telar_language` diff --git a/content/es/guia/personalizacion/moviles.md b/content/es/guia/personalizacion/moviles.md new file mode 100644 index 0000000..93f854b --- /dev/null +++ b/content/es/guia/personalizacion/moviles.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /guia/personalizacion/moviles/ +translationKey: redirects-es-pers-moviles-md +type: redirect +docs_section: reference +redirect_to: /guia/desarrolladores/moviles/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/docs/7-2-home-page.es.md b/content/es/guia/personalizacion/pagina-de-inicio.md similarity index 82% rename from docs/7-2-home-page.es.md rename to content/es/guia/personalizacion/pagina-de-inicio.md index cd7d3a9..b1f59b4 100644 --- a/docs/7-2-home-page.es.md +++ b/content/es/guia/personalizacion/pagina-de-inicio.md @@ -1,22 +1,26 @@ --- -layout: docs -title: "7.2. Personalizar la página de inicio" -parent: "7. Personalización" -grand_parent: Documentación -nav_order: 2 -lang: es -permalink: /guia/personalizacion/pagina-de-inicio/ +title: Personalizar la página de inicio +url: /guia/personalizacion/pagina-de-inicio/ +translationKey: docs-customization-home-page +type: guide +docs_section: reference --- -## Personalizar la página de inicio +# Personalizar la página de inicio {#guide-title} + + + +En el Compositor, usa [Inicio y páginas](/guia/el-compositor/paginas/). El formato siguiente describe la misma página de inicio publicada. + +## Personalizar la página de inicio {#personalizar-la-página-de-inicio} La página principal de tu sitio Telar está controlada por un archivo Markdown sencillo (`index.md`) en el directorio raíz del repositorio. Ahí puedes editar o quitar el mensaje de bienvenida y cambiar los encabezados de cada sección. -## Ubicación del archivo +## Ubicación del archivo {#ubicación-del-archivo} `index.md` **debe** estar en el directorio raíz de tu repositorio (no en un subdirectorio). Jekyll busca este archivo ahí para convertirlo en tu página de inicio. -## Estructura básica +## Estructura básica {#estructura-básica} Aquí está la estructura predeterminada de `index.md`: @@ -33,7 +37,7 @@ objects_intro: "Browse {count} objects featured in the stories." Tu contenido personalizado va aquí... ``` -## Modo colección +## Modo colección {#modo-colección} De manera predeterminada, la página principal muestra las historias primero con una muestra de objetos debajo. El modo colección invierte este orden — los objetos aparecen primero en una cuadrícula grande, con las historias en una cuadrícula más pequeña debajo. @@ -55,21 +59,21 @@ El modo colección funciona bien para sitios con una gran cantidad de objetos y **Nuevo en v1.1.0.** Consulta la [Referencia de configuración](/guia/configurar/configuracion/#collection_mode) para los detalles del ajuste. -## Opciones de front matter +## Opciones de front matter {#opciones-de-front-matter} -### stories_heading +### stories_heading {#stories_heading} El encabezado que se muestra sobre la cuadrícula de historias. Predeterminado: `"Explore the stories"` -### stories_intro +### stories_intro {#stories_intro} Texto introductorio opcional que se muestra entre el encabezado y la cuadrícula de historias. Déjalo en blanco (`""`) si no quieres texto introductorio. -### objects_heading +### objects_heading {#objects_heading} El encabezado que se muestra sobre la sección de objetos. Predeterminado: `"See the objects behind the stories"` -### objects_intro +### objects_intro {#objects_intro} Texto introductorio para la sección de objetos. Usa `{count}` como marcador de posición para el número de objetos. @@ -77,7 +81,7 @@ Predeterminado: `"Browse {count} objects featured in the stories."` El marcador de posición `{count}` se reemplaza automáticamente con el número real de objetos. -## Agregar contenido personalizado +## Agregar contenido personalizado {#agregar-contenido-personalizado} Cualquier contenido Markdown que agregues debajo del front matter aparecerá sobre la sección de historias. Esto es ideal para: @@ -86,7 +90,7 @@ Cualquier contenido Markdown que agregues debajo del front matter aparecerá sob - Avisos importantes - Llamados a la acción personalizados -### Ejemplo: bienvenida personalizada +### Ejemplo: bienvenida personalizada {#ejemplo-bienvenida-personalizada} ```markdown --- @@ -106,7 +110,7 @@ textiles coloniales de la región andina. Navega a través de las historias a continuación para descubrir las técnicas y significados culturales de estos artefactos. ``` -### Ejemplo: cuadro de alerta +### Ejemplo: cuadro de alerta {#ejemplo-cuadro-de-alerta} Puedes usar etiquetas de alerta para mostrar advertencias: @@ -127,21 +131,21 @@ objects_intro: "Browse {count} objects featured in the stories." > y objetos regularmente. ¡Vuelve pronto para ver cómo nos queda! ``` -## Aviso del sitio de demostración +## Aviso del sitio de demostración {#aviso-del-sitio-de-demostración} La plantilla incluye de manera predeterminada un aviso que dice que el sitio es de demostración, con enlaces al repositorio de GitHub y la documentación. -### Para personalizar +### Para personalizar {#para-personalizar} Edita el contenido Markdown para que coincida con tu proyecto. -### Para eliminar +### Para eliminar {#para-eliminar} Simplemente elimina el bloque de aviso de demostración de `index.md`. -## Ejemplos +## Ejemplos {#ejemplos} -### Página de inicio minimalista +### Página de inicio minimalista {#página-de-inicio-minimalista} ```markdown --- @@ -156,7 +160,7 @@ objects_intro: "Browse {count} objects featured in the stories." Sin contenido personalizado: solo muestra historias y objetos. Las tarjetas de historias muestran miniaturas según el tipo de medio: las historias de video y audio muestran un ícono como marcador de posición cuando no hay un objeto de imagen disponible. -### Con texto introductorio +### Con texto introductorio {#con-texto-introductorio} ```markdown --- @@ -174,20 +178,20 @@ objects_intro: "Browse {count} objects featured in the stories." El **Proyecto Textiles Coloniales** utiliza ... ``` -## Recomendaciones +## Recomendaciones {#recomendaciones} - Mantén el contenido de la página de inicio conciso para que los visitantes entren a tus historias. - Usa `##` (segundo nivel) o `###` (tercer nivel) para crear encabezados. - Prueba tu página de inicio en distintos tamaños de pantalla para cerciorarte de que se vea bien. - Actualiza los avisos y textos introductorios a medida que tu exhibición evolucione. -## Notas técnicas +## Notas técnicas {#notas-técnicas} - La configuración `layout: index` es obligatoria y no debe cambiarse. - La configuración `title` controla la etiqueta `Capítulo 1 · Propósito, público y fuentes
+Una exhibición reúne fuentes e interpretación. Antes de elegir un editor, piensa qué quieres que tus visitantes exploren y con qué materiales podrán hacerlo.
+Tendrás un planteamiento breve de la exhibición: una pregunta central, un público y un pequeño conjunto de fuentes por examinar.
Un tema define de qué trata tu exhibición. Una pregunta invita a mirar con atención. Empieza por algo que puedas explorar a través de tus materiales.
+Un ejemplo para pensar
Una pintura de la Sabana de Bogotá.
¿Qué nos permite entender esta pintura sobre las personas y la tierra?
Es una posible pregunta de partida, no una interpretación terminada. Los detalles que examines darán forma al argumento.
Escribe la idea que quieres que tus visitantes se lleven, aunque sea provisional. Después, piensa qué preguntas podrían ayudarles a llegar a ella. El inicio debe darles una entrada; el cierre debe retomar lo que la exhibición les ha ayudado a ver.
+Piensa en alguien que llega sin los conocimientos que tú tienes sobre el material. ¿Qué puede reconocer? ¿Qué necesita una introducción? ¿Qué palabras o supuestos podrían dificultar la lectura?
+Usa esas respuestas para elegir el inicio, el lenguaje y la cantidad de contexto. El glosario puede explicar términos recurrentes; un panel puede desarrollar el contexto de un paso específico.
+Elige un conjunto pequeño para empezar: una imagen, un documento, una grabación de audio, un video o varios materiales relacionados. Puedes volver a la misma fuente en más de un paso.
+Observa y escucha con cuidado. Anota elementos importantes, las relaciones entre ellos, las preguntas que plantean y lo que sigue siendo incierto. Conecta cada posible observación con un detalle que puedas mostrar.
+Personas, palabras, símbolos, sonidos, gestos, distribuciones y ausencias.
Preguntas sobre su creación, uso, público, fecha, lugar e interpretación.
Guarda junto a tus notas la dirección de la fuente, los datos del catálogo y el crédito. Identifica qué puedes compartir y qué debes revisar. Señala las interpretaciones inciertas como preguntas por investigar.
+En papel o en un documento, completa estas cuatro frases:
+La planeación es un proceso de revisión. A medida que examines las fuentes y pruebes la historia con lectores, ajusta la pregunta, la secuencia y la conclusión.
Convierte tu planteamiento en un inicio, una secuencia de preguntas y un cierre. Sigue con el arco narrativo; después relaciona los pasos con las fuentes, planea las capas y organiza la exhibición.
+El planeador narrativo ofrece un inicio y un cierre entre los cuales trabajar. Las diapositivas del taller muestran cómo agregar preguntas, fuentes y capas.
+Planea el recorrido de la historia → diff --git a/content/es/guia/planear/capas-y-glosario.md b/content/es/guia/planear/capas-y-glosario.md new file mode 100644 index 0000000..8c60b4f --- /dev/null +++ b/content/es/guia/planear/capas-y-glosario.md @@ -0,0 +1,42 @@ +--- +title: Planea los paneles y el glosario +url: /guia/planear/capas-y-glosario/ +translationKey: docs-plan-layers-and-glossary +type: guide +docs_draft: true +docs_section: planning +--- + +# Planea los paneles y el glosario {#planea-los-paneles-y-el-glosario} + +Mantén claro el hilo principal y ofrece contexto adicional donde el público pueda necesitarlo. Los paneles corresponden a un paso; las entradas del glosario explican términos que pueden aparecer en toda la exhibición. + +## Escribe primero la respuesta breve {#escribe-primero-la-respuesta-breve} + +Responde la pregunta en una o dos frases. Distingue la observación de la inferencia: ¿qué muestra la fuente y qué propones que significa? + +Lee las preguntas y respuestas sin abrir nada más. Si falta una explicación esencial, incorpórala al hilo principal antes de agregar detalles opcionales. + +## Dale un propósito a cada panel {#dale-un-propósito-a-cada-panel} + +Un primer panel puede explicar cómo se produjo una fuente, introducir una comparación o presentar la evidencia de una interpretación. El segundo se abre desde el primero y permite desarrollar esa discusión. + +En el planeador, dibuja la primera rama desde la pregunta y la segunda desde el primer panel. Así se representa el recorrido: paso → primer panel → segundo panel. + +Elige un botón que anticipe el contenido. “Cómo se tomó la muestra” orienta mejor que repetir “Más” en todos los pasos. No tienes que incluir en los paneles todo lo que investigaste. + +{{< media id="panels" >}} + +## Usa el glosario para el contexto recurrente {#usa-el-glosario-para-el-contexto-recurrente} + +Define un término si la explicación ayudará en varios pasajes. La definición debe entenderse por sí sola; enlaza entradas relacionadas cuando resulte útil. + +Una historia sobre un khipu puede necesitar una explicación del término y un panel sobre la actividad que muestra una fotografía específica. Son funciones distintas. + +La sintaxis es `[[id-del-termino]]`, o `[[id-del-termino|texto visible]]` si la frase requiere otra expresión. El Compositor también ofrece un control para insertar estos enlaces. + +## Revisa los recorridos opcionales {#revisa-los-recorridos-opcionales} + +Abre los paneles y enlaces del glosario en el orden en que los encontraría un lector. Comprueba que el título, el botón y el primer párrafo correspondan. Aclara qué fuente respalda cada afirmación y de dónde viene una comparación. + +**Resultado:** respuestas breves, esquemas de paneles con un propósito claro y una lista de términos compartidos. Sigue con [la organización de toda la exhibición](/guia/planear/organizar-la-exhibicion/). diff --git a/content/es/guia/planear/fuentes-y-encuadres.md b/content/es/guia/planear/fuentes-y-encuadres.md new file mode 100644 index 0000000..a08d6e5 --- /dev/null +++ b/content/es/guia/planear/fuentes-y-encuadres.md @@ -0,0 +1,44 @@ +--- +title: Elige fuentes y encuadres +url: /guia/planear/fuentes-y-encuadres/ +translationKey: docs-plan-sources-and-framing +type: guide +docs_draft: true +docs_section: planning +--- + +# Elige fuentes y encuadres {#elige-fuentes-y-encuadres} + +El encuadre debe ayudar a responder la pregunta del paso. Acerca la imagen cuando un detalle sirva de evidencia y aléjala cuando importe la relación entre varios elementos. + +## Lleva un registro de fuentes {#lleva-un-registro-de-fuentes} + +Para cada objeto, anota el título, la autoría conocida, la fecha o época, la institución que lo conserva, la dirección de la ficha de catálogo y el crédito. Anota por separado la dirección del manifiesto IIIF y la de la ficha de catálogo: el manifiesto proporciona la imagen y la ficha, el contexto del objeto. + +Registra qué puedes publicar y las dudas de atribución o interpretación. Si trabajas con materiales propios, conserva el archivo original además de la copia preparada para la exhibición. + + + +## Decide qué se verá en cada paso {#decide-qué-se-verá-en-cada-paso} + +Agrega tres notas a cada pregunta del plan: + +1. ¿Qué objeto, página o fragmento verá el visitante? +2. ¿Qué detalle debe notar? +3. ¿Qué explica la respuesta breve sobre ese detalle? + +Puedes volver al mismo objeto varias veces. Un cambio de encuadre permite desarrollar un argumento sin introducir una fuente nueva en cada paso. Usa una vista más amplia al pasar entre detalles distantes para que el público entienda su relación. + +## Planea imágenes, documentos y grabaciones {#planea-imágenes-documentos-y-grabaciones} + +En documentos de varias páginas, elige primero la página y después el encuadre. Para video o audio, identifica un fragmento y anota su inicio y final. Revisa si necesita una transcripción u otra explicación. + +El [ejemplo del khipu](/guia/el-compositor/iiif-a-historia/) muestra cómo agregar un objeto con la URL de su manifiesto IIIF, seleccionarlo en un paso, ajustar el encuadre y guardarlo con **Capturar posición**. Comprueba que la imagen que encuadras sea la del objeto que agregaste. + +## Describe la evidencia junto a la interpretación {#describe-la-evidencia-junto-a-la-interpretación} + +Describe los detalles visuales o sonoros pertinentes mediante el texto alternativo del paso o la explicación que lo acompaña. Evita depender únicamente de “mira aquí” o de un color para señalar la evidencia. + +Prueba la vista en una ventana más pequeña. Una etiqueta que puedes leer en tu monitor quizá necesite un acercamiento, una transcripción o una explicación escrita. + +**Resultado:** un registro de fuentes y una vista o un fragmento propuesto para cada paso. Sigue con [los paneles y el glosario](/guia/planear/capas-y-glosario/). diff --git a/content/es/guia/planear/organizar-la-exhibicion.md b/content/es/guia/planear/organizar-la-exhibicion.md new file mode 100644 index 0000000..6ea5897 --- /dev/null +++ b/content/es/guia/planear/organizar-la-exhibicion.md @@ -0,0 +1,44 @@ +--- +title: Organiza toda la exhibición +url: /guia/planear/organizar-la-exhibicion/ +translationKey: docs-plan-exhibition-layout +type: guide +docs_draft: true +docs_section: planning +--- + +# Organiza toda la exhibición {#organiza-toda-la-exhibición} + +Una exhibición incluye la página de inicio, las historias, los objetos, el glosario y las páginas de apoyo. Planea cómo recorrerlos antes de pulir cada pantalla. + +## Decide qué presenta la página de inicio {#decide-qué-presenta-la-página-de-inicio} + +Explica el tema, la pregunta central y quién hizo la exhibición. Ofrece contexto suficiente para elegir una historia sin repetir la introducción completa de cada una. + +Dale a cada tarjeta un título propio y un subtítulo útil. Si el orden importa, pon primero la historia por la que recomiendas comenzar. Aclara cuándo pueden leerse de manera independiente. + +{{< media id="public-home" >}} + +## Define la relación entre historias {#define-la-relación-entre-historias} + +Usa una historia para un argumento continuo o un examen guiado. Divide el material cuando cada historia tenga una pregunta, un público o un conjunto de fuentes distinto. + +Describe en una frase la función de cada historia. Si dos descripciones son intercambiables, reconsidera la división. Si una historia requiere conocimientos de otra, explica o enlaza esa relación. + +## Ofrece otras entradas a las fuentes {#ofrece-otras-entradas-a-las-fuentes} + +La galería de objetos permite explorar fuera de los recorridos guiados. Los títulos, créditos y descripciones útiles, junto con metadatos consistentes, ayudan a comprender lo que aparece allí. + +El glosario ofrece contexto recurrente. Una página de presentación o metodología puede explicar autorías, decisiones de investigación, selección de fuentes y agradecimientos sin interrumpir las historias. + +## Dibuja la navegación {#dibuja-la-navegación} + +Enumera los enlaces del menú y la página que debe abrir cada uno. Mantén una lista que se pueda comprender de un vistazo. Usa nombres que describan el destino. + +En el Compositor, organiza el menú en **Inicio y páginas** y ajusta la presentación de historias y objetos en **Configuración del sitio**. Con archivos, la navegación se guarda en `_data/navigation.yml`; consulta [la referencia de navegación](/guia/personalizacion/menu-navegacion/). + +## Elige una primera versión manejable {#elige-una-primera-versión-manejable} + +Construye primero un recorrido completo: inicio → historia → fuente o panel → cierre. Después agrega otras historias y páginas de apoyo. + +**Resultado:** un mapa sencillo del sitio, una lista ordenada de historias y un esquema de inicio. Sigue con [las pruebas con lectores](/guia/planear/revision/). diff --git a/content/es/guia/planear/revision.md b/content/es/guia/planear/revision.md new file mode 100644 index 0000000..521d6c0 --- /dev/null +++ b/content/es/guia/planear/revision.md @@ -0,0 +1,43 @@ +--- +title: Prueba la exhibición con lectores +url: /guia/planear/revision/ +translationKey: docs-plan-review +type: guide +docs_draft: true +docs_section: planning +--- + +# Prueba la exhibición con lectores {#prueba-la-exhibición-con-lectores} + +Que el sitio se genere sin errores no garantiza que se entienda. Antes de difundirlo, pide a otras personas que lo prueben para comprobar si tiene sentido para quien lo ve por primera vez. + +## Recorre el hilo principal {#recorre-el-hilo-principal} + +Entra al sitio publicado por la página de inicio, no por los enlaces que guardaste mientras editabas. Elige una historia y recórrela paso a paso hasta el final, como lo haría alguien que llega por primera vez. + +Comprueba que cada fuente aparezca en la página, encuadre o fragmento previsto. Lee la pregunta y respuesta frente a esa vista. Abre todos los paneles y enlaces del glosario y vuelve a la historia. + +## Invita a alguien a probarla {#invita-a-alguien-a-probarla} + +Propón una tarea pequeña: encontrar la primera historia, explicar qué cambia entre dos vistas o localizar la fuente de una afirmación. Observa antes de explicar la interfaz. + +Pregunta qué notó, qué entendió y dónde perdió el hilo. Distingue un problema de interfaz de una interpretación que necesita reescritura. Revisa el pasaje y vuelve a probarlo. + +## Prueba otras formas de lectura {#prueba-otras-formas-de-lectura} + +- Usa una ventana estrecha y un teléfono, si tienes uno disponible. +- Navega con el teclado: al pasar de un enlace o un control a otro, debe verse en cuál estás, por ejemplo con un borde resaltado. +- Lee el texto alternativo y las transcripciones junto a los materiales visuales y sonoros. +- Revisa tamaño del texto, contraste y nombres de botones. +- Abre los enlaces externos de las fuentes y verifica los créditos. +- Revisa el idioma de la interfaz y los textos que el sitio aporta automáticamente. + +Si una fuente no carga, prueba por separado la ficha de catálogo y el manifiesto. Si falla el encuadre, vuelve al paso y captura o copia de nuevo la vista prevista. + +## Prepara la versión que vas a compartir {#prepara-la-versión-que-vas-a-compartir} + +Retira del recorrido público el material incompleto. Una historia marcada como **Borrador** no aparece en el índice de historias del sitio, pero sus archivos CSV pueden escribirse en el repositorio de GitHub cuando publicas. **Privada** es un estado distinto: cifra el contenido de la historia y pide una clave para leerlo. Revisa el resultado en el sitio publicado, no solo en el editor. + +Registra la dirección pública, la fecha de las pruebas y las limitaciones conocidas. Conserva los archivos fuente y una nota breve sobre cómo volver a generar la exhibición. + +**Resultado:** una primera versión probada y una lista breve de mejoras. Si necesitas ayuda para construirla o corregirla, consulta el manual del [Compositor](/guia/el-compositor/), de [Google Sheets](/guia/google-sheets/) o de [autoría local](/guia/autoria-local/). diff --git a/content/es/guia/primeros-pasos/_index.md b/content/es/guia/primeros-pasos/_index.md new file mode 100644 index 0000000..b6ce744 --- /dev/null +++ b/content/es/guia/primeros-pasos/_index.md @@ -0,0 +1,14 @@ +--- +title: Primeros pasos +url: /guia/primeros-pasos/ +translationKey: docs-getting-started +type: guide +docs_hub: true +docs_section: guides +--- + + + + + +Empieza con una pregunta y tus fuentes. Después, elige la forma de autoría que te sirva.
{{< build-options >}} diff --git a/content/es/guia/primeros-pasos/agrega-contenido.md b/content/es/guia/primeros-pasos/agrega-contenido.md new file mode 100644 index 0000000..bc496f7 --- /dev/null +++ b/content/es/guia/primeros-pasos/agrega-contenido.md @@ -0,0 +1,72 @@ +--- +title: Agrega un objeto y una primera historia +url: /guia/primeros-pasos/agrega-contenido/ +translationKey: docs-getting-started-add-content +type: guide +docs_section: sheets +--- + +# Agrega un objeto y una primera historia {#agrega-un-objeto-y-una-primera-historia} + + + +Empieza con un objeto y una secuencia breve. Cuando funcione el recorrido completo, amplíalo con otras fuentes y capas opcionales. + + + + +## Agrega la fuente {#agrega-la-fuente} + +En **objects**, agrega ID, título, dirección de origen y metadatos útiles. Para una fuente IIIF externa, pega el manifiesto en `source_url`. + +Si necesitas un ejemplo para practicar: + +```text +https://juancobo.com/138la/iiif/khipu/p7/manifest.json +``` + +Elige el ID `khipu` y un título como “Khipu háptico”. Describe la actividad visible y conserva la información de catálogo y el crédito de la fuente. + +Para alojar un archivo propio, súbelo a `telar-content/objects/` en el repositorio, usa su nombre como ID y deja `source_url` vacío. Consulta [las imágenes autoalojadas](/guia/tu-contenido/imagenes-autoalojadas/) para formatos y procesamiento. + + + + +## Registra la historia {#registra-la-historia} + +En **project**, agrega orden, ID estable y título. Por ejemplo: + +| order | story_id | title | +|---|---|---| +| 1 | historia-khipu | Examinando un khipu | + +Crea o renombra la pestaña como `historia-khipu`. El ID y la pestaña deben coincidir. Conserva los encabezados de la plantilla. + +## Agrega el primer paso {#agrega-el-primer-paso} + +Completa una fila: + +| Columna | Ejemplo | +|---|---| +| `step` | `1` | +| `object` | `khipu` | +| `x`, `y`, `zoom` | `0.5`, `0.5`, `1` | +| `question` | ¿Qué actividad documenta esta imagen? | +| `answer` | Una toma de muestras de un khipu para datación por radiocarbono en la primavera de 2025. | +| `alt_text` | Manos con guantes trabajan con cuerdas anudadas sobre una superficie blanca. | + +Agrega otra fila numerada para la siguiente observación. Puedes volver al mismo objeto con otro encuadre. En objetos de varias páginas, la columna opcional `page` elige primero la página. + +Para grabaciones, usa `clip_start` y `clip_end` en segundos y `loop` cuando corresponda. Revisa [video](/guia/tu-contenido/objetos-de-video/) y [audio](/guia/tu-contenido/objetos-de-audio/) antes de elegir un proveedor con otro comportamiento de reproducción. + +## Agrega profundidad opcional {#agrega-profundidad-opcional} + +Escribe contexto adicional en `layer1_content` y un nombre útil para el botón en `layer1_button`. El segundo panel usa `layer2_content` y se abre desde el primero. + +Para textos extensos, referencia un archivo Markdown. Agrega términos en **glossary** e inserta enlaces `[[id-del-termino]]` en los campos que los admiten. + +## Genera la primera versión {#genera-la-primera-versión} + +Guarda los cambios de la hoja. En el repositorio, abre **Actions**, selecciona **Build and Deploy** y después **Run workflow**. El build descarga la hoja publicada. + +Espera a que termine y abre el sitio. Sigue con [los encuadres y la revisión](/guia/primeros-pasos/revisa-y-perfecciona/). diff --git a/content/es/guia/primeros-pasos/como-funciona-telar.md b/content/es/guia/primeros-pasos/como-funciona-telar.md new file mode 100644 index 0000000..fc713d0 --- /dev/null +++ b/content/es/guia/primeros-pasos/como-funciona-telar.md @@ -0,0 +1,11 @@ +--- +title: Telar +url: /guia/primeros-pasos/como-funciona-telar/ +translationKey: redirects-es-pp-como-funciona-telar-md +type: redirect +docs_section: reference +redirect_to: /guia/primeros-pasos/estructura-narrativa/ +sitemap: + disable: true +robots: noindex,follow +--- diff --git a/docs/1-1-compositor.es.md b/content/es/guia/primeros-pasos/compositor.md similarity index 60% rename from docs/1-1-compositor.es.md rename to content/es/guia/primeros-pasos/compositor.md index d217b21..f7307c7 100644 --- a/docs/1-1-compositor.es.md +++ b/content/es/guia/primeros-pasos/compositor.md @@ -1,42 +1,45 @@ --- -layout: docs -title: "1.1. Opción A: Usa el Compositor" -parent: 1. Primeros pasos -grand_parent: Documentación -nav_order: 1 -lang: es -permalink: /guia/primeros-pasos/compositor/ +title: Usa el Compositor +url: /guia/primeros-pasos/compositor/ +translationKey: docs-getting-started-compositor +type: guide +docs_section: compositor --- -# Usa el Compositor +# Usa el Compositor {#usa-el-compositor} El Compositor de Telar es una herramienta visual para construir exhibiciones. Puedes agregar objetos, escribir historias, organizar pasos y previsualizar tu sitio — todo en el navegador, sin necesidad de programar. Cuando estés listo, el Compositor publica un sitio Telar completo en GitHub Pages. -## Lo que necesitas +## Lo que necesitas {#lo-que-necesitas} - Una [cuenta de GitHub](https://github.com/join) (gratis) - Imágenes, videos o archivos de audio para la exhibición -## Empieza aquí +## Empieza aquí {#empieza-aquí} Ve a [compositor.telar.org](https://compositor.telar.org) e inicia sesión con tu cuenta de GitHub. El Compositor te pedirá instalar la aplicación Telar Compositor en GitHub — esto le da permiso para crear y administrar repositorios en tu nombre. Una vez que hayas iniciado sesión, tienes dos opciones: -### Crea un sitio nuevo +### Crea un sitio nuevo {#crea-un-sitio-nuevo} -Haz clic en **Crear un sitio nuevo**, escribe un nombre para el repositorio — **usa letras minúsculas y guiones** (ej., `mi-exhibicion`) — y el Compositor se encarga del resto: crea el repositorio a partir de la plantilla de Telar, configura GitHub Pages y deja tu sitio listo para editar. +Abre el menú de proyectos y elige **Agregar o crear un repositorio**; después, **Un sitio de Telar**. Escribe un nombre de repositorio y un título visible, y elige el idioma y el tema. Usa un nombre breve, en minúsculas y con guiones, como `mi-exhibicion`. -{: .warning } -> **El repositorio será público.** GitHub Pages requiere un repositorio público a menos que tengas un plan pago de GitHub. +Pulsa **Crear sitio** cuando estén listos esos datos. El Compositor crea el repositorio con la plantilla de Telar y prepara el sitio para editarlo. -### Conecta un repositorio existente +{{< callout "warning" >}} +**El repositorio será público.** GitHub Pages requiere un repositorio público a menos que tengas un plan pago de GitHub. +{{< /callout >}} + +{{< media id="create-site" >}} + +### Conecta un repositorio existente {#conecta-un-repositorio-existente} Si ya creaste un repositorio a partir de la [plantilla de Telar](https://github.com/UCSB-AMPLab/telar) o tienes un sitio Telar existente, selecciónalo de la lista y el Compositor importará tu contenido. -Se muestra así: El coeficiente es $C = \frac{8}{35}$ y el polinomio es $P_4(x)$.
-{: .warning } -> **Heurística del signo de dólar**: para evitar falsos positivos con monedas (ej., "$50"), Telar solo trata `$...$` como fórmula cuando el contenido incluye caracteres propios de LaTeX como `\`, `^`, `_` o `{`. Los signos dobles (`$$...$$`) siempre se tratan como fórmulas. +{{< callout "warning" >}} +**Heurística del signo de dólar**: para evitar falsos positivos con monedas (ej., "$50"), Telar solo trata `$...$` como fórmula cuando el contenido incluye caracteres propios de LaTeX como `\`, `^`, `_` o `{`. Los signos dobles (`$$...$$`) siempre se tratan como fórmulas. +{{< /callout >}} -### Fórmulas en bloque +### Fórmulas en bloque {#fórmulas-en-bloque} Encierra las expresiones entre signos de dólar dobles para obtener ecuaciones centradas e independientes: @@ -343,7 +347,7 @@ También puedes usar los delimitadores `\[...\]`: \[E = mc^2\] ``` -### Ecuaciones de varias líneas +### Ecuaciones de varias líneas {#ecuaciones-de-varias-líneas} Usa `\begin{align}...\end{align}` para ecuaciones alineadas en varias líneas. Marca los puntos de alineación con `&` y los saltos de línea con `\\`: @@ -358,7 +362,7 @@ P_2(x) &= \frac{1}{2}(3x^2 - 1)Se muestra así:
$$\begin{align} P_0(x) &= 1\\ P_1(x) &= x\\ P_2(x) &= \frac{1}{2}(3x^2 - 1) \end{align}$$
-### Entornos compatibles +### Entornos compatibles {#entornos-compatibles} | Entorno | Propósito | |---------|-----------| @@ -368,7 +372,7 @@ P_2(x) &= \frac{1}{2}(3x^2 - 1) | `pmatrix` | Matrices con paréntesis | | `bmatrix` | Matrices con corchetes | -### Fórmulas químicas +### Fórmulas químicas {#fórmulas-químicas} Telar incluye la extensión [mhchem](https://mhchem.github.io/MathJax-mhchem/) para notación química: @@ -381,7 +385,7 @@ $$\ce{CO2 + C -> 2CO}$$Se muestra así: La reacción $\ce{2H2 + O2 -> 2H2O}$ produce agua.
$$\ce{CO2 + C -> 2CO}$$
-### Dónde funciona LaTeX +### Dónde funciona LaTeX {#dónde-funciona-latex} | Tipo de contenido | Cómo se carga | |-------------------|---------------| @@ -392,15 +396,15 @@ $$\ce{CO2 + C -> 2CO}$$ | Páginas personalizadas | Siempre disponible | | Historias cifradas | Se carga automáticamente tras descifrar | -### Referencia completa de sintaxis +### Referencia completa de sintaxis {#referencia-completa-de-sintaxis} Para la lista completa de comandos LaTeX compatibles, consulta la [tabla de funciones de KaTeX](https://katex.org/docs/supported). --- -## Mejores prácticas +## Mejores prácticas {#mejores-prácticas} -### Texto alternativo para accesibilidad +### Texto alternativo para accesibilidad {#texto-alternativo-para-accesibilidad} Siempre proporciona texto alternativo descriptivo para las imágenes: @@ -409,7 +413,7 @@ Siempre proporciona texto alternativo descriptivo para las imágenes: ❌ {lg} ``` -### Organización de imágenes +### Organización de imágenes {#organización-de-imágenes} Guarda las imágenes de los paneles en `/telar-content/objects/` para encontrarlas fácilmente: @@ -421,14 +425,14 @@ telar-content/objects/ └── ... ``` -### Longitud del contenido +### Longitud del contenido {#longitud-del-contenido} - **Capa 1**: 2–3 párrafos de contexto - **Capa 2**: Contenido académico más extenso, citas, análisis extendido Divide los textos largos con encabezados, listas e imágenes para que se lean mejor. -### Nomenclatura de archivos +### Nomenclatura de archivos {#nomenclatura-de-archivos} Usa nombres de archivo descriptivos, en minúsculas con guiones: @@ -439,17 +443,17 @@ Usa nombres de archivo descriptivos, en minúsculas con guiones: --- -## Referencia rápida +## Referencia rápida {#referencia-rápida} Ejemplos listos para copiar y pegar de las tareas de formato más comunes: -### Agregar una imagen con pie +### Agregar una imagen con pie {#agregar-una-imagen-con-pie} ```markdown {lg} Detalle de los hilos de urdimbre, circa 1650. ``` -### Agregar un video de YouTube +### Agregar un video de YouTube {#agregar-un-video-de-youtube} ```html- See more projects - Ver más proyectos + See more projects + Ver más proyectos
@@ -168,7 +150,7 @@Ready to build your exhibition? Choose your workflow:
+¿Todo listo para construir tu exhibición? Elige tu flujo de trabajo:
+ + +Ready to build your exhibition? Choose your workflow:
-¿Todo listo para construir tu exhibición? Elige tu flujo de trabajo:
- - -Guion propuesto, textos en ambos idiomas e inventario de cobertura para el manual del Compositor.
+La obtención del manifiesto y su vista previa se comprobaron en ambos idiomas. El khipu se seleccionó en un paso de una historia marcada como borrador y se capturó su encuadre. No se ha publicado; falta ensayar ese recorrido antes de grabar.
Los intervalos son una propuesta de montaje. Cada toma deja tiempo para leer el control y comprobar el resultado. Las capturas del diálogo proceden de la interfaz actual; las tomas restantes se producirán después de revisar el guion.
+| Toma | Español | English | Acción y comprobación |
|---|---|---|---|
| {{ (add $loopIndex 1) }} · {{ (index $cue "start") }}–{{ (index $cue "end") }} s | {{ (index $cue "es") }} | {{ (index $cue "en") }} | {{ (index $cue "action") }} |
Estos textos se tomaron de las traducciones del Compositor. La guía usa el texto del control que verá quien siga cada versión.
+| Control | Español | English |
|---|---|---|
{{ (index $control "namespace") }}.{{ (index $control "key") }} | {{ (index $spanish "text") }} | {{ (index $control "text") }} |
Este inventario conecta las tareas con sus fuentes y la documentación existente. «Source-mapped» indica que se localizó la implementación; no significa que el recorrido ya se haya ensayado. «Source-and-live» indica comprobación en código e interfaz para la parte descrita.
+| ID | Tarea | Repositorio | Estado | Comprobación |
|---|---|---|---|---|
| {{ (index $item "id") }} | {{ (index $item "task") }} | {{ (index $item "repository") }} | {{ (index $item "status") }} | {{ (index $item "verification") }} |
Preparar el sitio de documentación, ensayar el recorrido completo y capturar el selector de objetos, el encuadre y el resultado publicado. Después, producir las dos versiones del video con sus subtítulos, transcripciones y archivos editables.
diff --git a/showcase.es.md b/layouts/_partials/pages/showcase-es.html similarity index 94% rename from showcase.es.md rename to layouts/_partials/pages/showcase-es.html index f874e82..08a1d03 100644 --- a/showcase.es.md +++ b/layouts/_partials/pages/showcase-es.html @@ -1,16 +1,4 @@ ---- -layout: section -title: "Proyectos hechos con Telar" -description: "Exposiciones, investigaciones y trabajos de clase hechos con Telar." -lang: es -permalink: /proyectos/ -nav_exclude: true -section_title: Proyectos -extra_css: - - showcase ---- - - + # Proyectos hechos con Telar @@ -32,7 +20,7 @@{{ .Inner | .Page.RenderString (dict "display" "block") }}\ No newline at end of file diff --git a/layouts/_shortcodes/guides-hub.html b/layouts/_shortcodes/guides-hub.html new file mode 100644 index 0000000..629be17 --- /dev/null +++ b/layouts/_shortcodes/guides-hub.html @@ -0,0 +1 @@ +{{ partial "hub.html" .Page }} \ No newline at end of file diff --git a/layouts/_shortcodes/manual-contents.html b/layouts/_shortcodes/manual-contents.html new file mode 100644 index 0000000..3e3d110 --- /dev/null +++ b/layouts/_shortcodes/manual-contents.html @@ -0,0 +1 @@ +{{ $book := index (index hugo.Data.docs_navigation.sections .Page.Language.Lang) "compositor" }}{{ range $book.groups }}{{ if ne .id "main" }}
{{ .caption }}
Redirecting to {{ .Params.redirect_to }}
\ No newline at end of file diff --git a/layouts/redirect/single.html b/layouts/redirect/single.html new file mode 100644 index 0000000..6eb7c1a --- /dev/null +++ b/layouts/redirect/single.html @@ -0,0 +1 @@ +Redirecting to {{ .Params.redirect_to }}
\ No newline at end of file diff --git a/layouts/robots.txt b/layouts/robots.txt new file mode 100644 index 0000000..ed366ec --- /dev/null +++ b/layouts/robots.txt @@ -0,0 +1,5 @@ +User-agent: * +{{ if .Site.Params.docs_preview }}Disallow: / +{{ else }}Allow: / +Sitemap: {{ "sitemap.xml" | absURL }} +{{ end }} \ No newline at end of file diff --git a/layouts/section/section.html b/layouts/section/section.html new file mode 100644 index 0000000..7ca6f62 --- /dev/null +++ b/layouts/section/section.html @@ -0,0 +1 @@ +{{ partial "section-shell.html" . }} diff --git a/layouts/section/single.html b/layouts/section/single.html new file mode 100644 index 0000000..7ca6f62 --- /dev/null +++ b/layouts/section/single.html @@ -0,0 +1 @@ +{{ partial "section-shell.html" . }} diff --git a/layouts/sitemap.xml b/layouts/sitemap.xml new file mode 100644 index 0000000..41d5c70 --- /dev/null +++ b/layouts/sitemap.xml @@ -0,0 +1,2 @@ +{{ printf "" | safeHTML }} +...
for paragraphs", + "layer1_content colonial-textiles/step1-layer1.md", + "Scenario Recommended method Short explanation (1-2 paragraphs) Method 1: Enter directly Panel with custom title or widgets Method 2: Paste, or Method 3: File reference Content with widgets (accordion, tabs, carousel) Method 3: File reference Same content used in multiple places Method 3: File reference Quick edits without leaving the spreadsheet Method 1 or 2", + "Normalized Accepts step step, paso object object, objeto, object_id x x y y zoom zoom page page, pagina, página question question, pregunta answer answer, respuesta layer1_button layer1_button, boton_capa1 layer1_content layer1_content, contenido_capa1, layer1_file, archivo_capa1 layer2_button layer2_button, boton_capa2 layer2_content layer2_content, contenido_capa2, layer2_file, archivo_capa2 layer3_button layer3_button, boton_capa3 layer3_content layer3_content, contenido_capa3, layer3_file, archivo_capa3 clip_start clip_start, inicio_clip clip_end clip_end, fin_clip loop loop, bucle alt_text alt_text, texto_alt" + ], + "blockquote": [ + "If you copy and paste from Microsoft Word, Google Docs, or similar applications, formatting will not be preserved. Write in markdown syntax instead — see the Markdown Syntax Guide.", + "The layer_file / archivo_capa column names are backward-compatible aliases from before v0.6.3. The preferred names are layer_content / contenido_capa." + ], + "img": [] + }, + "text": "Story Columns Complete reference for story CSV columns with bilingual column name support. For column normalization and dual header support, see Project Columns . Story CSV (story-{id}.csv) Defines step-by-step navigation and panel content for each story. Location : telar-content/spreadsheets/{story_id}.csv Naming : If story_id specified in project.csv: use that name (e.g., colonial-textiles.csv ) If story_id omitted: use story-{order}.csv (e.g., story-1.csv , story-2.csv ) Columns English Spanish Required Description step paso Yes Step number (1, 2, 3...) object objeto Yes Object ID from objects.csv x x Yes Horizontal coordinate (0-1 normalized) y y Yes Vertical coordinate (0-1 normalized) zoom zoom Yes Zoom level: 1 shows the whole object; higher values move closer page pagina No Which page of a multi-page object this step shows (the first page is 1) question pregunta Yes Heading displayed in story panel answer respuesta Yes Brief answer text layer1_button boton_capa1 No Custom button text (empty = \"Learn more\") layer1_content contenido_capa1 No Panel content: inline text or path to .md file layer2_button boton_capa2 No Custom button text (empty = \"Go deeper\") layer2_content contenido_capa2 No Panel content: inline text or path to .md file layer3_button boton_capa3 No Custom button text (empty = default) layer3_content contenido_capa3 No Panel content: inline text or path to .md file clip_start inicio_clip No Clip start time in seconds (e.g., 12.5 ) clip_end fin_clip No Clip end time in seconds loop bucle No Loop playback ( true , false , yes , no ). Defaults to false alt_text texto_alt No Per-step alt text for accessibility Example English (with inline content): step,object,x,y,zoom,question,answer,layer1_button,layer1_content,layer2_button,layer2_content 1,textile-001,0.5,0.5,1.0,What is this?,A colonial textile fragment,\"\",This fragment shows **advanced weaving techniques** from the colonial period.,\"Learn More\",colonial-textiles/step1-layer2.md 2,textile-001,0.3,0.7,0.5,What is this pattern?,An interlocking warp design,\"\",colonial-textiles/step2-layer1.md,\"\",colonial-textiles/step2-layer2.md Spanish (with inline content): paso,objeto,x,y,zoom,pregunta,respuesta,boton_capa1,contenido_capa1,boton_capa2,contenido_capa2 1,textil-001,0.5,0.5,1.0,¿Qué es esto?,Un fragmento de textil colonial,\"\",Este fragmento muestra **técnicas avanzadas de tejido** del período colonial.,\"Saber más\",textiles-coloniales/paso1-capa2.md 2,textil-001,0.3,0.7,0.5,¿Qué es este patrón?,Un diseño de urdimbre entrelazada,\"\",textiles-coloniales/paso2-capa1.md,\"\",textiles-coloniales/paso2-capa2.md Step 1 uses inline content for layer 1, while step 2 uses a file reference. Both approaches work and can be mixed freely. Field Notes step / paso Must be sequential integers starting at 1 No gaps allowed (1, 2, 3... not 1, 3, 5) Determines navigation order object / objeto Must match an object_id from objects.csv Leave empty to create a title card — a text-only step with no associated object. See Stories & Panels . Updated in v1.1.0 Multiple steps can reference the same object x, y, zoom x and y run from 0 to 1 x : 0 = left edge, 1 = right edge, 0.5 = center y : 0 = top edge, 1 = bottom edge, 0.5 = center zoom : 1 shows the whole object beside the text card. Higher values move closer, with the point at x and y in the middle of the view: 2 shows about half as much of the object, 4 about a quarter. Below 1, down to 0.1, the whole object is shown smaller, with space around it. At 1 or below, the object is centered and x and y do not move it. If the point is near an edge of the object, the view does not go past that edge, so the point may not be in the middle. Use the coordinate picker on object pages to find values page / pagina Only for objects with more than one page: a PDF hosted on your site, or an external IIIF manifest with several images Pages are numbered from 1 x , y and zoom frame the page this column selects, not the document as a whole Leave it empty for single-image objects A value that is not a whole number of 1 or more is ignored, and the build says which step it came from See PDF Documents and External IIIF Images question / pregunta Displayed as the heading of the text card No markdown processing (plain text only) Brief question or statement Recommended: 3-8 words answer / respuesta Brief answer shown in the text card, below the question Plain prose only (see Answers Are Plain Prose ) Cut above 18 lines (see The Answer Limit ) Recommended: 1-2 sentences Layer buttons Empty string = default button text Custom text: any string (e.g., \"See details\", \"Ver detalles\") If content exists but button empty: shows default text If content empty: button hidden Layer content Panel content can be provided in three ways: Method 1: Enter text directly Type your panel text directly in the spreadsheet cell. This is the simplest approach for short panels. layer1_content This textile shows advanced weaving techniques from the colonial period. To create paragraph breaks within a cell: Environment How to create line breaks Google Sheets Press Ctrl+Enter (Windows/Linux) or Option+Enter (macOS) CSV files Use actual newlines inside quoted text Alternative Use HTML:...
for paragraphs You can use basic formatting: **bold** , *italic* , [link text](url) , and glossary links ( [[term-id]] ). Method 2: Paste markdown text Paste text written in a plain text editor. This supports the full range of formatting features including headings, widgets (accordion, carousel, tabs), images with size controls, and a custom panel title using YAML frontmatter. If you copy and paste from Microsoft Word, Google Docs, or similar applications, formatting will not be preserved. Write in markdown syntax instead — see the Markdown Syntax Guide . Method 3: Reference a markdown file Point to a markdown file in your repository. This is recommended for complex panels, especially those with widgets or content you want to reuse. layer1_content colonial-textiles/step1-layer1.md Save markdown files in telar-content/texts/stories/ . In your spreadsheet, enter just the filename — or if you've organized files into subfolders, include the subfolder name. How Telar decides : If what you enter ends in .md and the file exists, it loads the file. Otherwise, it treats the value as content. clip_start, clip_end / inicio_clip, fin_clip New in v1.0.0 Start and end times in seconds for video and audio objects (e.g., 12.5 , 65 ) Ignored for image objects Leave both empty to play the full media file You can set clip values visually in the Compositor loop / bucle New in v1.0.0 Controls whether video or audio playback loops Accepts true , false , yes , no , sí Defaults to false if left empty Ignored for image objects alt_text / texto_alt New in v1.0.0 Per-step alt text for accessibility Falls back to the object's alt text (from objects.csv ), then to the object's title Use this to provide context specific to what the step is showing — e.g., a zoomed-in detail that differs from the object's general description Choosing the Right Method Scenario Recommended method Short explanation (1-2 paragraphs) Method 1: Enter directly Panel with custom title or widgets Method 2: Paste, or Method 3: File reference Content with widgets (accordion, tabs, carousel) Method 3: File reference Same content used in multiple places Method 3: File reference Quick edits without leaving the spreadsheet Method 1 or 2 Column Aliases Normalized Accepts step step , paso object object , objeto , object_id x x y y zoom zoom page page , pagina , página question question , pregunta answer answer , respuesta layer1_button layer1_button , boton_capa1 layer1_content layer1_content , contenido_capa1 , layer1_file , archivo_capa1 layer2_button layer2_button , boton_capa2 layer2_content layer2_content , contenido_capa2 , layer2_file , archivo_capa2 layer3_button layer3_button , boton_capa3 layer3_content layer3_content , contenido_capa3 , layer3_file , archivo_capa3 clip_start clip_start , inicio_clip clip_end clip_end , fin_clip loop loop , bucle alt_text alt_text , texto_alt The layer_file / archivo_capa column names are backward-compatible aliases from before v0.6.3. The preferred names are layer_content / contenido_capa . Answers Are Plain Prose The answer field appears in the text card beside your object, under the question. On desktop that card is a fixed size and does not scroll, so anything past its edge never reaches your readers. To keep answers readable, Telar reduces every answer to plain prose during the build, and reports each change it makes in the build log. These work in an answer and appear as you wrote them: Paragraph breaks Bold and italics Inline links Glossary links , written [[term]] Inline LaTeX Code spans Telar keeps the words of these but drops the formatting: Lists , both bulleted and numbered Headings Blockquotes Telar removes these completely, along with any text inside them: Images and embeds , both markdown image syntax and the img , iframe , video , audio , embed and object elements Footnotes , the reference and the note alike Tables Code blocks Horizontal rules The Answer Limit An answer has to fit on its card without scrolling. Telar therefore measures it in lines rather than words, counting 53 characters to a line and two lines for each paragraph after the first. An answer can have up to 18 lines and five paragraphs: roughly 150 words in a single paragraph, fewer when you split it into paragraphs. An answer longer than 15 lines is set in slightly smaller type. Telar cuts any answer over the limit and reports the cut in the build log. The cut falls on a word boundary, never inside a link, a glossary term, a code span or a LaTeX expression, so your markup never breaks. Text past the cut does not appear on your site. Aim for 1-2 sentences. When you need more room, move the detail into a layer panel: panels take the full markdown of the Markdown Syntax Reference , footnotes, tables, images and widgets included. Data Entry Tips Coordinates : Use the coordinate picker on object pages to find x, y, zoom values and copy them directly into your CSV. Markdown in fields : layer_content : Full markdown supported question : No markdown processing (plain text only) answer : plain prose, inline formatting only, cut above 18 lines Panel content : Use file references (Method 3) for complex content with widgets. Use inline text (Method 1) for short panels. Validation Telar validates story CSV data during build: Errors (build fails) : Missing required columns Invalid step sequence (gaps, duplicates) Missing layer markdown files Invalid coordinate values (outside 0-1 range) Warnings (build succeeds) : Unrecognized column names (ignored) Object ID not found in objects.csv Formatting removed from a step's answer, or an answer cut at 18 lines Check build output for validation messages. See Also Project Columns — Project CSV column reference Object Columns — Objects CSV column reference Glossary Columns — Glossary CSV columns Stories & Panels — How to structure stories Markdown Syntax — Formatting for panel content" + }, + "/docs/getting-started/local-dev/": { + "ids": [ + "build-the-first-preview", + "clone-and-setup", + "configure-site-settings", + "configure-the-site", + "core-commands", + "daily-development-workflow", + "deploying-to-github-pages", + "get-your-own-source-copy", + "install-and-run-telar-locally", + "install-dependencies", + "install-ruby-and-bundler", + "installation", + "local-development", + "next-steps", + "overview", + "prerequisites", + "step-1-gather-your-images", + "step-2-write-your-narrative-text", + "step-3-catalog-your-objects", + "step-4-preview-your-objects", + "step-5-find-coordinates-for-story-moments", + "step-6-build-your-story", + "step-7-add-glossary-terms-optional", + "step-by-step-workflow" + ], + "selectors": { + "h1": [ + "Install and run Telar locally" + ], + "h2": [ + "Prerequisites", + "Get your own source copy", + "Install dependencies", + "Configure the site", + "Build the first preview" + ], + "h3": [], + "h4": [], + "h5": [], + "h6": [], + "pre": [ + "ruby -v bundle -v python3 --version node --version npm --version git --version", + "git clone https://github.com/YOUR-ACCOUNT/YOUR-REPOSITORY.git cd YOUR-REPOSITORY", + "python3 -m venv .venv source .venv/bin/activate python3 -m pip install -r requirements.txt bundle install npm ci", + "google_sheets: enabled: false", + "python3 scripts/build_local_site.py" + ], + "table": [], + "blockquote": [], + "img": [] + }, + "text": "Install and run Telar locally Build an exhibition from CSV and Markdown files on your computer. This route gives you control of the source files, build process and hosting. You can also preview a site whose content comes from Google Sheets. Prerequisites The current Telar build uses Ruby 3.2, Python 3.12 and Node.js 22. Use Ruby 3.2 or newer within the 3.x series and Bundler. The template's dependency files are the authority for the version you are building. Check the programs in the terminal: ruby -v bundle -v python3 --version node --version npm --version git --version Install missing programs with the package manager or version manager you use on your operating system. On macOS, the system Ruby may be too old; check the version rather than assuming the preinstalled program is suitable. Get your own source copy Create a repository from the Telar template , then clone your repository. Replace the example address with your own: git clone https://github.com/YOUR-ACCOUNT/YOUR-REPOSITORY.git cd YOUR-REPOSITORY You can also download a source archive if you do not plan to use Git. Keep a separate backup of your editable files. Install dependencies Use a Python virtual environment so the project's packages remain separate from other Python work: python3 -m venv .venv source .venv/bin/activate python3 -m pip install -r requirements.txt bundle install npm ci On Windows, activate with .venv\\Scripts\\Activate.ps1 in PowerShell. Reopen and activate the same environment when returning to the project. If dependency installation fails, check the program versions before changing the lockfiles. For audio objects, install the system tool audiowaveform to prepare waveform data. Clip boundaries are applied in the browser; the audio-processing script does not extract separate clip files. Configure the site Edit the author-facing section of _config.yml : title, description, author, language and theme. If editing CSV files directly, set: google_sheets: enabled: false Keep the template's build settings below the author-facing section. For a site served at a domain root, baseurl is empty; for a project site it is the repository path. Build the first preview From the repository root, with the environment active: python3 scripts/build_local_site.py The helper processes content, audio and IIIF tiles, bundles JavaScript and starts Jekyll on port 4001. Open the address with the configured base path, for example http://127.0.0.1:4001/my-exhibition/ . Stop the server with Ctrl+C. Use --port 4003 if another site already uses 4001. Check your work: the homepage and a sample object should load. Next, edit the content files ." + }, + "/docs/developers/styling/": { + "ids": [ + "add-custom-interactions", + "advanced-styling", + "animation", + "best-practices", + "body-text", + "cascade-layers", + "component-styling", + "css-variables", + "custom-css", + "heading-styles", + "javascript-customization", + "layered-panels", + "layout-customization", + "method-1-add-to-telarscss", + "method-2-create-custom-stylesheet", + "modify-includes", + "modify-layouts", + "modify-story-behavior", + "next-steps", + "object-cards", + "performance-optimization", + "responsive-design", + "story-steps", + "typography-customization" + ], + "selectors": { + "h1": [ + "Advanced Styling" + ], + "h2": [ + "Custom CSS", + "CSS Variables", + "Layout Customization", + "Component Styling", + "Responsive Design", + "Cascade Layers", + "JavaScript Customization", + "Typography Customization", + "Animation", + "Best Practices", + "Performance Optimization", + "Next Steps" + ], + "h3": [ + "Method 1: Add to telar.scss", + "Method 2: Create Custom Stylesheet", + "Modify Layouts", + "Modify Includes", + "Story Steps", + "Layered Panels", + "Object Cards", + "Modify Story Behavior", + "Add Custom Interactions", + "Heading Styles", + "Body Text" + ], + "h4": [], + "h5": [], + "h6": [], + "pre": [ + "// Your custom styles .story-step { padding: 2rem; border-left: 3px solid var(--primary-color); } .object-card { box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); transition: transform 0.2s; &:hover { transform: translateY(-5px); } }", + "/* Custom overrides */ .site-header { background: linear-gradient(to right, #667eea 0%, #764ba2 100%); } .story-answer { font-style: italic; color: #666; }", + "", + ":root { // Colors --primary-color: #c7522a; --secondary-color: #5f7351; --accent-color: #8b7355; --text-color: #333; --heading-color: #1a1a1a; // Typography --font-headings: 'Playfair Display', Georgia, serif; --font-body: 'Source Sans Pro', sans-serif; // Spacing --spacing-unit: 1rem; --story-step-padding: 3rem; // Borders --border-radius: 4px; --border-color: #e0e0e0; }", + ".story-step { padding: var(--story-step-padding); margin-bottom: 2rem; .story-question { font-size: 2rem; margin-bottom: 1rem; } .story-answer { font-size: 1.125rem; line-height: 1.6; } }", + ".layer-panel { background: white; padding: 2rem; box-shadow: 0 10px 40px rgba(0, 0, 0, 0.1); .layer-title { border-bottom: 2px solid var(--primary-color); padding-bottom: 0.5rem; margin-bottom: 1.5rem; } }", + ".object-card { border: 1px solid var(--border-color); border-radius: var(--border-radius); overflow: hidden; .object-thumbnail { aspect-ratio: 4 / 3; object-fit: cover; } .object-info { padding: 1rem; } }", + "// Vertical layout: narrow width OR portrait-ish aspect ratio. // Note: the story layout itself fills the viewport rather than // splitting into columns; these overrides target your own containers. @media (max-width: 1024px), (max-aspect-ratio: 3 / 4) { .my-block { flex-direction: column; } } // Wide (desktop) layout @media (min-width: 1025px) { .my-block { max-width: 600px; } }", + "reset, third-party, telar-base, telar-bootstrap-overrides, telar-components, telar-overrides", + "npm run build:js", + "document.addEventListener('DOMContentLoaded', function() { // Add smooth scroll to all internal links document.querySelectorAll('a[href^=\"#\"]').forEach(anchor => { anchor.addEventListener('click', function (e) { e.preventDefault(); const target = document.querySelector(this.getAttribute('href')); target.scrollIntoView({ behavior: 'smooth' }); }); }); // Add animation to object cards on scroll const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('fade-in'); } }); }); document.querySelectorAll('.object-card').forEach(card => { observer.observe(card); }); });", + "h1, h2, h3, h4, h5, h6 { font-family: var(--font-headings); color: var(--heading-color); font-weight: 400; line-height: 1.2; } // Custom heading sizes h1 { font-size: 2.5rem; } h2 { font-size: 2rem; } h3 { font-size: 1.75rem; }", + "body { font-family: var(--font-body); font-size: 1rem; line-height: 1.6; color: var(--text-color); } p { margin-bottom: 1rem; }", + "// Fade in animation @keyframes fadeIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .fade-in { animation: fadeIn 0.6s ease-out; } // Object card hover .object-card { transition: all 0.3s ease; &:hover { transform: translateY(-5px); box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15); } }", + "// Use will-change for animations .animated-element { will-change: transform; } // Optimize images .object-thumbnail { image-rendering: -webkit-optimize-contrast; } // Hardware acceleration .smooth-scroll { transform: translateZ(0); }" + ], + "table": [], + "blockquote": [], + "img": [] + }, + "text": "Advanced Styling Go beyond themes with custom CSS, layout modifications, and component styling. Custom CSS Method 1: Add to telar.scss Edit assets/css/telar.scss to add custom styles: // Your custom styles .story-step { padding: 2rem; border-left: 3px solid var(--primary-color); } .object-card { box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); transition: transform 0.2s; &:hover { transform: translateY(-5px); } } Method 2: Create Custom Stylesheet Create assets/css/custom.css : /* Custom overrides */ .site-header { background: linear-gradient(to right, #667eea 0%, #764ba2 100%); } .story-answer { font-style: italic; color: #666; } Then include it in your _layouts/default.html : CSS Variables Telar uses CSS custom properties that you can override: :root { // Colors --primary-color: #c7522a; --secondary-color: #5f7351; --accent-color: #8b7355; --text-color: #333; --heading-color: #1a1a1a; // Typography --font-headings: 'Playfair Display', Georgia, serif; --font-body: 'Source Sans Pro', sans-serif; // Spacing --spacing-unit: 1rem; --story-step-padding: 3rem; // Borders --border-radius: 4px; --border-color: #e0e0e0; } Override these in your custom CSS to make global changes. Layout Customization Modify Layouts Edit files in _layouts/ directory: default.html : Base template (header, footer, nav) story.html : Scrollytelling page object.html : Object detail page glossary.html : Glossary term page home.html : Homepage layout Modify Includes Edit reusable components in _includes/ : header.html : Site header and navigation footer.html : Site footer story-step.html : Individual story step object-card.html : Object grid card Component Styling Story Steps .story-step { padding: var(--story-step-padding); margin-bottom: 2rem; .story-question { font-size: 2rem; margin-bottom: 1rem; } .story-answer { font-size: 1.125rem; line-height: 1.6; } } Layered Panels .layer-panel { background: white; padding: 2rem; box-shadow: 0 10px 40px rgba(0, 0, 0, 0.1); .layer-title { border-bottom: 2px solid var(--primary-color); padding-bottom: 0.5rem; margin-bottom: 1.5rem; } } Object Cards .object-card { border: 1px solid var(--border-color); border-radius: var(--border-radius); overflow: hidden; .object-thumbnail { aspect-ratio: 4 / 3; object-fit: cover; } .object-info { padding: 1rem; } } Responsive Design Telar's story layout switches to its vertical layout when the viewport is narrower than 1024px or has an aspect ratio narrower than 3:4 (see Mobile Optimization for details). When you add responsive rules to your own components, match those breakpoints so your styles change in step with the layout: // Vertical layout: narrow width OR portrait-ish aspect ratio. // Note: the story layout itself fills the viewport rather than // splitting into columns; these overrides target your own containers. @media (max-width: 1024px), (max-aspect-ratio: 3 / 4) { .my-block { flex-direction: column; } } // Wide (desktop) layout @media (min-width: 1025px) { .my-block { max-width: 600px; } } Cascade Layers As of v1.4.0, Telar's styles are organized into CSS cascade layers, declared in this order: reset, third-party, telar-base, telar-bootstrap-overrides, telar-components, telar-overrides Bootstrap loads into the third-party layer and Telar's own styles load into the later layers, so Telar reliably overrides Bootstrap without needing !important . This also helps your own customizations: unlayered CSS always wins over layered CSS , regardless of selector specificity. Any plain CSS rule you add outside of these layers takes precedence over Telar's styles, so you can usually override appearance without reaching for !important . If a custom rule unexpectedly fails to apply, check that it isn't being pulled into one of Telar's layers. JavaScript Customization Modify Story Behavior The story engine's source lives in assets/js/telar-story/ (one module per concern — scroll engine, navigation, card pool, panels) and is bundled into assets/js/telar-story.js , which is the file pages actually load. To change story behavior, edit the modules and rebuild the bundle: npm run build:js Never edit assets/js/telar-story.js directly — it is generated, and the next rebuild overwrites it. The directory map in assets/js/README.md describes what each module does and where to make which kind of change. Add Custom Interactions Create assets/js/custom.js : document.addEventListener('DOMContentLoaded', function() { // Add smooth scroll to all internal links document.querySelectorAll('a[href^=\"#\"]').forEach(anchor => { anchor.addEventListener('click', function (e) { e.preventDefault(); const target = document.querySelector(this.getAttribute('href')); target.scrollIntoView({ behavior: 'smooth' }); }); }); // Add animation to object cards on scroll const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('fade-in'); } }); }); document.querySelectorAll('.object-card').forEach(card => { observer.observe(card); }); }); Typography Customization Heading Styles h1, h2, h3, h4, h5, h6 { font-family: var(--font-headings); color: var(--heading-color); font-weight: 400; line-height: 1.2; } // Custom heading sizes h1 { font-size: 2.5rem; } h2 { font-size: 2rem; } h3 { font-size: 1.75rem; } Body Text body { font-family: var(--font-body); font-size: 1rem; line-height: 1.6; color: var(--text-color); } p { margin-bottom: 1rem; } Animation Add subtle animations: // Fade in animation @keyframes fadeIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .fade-in { animation: fadeIn 0.6s ease-out; } // Object card hover .object-card { transition: all 0.3s ease; &:hover { transform: translateY(-5px); box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15); } } Best Practices Use CSS variables for values that repeat Test responsive on multiple screen sizes Maintain accessibility (contrast, keyboard navigation) Keep it performant (avoid heavy animations, large images) Comment your code for future reference Test in multiple browsers (Chrome, Firefox, Safari) Performance Optimization // Use will-change for animations .animated-element { will-change: transform; } // Optimize images .object-thumbnail { image-rendering: -webkit-optimize-contrast; } // Hardware acceleration .smooth-scroll { transform: translateZ(0); } Next Steps Learn about Themes View Example Sites Explore Jekyll Layouts" + }, + "/docs/the-compositor/story-editor/": { + "ids": [ + "embed-preservation", + "formatting-toolbar", + "iiif-viewer", + "image-insertion", + "keyboard-shortcuts", + "layer-editing", + "media-editor-overview-docs-the-compositor-story-editor", + "media-framing-docs-the-compositor-story-editor", + "media-panel-editor-docs-the-compositor-story-editor", + "media-panels-docs-the-compositor-story-editor", + "object-picker", + "rich-paste", + "see-also", + "step-management", + "story-editor", + "title-card" + ], + "selectors": { + "h1": [ + "Story Editor" + ], + "h2": [ + "Title card", + "IIIF viewer", + "Step management", + "Layer editing", + "See also" + ], + "h3": [ + "Formatting toolbar", + "Keyboard shortcuts", + "Image insertion", + "Rich paste", + "Embed preservation" + ], + "h4": [], + "h5": [], + "h6": [], + "pre": [], + "table": [], + "blockquote": [ + "Panning and zooming explore the object. Capture position records the framing for the selected step. Capture again if you change the view you want to preserve." + ], + "img": [ + [ + "/assets/manual/tutorials/en-editor-overview.jpg", + "The story outline, step card and khipu viewer in the Compositor." + ], + [ + "/assets/manual/tutorials/en-framing-poster.jpg", + "The khipu view changes, then Capture position confirms that it has been captured." + ], + [ + "/assets/manual/tutorials/en-panels-poster.jpg", + "A story step opens its contextual panel alongside the main card." + ], + [ + "/assets/manual/tutorials/en-panel-editor.jpg", + "A contextual panel with its text editor and formatting toolbar open." + ] + ] + }, + "text": "Story Editor Open a story from Stories to write its questions, brief answers and optional panels. The editor combines the story outline, editable text and the view visitors will see. The sidebar uses a square for the title card, circles for steps and an upward triangle for the final step. A step's first panel branches from it; a second panel branches from the first. The outline is on the left, the step text in the centre and the object on the right. Capture position records the view for the selected step. Open full-size screenshot ↗ Title card Select the title card at the top of the outline. Click its title, subtitle or byline, or the corresponding editing icon, to change the field. Your edits are saved as you work. IIIF viewer Select an image step and choose Change object to pick its source. Pan and zoom to the detail you want visitors to see. To save the view: Select the step. Pan and zoom to the intended framing. Choose Capture position . Check the Captured confirmation. Move to the title card or another step, then return and check the saved view. Panning and zooming explore the object. Capture position records the framing for the selected step. Capture again if you change the view you want to preserve. Adjust the view, choose Capture position and look for Captured. The same khipu is shown throughout. Play steps Open full-size screenshot ↗ Download GIF The guides indicate the frame and the centre of the view. The text-limit guide helps you see how much of the brief answer fits in the public card. Step management + Add step creates a step. If you are offered the previous object, you can keep it or choose another. Change object selects a different source for the current step. Drag a step by its handle to change its position. Use the step's delete control and read the confirmation before removing it. Add section title inserts a heading that groups parts of the story. Write a question and a brief answer on each step card. Click the text or its editing icon. The answer field accepts Markdown; click outside it to review the rendered text. Video and audio steps have media controls in place of the image viewer. See Video and Audio . Layer editing Choose + Add panel on a step card, or open an existing panel using its button. Edit the panel's title and content in place using the text or editing icons. The first panel can offer a button to a second panel. Keep the main answer concise. Use panels for the context, evidence and nuance a reader may choose to explore. Open the step's panel to develop its context. This example uses the existing map-and-painting story. Play steps Open full-size screenshot ↗ Download GIF Formatting toolbar When editing panel content, use the formatting controls or write Markdown directly. Review the rendered panel after editing. See Markdown Syntax and Rich Content for supported content. Click the panel text to enter editing mode. The toolbar offers formatting, links, images and other content controls. Open full-size screenshot ↗ Keyboard shortcuts Standard editing shortcuts depend on the focused field. Keep the text editor focused when applying a formatting command. Use the toolbar when you are unsure which command is available. Image insertion Use the panel editor's image controls to add an image, and supply the information the dialog requests. A panel image is part of the explanation; the step's main source is selected separately through Change object . Rich paste When bringing text from another application, check the resulting formatting, links and spacing in the rendered panel before publishing. Embed preservation For embedded media and interactive content inside panels, follow Rich Content and Widgets . Check the actual published result as well as the editor preview. See also Use an IIIF object in a story Start and navigation Video and Audio Publishing" + }, + "/guia/configurar/validador-de-configuracion/": { + "ids": [ + "cv-input", + "cv-lines", + "cv-results", + "cv-validate", + "qué-se-verifica", + "validador-de-configuración", + "véase-también" + ], + "selectors": { + "h1": [ + "Validador de Configuración" + ], + "h2": [ + "Qué se verifica", + "Véase también" + ], + "h3": [], + "h4": [], + "h5": [], + "h6": [], + "pre": [], + "table": [], + "blockquote": [], + "img": [] + }, + "text": "Validador de Configuración Pega tu _config.yml de Telar a continuación para verificar errores comunes de configuración. El validador revisa la sintaxis YAML, los campos obligatorios y los ajustes específicos de Telar. Tu configuración nunca se envía a ningún servidor — todo se ejecuta en tu navegador. 1 Validar Qué se verifica Sintaxis YAML — Detecta errores de análisis, tabulaciones y comillas sin cerrar, con números de línea Campos obligatorios — Verifica que title , url y baseurl estén presentes y con el formato correcto Ajustes de Telar — Valida nombres de tema, códigos de idioma, URLs de Google Sheets y formato de baseurl Advertencias útiles — Notas sobre ajustes predeterminados, errores comunes en GitHub Pages y la sección de solo lectura Véase también Referencia de Configuración — Lista completa de todos los ajustes de _config.yml Generador y editor de configuración — Genera o edita un archivo _config.yml Primeros pasos — Elige tu método de configuración" + }, + "/docs/developers/embedding-system/": { + "ids": [ + "architecture-overview", + "banner-creation", + "banner-styling", + "browser-compatibility", + "button-creation", + "content-security-policy", + "cross-origin-resource-sharing-cors", + "css-modifications", + "custom-embed-styles", + "customizing-embed-behavior", + "deep-links-and-embed-state", + "detecting-embed-mode-in-custom-code", + "dimension-normalization", + "dimension-presets", + "embed-code-generation", + "embed-mode-detection", + "embed-mode-navigation", + "embed-mode-styles", + "embedding-system-reference", + "future-enhancements", + "iframe-considerations", + "iframe-sandbox-attribute", + "javascript-implementation", + "known-limitations", + "language-files", + "language-string-injection", + "local-testing", + "modifying-banner-appearance", + "multilingual-support", + "navigation-modes", + "navigation-system", + "production-testing", + "related-documentation", + "security-considerations", + "share--embed-panel", + "supported-browsers", + "testing-embed-mode", + "url-cleaning", + "url-parameter", + "view-full-site-banner" + ], + "selectors": { + "h1": [ + "Embedding System Reference" + ], + "h2": [ + "Architecture Overview", + "Embed Mode Detection", + "CSS Modifications", + "Navigation System", + "\"View Full Site\" Banner", + "Share & Embed Panel", + "Multilingual Support", + "Browser Compatibility", + "Testing Embed Mode", + "Security Considerations", + "Customizing Embed Behavior", + "Known Limitations", + "Deep links and embed state", + "Related Documentation" + ], + "h3": [ + "URL Parameter", + "JavaScript Implementation", + "Embed Mode Styles", + "Embed Mode Navigation", + "Navigation Modes", + "Button Creation", + "Banner Creation", + "Banner Styling", + "Embed Code Generation", + "URL Cleaning", + "Dimension Presets", + "Dimension Normalization", + "Language String Injection", + "Language Files", + "Supported Browsers", + "Iframe Considerations", + "Local Testing", + "Production Testing", + "Content Security Policy", + "Cross-Origin Resource Sharing (CORS)", + "iframe Sandbox Attribute", + "Custom Embed Styles", + "Detecting Embed Mode in Custom Code", + "Modifying Banner Appearance" + ], + "h4": [], + "h5": [], + "h6": [], + "pre": [ + "https://yoursite.com/stories/story-1/?embed=true", + "(function() { 'use strict'; // Parse URL parameters const params = new URLSearchParams(window.location.search); const embedParam = params.get('embed'); // Initialize embed state window.telarEmbed = { enabled: embedParam === 'true' }; // Wait for DOM ready if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } function init() { if (!window.telarEmbed.enabled) return; // Apply embed mode body class document.body.classList.add('embed-mode'); // Create \"View full site\" banner createEmbedBanner(); } })();", + "body.embed-mode { // Hide navigation chrome .home-button { display: none !important; } .share-button { display: none !important; } // Hide loading text in step counter .viewer-overlay { display: none; } }", + "body.embed-mode { // Navigation buttons render at every width in embed mode, // centred over the narrative column with intrinsic width .mobile-nav { position: fixed; left: 20%; right: auto; bottom: max(8%, 1.5rem); transform: translateX(-50%); } }", + "// Same boundary as the site-wide vertical layout // (_responsive.scss $telar-vertical-min-width, 1024px) @media (max-width: $telar-vertical-min-width) { body.embed-mode .mobile-nav { // Right-edge vertical stack right: 1rem; left: auto; bottom: 50%; transform: translateY(50%); flex-direction: column; } }", + "function createEmbedBanner() { // Get language strings from Jekyll const lang = window.telarLang?.embedBanner || { text: 'This story is part of {site_name}...', link: 'View the complete site' }; const siteName = getSiteName(); const siteUrl = getFullSiteUrl(); const banner = document.createElement('div'); banner.className = 'embed-banner'; banner.innerHTML = ` ${lang.link} `; document.body.appendChild(banner); // Handle dismissal banner.querySelector('.embed-banner-close').addEventListener('click', () => { banner.remove(); }); }", + ".embed-banner { position: fixed; top: 1rem; left: 1rem; z-index: 1000; background: rgba(255, 255, 255, 0.5); backdrop-filter: blur(8px); padding: 0.75rem 1rem; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); max-width: 380px; display: flex; align-items: center; gap: 0.75rem; }", + "function generateEmbedCode() { if (!currentStoryUrl) return ''; const width = embedWidthInput.value.trim() || '100%'; const height = embedHeightInput.value.trim() || '800'; // Normalize dimensions const widthAttr = normalizeDimension(width); const heightAttr = normalizeDimension(height); // Build embed URL const embedUrl = addEmbedParameter(currentStoryUrl); // Get story title const storyTitle = getStoryTitle(); // Generate iframe code const iframeCode = `...
para párrafos", + "contenido_capa1 textiles-coloniales/step1-layer1.md", + "Escenario Método recomendado Explicación corta (1-2 párrafos) Método 1: Introducir directamente Panel con título personalizado o widgets Método 2: Pegar, o Método 3: Archivo Contenido con widgets (acordeón, pestañas, carrusel) Método 3: Archivo Mismo contenido usado en varios lugares Método 3: Archivo Ediciones rápidas sin salir de la hoja de cálculo Método 1 o 2", + "Normalizado Acepta step step, paso object object, objeto, object_id x x y y zoom zoom page page, pagina, página question question, pregunta answer answer, respuesta layer1_button layer1_button, boton_capa1 layer1_content layer1_content, contenido_capa1, layer1_file, archivo_capa1 layer2_button layer2_button, boton_capa2 layer2_content layer2_content, contenido_capa2, layer2_file, archivo_capa2 layer3_button layer3_button, boton_capa3 layer3_content layer3_content, contenido_capa3, layer3_file, archivo_capa3 clip_start clip_start, inicio_clip clip_end clip_end, fin_clip loop loop, bucle alt_text alt_text, texto_alt" + ], + "blockquote": [ + "Si copias y pegas desde Microsoft Word, Google Docs o aplicaciones similares, el formato no se preservará. Escribe con sintaxis Markdown en su lugar — consulta la Guía de Sintaxis Markdown.", + "Los nombres de columna layer_file / archivo_capa son alias heredados de antes de v0.6.3. Los nombres preferidos son layer_content / contenido_capa." + ], + "img": [] + }, + "text": "Columnas de historias Referencia completa de las columnas del CSV de historia con soporte bilingüe de nombres de columnas. Para la normalización de columnas y soporte de encabezados dobles, consulta Columnas del proyecto . CSV de historia (story-{id}.csv) Define la navegación paso a paso y el contenido de paneles para cada historia. Ubicación : telar-content/spreadsheets/{story_id}.csv Nomenclatura : Si story_id está especificado en project.csv: usa ese nombre (ej., textiles-coloniales.csv ) Si story_id se omite: usa story-{order}.csv (ej., story-1.csv , story-2.csv ) Columnas Inglés Español Requerido Descripción step paso Sí Número de paso (1, 2, 3...) object objeto Sí ID de objeto del objects.csv x x Sí Coordenada horizontal (0-1 normalizada) y y Sí Coordenada vertical (0-1 normalizada) zoom zoom Sí Nivel de zoom: con 1 se ve el objeto completo; con valores mayores, la vista se acerca page pagina No Página que se muestra en este paso, en objetos de múltiples páginas (la primera es 1) question pregunta Sí Encabezado mostrado en el panel de la historia answer respuesta Sí Texto de respuesta breve layer1_button boton_capa1 No Texto personalizado del botón (vacío = \"Saber más\") layer1_content contenido_capa1 No Contenido del panel: texto en línea o ruta a archivo .md layer2_button boton_capa2 No Texto personalizado del botón (vacío = \"Profundizar más\") layer2_content contenido_capa2 No Contenido del panel: texto en línea o ruta a archivo .md layer3_button boton_capa3 No Texto personalizado del botón (vacío = predeterminado) layer3_content contenido_capa3 No Contenido del panel: texto en línea o ruta a archivo .md clip_start inicio_clip No Inicio del clip en segundos (ej., 12.5 ) clip_end fin_clip No Fin del clip en segundos loop bucle No Reproducción en bucle ( true , false , yes , no , sí ). Predeterminado: false alt_text texto_alt No Texto alternativo por paso para accesibilidad Ejemplo Inglés (con contenido en línea): step,object,x,y,zoom,question,answer,layer1_button,layer1_content,layer2_button,layer2_content 1,textile-001,0.5,0.5,1.0,What is this?,A colonial textile fragment,\"\",This fragment shows **advanced weaving techniques** from the colonial period.,\"Learn More\",colonial-textiles/step1-layer2.md 2,textile-001,0.3,0.7,0.5,What is this pattern?,An interlocking warp design,\"\",colonial-textiles/step2-layer1.md,\"\",colonial-textiles/step2-layer2.md Español (con contenido en línea): paso,objeto,x,y,zoom,pregunta,respuesta,boton_capa1,contenido_capa1,boton_capa2,contenido_capa2 1,textil-001,0.5,0.5,1.0,¿Qué es esto?,Un fragmento de textil colonial,\"\",Este fragmento muestra **técnicas avanzadas de tejido** del período colonial.,\"Saber más\",textiles-coloniales/paso1-capa2.md 2,textil-001,0.3,0.7,0.5,¿Qué es este patrón?,Un diseño de urdimbre entrelazada,\"\",textiles-coloniales/paso2-capa1.md,\"\",textiles-coloniales/paso2-capa2.md El paso 1 usa contenido en línea para la capa 1, mientras que el paso 2 usa una referencia a archivo. Ambos enfoques funcionan y se pueden mezclar libremente. Notas de los campos step / paso Deben ser enteros secuenciales comenzando en 1 No se permiten saltos (1, 2, 3... no 1, 3, 5) Determina el orden de navegación object / objeto Debe coincidir con un object_id del objects.csv Dejar vacío para crear una tarjeta de título — un paso de solo texto sin objeto asociado. Consulta Historias y paneles . Actualizado en v1.1.0 Varios pasos pueden hacer referencia al mismo objeto x, y, zoom x y y van de 0 a 1 x : 0 = borde izquierdo, 1 = borde derecho, 0.5 = centro y : 0 = borde superior, 1 = borde inferior, 0.5 = centro zoom : con 1 se ve el objeto completo junto a la tarjeta de texto. Con valores mayores, la vista se acerca y el punto que indican x y y queda en el centro: con 2 se ve más o menos la mitad del objeto y con 4, una cuarta parte. Con valores menores que 1, hasta 0.1, el objeto completo se ve más pequeño y con espacio alrededor. Con 1 o menos, el objeto queda centrado y x y y no lo mueven. Si el punto está cerca de un borde del objeto, la vista no pasa de ese borde, así que el punto puede no quedar en el centro. Usa el selector de coordenadas en las páginas de objetos para encontrar los valores page / pagina Solo para objetos de múltiples páginas: un PDF alojado en tu sitio o un manifiesto IIIF externo con varias imágenes Los números de página comienzan en 1 x , y y zoom encuadran la página que indiques en esta columna, no el documento completo Deja la columna vacía para objetos de una sola imagen Si el valor no es un número entero positivo, se ignora y aparece una advertencia que nombra el paso Consulta Documentos PDF e Imágenes IIIF externas question / pregunta Se muestra como encabezado de la tarjeta de texto Solo texto plano, sin procesamiento Markdown Pregunta o afirmación breve Recomendado: 3-8 palabras answer / respuesta Respuesta breve que se muestra en la tarjeta de texto, debajo de la pregunta Solo texto corrido. Consulta Las respuestas son texto corrido Se recorta si pasa de 18 líneas. Consulta El límite de las respuestas Recomendado: 1-2 oraciones Botones de las capas Cadena vacía = texto predeterminado del botón Texto personalizado: cualquier cadena (ej., \"Ver detalles\", \"See details\") Si hay contenido pero el botón está vacío: muestra el texto predeterminado Si no hay contenido: el botón se oculta Contenido de las capas El contenido del panel se puede proporcionar de tres maneras: Método 1: Introducir texto directamente Escribe el texto del panel directamente en la celda de la hoja de cálculo. Es el enfoque más sencillo para paneles cortos. contenido_capa1 Este textil muestra técnicas avanzadas de tejido del periodo colonial. Para crear saltos de párrafo dentro de una celda: Entorno Cómo crear saltos de línea Google Sheets Presiona Ctrl+Enter (Windows/Linux) u Option+Enter (macOS) Archivos CSV Usa saltos de línea reales dentro de texto entre comillas Alternativa Usa HTML:...
para párrafos Puedes usar formato básico: **negrita** , *cursiva* , [texto del enlace](url) , y enlaces de glosario ( [[term-id]] ). Método 2: Pegar texto Markdown Pega texto escrito en un editor de texto plano. Esto admite la gama completa de características de formato, incluyendo encabezados, widgets (acordeón, carrusel, pestañas), controles de tamaño de imagen y un título de panel personalizado usando frontmatter YAML. Si copias y pegas desde Microsoft Word, Google Docs o aplicaciones similares, el formato no se preservará. Escribe con sintaxis Markdown en su lugar — consulta la Guía de Sintaxis Markdown . Método 3: Indicar un archivo Markdown Indica la ruta a un archivo Markdown en tu repositorio. Esto se recomienda para paneles complejos, especialmente aquellos con widgets o contenido que quieras reutilizar. contenido_capa1 textiles-coloniales/step1-layer1.md Guarda los archivos Markdown en telar-content/texts/stories/ . En tu hoja de cálculo, ingresa solo el nombre del archivo — o si organizaste los archivos en subcarpetas, incluye el nombre de la subcarpeta. Cómo decide Telar : Si lo que ingresas termina en .md y el archivo existe, lo carga. De lo contrario, trata el valor como contenido. clip_start, clip_end / inicio_clip, fin_clip Nuevo en v1.0.0 Tiempos de inicio y fin en segundos para objetos de video y audio (ej., 12.5 , 65 ) Se ignoran para objetos de imagen Deja ambos vacíos para reproducir el archivo completo Puedes fijar los valores del clip de forma visual en el Compositor loop / bucle Nuevo en v1.0.0 Controla si la reproducción de video o audio se repite en bucle Acepta true , false , yes , no , sí Predeterminado: false si se deja vacío Se ignora para objetos de imagen alt_text / texto_alt Nuevo en v1.0.0 Texto alternativo por paso para accesibilidad Si se deja vacío, usa el texto alternativo del objeto (de objects.csv ) y luego el title del objeto Úsalo para proporcionar contexto específico de lo que muestra el paso — ej., un detalle ampliado que difiere de la descripción general del objeto Elegir el método correcto Escenario Método recomendado Explicación corta (1-2 párrafos) Método 1: Introducir directamente Panel con título personalizado o widgets Método 2: Pegar, o Método 3: Archivo Contenido con widgets (acordeón, pestañas, carrusel) Método 3: Archivo Mismo contenido usado en varios lugares Método 3: Archivo Ediciones rápidas sin salir de la hoja de cálculo Método 1 o 2 Alias del CSV de historia Normalizado Acepta step step , paso object object , objeto , object_id x x y y zoom zoom page page , pagina , página question question , pregunta answer answer , respuesta layer1_button layer1_button , boton_capa1 layer1_content layer1_content , contenido_capa1 , layer1_file , archivo_capa1 layer2_button layer2_button , boton_capa2 layer2_content layer2_content , contenido_capa2 , layer2_file , archivo_capa2 layer3_button layer3_button , boton_capa3 layer3_content layer3_content , contenido_capa3 , layer3_file , archivo_capa3 clip_start clip_start , inicio_clip clip_end clip_end , fin_clip loop loop , bucle alt_text alt_text , texto_alt Los nombres de columna layer_file / archivo_capa son alias heredados de antes de v0.6.3. Los nombres preferidos son layer_content / contenido_capa . Las respuestas son texto corrido El campo answer aparece en la tarjeta de texto, debajo de la pregunta. En pantallas de escritorio esa tarjeta tiene un tamaño fijo y no se desplaza, así que lo que se salga del borde no le llega a quien lee. Por eso Telar deja las respuestas en texto corrido al construir el sitio, y anota cada cambio en la salida del build . Lo que se conserva tal como lo escribiste: Saltos de párrafo Negrita y cursiva Enlaces en línea Enlaces de glosario , con la sintaxis [[term-id]] Fórmulas LaTeX en línea Código en línea Lo que conserva las palabras y pierde el formato: Listas , con viñetas o numeradas Títulos (los encabezados de Markdown) Citas en bloque Lo que desaparece por completo, junto con el texto que lleve adentro: Imágenes y elementos incrustados , tanto la sintaxis de imagen de Markdown como las etiquetas