AB#5822 - Abstraction of runtime minifier

This commit is contained in:
Bjarke Berg
2020-03-25 20:42:02 +01:00
parent a0b0802b8d
commit 1c53405d75
20 changed files with 178 additions and 160 deletions
@@ -21,6 +21,11 @@ namespace Umbraco.Core.Composing
public DisableAttribute()
{ }
public DisableAttribute(string fullTypeName)
{
DisabledType = Type.GetType(fullTypeName);
}
/// <summary>
/// Initializes a new instance of the <see cref="DisableAttribute"/> class.
/// </summary>
+2 -2
View File
@@ -10,14 +10,14 @@ namespace Umbraco.Core.Runtime
string GetHashValue { get; }
//return type HtmlHelper
string RequiresCss(string filePath, string bundleName);
void RequiresCss(string filePath, string bundleName);
//return type IHtmlString
//IClientDependencyPath[]
string RenderCssHere(string bundleName);
// return type HtmlHelper
string RequiresJs(string filePath);
void RequiresJs(string filePath, string bundleName);
// return type IHtmlString
string RenderJsHere(string bundleName);
@@ -1,8 +1,12 @@
using System;
using System.Data.Common;
using System.Reflection;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Hosting;
using Smidge;
using Umbraco.Composing;
@@ -11,7 +15,6 @@ using Umbraco.Core;
using Umbraco.Core.Cache;
using Umbraco.Core.Composing;
using Umbraco.Core.Configuration;
using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Core.IO;
using Umbraco.Core.Logging;
using Umbraco.Core.Logging.Serilog;
@@ -57,15 +60,15 @@ namespace Umbraco.Web.BackOffice.AspNetCore
var umbContainer = UmbracoServiceProviderFactory.UmbracoContainer;
return services.AddUmbracoCore(umbContainer, Assembly.GetEntryAssembly());
services.AddUmbracoCore(umbContainer, Assembly.GetEntryAssembly());
return services;
}
public static IServiceCollection AddUmbracoCore(this IServiceCollection services, IRegister umbContainer, Assembly entryAssembly)
{
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
CreateCompositionRoot(services);
// TODO: Get rid of this 'Current' requirement
var globalSettings = Current.Configs.Global();
var umbracoVersion = new UmbracoVersion(globalSettings);
@@ -114,27 +117,6 @@ namespace Umbraco.Web.BackOffice.AspNetCore
return coreRuntime;
}
private static void CreateCompositionRoot(IServiceCollection services)
{
// TODO: This isn't the best to have to resolve the services now but to avoid this will
// require quite a lot of re-work.
var serviceProvider = services.BuildServiceProvider();
var httpContextAccessor = serviceProvider.GetService<IHttpContextAccessor>();
var webHostEnvironment = serviceProvider.GetService<IWebHostEnvironment>();
var hostApplicationLifetime = serviceProvider.GetService<IHostApplicationLifetime>();
var configuration = serviceProvider.GetService<IConfiguration>();
var configs = serviceProvider.GetService<Configs>();
if (configs == null)
throw new InvalidOperationException($"Could not resolve type {typeof(Configs)} from the container, ensure {nameof(AddUmbracoConfiguration)} is called before calling {nameof(AddUmbracoCore)}");
services.AddRuntimeMinifier(configuration);
return services;
}
public static IServiceCollection CreateCompositionRoot(
this IServiceCollection services,
IHttpContextAccessor httpContextAccessor,
@@ -162,7 +144,7 @@ namespace Umbraco.Web.BackOffice.AspNetCore
return services;
}
public static IServiceCollection AddRuntimeMinifier(this IServiceCollection services,
public static IServiceCollection AddUmbracoRuntimeMinifier(this IServiceCollection services,
IConfiguration configuration)
{
services.AddSmidge(configuration.GetSection(Constants.Configuration.ConfigPrefix+"RuntimeMinification"));
@@ -1,12 +1,9 @@
using System;
using System.Collections.Generic;
using System.Text;
using Umbraco.Core.Composing;
using Umbraco.Web.Runtime;
namespace Umbraco.Web.BackOffice.Smidge
{
[ComposeAfter(typeof(WebInitialComponent))]
[ComposeAfter(typeof(IComponent))]
public sealed class SmidgeComponent : IComponent
{
public void Initialize()
@@ -25,7 +25,7 @@ namespace Umbraco.Web.BackOffice.Smidge
{
_smidge = smidge;
}
public string RequiresCss(string filePath, string bundleName)
public void RequiresCss(string filePath, string bundleName)
{
throw new NotImplementedException();
}
@@ -35,7 +35,7 @@ namespace Umbraco.Web.BackOffice.Smidge
return _smidge.CssHereAsync(bundleName).ToString();
}
public string RequiresJs(string filePath)
public void RequiresJs(string filePath, string bundleName)
{
throw new NotImplementedException();
}
@@ -20,7 +20,6 @@
<ProjectReference Include="..\Umbraco.Configuration\Umbraco.Configuration.csproj" />
<ProjectReference Include="..\Umbraco.Core\Umbraco.Core.csproj" />
<ProjectReference Include="..\Umbraco.Infrastructure\Umbraco.Infrastructure.csproj" />
<ProjectReference Include="..\Umbraco.Web\Umbraco.Web.csproj" />
</ItemGroup>
</Project>
+25 -39
View File
@@ -3775,7 +3775,7 @@
"domelementtype": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz",
"integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==",
"integrity": "sha1-H4vf6R9aeAYydOgDtL3O326U+U0=",
"dev": true
}
}
@@ -4233,7 +4233,7 @@
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
"dev": true,
"optional": true
}
@@ -4287,13 +4287,13 @@
"ansi-regex": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
"dev": true
},
"glob-parent": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
"integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
"integrity": "sha1-X0wdHnSNMM1zrSlEs1d6gbCB6MI=",
"dev": true,
"requires": {
"is-glob": "^4.0.1"
@@ -4321,19 +4321,19 @@
"resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=",
"dev": true
},
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
"dev": true
},
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
"dev": true,
"requires": {
"ansi-regex": "^4.1.0"
@@ -4833,7 +4833,7 @@
"braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
"dev": true,
"requires": {
"fill-range": "^7.0.1"
@@ -4842,7 +4842,7 @@
"fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
"dev": true,
"requires": {
"to-regex-range": "^5.0.1"
@@ -4851,7 +4851,7 @@
"glob-parent": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
"integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
"integrity": "sha1-X0wdHnSNMM1zrSlEs1d6gbCB6MI=",
"dev": true,
"requires": {
"is-glob": "^4.0.1"
@@ -4869,13 +4869,13 @@
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
"dev": true
},
"micromatch": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
"integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
"integrity": "sha1-T8sJmb+fvC/L3SEvbWKbmlbDklk=",
"dev": true,
"requires": {
"braces": "^3.0.1",
@@ -4885,7 +4885,7 @@
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
"dev": true,
"requires": {
"is-number": "^7.0.0"
@@ -5203,7 +5203,7 @@
"debug": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=",
"dev": true,
"requires": {
"ms": "^2.1.1"
@@ -5400,14 +5400,12 @@
"balanced-match": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -5422,20 +5420,17 @@
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"core-util-is": {
"version": "1.0.2",
@@ -5552,8 +5547,7 @@
"inherits": {
"version": "2.0.3",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"ini": {
"version": "1.3.5",
@@ -5565,7 +5559,6 @@
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
@@ -5580,7 +5573,6 @@
"version": "3.0.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"brace-expansion": "^1.1.7"
}
@@ -5588,14 +5580,12 @@
"minimist": {
"version": "0.0.8",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"minipass": {
"version": "2.3.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
@@ -5614,7 +5604,6 @@
"version": "0.5.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minimist": "0.0.8"
}
@@ -5695,8 +5684,7 @@
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"object-assign": {
"version": "4.1.1",
@@ -5708,7 +5696,6 @@
"version": "1.4.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"wrappy": "1"
}
@@ -5830,7 +5817,6 @@
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -6193,7 +6179,7 @@
"ignore": {
"version": "5.1.4",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz",
"integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==",
"integrity": "sha1-hLez2+ZFUrbvDsqZ9nQ9vsbZet8=",
"dev": true
},
"slash": {
@@ -8863,7 +8849,7 @@
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
"dev": true
}
}
@@ -13046,13 +13032,13 @@
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
"dev": true
},
"supports-color": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
"integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
"integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
+8
View File
@@ -16,12 +16,20 @@ namespace Umbraco.Web.UI.BackOffice
{
public class Startup
{
private readonly IConfiguration _configuration;
public Startup(IConfiguration configuration)
{
_configuration = configuration;
}
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddUmbracoConfiguration();
services.AddUmbracoRuntimeMinifier(_configuration);
services.AddUmbracoCore();
services.AddUmbracoWebsite();
}
@@ -1,9 +1,4 @@
@using System.Web.Mvc.Html
@using ClientDependency.Core.Mvc
@using Smidge
@using Umbraco.Core
@using Umbraco.Web
@using Umbraco.Web.Composing
@using Umbraco.Web.Composing
@using Umbraco.Web.Controllers
@inherits Umbraco.Web.Macros.PartialViewMacroPage
@@ -13,17 +8,17 @@
Html.EnableClientValidation();
Html.EnableUnobtrusiveJavaScript();
SmidgeHelper
.CreateJsBundle(Constants.RuntimeMinification.JsBundles.Default)
.RequiresJs("//cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js")
.RequiresJs("//cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.0/jquery.validate.min.js")
.RequiresJs("//cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js");
var runtimeMinifier = Current.RuntimeMinifier;
runtimeMinifier.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js", "umbraco");
runtimeMinifier.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.0/jquery.validate.min.js", "umbraco");
runtimeMinifier.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js", "umbraco");
var success = TempData["ProfileUpdateSuccess"] != null;
}
@*NOTE: This RenderJsHere code should be put on your main template page where the rest of your script tags are placed*@
@Current.RuntimeMinifier.RenderJsHere("default-js")
@Html.Raw(runtimeMinifier.RenderJsHere("Umbraco"));
@if (Current.MembershipHelper.IsLoggedIn() && profileModel != null)
{
@@ -1,8 +1,3 @@
@using System.Web.Mvc.Html
@using ClientDependency.Core.Mvc
@using Smidge
@using Umbraco.Web
@using Umbraco.Core
@using Umbraco.Web.Composing
@using Umbraco.Web.Models
@using Umbraco.Web.Controllers
@@ -15,15 +10,15 @@
Html.EnableClientValidation();
Html.EnableUnobtrusiveJavaScript();
SmidgeHelper
.CreateJsBundle(Constants.RuntimeMinification.JsBundles.Default)
.RequiresJs("//cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js")
.RequiresJs("//cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.0/jquery.validate.min.js")
.RequiresJs("//cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js");
var runtimeMinifier = Current.RuntimeMinifier;
runtimeMinifier.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js", "umbraco");
runtimeMinifier.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.0/jquery.validate.min.js", "umbraco");
runtimeMinifier.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js", "umbraco");
}
@* NOTE: This RenderJsHere code should be put on your main template page where the rest of your script tags are placed *@
@Current.RuntimeMinifier.RenderJsHere("default-js")
@Html.Raw(runtimeMinifier.RenderJsHere("Umbraco"))
@using (Html.BeginUmbracoForm<UmbLoginController>("HandleLogin"))
{
@@ -1,9 +1,4 @@
@using System.Web.Mvc.Html
@using ClientDependency.Core.Mvc
@using Smidge
@using Umbraco.Core
@using Umbraco.Web
@using Umbraco.Web.Composing
@using Umbraco.Web.Composing
@using Umbraco.Web.Controllers
@inherits Umbraco.Web.Macros.PartialViewMacroPage
@@ -37,17 +32,17 @@
Html.EnableClientValidation();
Html.EnableUnobtrusiveJavaScript();
SmidgeHelper
.CreateJsBundle(Constants.RuntimeMinification.JsBundles.Default)
.RequiresJs("//cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js")
.RequiresJs("//cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.0/jquery.validate.min.js")
.RequiresJs("//cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js");
var runtimeMinifier = Current.RuntimeMinifier;
runtimeMinifier.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js", "umbraco");
runtimeMinifier.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.0/jquery.validate.min.js", "umbraco");
runtimeMinifier.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js", "umbraco");
var success = TempData["FormSuccess"] != null;
}
@*NOTE: This RenderJsHere code should be put on your main template page where the rest of your script tags are placed*@
@Current.RuntimeMinifier.RenderJsHere("default-js")
@Html.Raw(runtimeMinifier.RenderJsHere("Umbraco"));
@if (success)
{
@@ -1,18 +1,16 @@
@using Umbraco.Core
@using ClientDependency.Core
@using ClientDependency.Core.Mvc
@using Smidge
@using Umbraco.Web.Composing
@using Umbraco.Web
@using Constants = Umbraco.Core.Constants
using Umbraco.Core
@inherits System.Web.Mvc.WebViewPage<Umbraco.Web.Editors.BackOfficeModel>
@{
Layout = null;
SmidgeHelper
.CreateCssBundle(Constants.RuntimeMinification.CssBundles.Default)
.RequiresCss("~/assets/css/umbraco.css", "~/lib/bootstrap-social/bootstrap-social.css", "~/lib/font-awesome/css/font-awesome.min.css");
var runtimeMinifier = Current.RuntimeMinifier;
runtimeMinifier.RequiresCss("assets/css/umbraco.css", "umbraco");
runtimeMinifier.RequiresCss("lib/bootstrap-social/bootstrap-social.css", "umbraco");
runtimeMinifier.RequiresCss("lib/font-awesome/css/font-awesome.min.css", "umbraco");
}
<!DOCTYPE html>
@@ -25,8 +23,7 @@ using Umbraco.Core
<title>Umbraco</title>
@Html.RenderCssHere(
new BasicPath("Umbraco", Current.IOHelper.ResolveUrl(Model.GlobalSettings.UmbracoPath)))
@Html.Raw(runtimeMinifier.RenderJsHere("Umbraco"));
@*Because we're lazy loading angular js, the embedded cloak style will not be loaded initially, but we need it*@
<style>
@@ -50,7 +47,7 @@ using Umbraco.Core
redirectUrl = Url.Action("AuthorizeUpgrade", "BackOffice")
});
}
@Html.BareMinimumServerVariablesScript(Url, externalLoginUrl, Model.Features, Model.GlobalSettings, Model.UmbracoVersion, Model.ContentSettings, Model.IOHelper, Model.TreeCollection, Model.HttpContextAccessor, Model.HostingEnvironment, Model.RuntimeSettings, Model.SecuritySettings, Current.RuntimeMinifier)
@Html.BareMinimumServerVariablesScript(Url, externalLoginUrl, Model.Features, Model.GlobalSettings, Model.UmbracoVersion, Model.ContentSettings, Model.IOHelper, Model.TreeCollection, Model.HttpContextAccessor, Model.HostingEnvironment, Model.RuntimeSettings, Model.SecuritySettings, runtimeMinifier)
<script type="text/javascript">
document.angularReady = function (app) {
@@ -1,10 +1,7 @@
@using Umbraco.Core
@using ClientDependency.Core
@using ClientDependency.Core.Mvc
@using Smidge
@using Umbraco.Web.Composing
@using Umbraco.Web
@using Constants = Umbraco.Core.Constants
@inherits WebViewPage<Umbraco.Web.Editors.BackOfficeModel>
@@ -19,10 +16,17 @@
isDebug = true;
}
}
var runtimeMinifier = Current.RuntimeMinifier;
SmidgeHelper
.CreateCssBundle(Constants.RuntimeMinification.CssBundles.Default)
.RequiresCss("~/assets/css/umbraco.css", "~/lib/bootstrap-social/bootstrap-social.css", "~/lib/font-awesome/css/font-awesome.min.css");
runtimeMinifier.RequiresCss("assets/css/umbraco.css", "Umbraco");
runtimeMinifier.RequiresCss("lib/bootstrap-social/bootstrap-social.css", "Umbraco");
runtimeMinifier.RequiresCss("assets/css/umbraco.css", "Umbraco");
runtimeMinifier.RequiresCss("lib/font-awesome/css/font-awesome.min.css", "Umbraco");
// Html
// .RequiresCss("assets/css/umbraco.css", "Umbraco")
// .RequiresCss("lib/bootstrap-social/bootstrap-social.css", "Umbraco")
// .RequiresCss("lib/font-awesome/css/font-awesome.min.css", "Umbraco");
}
<!DOCTYPE html>
@@ -39,7 +43,9 @@
<title ng-bind="$root.locationTitle">Umbraco</title>
@Current.RuntimeMinifier.RenderCssHere("default-css")
@Html.Raw(runtimeMinifier.RenderCssHere("Umbraco"))
@* @Html.RenderCssHere(new BasicPath("Umbraco", Current.IOHelper.ResolveUrl(Current.Configs.Global().UmbracoPath))) *@
</head>
<body ng-class="{'touch':touchDevice, 'emptySection':emptySection, 'umb-drawer-is-visible':drawer.show, 'umb-tour-is-visible': tour.show, 'tabbing-active':tabbingActive}" ng-controller="Umbraco.MainController" id="umbracoMainPageBody">
@@ -1,18 +1,12 @@
@using Umbraco.Core
@using ClientDependency.Core
@using ClientDependency.Core.Mvc
@using Smidge
@using Umbraco.Web.Composing
@using Umbraco.Web
@using Constants = Umbraco.Core.Constants
@using Umbraco.Web.Composing
@inherits System.Web.Mvc.WebViewPage<Umbraco.Web.Editors.BackOfficePreviewModel>
@{
var disableDevicePreview = Model.DisableDevicePreview.ToString().ToLowerInvariant();
SmidgeHelper
.CreateCssBundle(Constants.RuntimeMinification.CssBundles.Index)
.RequiresCss("~/assets/css/canvasdesigner.css");
var runtimeMinifier = Current.RuntimeMinifier;
runtimeMinifier.RequiresCss("assets/css/canvasdesigner.css", "Umbraco");
}
<!DOCTYPE html>
<html lang="en">
@@ -22,7 +16,9 @@
<meta name="robots" content="noindex, nofollow">
<meta name="pinterest" content="nopin" />
@Current.RuntimeMinifier.RenderCssHere("index-css")
@Html.Raw(runtimeMinifier.RenderCssHere("Umbraco"))
</head>
<body id="canvasdesignerPanel" ng-mouseover="outlinePositionHide()" ng-controller="previewController" ng-class="{'tabbing-active': tabbingActive === true}" ng-click="windowClickHandler($event)">
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Threading;
@@ -8,7 +8,7 @@ using Umbraco.Core.Runtime;
using Umbraco.Web.Composing;
using Umbraco.Web.PropertyEditors;
namespace Umbraco.Web.JavaScript.CDF
namespace Umbraco.Web.JavaScript
{
internal abstract class AssetInitialization
{
@@ -2,10 +2,12 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Web.Mvc;
using ClientDependency.Core;
using ClientDependency.Core.CompositeFiles;
using ClientDependency.Core.Config;
using ClientDependency.Core.Mvc;
using Umbraco.Core.Assets;
using Umbraco.Core.Configuration;
using Umbraco.Core.IO;
@@ -38,33 +40,65 @@ namespace Umbraco.Web.JavaScript.CDF
_htmlHelper = new HtmlHelper(new ViewContext(), new ViewPage());
}
public string RequiresCss(string filePath, string bundleName)
private DependencyRenderer GetDependencyRenderer
{
throw new NotImplementedException();
//_htmlHelper.ViewContext.GetLoader().RegisterDependency(filePath, pathNameAlias, ClientDependencyType.Css);
//return html;
get
{
return (DependencyRenderer) typeof(DependencyRenderer)
.GetMethod("TryCreate", BindingFlags.Static |BindingFlags.NonPublic)
.Invoke(null, new object[]
{
_httpContextAccessor.GetRequiredHttpContext(),
null
});
}
}
public void RequiresCss(string filePath, string bundleName)
{
GetDependencyRenderer.RegisterDependency(filePath, bundleName, ClientDependencyType.Css);
}
public string RenderCssHere(string bundleName)
{
throw new NotImplementedException();
var path = new BasicPath(bundleName, _ioHelper.ResolveUrl(_globalSettings.UmbracoPath));
return typeof(DependencyRenderer)
.GetMethod("RenderPlaceholder",
BindingFlags.NonPublic | BindingFlags.Instance,
null,
new []{typeof(ClientDependencyType), typeof(IEnumerable<IClientDependencyPath>)},
null)
?.Invoke(GetDependencyRenderer, new object[]
{
ClientDependencyType.Css,
new IClientDependencyPath[]{path}
}) as string;
//return new HtmlString(_htmlHelper.ViewContext.GetLoader().RenderPlaceholder(
// ClientDependencyType.Css, path));
}
public string RequiresJs(string filePath)
public void RequiresJs(string filePath, string bundleName)
{
throw new NotImplementedException();
//_htmlHelper.ViewContext.GetLoader().RegisterDependency(filePath, ClientDependencyType.Javascript);
//return _htmlHelper;
GetDependencyRenderer.RegisterDependency(filePath, bundleName, ClientDependencyType.Javascript);
}
public string RenderJsHere(string bundleName)
{
throw new NotImplementedException();
//return new HtmlString(
// _htmlHelper.ViewContext.GetLoader().RenderPlaceholder(
// ClientDependencyType.Javascript, new List<IClientDependencyPath>()));
var path = new BasicPath(bundleName, _ioHelper.ResolveUrl(_globalSettings.UmbracoPath));
return typeof(DependencyRenderer)
.GetMethod("RenderPlaceholder",
BindingFlags.NonPublic | BindingFlags.Instance,
null,
new []{typeof(ClientDependencyType), typeof(IEnumerable<IClientDependencyPath>)},
null)
?.Invoke(GetDependencyRenderer, new object[]
{
ClientDependencyType.Javascript,
new IClientDependencyPath[]{path}
}) as string;
}
public IEnumerable<string> GetAssetPaths(AssetType assetType, List<IAssetFile> attributes)
@@ -153,7 +187,25 @@ namespace Umbraco.Web.JavaScript.CDF
private IClientDependencyFile MapAssetFile(IAssetFile assetFile)
{
var assetFileType = (AssetFile)assetFile;
var basicFile = new BasicFile(MapDependencyTypeValue(assetFileType.DependencyType));
var basicFile = new BasicFile(MapDependencyTypeValue(assetFileType.DependencyType))
{
Group = assetFile.Group,
Priority = assetFile.Priority,
//ForceBundle = assetFile.Bundle, //TODO
FilePath = assetFile.FilePath,
ForceProvider = assetFile.ForceProvider,
PathNameAlias = assetFile.PathNameAlias,
};
foreach (var kvp in assetFile.HtmlAttributes)
{
basicFile.HtmlAttributes.Add(kvp.Key, kvp.Value);
}
return basicFile;
}
@@ -7,7 +7,7 @@ using Umbraco.Core.Assets;
using Umbraco.Core.Manifest;
using Umbraco.Core.Runtime;
namespace Umbraco.Web.JavaScript.CDF
namespace Umbraco.Web.JavaScript
{
internal class CssInitialization : AssetInitialization
{
@@ -7,7 +7,7 @@ using Umbraco.Core.Assets;
using Umbraco.Core.Manifest;
using Umbraco.Core.Runtime;
namespace Umbraco.Web.JavaScript.CDF
namespace Umbraco.Web.JavaScript
{
/// <summary>
/// Reads from all defined manifests and ensures that any of their initialization is output with the
+7 -3
View File
@@ -39,6 +39,9 @@
</PropertyGroup>
<PropertyGroup />
<ItemGroup>
<Reference Include="ClientDependency.Core.Mvc, Version=1.9.3.0, Culture=neutral, PublicKeyToken=null">
<HintPath>C:\Users\Berg\.nuget\packages\clientdependency-mvc5\1.9.3\lib\net45\ClientDependency.Core.Mvc.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="System" />
<Reference Include="System.Data" />
@@ -64,6 +67,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="ClientDependency" Version="1.9.9" />
<PackageReference Include="ClientDependency-Mvc5" Version="1.9.3" />
<PackageReference Include="Examine.Core">
<Version>2.0.0-alpha.20200128.15</Version>
</PackageReference>
@@ -145,8 +149,11 @@
<Compile Include="Compose\BackOfficeUserAuditEventsComposer.cs" />
<Compile Include="Composing\CompositionExtensions\Installer.cs" />
<Compile Include="Composing\LightInject\LightInjectContainer.cs" />
<Compile Include="JavaScript\AssetInitialization.cs" />
<Compile Include="JavaScript\CDF\ClientDependencyRuntimeMinifier.cs" />
<Compile Include="JavaScript\CssInitialization.cs" />
<Compile Include="JavaScript\JavaScriptHelper.cs" />
<Compile Include="JavaScript\JsInitialization.cs" />
<Compile Include="Models\NoNodesViewModel.cs" />
<Compile Include="Mvc\RenderNoContentController.cs" />
<Compile Include="Editors\BackOfficePreviewModel.cs" />
@@ -400,8 +407,6 @@
<Compile Include="Trees\MenuRenderingEventArgs.cs" />
<Compile Include="Trees\TemplatesTreeController.cs" />
<Compile Include="Trees\TreeControllerBase.cs" />
<Compile Include="JavaScript\CDF\AssetInitialization.cs" />
<Compile Include="JavaScript\CDF\CssInitialization.cs" />
<Compile Include="JavaScript\CDF\DependencyPathRenderer.cs" />
<Compile Include="UmbracoComponentRenderer.cs" />
<Compile Include="WebApi\AngularJsonMediaTypeFormatter.cs" />
@@ -450,7 +455,6 @@
<Compile Include="Trees\ContentTreeController.cs" />
<Compile Include="Trees\TreeRenderingEventArgs.cs" />
<Compile Include="Trees\UrlHelperExtensions.cs" />
<Compile Include="JavaScript\CDF\JsInitialization.cs" />
<Compile Include="HttpRequestExtensions.cs" />
<Compile Include="HttpUrlHelperExtensions.cs" />
<Compile Include="Install\FilePermissionHelper.cs" />