Skip to content
This repository has been archived by the owner on May 13, 2024. It is now read-only.

Commit

Permalink
Changed options
Browse files Browse the repository at this point in the history
  • Loading branch information
stereobooster committed Feb 3, 2024
1 parent 421e2ae commit bbf12be
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 86 deletions.
87 changes: 26 additions & 61 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,25 @@
# remark-wiki-link
[![npm version](https://badge.fury.io/js/remark-wiki-link.svg)](https://badge.fury.io/js/remark-wiki-link) [![Build Status](https://travis-ci.org/landakram/remark-wiki-link.svg?branch=master)](https://travis-ci.org/landakram/remark-wiki-link)
# @stereobooster/remark-wiki-link

Fork of [remark-wiki-link](https://github.com/landakram/remark-wiki-link) to simplify options.

[![npm version](https://badge.fury.io/js/@stereobooster%2Fremark-wiki-link.svg)](https://badge.fury.io/js/@stereobooster%2Fremark-wiki-link)
[![Build Status](https://github.com/stereobooster/remark-wiki-link/actions/workflows/node.js.yml/badge.svg)](https://github.com/stereobooster/remark-wiki-link/actions/workflows/node.js.yml)

⚠️ This plugin is affected by the new parser in remark ([`micromark`](https://github.com/micromark/micromark), see [`remarkjs/remark#536`](https://github.com/remarkjs/remark/pull/536)). **For remark 12, use v0.0.x of this package**. **For remark 13+, use v1.0.0 or above.**

This [remark](https://github.com/wooorm/remark) plugin parses and renders `[[Wiki Links]]`.

* Parse wiki-style links and render them as anchors
* Differentiate between "new" and "existing" wiki links by giving the parser a list of existing permalinks
* Parse aliased wiki links i.e `[[Real Page:Page Alias]]`

Looking for lower level packages? Check out [mdast-util-wiki-link](https://github.com/landakram/mdast-util-wiki-link/) for working with ASTs and [micromark-extension-wiki-link](https://github.com/landakram/micromark-extension-wiki-link) for working with tokens.
Looking for lower level packages? Check out [@stereobooster/mdast-util-wiki-link](https://github.com/stereobooster/mdast-util-wiki-link) for working with ASTs and [micromark-extension-wiki-link](https://github.com/landakram/micromark-extension-wiki-link) for working with tokens.

## Usage

```javascript
const unified = require('unified')
const markdown = require('remark-parse')
const wikiLinkPlugin = require('remark-wiki-link');
const wikiLinkPlugin = require('@stereobooster/remark-wiki-link');

let processor = unified()
.use(markdown, { gfm: true })
Expand All @@ -38,12 +41,10 @@ A node will be created that looks like this:
value: 'Test Page',
data: {
alias: 'Test Page',
permalink: 'test_page',
exists: false,
permalink: 'Test Page',
hName: 'a',
hProperties: {
className: 'internal new',
href: '#/page/test_page'
href: 'Test Page'
},
hChildren: [{
type: 'text',
Expand All @@ -54,72 +55,36 @@ A node will be created that looks like this:
```

* `data.alias`: The display name for this link
* `data.permalink`: The permalink for this page. This permalink is computed from `node.value` using `options.pageResolver`, which can be passed in when initializing the plugin.
* `data.exists`: Whether the page exists. A page exists if its permalink is found in `options.permalinks`, passed when initializing the plugin.
* `data.hProperties.className`: Classes that are automatically attached to the `a` when it is rendered as HTML. These are configurable with `options.wikiLinkClassName` and `options.newClassName`. `options.newClassName` is attached when `data.exists` is false.
* `data.hProperties.href`: `href` value for the rendered `a`. This `href` is computed using `options.hrefTemplate`.

When rendered to HTML, we get:

```
<a class="internal new" href="#/page/test_page">Test Page</a>
```
* `data.permalink`: The permalink for this page. This permalink is computed from `node.value` using `options.linkResolver`, which can be passed in when initializing the plugin.
* `data.h...`: provide compatibility with [`rehype`](https://github.com/rehypejs/rehype). Computed from `data` using `options.linkTemplate`

### Configuration options

* `options.permalinks [String]`: An array of permalinks that should be considered existing pages. If a wiki link is parsed and its permalink matches one of these permalinks, `node.data.exists` will be true.
* `options.pageResolver (pageName: String) -> [String]`: A function that maps a page name to an array of possible permalinks. These possible permalinks are cross-referenced with `options.permalinks` to determine whether a page exists. If a page doesn't exist, the first element of the array is considered the permalink.

The default `pageResolver` is:
* `options.linkResolver (pageName: String) -> String`: A function that maps a page name to a permalink.
* `options.linkTemplate (opts: { permalink: string, alias: string }) -> hast`: A function that creates hast representation of wiki link. Default value is:

```javascript
(name) => [name.replace(/ /g, '_').toLowerCase()]
```

* `options.hrefTemplate (permalink: String) -> String`: A function that maps a permalink to some path. This path is used as the `href` for the rendered `a`.

The default `hrefTemplate` is:

```javascript
(permalink) => `#/page/${permalink}`
```ts
function defaultLinkTemplate ({ permalink, alias }: LinkTemplateProps) {
return {
hName: 'a',
hProperties: { href: permalink },
hChildren: [{ type: 'text', value: alias }]
}
}
```

* `options.wikiLinkClassName`: a class name that is attached to any rendered wiki links. Defaults to `"internal"`.
* `options.newClassName`: a class name that is attached to any rendered wiki links that do not exist. Defaults to `"new"`.
* `options.aliasDivider`: a string for `aliased pages`.
* `options.aliasDivider [String]`: a string to be used as the divider for aliases. See the section below on [Aliasing pages](#aliasing-pages). Defaults to `":"`.

#### Aliasing pages
### Aliasing pages

Aliased pages are supported with the following markdown syntax:

```
[[Real Page:Page Alias]]
```

The AST node will look like:

```javascript
{
value: 'Real Page',
data: {
alias: 'Page Alias',
permalink: 'real_page',
exists: false,
hName: 'a',
hProperties: {
className: 'internal new',
href: '#/page/real_page'
},
hChildren: [{
type: 'text',
value: 'Page Alias'
}]
}
}
```

And will produce this HTML when rendered:

```
<a class="internal new" href="#/page/real_page">Page Alias</a>
```html
<a href="Real Page">Page Alias</a>
```
42 changes: 21 additions & 21 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "remark-wiki-link",
"name": "@stereobooster/remark-wiki-link",
"description": "Parse and render wiki-style links",
"version": "2.0.1",
"keywords": [
Expand All @@ -8,7 +8,7 @@
"markdown",
"gfm"
],
"repository": "https://github.com/landakram/remark-wiki-link",
"repository": "https://github.com/stereobooster/remark-wiki-link",
"license": "MIT",
"author": {
"name": "Mark Hudnall",
Expand All @@ -33,7 +33,7 @@
},
"dependencies": {
"@babel/runtime": "^7.4.4",
"mdast-util-wiki-link": "^0.1.2",
"@stereobooster/mdast-util-wiki-link": "^0.1.2",
"micromark-extension-wiki-link": "^0.0.4"
},
"devDependencies": {
Expand Down
2 changes: 1 addition & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { syntax } from 'micromark-extension-wiki-link'
import { fromMarkdown, toMarkdown } from 'mdast-util-wiki-link'
import { fromMarkdown, toMarkdown } from '@stereobooster/mdast-util-wiki-link'

let warningIssued: boolean = false

Expand Down

0 comments on commit bbf12be

Please sign in to comment.