1212//- --out Output file
1313//- --readme Replace readme tags in file
1414//- --ver Override version string
15+ //- --cssPurge Remove unused CSS classes (default: true)
16+ //- --cssKeep Class prefixes to always keep (default: is)
1517//- --worker Update worker file
1618//-
1719//- Examples
@@ -47,6 +49,7 @@ var child = require("child_process")
4749}
4850, jsMinCmd
4951, fileHashes
52+ , classes
5053, linked = module . filename . indexOf ( process . cwd ( ) ) !== 0
5154
5255if ( linked ) {
@@ -187,6 +190,7 @@ function html(opts, next) {
187190 } catch ( e ) { }
188191
189192 $$ ( "[exclude]" ) . forEach ( remove )
193+ classes = new Set ( )
190194
191195 following ( "cat" , "cat-drop" , function ( el , siblings ) {
192196 if ( opts . cat === false ) {
@@ -273,13 +277,25 @@ function html(opts, next) {
273277 write ( "" , cacheFile , JSON . stringify ( cache , null , 2 ) )
274278 }
275279
280+ cssOpts . root = inDir
281+ cssOpts . url = urlFn
282+ if ( opts . cssPurge !== false ) {
283+ $$ ( "[class]" ) . forEach ( function ( el ) {
284+ el . className . split ( / \s + / ) . forEach ( function ( c ) { if ( c ) classes . add ( c ) } )
285+ } )
286+ $$ ( "script[type='ui'][src]" ) . forEach ( function ( el ) {
287+ if ( ! el . _txt && ! el . textContent . trim ( ) ) {
288+ parseView ( cli . readFile ( path . resolve ( inDir , getSrc ( el ) ) ) , "ui" , { } , null )
289+ }
290+ } )
291+ var keep = opts . cssKeep && opts . cssKeep . length ? new RegExp ( "^(" + opts . cssKeep . join ( "|" ) + ")-" ) : null
292+ cssOpts . used = { classes, keep }
293+ }
294+
276295 $$ ( "[src]:not([src^='data:']),[href]:not(a,base,[href^='data:'])" ) . forEach ( function ( el ) {
277296 if ( el . _txt ) return
278297 cpOut ( el )
279298 } )
280-
281- cssOpts . root = inDir
282- cssOpts . url = urlFn
283299 next ( doc . toString ( { css : cssOpts } ) )
284300
285301 function assetUrl ( u ) {
@@ -451,9 +467,13 @@ function view2js(content) {
451467
452468function cssMin ( str , urlFn ) {
453469 var sheet = new CSSStyleSheet ( )
470+ , used = cssOpts . used
454471 sheet . replaceSync ( str )
455472 cssOpts . url = urlFn
456- return CSS . minify ( sheet , cssOpts )
473+ cssOpts . used = null
474+ var out = CSS . minify ( sheet , cssOpts )
475+ cssOpts . used = used
476+ return out
457477}
458478
459479function parseView ( content , extTo , lastMinEl , urlFn ) {
@@ -475,6 +495,10 @@ function parseView(content, extTo, lastMinEl, urlFn) {
475495 } else if ( map . hasOwnProperty ( line ) ) last = i - 1
476496 }
477497
498+ if ( classes ) arr . forEach ( function ( line ) {
499+ line . replace ( / \. ( [ - \w ] + ) / g, function ( _ , c ) { classes . add ( c ) } )
500+ } )
501+
478502 var out = ""
479503 if ( ( line = map [ "%css" ] ) ) {
480504 if ( lastMinEl . css ) {
0 commit comments