Skip to content

Commit

Permalink
feat: add step component
Browse files Browse the repository at this point in the history
  • Loading branch information
yolophg committed Jun 25, 2024
1 parent f7da8cc commit ec8f8b5
Show file tree
Hide file tree
Showing 6 changed files with 129 additions and 76 deletions.
100 changes: 100 additions & 0 deletions components/step.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
import { css, html } from "../html-css-utils.js";

class Step extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: "open" });
this.validateAttributes();
this.render();
}

connectedCallback() {
this.updateLink();
}

validateAttributes() {
const status = this.getAttribute("status");
const validStatuses = ["1", "2", "3"];
if (status && !validStatuses.includes(status)) {
throw new Error(
`The "status" attribute must be one of ${validStatuses.join(", ")}.`
);
}
}

updateLink() {
const slot = this.shadowRoot.querySelector("slot");
const nodes = slot.assignedNodes({ flatten: true });
const linkText = this.getAttribute("linkText");
const link = this.getAttribute("link");
const linkHtml = `<a href="${link}" target="_blank" style="text-decoration: underline;">${linkText}</a>`;

nodes.forEach((node) => {
if (node.nodeType === Node.TEXT_NODE) {
const tempDiv = document.createElement("div");
tempDiv.innerHTML = node.textContent.split(linkText).join(linkHtml);
while (tempDiv.firstChild) {
node.parentNode.insertBefore(tempDiv.firstChild, node);
}
node.remove();
} else if (node.nodeType === Node.ELEMENT_NODE) {
node.innerHTML = node.innerHTML.split(linkText).join(linkHtml);
}
});
}

createCss() {
return css`
.step {
display: flex;
flex-direction: column;
align-items: center;
background: white;
border: 1px solid #000000;
border-radius: 10px;
padding: 106px 53px;
text-align: center;
max-width: 375px;
max-height: 627px;
}
.step-title h3 {
font-size: 36px;
margin-bottom: 50px;
}
.step-icon {
width: 60px;
height: 60px;
margin-bottom: 50px;
}
.step-content {
font-size: 24px;
word-break: keep-all;
}
`;
}

createHtml() {
const status = this.getAttribute("status") ?? "1";
const iconSrc = this.getAttribute("iconSrc");

return html`
<article class="step ${status}">
<header class="step-title">
<h3>Step ${status}</h3>
</header>
<img class="step-icon" src="${iconSrc}" alt="step ${status} icon" />
<section class="step-content">
<slot></slot>
</section>
</article>
`;
}

render() {
this.shadowRoot.innerHTML = this.createCss() + this.createHtml();
}
}

customElements.define("ds-step", Step);
Binary file added images/icon_step1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/icon_step2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/icon_step3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
104 changes: 28 additions & 76 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -200,10 +200,10 @@
}

.instruction-card-list {
margin-top: 4rem;
display: flex;
flex-wrap: wrap;
gap: 0.9rem;
display: grid;
grid-template-columns: repeat(3, 375px);
gap: 10px;
padding-top: 40px;
}

