NUglify version 1.21.0
Enhancement
Is it possible to keep tag elements in their raw format output without minify them, e.g. template, pre, textarea ?
The reason, maybe some tags have template variables or are used to display source code or do not allow changes to the content.
To Reproduce
var settings = new NUglify.Html.HtmlSettings();
var result = NUglify.Uglify.Html(@"
<template>
<div style=""{{if !show}}display:none;{{/if}}"">
name: {{data.name}}
</div>
<script> alert(0) </script>
</template>
<pre>
<span> name: Tom </span>
</pre>
<div>
<span> name: Tom </span>
</div>
", settings);
Minified output
result.Code:
<template><div style="{{if !show}}display:none;{{/if}}">name: {{data.name}}</div><script>alert(0)</script></template><pre>
<span> name: Tom </span>
</pre><div><span>name: Tom</span></div>
result .Errors:
{inner_css(1,1): run-time error CSS1062: Expected semicolon or closing curly-brace, found '{'}
{inner_css(1,26): run-time error CSS1062: Expected semicolon or closing curly-brace, found '{'}
Excepted code
The following settings are supported:
var settings = new NUglify.Html.HtmlSettings();
//Sets a list of tags that kept the raw output format.
settings.RawTags.Add("template");
settings.RawTags.Add("pre");
settings.RawTags.Add("textarea");
var result = NUglify.Uglify.Html(@"
<template>
<div style=""{{if !show}}display:none;{{/if}}"">
name: {{data.name}}
</div>
<script> alert(0) </script>
</template>
<pre>
<span> name: Tom </span>
</pre>
<div>
<span> name: Tom </span>
</div>
", settings);
result.Code:
<template>
<div style=""{{if !show}}display:none;{{/if}}"">
name: {{data.name}}
</div>
<script> alert(0) </script>
</template><pre>
<span> name: Tom </span>
</pre><div><span>name: Tom</span></div>
Code implementation
Maybe the code needs to be changed like this:
//HtmlMinifier.cs
void ProcessNode(HtmlNode node)
{
var element = node as HtmlElement;
//New code start
if (element != null && settings.RawTags.Count > 0 && settings.RawTags.Contains(element.Name))
{
return;
}
//New code end
bool isInXml = element?.Descriptor != null && (element.Descriptor.Category & ContentKind.Xml) != 0;
if (isInXml)
xmlNamespaceCount++;
//.....
}
//HtmlSettings.cs
public HtmlSettings()
{
KeepTags = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
//New code: initialize
RawTags = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
//.....
}
//New code: property
public HashSet<string> RawTags { get; }
NUglify version 1.21.0
Enhancement
Is it possible to keep tag elements in their raw format output without minify them, e.g.
template, pre, textarea?The reason, maybe some tags have template variables or are used to display source code or do not allow changes to the content.
To Reproduce
Minified output
result.Code:
result .Errors:
Excepted code
The following settings are supported:
result.Code:
Code implementation
Maybe the code needs to be changed like this: