Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
/>
<link rel="stylesheet" href="/styles/reset.css" />
<link rel="stylesheet" href="/styles/global.css" />
<link rel="stylesheet" href="/styles/layout.css" />
<link rel="stylesheet" href="/styles/home.css" />
</head>
<body>
Expand Down
4 changes: 3 additions & 1 deletion item.html → items.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>판다마켓 - item</title>
</head>
<body></body>
<body>
items 페이지 입니다!
</body>
</html>
31 changes: 26 additions & 5 deletions login.html
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
</div>

<!-- 로그인 입력 폼 -->
<form method="post">
<form method="post" id="loginForm">
<div class="input-form">
<label for="email">이메일</label>
<input
Expand All @@ -38,6 +38,12 @@
name="email"
placeholder="이메일을 입력해주세요"
/>
<span id="email-value-empty" class="error-message"
>이메일을 입력해주세요</span
>
<span id="email-value-invalid" class="error-message"
>잘못된 이메일 형식입니다</span
>
</div>
<div class="input-form">
<label for="password">비밀번호</label>
Expand All @@ -48,17 +54,31 @@
name="password"
placeholder="비밀번호를 입력해주세요"
/>
<button class="password-show">
<button
type="button"
class="password-toggle-button"
aria-label="비밀번호 숨김"
>
<img
src="/images/icon/auth/eye-invisible.svg"
alt="비밀번호 숨김"
class="password-toggle-icon"
alt="비밀번호 숨김 아이콘"
width="24"
/>
</button>
</div>
<span id="password-value-empty" class="error-message"
>비밀번호를 입력해주세요</span
>
<span id="password-value-invalid" class="error-message"
>비밀번호를 8자 이상 입력해주세요</span
>
</div>
<!-- 나중에 페이지 연결 예정 -->
<button type="submit" class="button btn-round auth-button" disabled>
<button
type="submit"
class="button btn-round auth-button"
id="Submit-Button"
>
로그인
</button>
</form>
Expand Down Expand Up @@ -90,5 +110,6 @@
<a href="signup.html" class="switch-auth">회원가입</a>
</div>
</div>
<script src="/scripts/auth.js"></script>
</body>
</html>
173 changes: 173 additions & 0 deletions scripts/auth.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
const emailRegex =
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

정규식을 써주셨네요! 👍

/^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/;
const loginForm = document.getElementById("loginForm");
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

변수명, 함수명이 대체로 명확하고 직관적입니다 :) 👍

const signupForm = document.getElementById("signupForm");
const emailInput = document.getElementById("email");
const nicknameInput = document.getElementById("nickname");
const passwordInput = document.getElementById("password");
const confirmPasswordInput = document.getElementById("confirmPassword");
const submitButton = document.getElementById("Submit-Button");
let isEmailValid = false;
let isNicknameValid = false;
let isPasswordValid = false;
let isconfirmPasswordValid = false;

function showError(inputElement, errorId) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여러개의 error span을 다루고 있는데, 하나로 줄여봐도 좋을 거 같습니다 :)
만약 지금 요구사항이 추가 된다면 html도 추가하고 아래 함수에서 다뤄야할 경우의 수도 늘어나겠죠!

function showError(inputElement, errorId, message) {
  const errorElement = document.getElementById(errorId);
  errorElement.style.display = "block";
  errorElement.innerHTML= message;
  inputElement.style.outline = "1px solid var(--error)";
}

const errorElement = document.getElementById(errorId);
errorElement.style.display = "block";
inputElement.style.outline = "1px solid var(--error)";
}
function hideError(inputElement, errorId) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

작은 기능별로 함수를 잘 쪼개셨네요! 👍

const errorElement = document.getElementById(errorId);
errorElement.style.display = "none";
inputElement.style.outline = "none";
}

function emailValidation() {
const emailValue = emailInput.value.trim();
const emailValidation = emailRegex.test(emailValue);

isEmailValid = false;
hideError(emailInput, "email-value-empty");
hideError(emailInput, "email-value-invalid");

if (!emailValue) {
showError(emailInput, "email-value-empty");
} else if (!emailValidation) {
showError(emailInput, "email-value-invalid");
} else {
isEmailValid = true;
hideError(emailInput, "email-value-empty");
hideError(emailInput, "email-value-invalid");
}

submitButtonActivation();
}

function nicknameValidation() {
const nicknameValue = nicknameInput.value.trim();

isNicknameValid = false;
hideError(nicknameInput, "nickname-value-empty");

if (!nicknameValue) {
showError(nicknameInput, "nickname-value-empty");
} else {
isNicknameValid = true;
hideError(nicknameInput, "nickname-value-empty");
}

submitButtonActivation();
}

function passwordValidation() {
const passwordValue = passwordInput.value.trim();

isPasswordValid = false;
hideError(passwordInput, "password-value-empty");
hideError(passwordInput, "password-value-invalid");

if (!passwordValue) {
showError(passwordInput, "password-value-empty");
} else if (passwordValue.length < 8) {
showError(passwordInput, "password-value-invalid");
} else {
isPasswordValid = true;
hideError(passwordInput, "password-value-empty");
hideError(passwordInput, "password-value-invalid");
}

submitButtonActivation();
if (signupForm) {
confirmPasswordValidation();
}
}

