Guest User

Untitled

a guest
Feb 24th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. [HtmlTargetElement(Attributes = "class")]
  2. public class InlineClassTagHelper : TagHelper
  3. {
  4. private readonly IFileProvider _fileProvider;
  5.  
  6. public InlineClassTagHelper(IFileProvider fileProvider)
  7. {
  8. _fileProvider = fileProvider;
  9. }
  10.  
  11. [HtmlAttributeNotBound, ViewContext]
  12. public ViewContext ViewContext { get; set; }
  13.  
  14. public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
  15. {
  16. var classNames =
  17. output
  18. .Attributes["class"]
  19. ?.Value.ToString()
  20. .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
  21. .Where(className => className.StartsWith("m-"))
  22. .Select(SoftString.Create)
  23. .ToImmutableHashSet();
  24.  
  25. if (classNames is null)
  26. {
  27. return;
  28. }
  29.  
  30. var cssFileName =
  31. $"wwwroot/css/" +
  32. $"{ViewContext.RouteData.Values["controller"]}." +
  33. $"{ViewContext.RouteData.Values["action"]}.css";
  34.  
  35. var cssFile = _fileProvider.GetFileInfo(cssFileName);
  36. var cssString = await ReadFile(cssFile);
  37. var css = CssParser.Default.Parse(cssString);
  38.  
  39. var declarations = css.Where(ruleset => ruleset.Selectors.Any(classNames.Contains)).Select(ruleset => ruleset.Declarations).Join(";");
  40. output.Attributes.SetAttribute("style", declarations);
  41. output.Attributes.RemoveAll("class");
  42. }
  43.  
  44. private static async Task<string> ReadFile(IFileInfo file)
  45. {
  46. using (var reader = new StreamReader(file.CreateReadStream()))
  47. {
  48. return await reader.ReadToEndAsync();
  49. }
  50. }
  51. }
  52.  
  53. <h2 class="m-title">@ViewData["Title"]</h2>
  54.  
  55. <h2 style="color: blueviolet;">About</h2>
  56.  
  57. m-title {
  58. color: blueviolet;
  59. }
Add Comment
Please, Sign In to add comment