Prevent widows from appearing in a string.
This module replaces the spaces and hyphens at the end of a paragraph with non-breaking spaces and non-breaking hyphens to prevent widows.
It comes with support for strings and posthtml.
npm install prevent-widows
# - or -
yarn add prevent-widows
Prevent widows from appearing in a string.
const preventWidows = require("prevent-widows");
preventWidows("lorem ipsum dolar sit a met");
// lorem ipsum dolar sit a met
import preventWidows from "prevent-widows";
preventWidows("lorem ipsum dolar sit a met");
// lorem ipsum dolar sit a met
Defines the type of output to transform the spaces and hyphens.
- Since:
1.0.0
- Property is
Optional
- Default value is:
Encodings.HTML
- Validation rules:
- Must be a type of
Encoding
- Must be a type of
This table describes how values will be transformed depending on what type of pre-defined encoding you specify.
Encoding | Space character | Hyphen character |
---|---|---|
html | |
‑ |
unicode | \u00a0 |
\u2011 |
For example:
preventWidows("lorem ipsum dolar sit a met", { encoding: Encodings.UNICODE });
Alternatively, a custom encoding can be defined using an object:
preventWidows("lorem ipsum dolar sit a met", {
encoding: { space: "_", hyphen: "~" },
});
// lorem ipsum dolar sit a_met
This module comes with out-of-the-box support for posthtml.
The posthtml function exposes an additional parameter: posthtmlOptions
.
import posthtml from "posthtml";
import preventWidows from "prevent-widows";
posthtml().use(preventWidows.posthtml(posthtmlOptions, preventWidowsOptions));
import posthtml from "posthtml";
import preventWidows from "prevent-widows";
(async () => {
const input = "<div prevent-widows>lorem ipsum dolar sit a met</div>";
const { html } = await posthtml().use(preventWidows.posthtml()).process(input);
console.log(html);
})();
// <div>lorem ipsum dolar sit a met</div>
The posthtml method also comes with the following options:
The name of the attribute which identifies where widows should be prevented on its children.
- Since:
1.0.0
- Property is
Optional
- Default value is:
prevent-widows
- Validation rules:
- Must be a valid HTML attribute name
<div prevent-widows>Prevent widows</div>
Whether or not to remove the attribute (see: attrName
) from the element after
the transform has been applied.
- Since:
1.0.0
- Property is
Optional
- Default value is:
true
- Validation rules:
- Must be a boolean value:
true
orfalse
- Must be a boolean value:
When true
and by default, this will output:
<div>Prevent widows</div>
When false
, this will output:
<div prevent-widows>Prevent widows</div>