Guest User

Untitled

a guest
Aug 17th, 2018
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.46 KB | None | 0 0
  1. import 'dart:html';
  2.  
  3. import 'package:meta/dart2js.dart' as dart2js;
  4.  
  5. import 'optimizations.dart' show isDevMode;
  6.  
  7. /// A location in the DOM where CSS-styles are inserted for an application.
  8. ///
  9. /// Often this is in `<head>`, but it could be in a different location in
  10. /// test environments where the styles get cleared after every test case.
  11. ///
  12. /// This class should not be implemented, extended, or mixed-in.
  13. class CssStyleHost {
  14. /// Application-level shared style host to shim CSS styles for components.
  15. ///
  16. /// By default this is `<head>`, but may be configured in test environments.
  17. static CssStyleHost sharedHost = CssStyleHost(document.head);
  18.  
  19. final HtmlElement _host;
  20. final Expando<bool> _visited = new Expando();
  21.  
  22. CssStyleHost(this._host);
  23.  
  24. /// Appends [cssStyles] within this host.
  25. @dart2js.noInline
  26. void append(ComponentStyles cssStyles) {
  27. if (_visited[cssStyles] == null) {
  28. final sheet = StyleElement()..text = cssStyles._templateStyles;
  29. if (isDevMode) {
  30. sheet.setAttribute('from', cssStyles._templateUrl);
  31. }
  32. _host.append(sheet);
  33. _visited[cssStyles] = true;
  34. }
  35. }
  36. }
  37.  
  38. /// Encapsulates the CSS styles configured for a given component.
  39. ///
  40. /// This class should not be implemented, extended, or mixed-in in user code.
  41. class ComponentStyles {
  42. /// Matches the component ID placeholder in encapsulating CSS classes.
  43. static final RegExp _idPlaceholder = RegExp(r'%ID%');
  44.  
  45. final String _templateUrl;
  46. final String _templateStyles;
  47.  
  48. ComponentStyles(
  49. String uniqueId,
  50. String templateStyles,
  51. this._templateUrl,
  52. ) : _templateStyles = templateStyles.replaceAll(_idPlaceholder, uniqueId);
  53.  
  54. factory ComponentStyles.withEncapsulation(
  55. String uniqueId,
  56. String templateStyles,
  57. String templateUrl,
  58. ) = _EncapsulatedComponentStyles;
  59.  
  60. /// Adds content CSS shim classes to a known HTML [element].
  61. void addContentShimC(HtmlElement element) => element;
  62.  
  63. /// Adds content CSS shim classes to an unknown or SVG [element].
  64. void addContentShimE(Element element) => element;
  65.  
  66. /// Adds host CSS shim classes to the root element of a component.
  67. void addHostShim(HtmlElement element) => element;
  68.  
  69. /// Adds a [newClass] to [element], shimming as necessary.
  70. void addContentClassShimmed(Element element, String newClass) {}
  71.  
  72. /// Adds a [newClass] to [element], shimming as necessary.
  73. void addHostClassShimmed(Element element, String newClass) {}
  74. }
  75.  
  76. class _EncapsulatedComponentStyles extends ComponentStyles {
  77. static const _contentClassPrefix = '_ngcontent-';
  78. static const _hostClassPrefix = '_nghost-';
  79.  
  80. final String _contentClass;
  81. final String _hostClass;
  82.  
  83. _EncapsulatedComponentStyles(
  84. String uniqueId,
  85. String templateStyles,
  86. String templateUrl,
  87. ) : _contentClass = '$_contentClassPrefix$uniqueId',
  88. _hostClass = '$_hostClassPrefix$uniqueId',
  89. super(
  90. uniqueId,
  91. templateStyles,
  92. templateUrl,
  93. );
  94.  
  95. @override
  96. void addContentShimC(HtmlElement element) {
  97. element.classes.add(_contentClass);
  98. }
  99.  
  100. @override
  101. void addContentShimE(Element element) {
  102. element.classes.add(_contentClass);
  103. }
  104.  
  105. @override
  106. void addHostShim(HtmlElement element) {
  107. element.classes.add(_hostClass);
  108. }
  109.  
  110. @override
  111. void addContentClassShimmed(Element element, String newClass) {
  112. element.className = '$newClass $_contentClass';
  113. }
  114.  
  115. @override
  116. void addHostClassShimmed(Element element, String newClass) {
  117. element.className = '$newClass $_hostClass';
  118. }
  119. }
Add Comment
Please, Sign In to add comment