Advertisement
Guest User

Untitled

a guest
May 27th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.97 KB | None | 0 0
  1. import { Component, Prop, State, Watch } from "@stencil/core";
  2. import { icon } from "@fortawesome/fontawesome-svg-core";
  3. import * as freeSolidFontAwesome from "@fortawesome/free-solid-svg-icons";
  4. import * as proLightFontAwesome from "@fortawesome/pro-light-svg-icons";
  5. import * as freeRegularFontAwesome from "@fortawesome/free-regular-svg-icons";
  6. import * as proRegularFontAwesome from "@fortawesome/pro-regular-svg-icons";
  7.  
  8. @Component({
  9. tag: "my-font-awesome",
  10. styleUrl: "font-awesome.scss",
  11. shadow: false
  12. })
  13. export class FontAwesome {
  14. /**
  15. * Props
  16. */
  17. @Prop() icon: any;
  18. @Prop() size: string;
  19. @Prop() iconStyle: string = "solid";
  20. @Prop() plan: string = "free";
  21.  
  22. /**
  23. * State
  24. */
  25. @State() iconHtml;
  26.  
  27. /**
  28. * Watchers
  29. */
  30. @Watch("icon")
  31. iconChangedHandler(newValue) {
  32. this._setIcon(newValue);
  33. }
  34.  
  35. /**
  36. * Lifecycle methods
  37. */
  38.  
  39. componentWillLoad() {
  40. this._setIcon(this.icon);
  41. }
  42.  
  43. render() {
  44. return this.iconHtml;
  45. }
  46.  
  47. /**
  48. * Local methods
  49. */
  50.  
  51. private _createHtmlTag(el) {
  52. const TagName = el.tag;
  53. let children = [];
  54. if (el.children) {
  55. children = el.children.map(child => this._createHtmlTag(child));
  56. }
  57. return <TagName {...el.attributes}>{children}</TagName>;
  58. }
  59.  
  60. private _setIcon(selectedIcon) {
  61. let fontAwesome;
  62. switch (`${this.plan}-${this.iconStyle}`) {
  63. case "pro-light":
  64. fontAwesome = proLightFontAwesome;
  65. break;
  66. case "free-solid":
  67. fontAwesome = freeSolidFontAwesome;
  68. break;
  69. case "free-regular":
  70. fontAwesome = freeRegularFontAwesome;
  71. break;
  72. case "pro-regular":
  73. fontAwesome = proRegularFontAwesome;
  74. break;
  75. }
  76.  
  77. const fontAwesomeIcon =
  78. typeof selectedIcon === "string"
  79. ? fontAwesome[selectedIcon]
  80. : selectedIcon;
  81. const classes: any = [`fa-${this.size}`];
  82. const iconElement = icon(fontAwesomeIcon, { classes }).abstract[0];
  83. this.iconHtml = this._createHtmlTag(iconElement);
  84. }
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement