Skip to content

Commit 75c7fdc

Browse files
Convert to Jekyll with Markdown source files
Converts wiki.csswg.org DokuWiki content to a Jekyll static site with: Content conversion: - 294 pages converted from HTML to Markdown via pandoc - DokuWiki plugins handled: definition lists, alerts, topic metadata - Emoji conversion, broken media cleanup, attribute stripping Frontend: - Responsive mobile-first design with hamburger menu (<640px) - WCAG 2.1 AA accessibility: skip link, ARIA landmarks, focus indicators - Dark mode support via prefers-color-scheme - Sticky header, fluid typography, responsive tables Search (Lunr.js): - Client-side full-text search across all pages - search.json index generated at build time - Highlighted excerpts in search results Edit controls: - "Edit" button next to page title (GitHub Octicons compose icon) - Footer: "Edit this page" and "View version history" links
1 parent 099e9bf commit 75c7fdc

600 files changed

Lines changed: 41575 additions & 70048 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.md linguist-detectable

.github/workflows/deploy.yml

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,30 @@ concurrency:
1515
cancel-in-progress: true
1616

1717
jobs:
18+
build:
19+
runs-on: ubuntu-latest
20+
steps:
21+
- uses: actions/checkout@v4
22+
- uses: ruby/setup-ruby@v1
23+
with:
24+
ruby-version: '3.2'
25+
- name: Install Jekyll
26+
run: gem install jekyll
27+
- name: Setup Pages
28+
id: pages
29+
uses: actions/configure-pages@v4
30+
- name: Build with Jekyll
31+
run: jekyll build --baseurl "${{ steps.pages.outputs.base_path }}"
32+
env:
33+
JEKYLL_ENV: production
34+
- uses: actions/upload-pages-artifact@v3
35+
1836
deploy:
1937
runs-on: ubuntu-latest
38+
needs: build
2039
environment:
2140
name: github-pages
2241
url: ${{ steps.deployment.outputs.page_url }}
2342
steps:
24-
- uses: actions/checkout@v4
25-
- uses: actions/configure-pages@v4
26-
- uses: actions/upload-pages-artifact@v3
27-
with:
28-
path: '.'
2943
- uses: actions/deploy-pages@v4
3044
id: deployment

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
_site/

README.md

Lines changed: 111 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,121 @@
1-
# CSS Working Group Wiki Archive
1+
# CSS Working Group Wiki
22

