From 3d48d98784f8869eadc1fc85b6ecfe4c4fd16f87 Mon Sep 17 00:00:00 2001 From: iamyeongg Date: Thu, 4 Apr 2024 21:08:29 +0900 Subject: [PATCH 1/4] =?UTF-8?q?[feat]=20Pull=20Request=20=ED=85=9C?= =?UTF-8?q?=ED=94=8C=EB=A6=BF=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/PULL_REQUEST_TEMPLATE.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..9b8d400f --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,9 @@ +## 개요⭐️ +내용을 적어주세요. + +## 작업사항⭐️ +- 내용을 적어주세요. + +## 확인⭐️ +- 워크북 키워드 정리 +- 실습 및 미션 From 358c254030461a0c63c9d4a50f222621fb1eb55b Mon Sep 17 00:00:00 2001 From: iamyeongg Date: Sat, 6 Apr 2024 11:48:33 +0900 Subject: [PATCH 2/4] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 462bd006..17c1b0eb 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ SSUMC 6기 WEB 스터디 A조 │ └─yuyeong/1week ``` 1. `닉네임/main 브랜치`가 기본 브랜치로 pr 보낼 때 main 브랜치가 아닌 닉네임/main 브랜치로 올립니다. -2. 매주 실습, 미션은 각자의 닉네임/main 브랜치를 base 브랜치로 삼아 `닉네임/이슈번호 브랜치`를 생성하여 관련 파일을 업로드합니다. +2. 매주 실습, 미션은 각자의 닉네임/main 브랜치를 base 브랜치로 삼아 `닉네임/해당 주차 브랜치`를 생성하여 관련 파일을 업로드합니다. 3. 모든 팀원들의 approve를 받으면, pr을 머지합니다. approve와 merge는 스터디 진행 중에 이루어집니다. branch 명 : 닉네임 / 해당 주차 From d1da81449c1177e19a771426867ab55df5d1a85b Mon Sep 17 00:00:00 2001 From: sihyun2988 Date: Thu, 11 Apr 2024 01:08:57 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../validation/.vs/ProjectSettings.json | 3 + ease#1week/validation/.vs/slnx.sqlite | Bin 0 -> 90112 bytes .../validation/.vs/validation/Script1.js | 133 ++++++++++++++++++ .../validation/.vs/validation/Style.css | 52 +++++++ .../validation/.vs/validation/index.html | 45 ++++++ 5 files changed, 233 insertions(+) create mode 100644 ease#1week/validation/.vs/ProjectSettings.json create mode 100644 ease#1week/validation/.vs/slnx.sqlite create mode 100644 ease#1week/validation/.vs/validation/Script1.js create mode 100644 ease#1week/validation/.vs/validation/Style.css create mode 100644 ease#1week/validation/.vs/validation/index.html diff --git a/ease#1week/validation/.vs/ProjectSettings.json b/ease#1week/validation/.vs/ProjectSettings.json new file mode 100644 index 00000000..f8b48885 --- /dev/null +++ b/ease#1week/validation/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": null +} \ No newline at end of file diff --git a/ease#1week/validation/.vs/slnx.sqlite b/ease#1week/validation/.vs/slnx.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..17a60cc0ff2500abf35bae4340ea9eaffc1507b9 GIT binary patch literal 90112 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 LfB*=*NCN)_&2d&= literal 0 HcmV?d00001 diff --git a/ease#1week/validation/.vs/validation/Script1.js b/ease#1week/validation/.vs/validation/Script1.js new file mode 100644 index 00000000..2ad81a8c --- /dev/null +++ b/ease#1week/validation/.vs/validation/Script1.js @@ -0,0 +1,133 @@ +// JavaScript source code +const form = document.getElementById('form'); + + +const button = document.getElementById('button'); +let pop = document.getElementById('pop'); + +form.addEventListener('change', buttonable); +form.addEventListener('submit', openpop); +pop.addEventListener('click', closepop); + +function buttonable() { + let isValid = validate(); + if (isValid === false) { + button.disabled = true; + } + else { + button.disabled = false; + } +} + +function validate() { + + let nametrue = false; + const username = document.getElementById('username').value; + let nameerror = document.getElementById('nameerror'); + if (username === '') { + nametrue = false; + nameerror.innerHTML = '필수 입력 항목입니다'; + nameerror.style.color = 'red'; + } else { + nametrue = true; + nameerror.innerHTML = '확인되었습니다'; + nameerror.style.color = 'green'; + } + + let emailtrue = false; + const useremail = document.getElementById('useremail').value; + let emailerror = document.getElementById('emailerror'); + if (useremail === '') { + emailtrue = false; + emailerror.innerHTML = '필수 입력 항목입니다'; + emailerror.style.color = 'red'; + } else if (useremail.indexOf('@') === -1) { + emailtrue = false; + emailerror.innerHTML = '이메일 형식으로 입력해주세요'; + emailerror.style.color = 'red'; + } else { + emailtrue = true; + emailerror.innerHTML = '올바른 이메일 형식입니다!' + emailerror.style.color = 'green'; + } + + let agetrue = false; + const userage = document.getElementById('userage').value; + let ageerror = document.getElementById('ageerror'); + if (userage === '') { + agetrue = false; + ageerror.innerHTML = '나이를 입력해주세요'; + ageerror.style.color = 'red'; + } else if (isNaN(userage)) { + agetrue = false; + ageerror.innerHTML = '나이는 숫자 형식이어야 합니다'; + ageerror.style.color = 'red'; + } else if (userage < 0) { + agetrue = false; + ageerror.innerHTML = '나이는 음수를 입력할 수 없습니다'; + ageerror.style.color = 'red'; + } else if (!Number.isInteger(parseFloat(userage))) { + agetrue = false; + ageerror.innerHTML = '나이는 소수를 입력할 수 없습니다'; + ageerror.style.color = 'red'; + } else if (parseInt(userage, 10) < 19) { + agetrue = false; + ageerror.innerHTML = '미성년자는 가입할 수 없습니다'; + ageerror.style.color = 'red'; + } else { + agetrue = true; + ageerror.innerHTML = '올바른 나이 형식입니다!' + ageerror.style.color = 'green'; + } + + let pwdtrue = false; + const password = document.getElementById('password').value; + let pwderror = document.getElementById('pwderror'); + if (password.length < 4) { + pwdtrue = false; + pwderror.innerHTML = '비밀번호는 최소 4자리 이상이어야 합니다'; + pwderror.style.color = 'red'; + } else if (password.length > 12) { + pwdtrue = false; + pwderror.innerHTML = '비밀번호는 최대 12자리까지 가능합니다'; + pwderror.style.color = 'red'; + } else if (!/(?=.*[!@#$%^&*])(?=.*[a-zA-Z])(?=.*[0-9]).{4,12}/.test(password)) { + pwdtrue = false; + pwderror.innerHTML = '영어, 숫자, 특수문자를 모두 조합해서 비밀번호를 작성해야 합니다'; + pwderror.style.color = 'red'; + } else { + pwdtrue = true; + pwderror.innerHTML = '올바른 비밀번호입니다!' + pwderror.style.color = 'green'; + } + + let awdchktrue = false; + const pwdcheck = document.getElementById('pwdcheck').value; + let pwdchkerror = document.getElementById('pwdchkerror'); + if (pwdcheck === '') { + pwdchktrue = false; + pwdchkerror.innerHTML = ''; + } else if (pwdcheck !== password) { + pwdchktrue = false; + pwdchkerror.innerHTML = '비밀번호가 일치하지 않습니다'; + pwdchkerror.style.color = 'red'; + } else { + pwdchktrue = true; + pwdchkerror.innerHTML = '비밀번호와 일치합니다'; + pwdchkerror.style.color = 'green'; + } + + let alltrue = nametrue === true && emailtrue === true && agetrue === true && pwdtrue === true && pwdchktrue === true + return alltrue; +} + +function openpop(event) { + event.preventDefault(); + if (validate() === true) { + pop.style.display = 'block'; + } +} + +function closepop() { + pop.style.display = 'none'; +} \ No newline at end of file diff --git a/ease#1week/validation/.vs/validation/Style.css b/ease#1week/validation/.vs/validation/Style.css new file mode 100644 index 00000000..64add9a9 --- /dev/null +++ b/ease#1week/validation/.vs/validation/Style.css @@ -0,0 +1,52 @@ +body { + background-color: rgb(199, 160, 160); + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + margin: 0; +} + +.container { + background-color: rgb(213, 206, 206, 0.49); + padding: 80px 200px; + border-radius: 5px; + box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.3); +} + +.login-box { + text-align: center; +} + +form { + margin-top: 20px; +} + +label, input { + display: block; + width: 300px; + border-color: rgb(160, 124, 124); + background-color: transparent; +} + +#button { + width: 100px; + margin: 0 auto; + border-radius: 5px; +} + +#pop{ + position: fixed; + background-color: white; + border-radius: 5px; + text-align: center; + padding: 20px; + display: none; +} + + +#nameerror, #emailerror, #ageerror, #pwderror, #pwdchkerror { + color: red; + font-size: 12px; + text-align: left; +} \ No newline at end of file diff --git a/ease#1week/validation/.vs/validation/index.html b/ease#1week/validation/.vs/validation/index.html new file mode 100644 index 00000000..6f845458 --- /dev/null +++ b/ease#1week/validation/.vs/validation/index.html @@ -0,0 +1,45 @@ + + + + + 로그인 + + + +
+ +
+
+