function confirmPasswordValidation() {
const confirmPasswordValue = confirmPasswordInput.value.trim();

isconfirmPasswordValid = false;

hideError(confirmPasswordInput, "check-password-validation");
hideError(confirmPasswordInput, "confirmPassword-value-invalid");
if (!isPasswordValid) {
showError(confirmPasswordInput, "check-password-validation");
} else if (
!confirmPasswordValue ||
confirmPasswordValue !== passwordInput.value.trim()
) {
showError(confirmPasswordInput, "confirmPassword-value-invalid");
} else {
isconfirmPasswordValid = true;
hideError(confirmPasswordInput, "check-password-validation");
hideError(confirmPasswordInput, "confirmPassword-value-invalid");
}

submitButtonActivation();
}

function submitButtonActivation() {
let isAuthValid = isEmailValid && isPasswordValid;
if (signupForm) {
isAuthValid = isAuthValid && isNicknameValid && isconfirmPasswordValid;
}

submitButton.disabled = !isAuthValid;
}

if (emailInput) {
emailInput.addEventListener("focusout", emailValidation);
}
if (nicknameInput) {
nicknameInput.addEventListener("focusout", nicknameValidation);
}
if (passwordInput) {
passwordInput.addEventListener("input", passwordValidation);
}
if (confirmPasswordInput) {
confirmPasswordInput.addEventListener("input", confirmPasswordValidation);
}

submitButtonActivation();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

상태 초기화를 위해서인가요~?
disabled 속성을 사용할 수 있습니다 :)

<button disabled></button>


if (loginForm) {
loginForm.addEventListener("submit", function (event) {
event.preventDefault();
window.location.href = "items.html";
});
}

if (signupForm) {
signupForm.addEventListener("submit", function (event) {
event.preventDefault();
window.location.href = "login.html";
});
}

function PasswordToggleVisibility(event) {
const targetButton = event.currentTarget;
const targetInputField = targetButton.parentElement.querySelector("input");
const targetToggleIcon = targetButton.querySelector(".password-toggle-icon");

const isPasswordVisible = targetInputField.type === "text";
targetInputField.type = isPasswordVisible ? "password" : "text";
targetToggleIcon.src = isPasswordVisible
? "/images/icon/auth/eye-invisible.svg"
: "/images/icon/auth/eye-visible.svg";

targetToggleIcon.alt = isPasswordVisible
? "비밀번호 숨김 아이콘"
: "비밀번호 표시 아이콘";

targetButton.setAttribute(
"aria-label",
isPasswordVisible ? "비밀번호 숨김" : "비밀번호 표시"
);
}

const passwordToggleButtons = document.querySelectorAll(
".password-toggle-button"
);
passwordToggleButtons.forEach((passwordToggleButton) =>
passwordToggleButton.addEventListener("click", PasswordToggleVisibility)
);
60 changes: 48 additions & 12 deletions signup.html
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
</a>
</div>
<!-- 회원가입 입력 폼 -->
<form method="post">
<form method="post" id="signupForm">
<div class="input-form">
<label for="email">이메일</label>
<input
Expand All @@ -37,15 +37,24 @@
name="email"
placeholder="이메일을 입력해주세요"
/>
<span id="email-value-empty" class="error-message"
>이메일을 입력해주세요</span
>
<span id="email-value-invalid" class="error-message"
>잘못된 이메일 형식입니다</span
>
</div>
<div class="input-form">
<label for="nickName">닉네임</label>
<input
id="nickName"
id="nickname"
type="text"
name="nickName"
name="nickname"
placeholder="닉네임을 입력해주세요"
/>
<span id="nickname-value-empty" class="error-message"
>닉네임을 입력해주세요</span
>
</div>
<div class="input-form">
<label for="password">비밀번호</label>
Expand All @@ -56,35 +65,61 @@
name="password"
placeholder="비밀번호를 입력해주세요"
/>
<button class="password-show">
<button
type="button"
class="password-toggle-button"
aria-label="비밀번호 숨김"
>
<img
src="/images/icon/auth/eye-invisible.svg"
alt="비밀번호 숨김"
class="password-toggle-icon"
alt="비밀번호 숨김 아이콘"
width="24"
/>
</button>
</div>
<span id="password-value-empty" class="error-message"
>비밀번호를 입력해주세요</span
>
<span id="password-value-invalid" class="error-message"
>비밀번호를 8자 이상 입력해주세요</span
>
</div>
<div class="input-form">
<label for="verifyPassword">비밀번호 확인</label>
<label for="confirmPassword">비밀번호 확인</label>
<div class="input-form-wrapper">
<input
id="verifyPassword"
id="confirmPassword"
type="password"
name="verifyPassword"
name="confirmPassword"
placeholder="비밀번호를 다시 입력해주세요"
/>
<button class="password-show">
<button
type="button"
class="password-toggle-button"
aria-label="비밀번호 숨김"
>
<img
src="/images/icon/auth/eye-visible.svg"
alt="비밀번호 보임"
src="/images/icon/auth/eye-invisible.svg"
class="password-toggle-icon"
alt="비밀번호 숨김 아이콘"
width="24"
/>
</button>
</div>
<span id="check-password-validation" class="error-message"
>먼저 비밀번호를 조건에 맞게 입력해주세요</span
>
<span id="confirmPassword-value-invalid" class="error-message"
>비밀번호가 일치하지 않습니다</span
>
</div>
<!-- 나중에 페이지 연결 예정 -->
<button type="submit" class="button btn-round auth-button" disabled>
<button
type="submit"
class="button btn-round auth-button"
id="Submit-Button"
>
회원가입
</button>
</form>
Expand All @@ -111,5 +146,6 @@
<a href="login.html" class="switch-auth">로그인</a>
</div>
</div>
<script src="/scripts/auth.js"></script>
</body>
</html>
Loading
Loading