3-
This is a read-only static archive of the [CSS Working Group Wiki](https://wiki.csswg.org/), originally hosted on DokuWiki at wiki.csswg.org.
3+
Community-editable documentation for the [CSS Working Group](https://www.w3.org/Style/CSS/).
44

5-
**Live site:** https://w3c.github.io/csswg-wiki-archive/
5+
**Live site:** https://w3c.github.io/csswg-wiki/
6+
7+
This replaces the original DokuWiki at wiki.csswg.org. Pages are now Markdown files that can be edited directly on GitHub.
68

79
## Contents
810

9-
The archive contains 294 pages covering:
11+
The wiki was initially populated with 294 pages from wiki.csswg.org covering:
12+
13+
- **[Meeting Planning](/planning/)** — Face-to-face meeting plans and schedules
14+
- **[Ideas and Resolutions](/ideas/)** — Ideas not yet in a spec
15+
- **[CSSWG Tools](/tools/)** — Documentation about working group tools
16+
- **[Specification Issues and Planning](/spec/)** — Wiki pages for tracking spec-related thoughts
17+
- **[Testing](/test/)** — CSS testing documentation
18+
19+
## Search
20+
21+
The site includes client-side full-text search powered by [Lunr.js](https://lunrjs.com/):
22+
23+
- **Build-time indexing**`search.json` generates a JSON index of all pages at build time
24+
- **Client-side search** — No server required; search runs entirely in the browser
25+
- **Highlighted excerpts** — Search results show matching terms highlighted in context
26+
- **Keyboard accessible** — Header search form submits to dedicated results page
27+
28+
Search is available via the search box in the site header, or directly at `/search/`.
29+
30+
## Editing
31+
32+
Each page has an “edit this page” link that takes you to the GitHub editor. Changes are deployed automatically when merged to `main`.
33+
34+
## Local Development
35+
36+
The site uses Jekyll. To preview locally:
37+
38+
```bash
39+
gem install jekyll
40+
jekyll serve
41+
```
42+
43+
Then open http://localhost:4000/csswg-wiki/
44+
45+
## Frontend Design
46+
47+
The site uses a modern, accessible frontend built with vanilla HTML, CSS, and JavaScript.
48+
49+
### Responsive Design
50+
51+
- **Mobile-first layout** with hamburger menu on screens under 640px
52+
- **Fluid typography** using CSS `clamp()` for readable text at any viewport
53+
- **Sticky header** for persistent navigation access
54+
- **Responsive tables** wrapped for horizontal scrolling on small screens
55+
56+
### Accessibility
57+
58+
The site follows WCAG 2.1 AA guidelines:
59+
60+
- **Skip link** — "Skip to main content" link for keyboard users
61+
- **ARIA landmarks**`banner`, `navigation`, `main`, `complementary` roles
62+
- **Focus indicators** — Visible 2px outline on all interactive elements
63+
- **Keyboard navigation** — Escape closes mobile menu, focus is managed
64+
- **Reduced motion** — Respects `prefers-reduced-motion` preference
65+
- **High contrast** — Supports Windows High Contrast Mode (`forced-colors`)
66+
- **Touch targets** — Minimum 44×44px tap targets on interactive elements
67+
- **Current page indication**`aria-current` on navigation and breadcrumbs
68+
69+
### Browser Support
70+
71+
- All modern browsers (Chrome, Firefox, Safari, Edge)
72+
- Graceful degradation for older browsers
73+
- Print stylesheet with expanded URLs
74+
75+
## Conversion from wiki.csswg.org
76+
77+
The wiki was converted from the DokuWiki installation at wiki.csswg.org in February 2026.
78+
79+
### Conversion process
80+
81+
1. **Scrape** — A Python scraper (`bin/scrape.py`) crawled the DokuWiki site and extracted all 294 pages as static HTML files with clean styling.
82+
83+
2. **Convert to Markdown** — A conversion script (`bin/convert-to-markdown.py`) processed the HTML using pandoc to generate Markdown source files, with special handling for DokuWiki plugins:
84+
85+
**Definition lists** — DokuWiki’s `plugin_definitionlist` used `<dl>/<dt>/<dd>` markup. Since pandoc doesn’t output kramdown’s definition list syntax, the script extracts these before pandoc runs and restores them afterward as proper kramdown:
86+
```
87+
Term
88+
: Definition
89+
```
90+
91+
**GFM-style alerts** — DokuWiki’s `plugin_note` divs (with classes like `noteimportant`, `notewarning`, `notetip`) are converted to GitHub-flavored Markdown alert syntax, rendered at runtime by `assets/alerts.js`:
92+
```
93+
> [!IMPORTANT]
94+
> Alert content here
95+
```
1096

11-
- **Specification Issues and Planning** (`/spec/`) — Wiki pages for tracking spec-related thoughts
12-
- **Ideas and Resolutions** (`/ideas/`) — Ideas not yet in a spec
13-
- **Testing** (`/test/`) — CSS testing documentation
14-
- **Meeting Planning** (`/planning/`) — Face-to-face meeting plans and schedules
15-
- **CSSWG Tools** (`/tools/`) — Documentation about working group tools
97+
**Topic metadata** — The `dataplugin_entry` structured data (used on `/topics/` pages for tracking spec issues) is converted to inline metadata:
98+
```
99+
**Spec:** css3-flexbox | **Owner:** tabatkins | **Status:** Closed | **Added:** 2012-05-16
100+
```
16101

17-
## Last Modified Dates
102+
**Emoji conversion** — DokuWiki smiley images (`/lib/images/smileys/*.svg`) are replaced with Unicode emoji: `:!:` → ⚠️, `:?:` → ❓, `FIXME` → 🚧, etc.
103+
104+
**Broken media cleanup** — References to missing wiki images (`/_media/`) and DokuWiki proxy URLs (`/lib/exe/fetch.php`) are removed or replaced with placeholder text.
105+
106+
**General cleanup** — Stripped `rel`, `class`, and `id` attributes from links; removed redundant `title` attributes; converted `<span class="abbr">` to plain text (handled by JavaScript at runtime).
107+
108+
3. **Jekyll setup** — Added Jekyll configuration, layout template with “edit this page” links, and automatic breadcrumb generation.
109+
110+
4. **Abbreviation handling** — Added `assets/abbr.js` to wrap known abbreviations (CSS, HTML, W3C, IRC, URL, GUI) in `<abbr>` tags with tooltips at runtime.
111+
112+
### Requirements for re-conversion
113+
114+
- Python 3.8+
115+
- pandoc
116+
- Network access to wiki.csswg.org
117+
118+
## Analysis of wiki.csswg.org Page Activity
18119

19120
Generated: 2026-02-14
20121

@@ -65,48 +166,6 @@ This listing excludes 166 pages that were bulk-imported on 2014/12/09.
65166
| | | test/ | [to-do](https://wiki.csswg.org/test/to-do), [css-writing-modes-3](https://wiki.csswg.org/test/css-writing-modes-3) |
66167
| 2014 | 3 | planning/ | [sophia-2014](https://wiki.csswg.org/planning/sophia-2014), [seoul-2014](https://wiki.csswg.org/planning/seoul-2014), [seattle-2014](https://wiki.csswg.org/planning/seattle-2014) |
67168

68-
To regenerate this listing:
69-
70-
```bash
71-
python3 bin/list-timestamps.py
72-
```
73-
74-
## Regenerating the Archive
75-
76-
The archive was generated using a Python scraper that crawls the DokuWiki site and produces static HTML files.
77-
78-
### Requirements
79-
80-
- Python 3.8+
81-
- Network access to wiki.csswg.org
82-
83-
### Usage
84-
85-
```bash
86-
# Scrape the wiki and output to a directory
87-
python3 bin/scrape.py /path/to/output
88-
89-
# Or output to current directory
90-
python3 bin/scrape.py .
91-
92-
# Preview locally
93-
python3 -m http.server -d /path/to/output
94-
```
95-
96-
The scraper:
97-
1. Discovers all pages by crawling the DokuWiki index
98-
2. Fetches each page and extracts the main content
99-
3. Generates clean HTML with modern styling and dark mode support
100-
4. Creates proper relative links for hosting at any URL path
101-
102-
### Rate Limiting
103-
104-
The scraper includes a 0.3-second delay between requests, to be nice to the server. A full scrape of ~294 pages takes approximately 2 minutes.
105-
106-
## Deployment
107-
108-
The site is automatically deployed to GitHub Pages via the workflow in `.github/workflows/deploy.yml` whenever changes are pushed to the `main` branch.
109-
110169
## License
111170

112171
The wiki content is governed by the [W3C Document License](https://www.w3.org/Consortium/Legal/2015/doc-license).

_config.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
title: CSS Working Group Wiki
2+
description: Community-editable wiki for CSS Working Group documentation
3+
url: https://w3c.github.io
4+
baseurl: /csswg-wiki
5+
repository: w3c/csswg-wiki
6+
7+
markdown: kramdown
8+
kramdown:
9+
input: GFM
10+
hard_wrap: false
11+
12+
permalink: pretty
13+
14+
defaults:
15+
- scope:
16+
path: ""
17+
values:
18+
layout: default
19+
20+
exclude:
21+
- README.md
22+
- bin/
23+
- .mypy_cache/

0 commit comments

Comments
 (0)