work.ex 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. defmodule CvGenView.Work do
  2. use Phoenix.Component
  3. use CvGen.RegenerateOnCompilation
  4. alias CvGenView.{Date, Text}
  5. attr(:name, :string, required: true)
  6. attr(:start_date, :any, required: true)
  7. attr(:end_date, :any, default: nil)
  8. attr(:summary, :string, required: true)
  9. attr(:location, :string, required: true)
  10. attr(:highlights, :list, required: true)
  11. attr(:skills, :list, default: [])
  12. def work(assigns) do
  13. ~H"""
  14. <div class="work">
  15. <div class="heading">
  16. <h1><%= @name %></h1>
  17. <span class="location"><%= @location %></span>
  18. <Date.time_span start_date={@start_date} end_date={@end_date} />
  19. </div>
  20. <h1><%= @position %></h1>
  21. <Text.text text={@summary} class="summary" />
  22. <h2>Points clés</h2>
  23. <ul class="highlights">
  24. <%= for highlight <- @highlights do %>
  25. <li><%= highlight %></li>
  26. <% end %>
  27. </ul>
  28. <ul class="skills">
  29. <%= for skill <- @skills do %>
  30. <li><%= skill %></li>
  31. <% end %>
  32. </ul>
  33. </div>
  34. """
  35. end
  36. def css,
  37. do: """
  38. .work h1 {
  39. margin: 0;
  40. }
  41. .work > * {
  42. padding-left: 0.5em;
  43. }
  44. .work > .heading {
  45. display: grid;
  46. grid-template-areas:
  47. "header location"
  48. "period _";
  49. gap: 0.5em;
  50. background-color: #eee;
  51. padding: 0.5em;
  52. margin-bottom: 1em;
  53. }
  54. .work > .heading > h1 {
  55. font-weight: bold;
  56. }
  57. .work > .heading > .location {
  58. font-weight: bold;
  59. justify-self: end;
  60. text-align: end;
  61. }
  62. .work > .heading > .period {
  63. font-weight: lighter;
  64. }
  65. .work > h1 {
  66. font-weight: bold;
  67. }
  68. .work > h2 {
  69. font-size: 0.85em;
  70. }
  71. .work > p {
  72. margin: 0.5em 0;
  73. }
  74. .work ul.highlights > li {
  75. border: #bbb solid 1px;
  76. margin-top: 0.3em;
  77. padding: 0.4em;
  78. font-weight: lighter;
  79. }
  80. .work ul.highlights {
  81. }
  82. #work > ol > li {
  83. margin: 2em auto;
  84. padding-left: 0.5em;
  85. }
  86. #work ul.skills {
  87. display: flex;
  88. flex-wrap: wrap;
  89. gap: 0.2em;
  90. margin-top: 1em;
  91. }
  92. #work .skills > li {
  93. padding: 0.3em 0.6em;
  94. font-size: 0.7em;
  95. font-weight: 700;
  96. color: #fff;
  97. text-align: center;
  98. background-color: #333;
  99. border-radius: 0.5em;
  100. }
  101. @media print {
  102. #work .skills > li {
  103. color: #000;
  104. background-color: #fff;
  105. border: #000 solid 0.2em;
  106. }
  107. }
  108. """
  109. end