Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ Wikidot markup parser and renderer.

| Package | Description |
|---------|-------------|
| [@wdprlib/ast](./packages/ast) | AST type definitions |
| [@wdprlib/parser](./packages/parser) | Wikidot markup parser |
| [@wdprlib/render](./packages/render) | HTML renderer |
| [@wdprlib/runtime](./packages/runtime) | Client-side runtime for interactive elements |
| [@wdprlib/ast](./packages/ast) | AST types for Wikidot markup |
| [@wdprlib/parser](./packages/parser) | Parser for Wikidot markup |
| [@wdprlib/render](./packages/render) | HTML renderer for Wikidot markup |
| [@wdprlib/runtime](./packages/runtime) | Client-side runtime for Wikidot markup |

## Installation

Expand Down
37 changes: 37 additions & 0 deletions packages/ast/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# @wdprlib/ast

AST type definitions for Wikidot markup.

## Installation

```bash
bun add @wdprlib/ast
```

## Usage

```ts
import type { SyntaxTree, Element } from "@wdprlib/ast";
import { text, paragraph, bold } from "@wdprlib/ast";

// Create AST nodes
const tree: SyntaxTree = {
elements: [paragraph([bold([text("Hello")]), text(" world")])],
};
```

## Exports

Types: `SyntaxTree`, `Element`, `ElementName`, `ContainerType`, `AttributeMap`, `LinkType`, `ListType`, `Module`, etc.

Helpers: `text`, `paragraph`, `bold`, `italics`, `heading`, `link`, `list`, `lineBreak`, `horizontalRule`

## Related Packages