가입 성공!

+

회원가입을 축하합니다

+ +
+ + + + \ No newline at end of file From a0055dce2b299adcc378beb3634bff1a7bae7746 Mon Sep 17 00:00:00 2001 From: sihyun2988 Date: Thu, 11 Apr 2024 04:45:57 +0900 Subject: [PATCH 4/4] =?UTF-8?q?todo=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + ease#1week/todo/todohtml.html | 31 ++++++++++++++ ease#1week/todo/todoscript.js | 48 +++++++++++++++++++++ ease#1week/todo/todostyle.css | 58 ++++++++++++++++++++++++++ ease#1week/validation/.vs/slnx.sqlite | Bin 90112 -> 90112 bytes 5 files changed, 138 insertions(+) create mode 100644 .gitignore create mode 100644 ease#1week/todo/todohtml.html create mode 100644 ease#1week/todo/todoscript.js create mode 100644 ease#1week/todo/todostyle.css diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..a4d6d9c6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.vs/ \ No newline at end of file diff --git a/ease#1week/todo/todohtml.html b/ease#1week/todo/todohtml.html new file mode 100644 index 00000000..e4352387 --- /dev/null +++ b/ease#1week/todo/todohtml.html @@ -0,0 +1,31 @@ + + + + + + + + + +

