in src/OrchardCore/OrchardCore.ResourceManagement.Abstractions/ResourceDefinition.cs [192:327]
public TagBuilder GetTagBuilder(RequireSettings settings,
string applicationPath,
IFileVersionProvider fileVersionProvider)
{
string url, filePathAttributeName = null;
// Url priority:
if (settings.DebugMode)
{
url = settings.CdnMode
? Coalesce(UrlCdnDebug, UrlDebug, UrlCdn, Url)
: Coalesce(UrlDebug, Url, UrlCdnDebug, UrlCdn);
}
else
{
url = settings.CdnMode
? Coalesce(UrlCdn, Url, UrlCdnDebug, UrlDebug)
: Coalesce(Url, UrlDebug, UrlCdn, UrlCdnDebug);
}
if (String.IsNullOrEmpty(url))
{
url = null;
}
if (!String.IsNullOrEmpty(settings.Culture))
{
string nearestCulture = FindNearestCulture(settings.Culture);
if (!String.IsNullOrEmpty(nearestCulture))
{
url = Path.ChangeExtension(url, nearestCulture + Path.GetExtension(url));
}
}
if (url != null && url.StartsWith("~/", StringComparison.Ordinal))
{
if (!String.IsNullOrEmpty(_basePath))
{
url = _basePath + url.Substring(1);
}
else
{
url = applicationPath + url.Substring(1);
}
}
// If settings has value, it can override resource definition, otherwise use resource definition
if (url != null && ((settings.AppendVersion.HasValue && settings.AppendVersion == true) ||
(!settings.AppendVersion.HasValue && AppendVersion == true)))
{
url = fileVersionProvider.AddFileVersionToPath(applicationPath, url);
}
// Don't prefix cdn if the path is absolute, or is in debug mode.
if (!settings.DebugMode
&& !String.IsNullOrEmpty(settings.CdnBaseUrl)
&& !Uri.TryCreate(url, UriKind.Absolute, out var uri))
{
url = settings.CdnBaseUrl + url;
}
TagBuilder tagBuilder;
switch (Type)
{
case "script":
tagBuilder = new TagBuilder("script")
{
Attributes = {
{ "type", "text/javascript" }
}
};
filePathAttributeName = "src";
break;
case "stylesheet":
if (url == null && InnerContent != null)
{
// Inline style declaration
tagBuilder = new TagBuilder("style")
{
Attributes = {
{ "type", "text/css" }
}
};
}
else
{
// Stylesheet resource
tagBuilder = new TagBuilder("link") {
TagRenderMode = TagRenderMode.SelfClosing,
Attributes = {
{ "type", "text/css" },
{ "rel", "stylesheet" }
}
};
filePathAttributeName = "href";
}
break;
case "link":
tagBuilder = new TagBuilder("link") { TagRenderMode = TagRenderMode.SelfClosing };
filePathAttributeName = "href";
break;
default:
tagBuilder = new TagBuilder("meta") { TagRenderMode = TagRenderMode.SelfClosing };
break;
}
if (!String.IsNullOrEmpty(CdnIntegrity) && url != null && url == UrlCdn)
{
tagBuilder.Attributes["integrity"] = CdnIntegrity;
tagBuilder.Attributes["crossorigin"] = "anonymous";
}
else if (!String.IsNullOrEmpty(CdnDebugIntegrity) && url != null && url == UrlCdnDebug)
{
tagBuilder.Attributes["integrity"] = CdnDebugIntegrity;
tagBuilder.Attributes["crossorigin"] = "anonymous";
}
if (Attributes != null)
{
tagBuilder.MergeAttributes(Attributes);
}
if (settings.HasAttributes)
{
tagBuilder.MergeAttributes(settings.Attributes);
}
if (!String.IsNullOrEmpty(url) && filePathAttributeName != null)
{
tagBuilder.MergeAttribute(filePathAttributeName, url, true);
}
else if (!String.IsNullOrEmpty(InnerContent))
{
tagBuilder.InnerHtml.AppendHtml(InnerContent);
}
return tagBuilder;
}