- [@wdprlib/parser](https://www.npmjs.com/package/@wdprlib/parser) - Wikidot markup parser
- [@wdprlib/render](https://www.npmjs.com/package/@wdprlib/render) - HTML renderer
- [@wdprlib/runtime](https://www.npmjs.com/package/@wdprlib/runtime) - Client-side runtime

## License

AGPL-3.0 - See [LICENSE](https://github.com/r74tech/wdpr/blob/develop/LICENSE)
2 changes: 1 addition & 1 deletion packages/ast/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@wdprlib/ast",
"version": "0.1.5",
"version": "1.0.0-rc.0",
"description": "AST types for Wikidot markup",
"keywords": [
"ast",
Expand Down
63 changes: 63 additions & 0 deletions packages/parser/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# @wdprlib/parser

Wikidot markup parser.

## Installation

```bash
bun add @wdprlib/parser
```

## Usage

```ts
import { parse, resolveIncludes, extractDataRequirements, resolveModules } from '@wdprlib/parser'
import type { SyntaxTree, PageRef } from '@wdprlib/parser'

// Basic parsing
const tree: SyntaxTree = parse('**Hello** world')

// Full pipeline with includes and modules
const source = '[[include component:box]]\n[[module ListPages]]\n%%title%%\n[[/module]]'

// 1. Resolve includes
const expanded = resolveIncludes(source, (ref: PageRef) => {
return getPageSource(ref.page) // your function to fetch page source
})

// 2. Parse
const ast = parse(expanded)

// 3. Extract data requirements for modules
const { requirements, compiledListPagesTemplates } = extractDataRequirements(ast)

// 4. Resolve modules with external data
const resolved = await resolveModules(ast, {
fetchListPages: async (query) => {
// Fetch pages matching query from your database
return { pages: [...], totalCount: 100, site: { name: 'mysite' } }
},
getPageTags: () => ['tag1', 'tag2'],
}, {
parse,
compiledListPagesTemplates,
requirements,
})
```

## Features

- Wikidot markup parsing (bold, italic, links, images, tables, etc.)
- Include resolution (`[[include page]]`)
- Module support (ListPages, ListUsers, IfTags, etc.)
- Data extraction for server-side rendering

## Related Packages

- [@wdprlib/ast](https://www.npmjs.com/package/@wdprlib/ast) - AST type definitions
- [@wdprlib/render](https://www.npmjs.com/package/@wdprlib/render) - HTML renderer
- [@wdprlib/runtime](https://www.npmjs.com/package/@wdprlib/runtime) - Client-side runtime

## License

AGPL-3.0 - See [LICENSE](https://github.com/r74tech/wdpr/blob/develop/LICENSE)
2 changes: 1 addition & 1 deletion packages/parser/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@wdprlib/parser",
"version": "0.1.5",
"version": "1.0.0-rc.0",
"description": "Parser for Wikidot markup",
"keywords": [
"ast",
Expand Down
58 changes: 58 additions & 0 deletions packages/render/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# @wdprlib/render

HTML renderer for Wikidot markup.

## Installation

```bash
bun add @wdprlib/render
```

## Usage

```ts
import { parse } from "@wdprlib/parser";
import { renderToHtml } from "@wdprlib/render";
import type { PageContext, RenderOptions } from "@wdprlib/render";

const ast = parse("**Hello** world");

// Basic rendering
const html = renderToHtml(ast);

// With page context and resolvers
const pageContext: PageContext = {
pageName: "main",
site: "mysite",
domain: "mysite.example.com",
pageExists: (name) => checkPageExists(name),
};

const html = renderToHtml(ast, {
page: pageContext,
footnotes: ast.footnotes,
resolvers: {
user: (username) => ({ name: username, displayName: "Display Name" }),
htmlBlockUrl: (index) => `/local--html/page/${index}`,
},
});
```

## Features

- HTML generation from AST
- Footnote and bibliography rendering
- User link resolution
- Embed block with configurable allowlist
- Math rendering (via Temml)
- XSS protection (via DOMPurify)

## Related Packages

- [@wdprlib/ast](https://www.npmjs.com/package/@wdprlib/ast) - AST type definitions
- [@wdprlib/parser](https://www.npmjs.com/package/@wdprlib/parser) - Wikidot markup parser
- [@wdprlib/runtime](https://www.npmjs.com/package/@wdprlib/runtime) - Client-side runtime

## License

AGPL-3.0 - See [LICENSE](https://github.com/r74tech/wdpr/blob/develop/LICENSE)
2 changes: 1 addition & 1 deletion packages/render/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@wdprlib/render",
"version": "0.1.5",
"version": "1.0.0-rc.0",
"description": "HTML renderer for Wikidot markup",
"keywords": [
"html",
Expand Down
54 changes: 54 additions & 0 deletions packages/runtime/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# @wdprlib/runtime

Client-side runtime for interactive Wikidot elements.

## Installation

```bash
bun add @wdprlib/runtime
```

## Usage

```ts
import { initWdprRuntime } from "@wdprlib/runtime";
import type { WdprRuntime, RuntimeOptions } from "@wdprlib/runtime";

// Initialize after DOM is ready
const runtime: WdprRuntime = initWdprRuntime({
root: document.getElementById("page-content") as HTMLElement,
onRate: async (pageId, points) => {
const res = await fetch("/api/rate", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ page_id: pageId, points }),
});
return res.json();
},
});

// Cleanup when navigating away or re-rendering
runtime.destroy();
```

## Features

- Tabview tab switching
- Collapsible block toggle
- Table of contents navigation
- Footnote / bibliography interactions
- Foldable list toggle
- Math rendering (MathML with SVG polyfill via hfmath)
- Rating module callbacks
- Date formatting (odate)
- Email obfuscation reveal

## Related Packages

- [@wdprlib/ast](https://www.npmjs.com/package/@wdprlib/ast) - AST type definitions
- [@wdprlib/parser](https://www.npmjs.com/package/@wdprlib/parser) - Wikidot markup parser
- [@wdprlib/render](https://www.npmjs.com/package/@wdprlib/render) - HTML renderer

## License

AGPL-3.0 - See [LICENSE](https://github.com/r74tech/wdpr/blob/develop/LICENSE)
2 changes: 1 addition & 1 deletion packages/runtime/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@wdprlib/runtime",
"version": "0.1.5",
"version": "1.0.0-rc.0",
"description": "Client-side runtime for Wikidot markup",
"keywords": [
"markup",
Expand Down