public TagBuilder GetTagBuilder()

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;
        }