UMC Study Plan


+
+
+ +
+ +
+ 해야 할 일 +
+
    +
+
+
+ 해낸 일 +
+
    +
+
+
+ + + \ No newline at end of file diff --git a/ease#1week/todo/todoscript.js b/ease#1week/todo/todoscript.js new file mode 100644 index 00000000..2a32c142 --- /dev/null +++ b/ease#1week/todo/todoscript.js @@ -0,0 +1,48 @@ +//JavaScript source code +const form = document.getElementById('form'); +const todoinput = document.getElementById('todoinput'); + +let listcnt = 0; + +form.addEventListener('submit', addtodo); + + +function addtodo(event){ + event.preventDefault(); + let todoul = document.getElementById('todoul'); + let newli = document.createElement('li'); + newli.id = 'li'+listcnt; + let newtext = document.createElement('span'); + newtext.id = 'span'+listcnt; + newtext.textContent = todoinput.value; + let newdonebutton = document.createElement('button'); + newdonebutton.id = 'done'+listcnt; + let line = document.createElement('hr'); + newdonebutton.textContent = "완료"; + newcontainer = document.createElement('div'); + newcontainer.className = 'content'; + + newdonebutton.addEventListener('click', move); + + newli.appendChild(newcontainer); + newcontainer.appendChild(newtext); + newcontainer.appendChild(newdonebutton); + newli.appendChild(line); + todoul.appendChild(newli); + + listcnt++; + todoinput.value = ''; +} + +function move(event){ + let doneul = document.getElementById('doneul'); + let donebutton = event.target; + donebutton.textContent = '삭제'; + doneul.appendChild(donebutton.parentNode.parentNode); + + donebutton.addEventListener('click', buttondelete); +} + +function buttondelete(event){ + event.target.parentNode.parentNode.remove(); +} \ No newline at end of file diff --git a/ease#1week/todo/todostyle.css b/ease#1week/todo/todostyle.css new file mode 100644 index 00000000..0f761748 --- /dev/null +++ b/ease#1week/todo/todostyle.css @@ -0,0 +1,58 @@ +body +{ + background-color: rgb(238, 229, 199, 0.63); + text-align: center; + font-weight:bold; +} + +hr { + background-color: yellow; + border: 0px; + height: 2px; + width: 100%; +} + +#todoinput{ + width: 50%; + height: 40px; + border-radius: 5px; + border: 0; + padding-left: 20px; + background-color: rgb(255, 255, 255, 0.52); +} + +#container{ + display: flex; + flex-direction: row; + justify-content: center; + margin: 20px; +} + +#todo, #done { + width: 300px; + margin-left: 50px; + margin-right: 50px; +} + +#todoul, #doneul { + width: 60%; + padding-left: 60px; + padding-right: 60px; +} + +.content{ + display: flex; + justify-content: space-between; + width: auto; +} + + +li::marker{ + color: yellow; +} + +button { + border: 0; + background-color: rgb(255, 255, 255, 0.52); + border-radius: 3px; +} \ No newline at end of file diff --git a/ease#1week/validation/.vs/slnx.sqlite b/ease#1week/validation/.vs/slnx.sqlite index 17a60cc0ff2500abf35bae4340ea9eaffc1507b9..28fb8bb8fa2fa3ebaac51b2a9d87829e97de406c 100644 GIT binary patch delta 518 zcmZoTz}j$tb%Hb__e2?IM(&LXOZfR%d2TZBzu=wE+s>Q9b91wxz;T}XMh;e12It1u zfTH}Y)Z`N9{JgZx^wOfllFaX%C8z?Y(#)I`6jjAaRtnLvI$%Y? zC5c5Pr3Fy6Zkai$$g<9*MMbH3CCG~OlS_cw^Gb7ac)4m7Sy&jH1zl2;O4CCUi_%j| zibIQ2i-J>2N;31(i@j4TqhmL>%Z3XvvQECQuOQ6K#lXP8%3sUCKbL& z6|(sq41Ze0qepO{=HU@J}PPVY%@cg3e z;)2BFRG>#nQuVTm^Yb|FL{=Q&3*9^Uq`#pEkjb-VKge;+{KpvhfAT-zKL#{o2fvgg zvpFMH{mhde#H#?U{KUZjhyOeOr_F*1Pxxh6m^m4lK?D;sGXp2Yz{3puKltzQ9|jt@ Tm0wzl#hep|iJR}$D?I=JHL|EM delta 164 zcmZoTz}j$tb%Hb_`$QRMM)r*fOZd5%dD|KIU+~W7ZQm@YP|3TwT{c{Zk$LiceFa`7 zE(Qh$X8yel{CoK?Zx%4f<)65~W%6EocMc~0lMMWC`A-71?B$<)(%(=hVjBa;llveI zO#BZR_