-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
98 lines (83 loc) · 3.91 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import Meeting from './lib/models/meeting.js';
import MeetingTemplate from './lib/views/meeting.js';
import PastMeetingsTemplate from './lib/views/pastMeetings.js'
import Warehouse from './lib/models/Warehouse.js';
document.onDOMContentLoaded = (() => {
// page elements
const attendeeInput = document.getElementById("inputAttendees");
const wageInput = document.getElementById('inputHourlyRate');
const purposeInput = document.getElementById('inputPurpose');
const costHeader = document.getElementById('costHeader');
const formInputs = document.getElementById('formInputs');
const formButtons = document.getElementById('formButtons');
// update view callbacks
const updateMeetingCost = (clear=false) => {
MeetingTemplate(meeting, clear);
if (clear) costHeader.classList.add('d-none');
};
const updatePastMeetings = () => PastMeetingsTemplate(warehouse);
// reset form & meeting
const resetMeeting = () => {
meeting.resetMeeting();
attendeeInput.value = Meeting.defaultObject['currentIncrementAttendeeCount'];
wageInput.value = Meeting.defaultObject['currentIncrementAverageWage'];
purposeInput.value = Meeting.defaultObject['purpose'];
};
// core logic
const warehouse = new Warehouse();
updatePastMeetings();
const meeting = new Meeting(attendeeInput.value, wageInput.value, warehouse, purposeInput.value);
resetMeeting();
let interval;
// button handlers
const disableButton = (buttonTarget) => document.querySelector(buttonTarget).disabled = true;
const enableButton = (buttonTarget) => document.querySelector(buttonTarget).disabled = false;
// listeners
attendeeInput.addEventListener('change', () => meeting.changeAttendeeCount(Number.parseInt(attendeeInput.value)));
wageInput.addEventListener('change', () => meeting.changeAverageWage(Number.parseFloat(wageInput.value)));
const purposeRemainingCharacterCount = document.getElementById('purposeRemainingCharacterCount');
purposeInput.addEventListener('change', () => meeting.changePurpose(purposeInput.value));
purposeInput.addEventListener('input', () => purposeRemainingCharacterCount.innerText = (purposeInput.maxLength - purposeInput.value.length).toString());
// view elements
const startButton = document.querySelector('.start-button');
startButton.addEventListener('click', (event) => {
event.preventDefault();
disableButton('.start-button');
enableButton('.stop-button');
disableButton('.reset-button');
interval = setInterval(updateMeetingCost, 100);
meeting.startMeeting();
[...document.querySelectorAll('.d-none')].map(element => element.classList.remove('d-none'));
formInputs.classList.remove('order-1');
formInputs.classList.add('order-2');
formButtons.classList.remove('order-2');
formButtons.classList.add('order-1');
});
const stopButton = document.querySelector('.stop-button');
stopButton.addEventListener('click', (event) => {
event.preventDefault();
enableButton('.start-button');
disableButton('.stop-button');
enableButton('.reset-button');
clearInterval(interval);
meeting.stopMeeting();
updateMeetingCost();
updatePastMeetings();
});
const resetButton = document.querySelector('.reset-button');
resetButton.addEventListener('click', (event) => {
event.preventDefault();
resetMeeting();
updateMeetingCost(true);
formInputs.classList.remove('order-2');
formInputs.classList.add('order-1');
formButtons.classList.remove('order-1');
formButtons.classList.add('order-2');
});
const clearButton = document.querySelector('.clear-storage');
clearButton.addEventListener('click', (event) => {
event.preventDefault();
warehouse.remove();
updatePastMeetings();
});
})();