1 |
|
2 | import htmlparser2Tokenizer from "htmlparser2/lib/Tokenizer";
|
3 | import {tw as defaultTW} from "twind";
|
4 | export * from "twind";
|
5 | export * from "twind/sheets";
|
6 | var Tokenizer = htmlparser2Tokenizer.default || htmlparser2Tokenizer;
|
7 | var noop = () => void 0;
|
8 | var shim = (markup, options = {}) => {
|
9 | const {tw = defaultTW} = typeof options == "function" ? {tw: options} : options;
|
10 | let lastAttribName = "";
|
11 | let lastChunkStart = 0;
|
12 | const chunks = [];
|
13 | const tokenizer = new Tokenizer({
|
14 | decodeEntities: false,
|
15 | xmlMode: false
|
16 | }, {
|
17 | onattribend: noop,
|
18 | onattribdata: (value) => {
|
19 | if (lastAttribName == "class") {
|
20 | const currentIndex = tokenizer.getAbsoluteIndex();
|
21 | const startIndex = currentIndex - value.length;
|
22 | const parsedClassNames = tw(value);
|
23 | if (parsedClassNames !== value) {
|
24 | chunks.push(markup.slice(lastChunkStart, startIndex));
|
25 | chunks.push(parsedClassNames);
|
26 | lastChunkStart = currentIndex;
|
27 | }
|
28 | }
|
29 | lastAttribName = "";
|
30 | },
|
31 | onattribname: (name) => {
|
32 | lastAttribName = name;
|
33 | },
|
34 | oncdata: noop,
|
35 | onclosetag: noop,
|
36 | oncomment: noop,
|
37 | ondeclaration: noop,
|
38 | onend: noop,
|
39 | onerror: noop,
|
40 | onopentagend: noop,
|
41 | onopentagname: noop,
|
42 | onprocessinginstruction: noop,
|
43 | onselfclosingtag: noop,
|
44 | ontext: noop
|
45 | });
|
46 | tokenizer.end(markup);
|
47 | if (!chunks.length) {
|
48 | return markup;
|
49 | }
|
50 | return chunks.join("") + markup.slice(lastChunkStart || 0, markup.length);
|
51 | };
|
52 | export {
|
53 | shim
|
54 | };
|
55 |
|