diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Layout/server/LayoutServerDocumentation.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Layout/server/LayoutServerDocumentation.razor
index 14c18abba..e61f9d137 100644
--- a/BlazorBootstrap.Demo.RCL/Components/Pages/Layout/server/LayoutServerDocumentation.razor
+++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Layout/server/LayoutServerDocumentation.razor
@@ -26,7 +26,7 @@
Remove all the CSS content from the Shared/MainLayout.razor.css file.
-
+
@code {
private string pageUrl = "/layout-setup/blazor-server";
diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Layout/webassembly/LayoutWebAssemblyDocumentation.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Layout/webassembly/LayoutWebAssemblyDocumentation.razor
index 1d41ac58f..edd649b98 100644
--- a/BlazorBootstrap.Demo.RCL/Components/Pages/Layout/webassembly/LayoutWebAssemblyDocumentation.razor
+++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Layout/webassembly/LayoutWebAssemblyDocumentation.razor
@@ -27,7 +27,7 @@
Remove all the CSS content from the Shared/MainLayout.razor.css file.
-
+
@code {
private string pageUrl = "/layout-setup/blazor-webassembly";
diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/SortableList/SortableListDocumentation.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/SortableList/SortableListDocumentation.razor
index 130e98546..15c7f96ef 100644
--- a/BlazorBootstrap.Demo.RCL/Components/Pages/SortableList/SortableListDocumentation.razor
+++ b/BlazorBootstrap.Demo.RCL/Components/Pages/SortableList/SortableListDocumentation.razor
@@ -13,7 +13,7 @@
Before using the SortableList component, include the SortableJS script reference in your index.html/_Host.cshtml file.
-
+
diff --git a/BlazorBootstrap.Demo.RCL/Components/Shared/CodeSnippet.cs b/BlazorBootstrap.Demo.RCL/Components/Shared/CodeSnippet.cs
deleted file mode 100644
index 1ee0bf913..000000000
--- a/BlazorBootstrap.Demo.RCL/Components/Shared/CodeSnippet.cs
+++ /dev/null
@@ -1,90 +0,0 @@
-namespace BlazorBootstrap.Demo.RCL;
-
-public class CodeSnippet : ComponentBase
-{
- #region Members
-
- private string? code;
-
- #endregion
-
- #region Methods
-
- protected override async Task OnParametersSetAsync()
- {
- if (code is null)
- {
- if (!string.IsNullOrWhiteSpace(File))
- {
- var resourceName = File.Replace("~", typeof(CodeSnippet).Assembly.GetName().Name).Replace("/", ".").Replace("\\", ".");
-
- using (Stream stream = typeof(CodeSnippet).Assembly.GetManifestResourceStream(resourceName)!)
- {
- using (StreamReader reader = new StreamReader(stream))
- {
- code = await reader.ReadToEndAsync();
- }
- }
- }
- }
- }
-
- private string? GetLanguageFromFileExtension()
- {
- if (string.IsNullOrWhiteSpace(File))
- return null;
-
- return Path.GetExtension(File).ToLower() switch
- {
- ".razor" => "cshtml",
- ".cshtml" => "cshtml",
- ".html" => "html",
- ".css" => "css",
- ".cs" => "csharp",
- ".txt" => "none",
- ".js" => "js",
- _ => null
- };
- }
-
- protected override void BuildRenderTree(RenderTreeBuilder builder)
- {
- // no base call
- builder.AddMarkupContent(0, "");
-
- builder.OpenElement(300, "div");
- builder.AddAttribute(301, "class", "highlight show-code-only");
- builder.OpenElement(400, "pre");
- builder.OpenElement(401, "code");
- builder.AddAttribute(402, "class", $"language-{Language ?? GetLanguageFromFileExtension() ?? "cshtml"}");
- if (code != null)
- {
- builder.AddContent(403, code.Trim());
- }
- builder.CloseElement(); // end: code
- builder.CloseElement(); // end: pre
- builder.CloseElement();
-
- builder.AddMarkupContent(700, "");
- }
-
- protected override async Task OnAfterRenderAsync(bool firstRender)
- {
- if(firstRender)
- await JS.InvokeVoidAsync("highlightCode");
-
- await base.OnAfterRenderAsync(firstRender);
- }
-
- #endregion
-
- #region Properties
-
- [Inject] protected IJSRuntime JS { get; set; } = null!;
-
- [Parameter] public string? Language { get; set; }
-
- [Parameter] public string? File { get; set; }
-
- #endregion
-}
diff --git a/BlazorBootstrap.Demo.RCL/Components/Shared/Demo.razor b/BlazorBootstrap.Demo.RCL/Components/Shared/Demo.razor
index 5ea662816..897c2745f 100644
--- a/BlazorBootstrap.Demo.RCL/Components/Shared/Demo.razor
+++ b/BlazorBootstrap.Demo.RCL/Components/Shared/Demo.razor
@@ -1,7 +1,6 @@
@namespace BlazorBootstrap.Demo.RCL
@inherits ComponentBase
-
@if (ShowCodeOnly)
{
@@ -15,13 +14,13 @@
-
- @if (codeSnippet is not null)
- {
- @codeSnippet.Trim()
- }
-
-
+
+ @if (snippet is not null)
+ {
+ @snippet.Trim()
+ }
+
+
}
@@ -41,10 +40,10 @@ else if (!Tabs)
-
- @if (codeSnippet is not null)
+
+ @if (snippet is not null)
{
- @codeSnippet.Trim()
+ @snippet.Trim()
}
@@ -76,10 +75,10 @@ else // Tabs = true
-
- @if (codeSnippet is not null)
+
+ @if (snippet is not null)
{
- @codeSnippet.Trim()
+ @snippet.Trim()
}
@@ -88,4 +87,3 @@ else // Tabs = true
}
-
diff --git a/BlazorBootstrap.Demo.RCL/Components/Shared/Demo.razor.cs b/BlazorBootstrap.Demo.RCL/Components/Shared/Demo.razor.cs
index 3eb6f756b..91c4d5466 100644
--- a/BlazorBootstrap.Demo.RCL/Components/Shared/Demo.razor.cs
+++ b/BlazorBootstrap.Demo.RCL/Components/Shared/Demo.razor.cs
@@ -10,7 +10,7 @@ public partial class Demo : ComponentBase
private string? clipboardTooltipTitle = "Copy to clipboard";
- private string? codeSnippet;
+ private string? snippet;
///
/// A reference to this component instance for use in JavaScript calls.
@@ -37,11 +37,11 @@ protected override async Task OnInitializedAsync()
protected override async Task OnParametersSetAsync()
{
- if (codeSnippet is null)
+ if (snippet is null)
{
- var resourceName = Type.FullName + ".razor";
+ var resourceFullName = Type.FullName + ".razor";
- using (var stream = Type.Assembly.GetManifestResourceStream(resourceName)!)
+ using (var stream = Type.Assembly.GetManifestResourceStream(resourceFullName)!)
{
try
{
@@ -50,7 +50,7 @@ protected override async Task OnParametersSetAsync()
using (var reader = new StreamReader(stream))
{
- codeSnippet = await reader.ReadToEndAsync();
+ snippet = await reader.ReadToEndAsync();
}
}
catch (Exception ex)
@@ -97,7 +97,7 @@ public void ResetCopyStatusJS()
StateHasChanged();
}
- private async Task CopyToClipboardAsync() => await JS.InvokeVoidAsync("copyToClipboard", codeSnippet, objRef);
+ private async Task CopyToClipboardAsync() => await JS.InvokeVoidAsync("copyToClipboard", snippet, objRef);
#endregion
@@ -105,7 +105,7 @@ public void ResetCopyStatusJS()
[Inject] protected IJSRuntime JS { get; set; } = default!;
- [Parameter] public string LanguageCssClass { get; set; } = "language-cshtml";
+ [Parameter] public LanguageCode LanguageCode { get; set; } = LanguageCode.Razor;
[Parameter] public bool ShowCodeOnly { get; set; }
diff --git a/BlazorBootstrap.Demo.RCL/Components/Shared/Enums/LanguageCode.cs b/BlazorBootstrap.Demo.RCL/Components/Shared/Enums/LanguageCode.cs
new file mode 100644
index 000000000..5ff099558
--- /dev/null
+++ b/BlazorBootstrap.Demo.RCL/Components/Shared/Enums/LanguageCode.cs
@@ -0,0 +1,68 @@
+namespace BlazorBootstrap.Demo.RCL;
+
+///
+///
+///
+public enum LanguageCode
+{
+ ///
+ /// ASP.NET (C#) - aspnet
+ ///
+ AspNet,
+
+ ///
+ /// C# - csharp, cs, dotnet
+ ///
+ CSharp,
+
+ ///
+ /// CSS - css
+ ///
+ Css,
+
+ ///
+ /// HTML - html
+ ///
+ HTML,
+
+ ///
+ /// JavaScript - javascript, js
+ ///
+ JavaScript,
+
+ ///
+ /// JSON - json
+ ///
+ JSON,
+
+ ///
+ /// JSONP - jsonp
+ ///
+ JSONP,
+
+ ///
+ /// Markdown - md
+ ///
+ Markdown,
+
+ ///
+ /// PowerShell - powershell
+ ///
+ PowerShell,
+
+ ///
+ /// Razor C# - cshtml, razor
+ ///
+ Razor,
+
+ ///
+ /// Text - none
+ ///
+ Text,
+
+ ///
+ /// YAML - yaml, yml
+ ///
+ YAML
+}
+
diff --git a/BlazorBootstrap.Demo.RCL/Components/Shared/Extensions/EnumExtensions.cs b/BlazorBootstrap.Demo.RCL/Components/Shared/Extensions/EnumExtensions.cs
new file mode 100644
index 000000000..f261c113d
--- /dev/null
+++ b/BlazorBootstrap.Demo.RCL/Components/Shared/Extensions/EnumExtensions.cs
@@ -0,0 +1,20 @@
+namespace BlazorBootstrap.Demo.RCL;
+
+public static class EnumExtensions
+{
+ public static string? ToLanguageCssClass(this LanguageCode languageCode) =>
+ languageCode switch
+ {
+ LanguageCode.AspNet => "language-aspnet",
+ LanguageCode.CSharp => "language-csharp",
+ LanguageCode.JavaScript => "language-js",
+ LanguageCode.JSON => "language-json",
+ LanguageCode.JSONP => "language-jsonp",
+ LanguageCode.Markdown => "language-md",
+ LanguageCode.PowerShell => "language-powershell",
+ LanguageCode.Razor => "language-razor",
+ LanguageCode.Text => "language-none",
+ LanguageCode.YAML => "language-yaml",
+ _ => null
+ };
+}
diff --git a/BlazorBootstrap.Demo.RCL/Components/Shared/Snippet.cs b/BlazorBootstrap.Demo.RCL/Components/Shared/Snippet.cs
new file mode 100644
index 000000000..929ff8d96
--- /dev/null
+++ b/BlazorBootstrap.Demo.RCL/Components/Shared/Snippet.cs
@@ -0,0 +1,79 @@
+namespace BlazorBootstrap.Demo.RCL;
+
+public class Snippet : ComponentBase
+{
+ #region Members
+
+ private string? snippet;
+
+ #endregion
+
+ #region Methods
+
+ protected override void BuildRenderTree(RenderTreeBuilder builder)
+ {
+ builder.OpenElement(300, "div");
+ builder.AddAttribute(301, "class", "highlight show-code-only");
+
+ builder.OpenElement(400, "pre");
+
+ builder.OpenElement(500, "code");
+ builder.AddAttribute(501, "class", LanguageCode.ToLanguageCssClass());
+
+ if (snippet != null)
+ builder.AddContent(600, snippet.Trim());
+
+ builder.CloseElement(); // end: code
+ builder.CloseElement(); // end: pre
+ builder.CloseElement(); // end: div
+ }
+
+ protected override async Task OnAfterRenderAsync(bool firstRender)
+ {
+ if (firstRender)
+ await JS.InvokeVoidAsync("highlightCode");
+
+ await base.OnAfterRenderAsync(firstRender);
+ }
+
+ protected override async Task OnParametersSetAsync()
+ {
+ if (snippet is null)
+ {
+ if (!string.IsNullOrWhiteSpace(FilePath))
+ {
+ var resourceName = FilePath.Replace("~", typeof(Snippet).Assembly.GetName().Name).Replace("/", ".").Replace("\\", ".");
+
+ using (var stream = typeof(Snippet).Assembly.GetManifestResourceStream(resourceName)!)
+ {
+ try
+ {
+ if (stream is null)
+ return;
+
+ using (var reader = new StreamReader(stream))
+ {
+ snippet = await reader.ReadToEndAsync();
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ }
+ }
+ }
+ }
+
+ #endregion
+
+ #region Properties
+
+ [Inject] protected IJSRuntime JS { get; set; } = null!;
+
+ [Parameter] public LanguageCode LanguageCode { get; set; } = LanguageCode.Razor;
+
+ [Parameter] public string? FilePath { get; set; }
+
+ #endregion
+}