CodeSharePaul
09/12/2023, 9:30 AMMike Chambers
09/12/2023, 9:32 AMMike Chambers
09/12/2023, 9:34 AMCodeSharePaul
09/12/2023, 9:34 AMCodeSharePaul
09/12/2023, 9:35 AMCodeSharePaul
09/12/2023, 9:35 AMMike Chambers
09/12/2023, 9:35 AMMike Chambers
09/12/2023, 9:35 AMCodeSharePaul
09/12/2023, 9:36 AMcs
@await SmidgeHelper.CssHereAsync()
CodeSharePaul
09/12/2023, 9:37 AMcs
SmidgeHelper.RequiresCss("/css/wmn-homepage.css");
Mike Chambers
09/12/2023, 9:37 AMMike Chambers
09/12/2023, 9:37 AMCodeSharePaul
09/12/2023, 9:37 AMMike Chambers
09/12/2023, 9:49 AMMike Chambers
09/12/2023, 9:51 AMcsharp
@inject IRuntimeMinifier runtimeMinifier
await runtimeMinifier.RenderCssHereAsync("sitewide-css")
Mike Chambers
09/12/2023, 9:52 AM$"{version ?? Assembly.Name}_{umbracoVersion}_{Assembly.Version}"
Mike Chambers
09/12/2023, 9:53 AMMike Chambers
09/12/2023, 9:54 AMMike Chambers
09/12/2023, 9:56 AMMike Chambers
09/12/2023, 9:58 AMtimestamp
is 5 second cache..
https://github.com/Shazwazza/Smidge/blob/develop/src/Smidge.Core/Cache/TimestampCacheBuster.csMike Chambers
09/12/2023, 10:01 AMMike Chambers
09/12/2023, 10:06 AMCodeSharePaul
09/12/2023, 10:06 AMMike Chambers
09/12/2023, 10:06 AMMike Chambers
09/12/2023, 10:08 AMMike Chambers
09/12/2023, 10:09 AMcsharp
public static IHtmlHelper RequiresPartialCss(this IHtmlHelper htmlHelper, String script, int priority = 1000)
{
var x = htmlHelper.ViewContext.HttpContext.Items["_csss_"];
var s = (Dictionary<string, rOptions>)(x ?? new Dictionary<string, rOptions>());
s.TryAdd(script, new rOptions() { Priority = priority });
htmlHelper.ViewContext.HttpContext.Items["_csss_"] = s;
return htmlHelper;
}
csharp
public static HtmlString RenderPartialViewCss(this IHtmlHelper htmlHelper)
{
// use urlHelper.Content() to translate "~/"
var urlHelperFactory = htmlHelper.ViewContext.HttpContext.RequestServices.GetRequiredService<IUrlHelperFactory>();
var urlHelper = urlHelperFactory.GetUrlHelper(htmlHelper.ViewContext);
var umbracoVersion = htmlHelper.ViewContext.HttpContext.RequestServices.GetRequiredService<IUmbracoVersion>();
var runtimeMinifier = htmlHelper.ViewContext.HttpContext.RequestServices.GetRequiredService<IRuntimeMinifier>();
var hostingEnvironment = htmlHelper.ViewContext.HttpContext.RequestServices.GetRequiredService<IHostingEnvironment>();
var version = UrlHelperExtensions.GetCacheBustHash(hostingEnvironment, umbracoVersion, runtimeMinifier);
var x = htmlHelper.ViewContext.HttpContext.Items["_csss_"];
var s = (Dictionary<string, rOptions>)(x ?? new Dictionary<string, rOptions>());
foreach (var item in s.OrderBy(x => x.Value.Priority))
{
var src = urlHelper.Content($"{item.Key}");
var cssTag = $"<link type=\"text/css\" href=\"{src}?v={version}\" rel=\"stylesheet\"></script>";
htmlHelper.ViewContext.Writer.Write(cssTag);
}
return new HtmlString(String.Empty);
}
csharp
private class rOptions
{
public int Priority { get; set; } = 1000;
public bool Defer { get; set; } = false;
}
Mike Chambers
09/12/2023, 10:14 AMMike Chambers
09/12/2023, 10:34 AMCodeSharePaul
09/12/2023, 10:59 AMCodeSharePaul
09/12/2023, 11:11 AM@await RuntimeMinifier.RenderJsHereAsync("wmn-single-clubpage")
Mike Chambers
09/12/2023, 11:15 AM<script src="mn-single-clubpage" type="text/javascript" debug="true" defer="defer"></script>
?Mike Chambers
09/12/2023, 11:17 AMCodeSharePaul
09/12/2023, 11:26 AMCodeSharePaul
09/12/2023, 11:27 AMCodeSharePaul
09/12/2023, 11:27 AMCodeSharePaul
09/12/2023, 11:27 AMMike Chambers
09/12/2023, 11:29 AMCodeSharePaul
09/12/2023, 11:29 AMCodeSharePaul
09/12/2023, 11:29 AMCodeSharePaul
09/12/2023, 11:30 AMMike Chambers
09/12/2023, 11:31 AMCodeSharePaul
09/12/2023, 11:32 AMMike Chambers
09/12/2023, 11:34 AMMike Chambers
09/12/2023, 11:35 AMCodeSharePaul
09/12/2023, 11:47 AM@Html.Raw(await RuntimeMinifier.RenderCssHereAsync("wmn-homepage"))
got it workingCodeSharePaul
09/12/2023, 11:50 AMCodeSharePaul
09/12/2023, 11:50 AMCodeSharePaul
09/12/2023, 11:53 AMCodeSharePaul
09/12/2023, 11:54 AMrockerby
09/12/2023, 12:03 PM"Umbraco": {
"CMS": {
"Hosting": {
"Debug": true
},
"RuntimeMinification": {
"UseInMemoryCache": true,
"CacheBuster": "Timestamp"
}
}
},
Compared to that in production of the below (where we increment the version in a deployment pipeline):
"Umbraco": {
"CMS": {
"Hosting": {
"Debug": false
},
"RuntimeMinification": {
"UseInMemoryCache": false,
"CacheBuster": "Version",
"Version": "1.0.0"
}
}
},
CodeSharePaul
09/12/2023, 12:17 PMMike Chambers
09/12/2023, 12:20 PMrockerby
09/12/2023, 12:24 PM@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage
@using Microsoft.Extensions.Options
@using Umbraco.Cms.Core.Configuration.Models
@inject IOptions<HostingSettings> hostingSettings
@{
var debugMode = hostingSettings.Value.Debug;
SmidgeHelper
.CreateCssBundle("core-css-bundle")
.RequiresCss(
"/_assets/styles/style.css");
}
@* Load the bundle into the markup - debug mode turns off the
bundling and spits each file out in it's own script tag *@
<link rel="stylesheet" href="core-css-bundle" media="screen, print" debug="@debugMode" />
CodeSharePaul
09/12/2023, 12:28 PMCodeSharePaul
09/12/2023, 12:29 PMCodeSharePaul
09/12/2023, 12:29 PMMatt Wise
09/12/2023, 12:30 PMMatt Wise
09/12/2023, 12:31 PMMike Chambers
09/12/2023, 12:32 PMDean Leigh
09/12/2023, 12:45 PM"RuntimeMinification": {
"UseInMemoryCache": false,
when I want to test locally.
Either way I have it working in a client site I can screen share @CodeSharePaulCodeSharePaul
09/12/2023, 2:45 PMCodeSharePaul
09/12/2023, 4:58 PMoalberto
09/18/2023, 12:34 PM