react-slugify
Advanced tools
Comparing version 1.1.1 to 1.2.0
import * as React from 'react'; | ||
declare const slugify: (node: React.ReactNode) => string; | ||
interface SlugifyOptions { | ||
delimiter?: string; | ||
prefix?: string; | ||
} | ||
declare const slugify: (node: React.ReactNode, options?: SlugifyOptions) => string; | ||
export default slugify; |
@@ -11,18 +11,27 @@ "use strict"; | ||
} | ||
return str.replace(reg, replacement).toLowerCase(); | ||
return str.replace(reg, replacement); | ||
}; | ||
var harmonize = function (text) { return stripAccents(text) | ||
.toLowerCase() | ||
.replace(/\s+/g, '-') | ||
.replace(/[^a-z-]/g, ''); }; | ||
var slugify = function (node) { | ||
// undefined, null, boolean | ||
var harmonize = function (text, delimiter) { | ||
return stripAccents(text) | ||
.trim() | ||
.toLowerCase() | ||
.replace(/\s+/g, delimiter) | ||
.replace(new RegExp("/[^a-z" + delimiter + "]/g"), ''); | ||
}; | ||
var slugify = function (node, options) { | ||
if (options === void 0) { options = { delimiter: '-', prefix: '' }; } | ||
if (!options.delimiter) | ||
options.delimiter = '-'; | ||
if (!options.prefix) | ||
options.prefix = ''; | ||
if (!node || typeof node === 'boolean') { | ||
return ''; | ||
} | ||
// string, number | ||
var delimiter = options.delimiter, prefix = options.prefix; | ||
// string | ||
if (typeof node === 'string') | ||
return harmonize(node); | ||
return harmonize(prefix + " " + node, delimiter); | ||
// number | ||
if (typeof node === 'number') | ||
return String(node); | ||
return harmonize(prefix + " " + node, delimiter); | ||
// empty object | ||
@@ -40,7 +49,7 @@ if (typeof node === 'object' && Object.keys(node).length === 0) { | ||
if (node instanceof Array) { | ||
return node.map(function (n) { return slugify(n); }).join('-'); | ||
return slugify(node.map(function (n) { return slugify(n, { delimiter: delimiter }); }).join(delimiter), options); | ||
} | ||
// ReactElement | ||
if ('type' in node) | ||
return slugify(node.props.children); | ||
return slugify(node.props.children, options); | ||
// unhandled case | ||
@@ -47,0 +56,0 @@ return ''; |
{ | ||
"name": "react-slugify", | ||
"version": "1.1.1", | ||
"version": "1.2.0", | ||
"description": "Slugify a React node", | ||
@@ -5,0 +5,0 @@ "main": "dist/slugify.js", |
# react-slugify | ||
![build status](https://img.shields.io/circleci/project/github/martpie/react-slugify/master.svg?style=flat-square) | ||
Slugify a React node | ||
@@ -6,18 +9,16 @@ | ||
``` | ||
slugify(node) | ||
``` | ||
### `slugify(node[, options])` | ||
##### Parameters: | ||
- `node` String, Number, Fragment, Array of nodes | ||
- `options` Object (optional) | ||
- `delimiter` String (default is `'-'`) | ||
- `prefix` String (default is `''`) | ||
`node`<br /> | ||
A react Node | ||
## Examples | ||
``` TSX | ||
```tsx | ||
import slugify from 'react-slugify'; | ||
slugify('something I want to test'); | ||
// "something-i-want-to-test" | ||
// -> "something-i-want-to-test" | ||
@@ -35,2 +36,21 @@ slugify(<span>Yes it works like that too</span>); | ||
// -> "and-with-fragments-or-arrays" | ||
slugify( | ||
<h3>Crème brulée receipe</h3>, | ||
{ delimiter: '_' } | ||
); | ||
// -> creme_brulee_receipe | ||
slugify( | ||
<h3>Crème brulée receipe</h3>, | ||
{ prefix: 'user-content' } | ||
); | ||
// -> user-content-creme-brulee-receipe | ||
slugify( | ||
<h3>Crème brulée receipe</h3>, | ||
{ delimiter: '_', prefix: 'user-content' } | ||
); | ||
// -> user-content_creme_brulee_receipe | ||
``` |
Sorry, the diff of this file is not supported yet
7269
63
55