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
style
is not given, or a not String, or''
, then it returnsstr
unchanged.- E.g.
f('abcd', '')
returns'abcd'
.
- E.g.
-
If
style
is 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
style
is 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.
style
can 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, andstopIndex
is the location just before where styling stops.- E.g.
f('abcd', 'i1-3')
returns'a<i>bc</i>d'
.
- E.g.
style
can also include a single index for a one-character range.- E.g.
f('abcd', 'i2')
returns'ab<i>c</i>d'
.
- E.g.
style
can 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 nostyle
is given).- E.g.
f('<b&d>', 'b2')
returns'<b<b>&</b>d>'
.
- E.g.
-
If given an
extraContent
argument, 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.