Converts a string and a simple 'style'-instructions string,
to HTML code that has styling tags inserted.
It also HTML-encodes any &, <, and > characters in the string,
so they don't interfere with any inserted style tags.
This functionality is used by both
vsm-autocomplete and
vsm-box.
This package provides a function f(str, style, extraContent).
All arguments are Strings, and the last two are optional.
-
If
styleis not given, or a not String, or'', then it returnsstrunchanged.- E.g.
f('abcd', '')returns'abcd'.
- E.g.
-
If
styleis a String that contains a'<', then it is supposed to hold a styled version ofstr, with HTML-tags already inserted. In this case it returnsstyle.- E.g.
f('abcd', 'a<i>bc</i>d')returns'a<i>bc</i>d'.
- E.g.
-
Else it returns
str, with HTML styling tags inserted:- If
styleis the single character'i','b','s', or'u', then it applies the italic, bold, subscript, or superscript style resp., to the entire string.- E.g.
f('abcd', 'i')returns'<i>abcd</i>'.
- E.g.
stylecan also include a range '{startIndex}-{stopIndex}' that says which part of the string should be styled. E.g.'i0-3'applies italic to the first three characters ofstr.
Indexes count from 0, andstopIndexis the location just before where styling stops.- E.g.
f('abcd', 'i1-3')returns'a<i>bc</i>d'.
- E.g.
stylecan also include a single index for a one-character range.- E.g.
f('abcd', 'i2')returns'ab<i>c</i>d'.
- E.g.
stylecan include multiple styling instructions, separated by a;.
(Note: overlapping ranges are handled correctly, see index.test.js).- E.g.
f('abcd', 'i1;u2-4')returns'a<i>b</i><sup>cd</sup>'.
- E.g.
- If
-
It html-encodes
<,>, and&(also if nostyleis given).- E.g.
f('<b&d>', 'b2')returns'<b<b>&</b>d>'.
- E.g.
-
If given an
extraContentargument, it adds that extra content to inserted opening-tags.- E.g.
f('abc', 'i', 'style="pointer-events: none;"')returns'<i style="pointer-events: none;">abc</i>'.
- E.g.
const stringStyleHtml = require('string-style-html');
console.dir( stringStyleHtml('cdc2', 'i') );
// => '<i>cdc2</i>'.
console.dir( stringStyleHtml('Ca2+', 'u2-4') );
// => 'Ca<sup>2+</sup>'.
console.dir( stringStyleHtml('HCO3-', 's3;u4') );
// =>'HCO<sub>3</sub><sup>-</sup>'.
console.dir( stringStyleHtml('abc', 'ab<span style="color: #f00;">c</span>') );
// =>'ab<span style="color: #f00;">c</span>'.
This project is licensed under the AGPL license - see LICENSE.md.