.instruction-card {
Expand Down Expand Up @@ -322,78 +322,30 @@
<div id="join-instruction-container">
<span>μŠ€ν„°λ”” 참여방법</span>
<div class="instruction-card-list">
<div class="instruction-card">
<span> Step 1 </span>
<svg
xmlns="http://www.w3.org/2000/svg"
width="8em"
height="8em"
viewBox="0 0 128 128"
>
<g fill="#181616">
<path
fill-rule="evenodd"
d="M64 5.103c-33.347 0-60.388 27.035-60.388 60.388c0 26.682 17.303 49.317 41.297 57.303c3.017.56 4.125-1.31 4.125-2.905c0-1.44-.056-6.197-.082-11.243c-16.8 3.653-20.345-7.125-20.345-7.125c-2.747-6.98-6.705-8.836-6.705-8.836c-5.48-3.748.413-3.67.413-3.67c6.063.425 9.257 6.223 9.257 6.223c5.386 9.23 14.127 6.562 17.573 5.02c.542-3.903 2.107-6.568 3.834-8.076c-13.413-1.525-27.514-6.704-27.514-29.843c0-6.593 2.36-11.98 6.223-16.21c-.628-1.52-2.695-7.662.584-15.98c0 0 5.07-1.623 16.61 6.19C53.7 35 58.867 34.327 64 34.304c5.13.023 10.3.694 15.127 2.033c11.526-7.813 16.59-6.19 16.59-6.19c3.287 8.317 1.22 14.46.593 15.98c3.872 4.23 6.215 9.617 6.215 16.21c0 23.194-14.127 28.3-27.574 29.796c2.167 1.874 4.097 5.55 4.097 11.183c0 8.08-.07 14.583-.07 16.572c0 1.607 1.088 3.49 4.148 2.897c23.98-7.994 41.263-30.622 41.263-57.294C124.388 32.14 97.35 5.104 64 5.104z"
clip-rule="evenodd"
/>
<path
d="M26.484 91.806c-.133.3-.605.39-1.035.185c-.44-.196-.685-.605-.543-.906c.13-.31.603-.395 1.04-.188c.44.197.69.61.537.91zm2.446 2.729c-.287.267-.85.143-1.232-.28c-.396-.42-.47-.983-.177-1.254c.298-.266.844-.14 1.24.28c.394.426.472.984.17 1.255zm2.382 3.477c-.37.258-.976.017-1.35-.52c-.37-.538-.37-1.183.01-1.44c.373-.258.97-.025 1.35.507c.368.545.368 1.19-.01 1.452zm3.261 3.361c-.33.365-1.036.267-1.552-.23c-.527-.487-.674-1.18-.343-1.544c.336-.366 1.045-.264 1.564.23c.527.486.686 1.18.333 1.543zm4.5 1.951c-.147.473-.825.688-1.51.486c-.683-.207-1.13-.76-.99-1.238c.14-.477.823-.7 1.512-.485c.683.206 1.13.756.988 1.237m4.943.361c.017.498-.563.91-1.28.92c-.723.017-1.308-.387-1.315-.877c0-.503.568-.91 1.29-.924c.717-.013 1.306.387 1.306.88zm4.598-.782c.086.485-.413.984-1.126 1.117c-.7.13-1.35-.172-1.44-.653c-.086-.498.422-.997 1.122-1.126c.714-.123 1.354.17 1.444.663zm0 0"
/>
</g>
</svg>
<p>
ν˜„μž¬ μŠ€ν„°λ”” 1κΈ°κ°€ μ§„ν–‰μ€‘μ΄μ—μš”. (2024λ…„ 4/21~8/10) λ‹€μŒ 기수 μŠ€ν„°λ””
μ°Έμ—¬λ₯Ό μ›ν•œλ‹€λ©΄ μ—¬κΈ°μ—μ„œ μ‹ μ²­ν•  수 μžˆμ–΄μš”.
</p>
</div>
<div class="instruction-card">
<span> Step 2 </span>
<svg
xmlns="http://www.w3.org/2000/svg"
width="8em"
height="8em"
viewBox="0 0 128 128"
>
<g fill="#181616">
<path
fill-rule="evenodd"
d="M64 5.103c-33.347 0-60.388 27.035-60.388 60.388c0 26.682 17.303 49.317 41.297 57.303c3.017.56 4.125-1.31 4.125-2.905c0-1.44-.056-6.197-.082-11.243c-16.8 3.653-20.345-7.125-20.345-7.125c-2.747-6.98-6.705-8.836-6.705-8.836c-5.48-3.748.413-3.67.413-3.67c6.063.425 9.257 6.223 9.257 6.223c5.386 9.23 14.127 6.562 17.573 5.02c.542-3.903 2.107-6.568 3.834-8.076c-13.413-1.525-27.514-6.704-27.514-29.843c0-6.593 2.36-11.98 6.223-16.21c-.628-1.52-2.695-7.662.584-15.98c0 0 5.07-1.623 16.61 6.19C53.7 35 58.867 34.327 64 34.304c5.13.023 10.3.694 15.127 2.033c11.526-7.813 16.59-6.19 16.59-6.19c3.287 8.317 1.22 14.46.593 15.98c3.872 4.23 6.215 9.617 6.215 16.21c0 23.194-14.127 28.3-27.574 29.796c2.167 1.874 4.097 5.55 4.097 11.183c0 8.08-.07 14.583-.07 16.572c0 1.607 1.088 3.49 4.148 2.897c23.98-7.994 41.263-30.622 41.263-57.294C124.388 32.14 97.35 5.104 64 5.104z"
clip-rule="evenodd"
/>
<path
d="M26.484 91.806c-.133.3-.605.39-1.035.185c-.44-.196-.685-.605-.543-.906c.13-.31.603-.395 1.04-.188c.44.197.69.61.537.91zm2.446 2.729c-.287.267-.85.143-1.232-.28c-.396-.42-.47-.983-.177-1.254c.298-.266.844-.14 1.24.28c.394.426.472.984.17 1.255zm2.382 3.477c-.37.258-.976.017-1.35-.52c-.37-.538-.37-1.183.01-1.44c.373-.258.97-.025 1.35.507c.368.545.368 1.19-.01 1.452zm3.261 3.361c-.33.365-1.036.267-1.552-.23c-.527-.487-.674-1.18-.343-1.544c.336-.366 1.045-.264 1.564.23c.527.486.686 1.18.333 1.543zm4.5 1.951c-.147.473-.825.688-1.51.486c-.683-.207-1.13-.76-.99-1.238c.14-.477.823-.7 1.512-.485c.683.206 1.13.756.988 1.237m4.943.361c.017.498-.563.91-1.28.92c-.723.017-1.308-.387-1.315-.877c0-.503.568-.91 1.29-.924c.717-.013 1.306.387 1.306.88zm4.598-.782c.086.485-.413.984-1.126 1.117c-.7.13-1.35-.172-1.44-.653c-.086-.498.422-.997 1.122-1.126c.714-.123 1.354.17 1.444.663zm0 0"
/>
</g>
</svg>
<p>
λ‹΅μ•ˆ 제좜과 확인은 κΉƒν—ˆλΈŒλ₯Ό 톡해 μ΄λ£¨μ–΄μ Έμš”. μŠ€ν„°λ”” 전체 진행상황을
μ•Œκ³  μ‹Άλ‹€λ©΄ ν”„λ‘œμ νŠΈ λ³΄λ“œλ₯Ό 톡해 νŒŒμ•…ν•  수 μžˆμ–΄μš”.
</p>
</div>
<div class="instruction-card">
<span> Step 3 </span>
<svg
xmlns="http://www.w3.org/2000/svg"
width="8em"
height="8em"
viewBox="0 0 128 128"
>
<g fill="#181616">
<path
fill-rule="evenodd"
d="M64 5.103c-33.347 0-60.388 27.035-60.388 60.388c0 26.682 17.303 49.317 41.297 57.303c3.017.56 4.125-1.31 4.125-2.905c0-1.44-.056-6.197-.082-11.243c-16.8 3.653-20.345-7.125-20.345-7.125c-2.747-6.98-6.705-8.836-6.705-8.836c-5.48-3.748.413-3.67.413-3.67c6.063.425 9.257 6.223 9.257 6.223c5.386 9.23 14.127 6.562 17.573 5.02c.542-3.903 2.107-6.568 3.834-8.076c-13.413-1.525-27.514-6.704-27.514-29.843c0-6.593 2.36-11.98 6.223-16.21c-.628-1.52-2.695-7.662.584-15.98c0 0 5.07-1.623 16.61 6.19C53.7 35 58.867 34.327 64 34.304c5.13.023 10.3.694 15.127 2.033c11.526-7.813 16.59-6.19 16.59-6.19c3.287 8.317 1.22 14.46.593 15.98c3.872 4.23 6.215 9.617 6.215 16.21c0 23.194-14.127 28.3-27.574 29.796c2.167 1.874 4.097 5.55 4.097 11.183c0 8.08-.07 14.583-.07 16.572c0 1.607 1.088 3.49 4.148 2.897c23.98-7.994 41.263-30.622 41.263-57.294C124.388 32.14 97.35 5.104 64 5.104z"
clip-rule="evenodd"
/>
<path
d="M26.484 91.806c-.133.3-.605.39-1.035.185c-.44-.196-.685-.605-.543-.906c.13-.31.603-.395 1.04-.188c.44.197.69.61.537.91zm2.446 2.729c-.287.267-.85.143-1.232-.28c-.396-.42-.47-.983-.177-1.254c.298-.266.844-.14 1.24.28c.394.426.472.984.17 1.255zm2.382 3.477c-.37.258-.976.017-1.35-.52c-.37-.538-.37-1.183.01-1.44c.373-.258.97-.025 1.35.507c.368.545.368 1.19-.01 1.452zm3.261 3.361c-.33.365-1.036.267-1.552-.23c-.527-.487-.674-1.18-.343-1.544c.336-.366 1.045-.264 1.564.23c.527.486.686 1.18.333 1.543zm4.5 1.951c-.147.473-.825.688-1.51.486c-.683-.207-1.13-.76-.99-1.238c.14-.477.823-.7 1.512-.485c.683.206 1.13.756.988 1.237m4.943.361c.017.498-.563.91-1.28.92c-.723.017-1.308-.387-1.315-.877c0-.503.568-.91 1.29-.924c.717-.013 1.306.387 1.306.88zm4.598-.782c.086.485-.413.984-1.126 1.117c-.7.13-1.35-.172-1.44-.653c-.086-.498.422-.997 1.122-1.126c.714-.123 1.354.17 1.444.663zm0 0"
/>
</g>
</svg>
<p>
맀주 μŠ€ν„°λ”” 멀버듀끼리 λ””μŠ€μ½”λ“œμ—μ„œ κ°„λ‹¨ν•œ λͺ¨μž„을 κ°€μ Έμš”. 멀버 κ°„μ˜
μΉœλ°€κ°λ„ μŒ“κ³  ν•΄μ™Έ μ·¨μ—… κ΄€λ ¨ν•œ μœ μš©ν•œ 정보도 κ³΅μœ ν•˜κ³  μžˆμ–΄μš”.
</p>
</div>
<ds-step
status="1"
iconSrc="images/icon_step1.png"
link="https://github.com/DaleStudy/leetcode-study/discussions/52"
linkText="μ—¬κΈ°μ—μ„œ"
>
<p>ν˜„μž¬ μŠ€ν„°λ”” 1κΈ°κ°€ μ§„ν–‰μ€‘μ΄μ—μš”. (2024λ…„ 4/21~8/10) λ‹€μŒ 기수 μŠ€ν„°λ”” μ°Έμ—¬λ₯Ό μ›ν•œλ‹€λ©΄ μ—¬κΈ°μ—μ„œ μ‹ μ²­ν•  수 μžˆμ–΄μš”.</p>
</ds-step>
<ds-step
status="2"
iconSrc="images/icon_step2.png"
link="https://github.com/orgs/DaleStudy/projects/1"
linkText="ν”„λ‘œμ νŠΈ λ³΄λ“œ"
>
<p>λ‹΅μ•ˆ 제좜과 확인은 κΉƒν—ˆλΈŒλ₯Ό 톡해 μ΄λ£¨μ–΄μ Έμš”. μŠ€ν„°λ”” 전체 진행상황을 μ•Œκ³  μ‹Άλ‹€λ©΄ ν”„λ‘œμ νŠΈ λ³΄λ“œλ₯Ό 톡해 νŒŒμ•…ν•  수 μžˆμ–΄μš”.</p>
</ds-step>
<ds-step
status="3"
iconSrc="images/icon_step3.png"
link="https://discord.com/invite/6TwzdnW6ze"
linkText="λ””μŠ€μ½”λ“œ"
>
<p>맀주 μŠ€ν„°λ”” 멀버듀끼리 λ””μŠ€μ½”λ“œμ—μ„œ κ°„λ‹¨ν•œ λͺ¨μž„을 κ°€μ Έμš”. 멀버 κ°„μ˜ μΉœλ°€κ°λ„ μŒ“κ³  ν•΄μ™Έ μ·¨μ—… κ΄€λ ¨ν•œ μœ μš©ν•œ 정보도 κ³΅μœ ν•˜κ³  μžˆμ–΄μš”.</p>
</ds-step>
</div>
</div>

Expand Down
1 change: 1 addition & 0 deletions main.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ import "./components/hero.js";
import "./components/button-link.js";
import "./components/review-item/review-item.js";
import "./components/seo-meta-tag/seo-meta-tag.js";
import "./components/step.js";

0 comments on commit ec8f8b5

Please sign in to comment.