mirror of
https://github.com/Nezumi-2711/javascript-training.git
synced 2026-09-22 13:38:43 +00:00
Refactor code
This commit is contained in:
@@ -12,5 +12,6 @@ export default class App {
|
|||||||
start() {
|
start() {
|
||||||
this.controller.registerController.init();
|
this.controller.registerController.init();
|
||||||
this.controller.loginController.init();
|
this.controller.loginController.init();
|
||||||
|
this.controller.homeController.init();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ export const MESSAGE = {
|
|||||||
export const URL = {
|
export const URL = {
|
||||||
LOGIN: 'login',
|
LOGIN: 'login',
|
||||||
REGISTER: 'register',
|
REGISTER: 'register',
|
||||||
HOME: 'home',
|
HOME: '',
|
||||||
};
|
};
|
||||||
|
|
||||||
export const BTN_CONTENT = {
|
export const BTN_CONTENT = {
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import HomeController from './homeController';
|
||||||
import LoginController from './loginController';
|
import LoginController from './loginController';
|
||||||
import RegisterController from './registerController';
|
import RegisterController from './registerController';
|
||||||
|
|
||||||
@@ -5,5 +6,6 @@ export default class Controller {
|
|||||||
constructor(service, view) {
|
constructor(service, view) {
|
||||||
this.registerController = new RegisterController(service, view);
|
this.registerController = new RegisterController(service, view);
|
||||||
this.loginController = new LoginController(service, view);
|
this.loginController = new LoginController(service, view);
|
||||||
|
this.homeController = new HomeController(service, view);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
export default class HomeController {
|
||||||
|
constructor(service, view) {
|
||||||
|
this.service = service;
|
||||||
|
this.homeView = view.homeView;
|
||||||
|
}
|
||||||
|
|
||||||
|
init() {
|
||||||
|
if (this.homeView) {
|
||||||
|
this.homeView.handlerTabsTransfer();
|
||||||
|
this.homeView.addCommonEventPage();
|
||||||
|
this.homeView.addEventSelectCategoryDialog();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -96,7 +96,21 @@ export default class CommonView {
|
|||||||
*/
|
*/
|
||||||
handleEventBtnPopupAndOverlay() {
|
handleEventBtnPopupAndOverlay() {
|
||||||
this.popupBtn.addEventListener('click', this.tooglePopupForm.bind(this));
|
this.popupBtn.addEventListener('click', this.tooglePopupForm.bind(this));
|
||||||
this.overlay.addEventListener('click', this.tooglePopupForm.bind(this));
|
this.overlay.addEventListener('click', this.toogleDialog.bind(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
toogleDialog() {
|
||||||
|
this.overlay.classList.toggle('active');
|
||||||
|
if (this.dialog.length) {
|
||||||
|
// If it have more dialog
|
||||||
|
this.dialog.forEach((item) => {
|
||||||
|
if (item.classList.contains('active')) {
|
||||||
|
item.classList.remove('active');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.dialog.classList.toggle('active');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -0,0 +1,116 @@
|
|||||||
|
import CommonView from './commonView';
|
||||||
|
|
||||||
|
export default class HomeView extends CommonView {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
|
||||||
|
this.tabs = document.querySelectorAll('.app__tab-item');
|
||||||
|
this.allContent = document.querySelectorAll('.app__content-item');
|
||||||
|
this.addTransactionBtn = document.getElementById('addTransaction');
|
||||||
|
this.addBudgetBtn = document.getElementById('addBudget');
|
||||||
|
this.overlay = document.querySelector('.overlay');
|
||||||
|
this.darkOverlay = document.querySelector('.dark-overlay');
|
||||||
|
this.dialog = document.querySelectorAll('.dialog');
|
||||||
|
this.cancelBtn = document.querySelectorAll('.form__cancel-btn');
|
||||||
|
this.categoryField = document.getElementById('selectCategory');
|
||||||
|
this.closeIcon = document.querySelector('.close-icon');
|
||||||
|
|
||||||
|
this.budgetForm = document.getElementById('budgetForm');
|
||||||
|
this.transactionForm = document.getElementById('transactionForm');
|
||||||
|
this.categoryForm = document.getElementById('categoryForm');
|
||||||
|
|
||||||
|
this.homePage = document.URL.includes('/');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle event when click on tabs
|
||||||
|
*/
|
||||||
|
handlerTabsTransfer() {
|
||||||
|
this.tabs.forEach((tab, index) => {
|
||||||
|
tab.addEventListener('click', (e) => {
|
||||||
|
this.removeActiveTab();
|
||||||
|
tab.classList.add('active');
|
||||||
|
|
||||||
|
const line = document.querySelector('.app__line');
|
||||||
|
line.style.width = `${e.target.offsetWidth}px`;
|
||||||
|
line.style.left = `${e.target.offsetLeft}px`;
|
||||||
|
|
||||||
|
this.allContent.forEach((content) => {
|
||||||
|
content.classList.remove('active');
|
||||||
|
});
|
||||||
|
this.allContent[index].classList.add('active');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
addCommonEventPage() {
|
||||||
|
this.addTransactionBtn.addEventListener('click', () => {
|
||||||
|
this.transactionForm.classList.add('active');
|
||||||
|
this.toggleActiveOverlay();
|
||||||
|
});
|
||||||
|
|
||||||
|
this.addBudgetBtn.addEventListener('click', () => {
|
||||||
|
this.budgetForm.classList.add('active');
|
||||||
|
this.toggleActiveOverlay();
|
||||||
|
});
|
||||||
|
|
||||||
|
this.cancelBtn.forEach((item) => {
|
||||||
|
item.addEventListener('click', () => {
|
||||||
|
this.hideDialog();
|
||||||
|
this.toggleActiveOverlay();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
this.overlay.addEventListener('click', () => {
|
||||||
|
this.hideDialog();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
addEventSelectCategoryDialog() {
|
||||||
|
this.categoryField.addEventListener('click', () => {
|
||||||
|
this.categoryForm.classList.add('active');
|
||||||
|
this.toggleDarkOverlayActive();
|
||||||
|
});
|
||||||
|
|
||||||
|
this.closeIcon.addEventListener(
|
||||||
|
'click',
|
||||||
|
this.hideSelectCategoryForm.bind(this),
|
||||||
|
);
|
||||||
|
|
||||||
|
this.darkOverlay.addEventListener(
|
||||||
|
'click',
|
||||||
|
this.hideSelectCategoryForm.bind(this),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
hideSelectCategoryForm() {
|
||||||
|
this.categoryForm.classList.remove('active');
|
||||||
|
this.toggleDarkOverlayActive();
|
||||||
|
}
|
||||||
|
|
||||||
|
toggleDarkOverlayActive() {
|
||||||
|
this.darkOverlay.classList.toggle('active');
|
||||||
|
}
|
||||||
|
|
||||||
|
hideDialog() {
|
||||||
|
this.dialog.forEach((item) => {
|
||||||
|
if (item.classList.contains('active')) {
|
||||||
|
item.classList.remove('active');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
toggleActiveOverlay() {
|
||||||
|
this.overlay.classList.toggle('active');
|
||||||
|
}
|
||||||
|
|
||||||
|
removeActiveTab() {
|
||||||
|
this.tabs.forEach((tab) => {
|
||||||
|
tab.classList.remove('active');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
isHomePage() {
|
||||||
|
return this.homePage;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,6 +7,7 @@ export default class LoginView extends CommonLoginRegisterView {
|
|||||||
|
|
||||||
this.parentElement = document.querySelector('.form');
|
this.parentElement = document.querySelector('.form');
|
||||||
this.loginPage = document.URL.includes('/login');
|
this.loginPage = document.URL.includes('/login');
|
||||||
|
this.dialog = document.querySelector('.modal-box');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ export default class RegisterView extends CommonLoginRegisterView {
|
|||||||
super();
|
super();
|
||||||
|
|
||||||
this.registerPage = document.URL.includes('/register');
|
this.registerPage = document.URL.includes('/register');
|
||||||
|
this.dialog = document.querySelector('.modal-box');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import RegisterView from './registerView';
|
|||||||
import LoginView from './loginView';
|
import LoginView from './loginView';
|
||||||
import { getURL } from '../helpers/helpers';
|
import { getURL } from '../helpers/helpers';
|
||||||
import { URL } from '../constants/constant';
|
import { URL } from '../constants/constant';
|
||||||
|
import HomeView from './homeView';
|
||||||
|
|
||||||
export default class View {
|
export default class View {
|
||||||
constructor() {
|
constructor() {
|
||||||
@@ -12,6 +13,9 @@ export default class View {
|
|||||||
case URL.REGISTER:
|
case URL.REGISTER:
|
||||||
this.registerView = new RegisterView();
|
this.registerView = new RegisterView();
|
||||||
break;
|
break;
|
||||||
|
case URL.HOME:
|
||||||
|
this.homeView = new HomeView();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
<title>Money Lover Web</title>
|
<title>Money Lover Web</title>
|
||||||
</head>
|
</head>
|
||||||
<body class="home-page">
|
<body class="home-page">
|
||||||
<div class="overlay active"></div>
|
|
||||||
<div class="dark-overlay"></div>
|
<div class="dark-overlay"></div>
|
||||||
<!-- <div class="modal-box success active">
|
<!-- <div class="modal-box success active">
|
||||||
<div class="mark check"></div>
|
<div class="mark check"></div>
|
||||||
@@ -18,7 +17,7 @@
|
|||||||
<button class="modal-box__redirect-btn">OK</button>
|
<button class="modal-box__redirect-btn">OK</button>
|
||||||
</div> -->
|
</div> -->
|
||||||
<!-- Add a wallet form -->
|
<!-- Add a wallet form -->
|
||||||
<div class="dialog active" id="walletForm">
|
<div class="dialog" id="walletForm">
|
||||||
<div class="dialog__add-wallet">
|
<div class="dialog__add-wallet">
|
||||||
<!-- Dialog header -->
|
<!-- Dialog header -->
|
||||||
<div class="dialog__header">
|
<div class="dialog__header">
|
||||||
@@ -403,7 +402,8 @@
|
|||||||
<!-- End app -->
|
<!-- End app -->
|
||||||
</div>
|
</div>
|
||||||
<!-- All scripts below is use for test purpose! -->
|
<!-- All scripts below is use for test purpose! -->
|
||||||
<script>
|
<script type="module" src="../js/main.js"></script>
|
||||||
|
<!-- <script>
|
||||||
// Handle event when click on tabs
|
// Handle event when click on tabs
|
||||||
const tabs = document.querySelectorAll('.app__tab-item');
|
const tabs = document.querySelectorAll('.app__tab-item');
|
||||||
const all_content = document.querySelectorAll('.app__content-item');
|
const all_content = document.querySelectorAll('.app__content-item');
|
||||||
@@ -486,6 +486,6 @@
|
|||||||
darkOverlay.classList.remove('active');
|
darkOverlay.classList.remove('active');
|
||||||
categoryForm.classList.remove('active');
|
categoryForm.classList.remove('active');
|
||||||
});
|
});
|
||||||
</script>
|
</script> -->
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
Reference in New Issue
Block a user