From 2b130b8d362e4b3c252e5ed3e2e90e61596f9889 Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Tue, 14 Jan 2025 12:08:26 -0800 Subject: [PATCH 1/5] Support depend-on when using script and style inline --- .../TagHelpers/ScriptTagHelper.cs | 45 +++++++++++++- .../TagHelpers/StyleTagHelper.cs | 60 ++++++++++++++++--- 2 files changed, 95 insertions(+), 10 deletions(-) diff --git a/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/ScriptTagHelper.cs b/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/ScriptTagHelper.cs index d751fb9769e..3981810cbee 100644 --- a/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/ScriptTagHelper.cs +++ b/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/ScriptTagHelper.cs @@ -108,7 +108,7 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu // This allows additions to the pre registered scripts dependencies. if (!string.IsNullOrEmpty(DependsOn)) { - setting.SetDependencies(DependsOn.Split(_separator, StringSplitOptions.RemoveEmptyEntries)); + setting.SetDependencies(DependsOn.Split(_separator, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)); } // Allow Inline to work with both named scripts, and named inline scripts. @@ -158,6 +158,47 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu var childContent = await output.GetChildContentAsync(); + if (!string.IsNullOrEmpty(DependsOn)) + { + var dependencies = DependsOn.Split(_separator, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries); + + foreach (var dependency in dependencies) + { + var dependencyParts = dependency.Split(';'); + + var resourceNameWithVersion = dependencyParts[0]; + + var versionParts = resourceNameWithVersion.Split(':'); + + var resourceName = versionParts[0]; + + var script = _resourceManager.RegisterResource("script", resourceName); + + if (versionParts.Length == 2) + { + script.Version = versionParts[1]; + } + + if (dependencyParts.Length == 2 && + Enum.TryParse(dependencyParts[1], true, out var location) + && location != ResourceLocation.Unspecified) + { + script.AtLocation(location); + } + else + { + if (At == ResourceLocation.Head) + { + script.AtHead(); + } + else + { + script.AtFoot(); + } + } + } + } + var builder = new TagBuilder("script"); builder.InnerHtml.AppendHtml(childContent); builder.TagRenderMode = TagRenderMode.Normal; @@ -198,7 +239,7 @@ private void PopulateResourceDefinition(ResourceDefinition definition) if (!string.IsNullOrEmpty(DependsOn)) { - definition.SetDependencies(DependsOn.Split(_separator, StringSplitOptions.RemoveEmptyEntries)); + definition.SetDependencies(DependsOn.Split(_separator, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)); } if (AppendVersion.HasValue) diff --git a/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/StyleTagHelper.cs b/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/StyleTagHelper.cs index b3e4bf83b50..19f9c68fba2 100644 --- a/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/StyleTagHelper.cs +++ b/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/StyleTagHelper.cs @@ -48,7 +48,10 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu { output.SuppressOutput(); - if (string.IsNullOrEmpty(Name) && !string.IsNullOrEmpty(Src)) + var hasName = !string.IsNullOrEmpty(Name); + var hasSource = !string.IsNullOrEmpty(Src); + + if (!hasName && hasSource) { // Include custom style var setting = _resourceManager.RegisterUrl("stylesheet", Src, DebugSrc); @@ -89,7 +92,7 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu if (!string.IsNullOrEmpty(DependsOn)) { - setting.SetDependencies(DependsOn.Split(_splitSeparators, StringSplitOptions.RemoveEmptyEntries)); + setting.SetDependencies(DependsOn.Split(_splitSeparators, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)); } if (At == ResourceLocation.Inline) @@ -99,7 +102,7 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu output.Content.AppendHtml(sw.ToString()); } } - else if (!string.IsNullOrEmpty(Name) && string.IsNullOrEmpty(Src)) + else if (hasName && !hasSource) { // Resource required @@ -152,7 +155,7 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu // This allows additions to the pre registered style dependencies. if (!string.IsNullOrEmpty(DependsOn)) { - setting.SetDependencies(DependsOn.Split(_splitSeparators, StringSplitOptions.RemoveEmptyEntries)); + setting.SetDependencies(DependsOn.Split(_splitSeparators, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)); } var childContent = await output.GetChildContentAsync(); @@ -170,7 +173,7 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu output.Content.AppendHtml(sw.ToString()); } } - else if (!string.IsNullOrEmpty(Name) && !string.IsNullOrEmpty(Src)) + else if (hasName && hasSource) { // Inline declaration @@ -194,12 +197,12 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu if (!string.IsNullOrEmpty(Culture)) { - definition.SetCultures(Culture.Split(',', StringSplitOptions.RemoveEmptyEntries)); + definition.SetCultures(Culture.Split(',', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)); } if (!string.IsNullOrEmpty(DependsOn)) { - definition.SetDependencies(DependsOn.Split(',', StringSplitOptions.RemoveEmptyEntries)); + definition.SetDependencies(DependsOn.Split(',', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)); } // Also include the style. @@ -241,12 +244,53 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu output.Content.AppendHtml(sw.ToString()); } } - else if (string.IsNullOrEmpty(Name) && string.IsNullOrEmpty(Src)) + else { // Custom style content var childContent = await output.GetChildContentAsync(); + if (!string.IsNullOrEmpty(DependsOn)) + { + var dependencies = DependsOn.Split(',', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries); + + foreach (var dependency in dependencies) + { + var dependencyParts = dependency.Split(';'); + + var resourceNameWithVersion = dependencyParts[0]; + + var versionParts = resourceNameWithVersion.Split(':'); + + var resourceName = versionParts[0]; + + var script = _resourceManager.RegisterResource("stylesheet", resourceName); + + if (versionParts.Length == 2) + { + script.Version = versionParts[1]; + } + + if (dependencyParts.Length == 2 && + Enum.TryParse(dependencyParts[1], true, out var location) + && location != ResourceLocation.Unspecified) + { + script.AtLocation(location); + } + else + { + if (At == ResourceLocation.Head) + { + script.AtHead(); + } + else + { + script.AtFoot(); + } + } + } + } + var builder = new TagBuilder("style"); builder.InnerHtml.AppendHtml(childContent); builder.TagRenderMode = TagRenderMode.Normal; From ed03c2eb1e9bbd67d007da355e3b9409c0944657 Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Wed, 15 Jan 2025 07:57:23 -0800 Subject: [PATCH 2/5] don't specify head --- .../TagHelpers/ScriptTagHelper.cs | 21 +++------------- .../TagHelpers/StyleTagHelper.cs | 25 +++++-------------- 2 files changed, 10 insertions(+), 36 deletions(-) diff --git a/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/ScriptTagHelper.cs b/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/ScriptTagHelper.cs index 3981810cbee..a392685997d 100644 --- a/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/ScriptTagHelper.cs +++ b/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/ScriptTagHelper.cs @@ -164,11 +164,7 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu foreach (var dependency in dependencies) { - var dependencyParts = dependency.Split(';'); - - var resourceNameWithVersion = dependencyParts[0]; - - var versionParts = resourceNameWithVersion.Split(':'); + var versionParts = dependency.Split(':'); var resourceName = versionParts[0]; @@ -179,22 +175,13 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu script.Version = versionParts[1]; } - if (dependencyParts.Length == 2 && - Enum.TryParse(dependencyParts[1], true, out var location) - && location != ResourceLocation.Unspecified) + if (At == ResourceLocation.Head) { - script.AtLocation(location); + script.AtHead(); } else { - if (At == ResourceLocation.Head) - { - script.AtHead(); - } - else - { - script.AtFoot(); - } + script.AtFoot(); } } } diff --git a/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/StyleTagHelper.cs b/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/StyleTagHelper.cs index 19f9c68fba2..14c1669bbb3 100644 --- a/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/StyleTagHelper.cs +++ b/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/StyleTagHelper.cs @@ -256,37 +256,24 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu foreach (var dependency in dependencies) { - var dependencyParts = dependency.Split(';'); - - var resourceNameWithVersion = dependencyParts[0]; - - var versionParts = resourceNameWithVersion.Split(':'); + var versionParts = dependency.Split(':'); var resourceName = versionParts[0]; - var script = _resourceManager.RegisterResource("stylesheet", resourceName); + var style = _resourceManager.RegisterResource("stylesheet", resourceName); if (versionParts.Length == 2) { - script.Version = versionParts[1]; + style.Version = versionParts[1]; } - if (dependencyParts.Length == 2 && - Enum.TryParse(dependencyParts[1], true, out var location) - && location != ResourceLocation.Unspecified) + if (At == ResourceLocation.Head) { - script.AtLocation(location); + style.AtHead(); } else { - if (At == ResourceLocation.Head) - { - script.AtHead(); - } - else - { - script.AtFoot(); - } + style.AtFoot(); } } } From 1bf605508e081e7fd6d4046156f91850a9e7fe4c Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Wed, 15 Jan 2025 08:07:59 -0800 Subject: [PATCH 3/5] update docs --- .../TagHelpers/ScriptTagHelper.cs | 21 ++++++++++--------- .../TagHelpers/StyleTagHelper.cs | 16 ++++++++------ 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/ScriptTagHelper.cs b/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/ScriptTagHelper.cs index a392685997d..4e57cb5ae72 100644 --- a/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/ScriptTagHelper.cs +++ b/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/ScriptTagHelper.cs @@ -54,19 +54,19 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu if (!hasName && hasSource) { - // + // RequireSettings setting; if (string.IsNullOrEmpty(DependsOn)) { - // Include custom script url + // Include custom script url. setting = _resourceManager.RegisterUrl("script", Src, DebugSrc); } else { - // Anonymous declaration with dependencies, then display + // Anonymous declaration with dependencies, then display. - // Using the source as the name to prevent duplicate references to the same file + // Using the source as the name to prevent duplicate references to the same file. var name = Src.ToLowerInvariant(); PopulateResourceDefinition(_resourceManager.InlineManifest.DefineScript(name)); @@ -88,8 +88,8 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu } else if (hasName && !hasSource) { - // Resource required - // + // Resource required. + // var setting = _resourceManager.RegisterResource("script", Name); @@ -118,7 +118,7 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu var childContent = await output.GetChildContentAsync(); if (!childContent.IsEmptyOrWhiteSpace) { - // Inline content definition + // Inline content definition. _resourceManager.InlineManifest.DefineScript(Name) .SetInnerContent(childContent.GetContent()); } @@ -135,11 +135,11 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu } else if (hasName && hasSource) { - // Inline declaration + // Inline declaration. PopulateResourceDefinition(_resourceManager.InlineManifest.DefineScript(Name)); - // If At is specified then we also render it + // If At is specified then we also render it. if (At != ResourceLocation.Unspecified) { var setting = _resourceManager.RegisterResource("script", Name); @@ -154,7 +154,8 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu } else { - // Custom script content + // Custom script content. + // var childContent = await output.GetChildContentAsync(); diff --git a/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/StyleTagHelper.cs b/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/StyleTagHelper.cs index 14c1669bbb3..5c1232236a9 100644 --- a/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/StyleTagHelper.cs +++ b/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/StyleTagHelper.cs @@ -53,7 +53,9 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu if (!hasName && hasSource) { - // Include custom style + // Include custom style. + // + var setting = _resourceManager.RegisterUrl("stylesheet", Src, DebugSrc); foreach (var attribute in output.Attributes) @@ -104,7 +106,8 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu } else if (hasName && !hasSource) { - // Resource required + // Resource required. + // var setting = _resourceManager.RegisterResource("stylesheet", Name); @@ -161,7 +164,7 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu var childContent = await output.GetChildContentAsync(); if (!childContent.IsEmptyOrWhiteSpace) { - // Inline named style definition + // Inline named style definition. _resourceManager.InlineManifest.DefineStyle(Name) .SetInnerContent(childContent.GetContent()); } @@ -175,7 +178,7 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu } else if (hasName && hasSource) { - // Inline declaration + // Inline declaration. var definition = _resourceManager.InlineManifest.DefineStyle(Name); definition.SetUrl(Src, DebugSrc); @@ -246,7 +249,8 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu } else { - // Custom style content + // Custom style content. + // var childContent = await output.GetChildContentAsync(); @@ -287,7 +291,7 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu builder.Attributes.Add(attribute.Name, attribute.Value.ToString()); } - // If no type was specified, define a default one + // If no type was specified, define a default one. if (!builder.Attributes.ContainsKey("type")) { builder.Attributes.Add("type", "text/css"); From 4dc00879c489d3f4ff65fa06283a948a7d4790cf Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Wed, 15 Jan 2025 10:54:07 -0800 Subject: [PATCH 4/5] Update ScriptTagHelper.cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Zoltán Lehóczky --- .../TagHelpers/ScriptTagHelper.cs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/ScriptTagHelper.cs b/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/ScriptTagHelper.cs index 4e57cb5ae72..a28a1d21315 100644 --- a/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/ScriptTagHelper.cs +++ b/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/ScriptTagHelper.cs @@ -176,14 +176,7 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu script.Version = versionParts[1]; } - if (At == ResourceLocation.Head) - { - script.AtHead(); - } - else - { - script.AtFoot(); - } + script.AtLocation(At); } } From 7ba477b208a948eae052b996fcab1832cc816c70 Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Wed, 15 Jan 2025 11:01:38 -0800 Subject: [PATCH 5/5] Update src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/StyleTagHelper.cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Zoltán Lehóczky --- .../TagHelpers/StyleTagHelper.cs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/StyleTagHelper.cs b/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/StyleTagHelper.cs index 5c1232236a9..413175fb279 100644 --- a/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/StyleTagHelper.cs +++ b/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/StyleTagHelper.cs @@ -271,14 +271,7 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu style.Version = versionParts[1]; } - if (At == ResourceLocation.Head) - { - style.AtHead(); - } - else - { - style.AtFoot(); - } + style.AtLocation(At); } }