1313
1414import { MINI } from './constants.mjs' ;
1515
16- const TAG_SET = 1 ;
17- const PROPS_SET = 2 ;
18- const PROPS_ASSIGN = 3 ;
19- const CHILD_RECURSE = 4 ;
20- const CHILD_APPEND = 0 ;
21-
2216const MODE_SLASH = 0 ;
2317const MODE_TEXT = 1 ;
2418const MODE_WHITESPACE = 2 ;
2519const MODE_TAGNAME = 3 ;
26- const MODE_ATTRIBUTE = 4 ;
20+ const MODE_PROP_SET = 4 ;
21+ const MODE_PROP_APPEND = 5 ;
22+
23+ const TAG_SET = 1 ;
24+ const CHILD_APPEND = 0 ;
25+ const CHILD_RECURSE = 2 ;
26+ const PROPS_ASSIGN = 3 ;
27+ const PROP_SET = MODE_PROP_SET ;
28+ const PROP_APPEND = MODE_PROP_APPEND ;
2729
2830const evaluate = ( h , current , fields , args ) => {
2931 for ( let i = 1 ; i < current . length ; i ++ ) {
@@ -33,7 +35,10 @@ const evaluate = (h, current, fields, args) => {
3335 if ( current [ i ] === TAG_SET ) {
3436 args [ 0 ] = value ;
3537 }
36- else if ( current [ i ] === PROPS_SET ) {
38+ else if ( current [ i ] === PROP_APPEND ) {
39+ args [ 1 ] [ current [ ++ i ] ] += ( value + '' ) ;
40+ }
41+ else if ( current [ i ] === PROP_SET ) {
3742 ( args [ 1 ] = args [ 1 ] || { } ) [ current [ ++ i ] ] = value ;
3843 }
3944 else if ( current [ i ] === PROPS_ASSIGN ) {
@@ -93,17 +98,27 @@ const build = function(statics) {
9398 ( current [ 2 ] = current [ 2 ] || { } ) [ buffer ] = true ;
9499 }
95100 else {
96- current . push ( true , PROPS_SET , buffer ) ;
101+ current . push ( true , PROP_SET , buffer ) ;
97102 }
98103 }
99- else if ( mode === MODE_ATTRIBUTE && propName ) {
100- if ( MINI ) {
101- ( current [ 2 ] = current [ 2 ] || { } ) [ propName ] = field ? fields [ field ] : buffer ;
104+ else if ( MINI && mode === MODE_PROP_SET ) {
105+ ( current [ 2 ] = current [ 2 ] || { } ) [ propName ] = field ? buffer ? ( buffer + fields [ field ] ) : fields [ field ] : buffer ;
106+ mode = MODE_PROP_APPEND ;
107+ }
108+ else if ( MINI && mode == MODE_PROP_APPEND ) {
109+ if ( buffer || field ) {
110+ current [ 2 ] [ propName ] += field ? buffer + fields [ field ] : buffer ;
102111 }
103- else {
104- current . push ( field || buffer , PROPS_SET , propName ) ;
112+ }
113+ else if ( ! MINI && mode >= MODE_PROP_SET ) {
114+ if ( buffer ) {
115+ current . push ( buffer , mode , propName ) ;
116+ mode = MODE_PROP_APPEND ;
117+ }
118+ if ( field ) {
119+ current . push ( field , mode , propName ) ;
105120 }
106- propName = '' ;
121+ mode = MODE_PROP_APPEND ;
107122 }
108123 buffer = '' ;
109124 } ;
@@ -154,9 +169,12 @@ const build = function(statics) {
154169 // Ignore everything until the tag ends
155170 }
156171 else if ( char === '=' ) {
157- mode = MODE_ATTRIBUTE ;
172+ mode = MODE_PROP_SET ;
158173 propName = buffer ;
159174 buffer = '' ;
175+ if ( ! MINI ) {
176+ current . push ( buffer , mode , propName ) ;
177+ }
160178 }
161179 else if ( char === '/' ) {
162180 commit ( ) ;
0 commit comments