WebResourceManager.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using System.Collections.Immutable;
  2. using Abp.Collections.Extensions;
  3. using Abp.Extensions;
  4. using Abp.Timing;
  5. using Microsoft.AspNetCore.Hosting;
  6. using Microsoft.AspNetCore.Mvc.Razor;
  7. using Microsoft.Extensions.Hosting;
  8. namespace VberAdmin.Resources;
  9. public class WebResourceManager : IWebResourceManager
  10. {
  11. private readonly IWebHostEnvironment _environment;
  12. private readonly List<string> _scriptUrls;
  13. public WebResourceManager(IWebHostEnvironment environment)
  14. {
  15. _environment = environment;
  16. _scriptUrls = new List<string>();
  17. }
  18. public void AddScript(string url, bool addMinifiedOnProd = true)
  19. {
  20. _scriptUrls.AddIfNotContains(NormalizeUrl(url, "js"));
  21. }
  22. public IReadOnlyList<string> GetScripts()
  23. {
  24. return _scriptUrls.ToImmutableList();
  25. }
  26. public HelperResult RenderScripts()
  27. {
  28. return new HelperResult(async writer =>
  29. {
  30. foreach (var scriptUrl in _scriptUrls)
  31. {
  32. await writer.WriteAsync($"<script src=\"{scriptUrl}?v=" + Clock.Now.Ticks + "\"></script>");
  33. }
  34. });
  35. }
  36. private string NormalizeUrl(string url, string ext)
  37. {
  38. if (_environment.IsDevelopment())
  39. {
  40. return url;
  41. }
  42. if (url.EndsWith(".min." + ext))
  43. {
  44. return url;
  45. }
  46. return url.Left(url.Length - ext.Length) + "min." + ext;
  47. }
  48. }