Break code into separate scripts, no webpack
- Broke up app.js into 5 scripts - We have to manually include each script in index.html - We have to pay attention to the order they load in
This commit is contained in:
parent
b96a9dbce0
commit
dd54924933
@ -39,5 +39,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<img src="./assets/webpack.svg" />
|
<img src="./assets/webpack.svg" />
|
||||||
</body>
|
</body>
|
||||||
<script src="./src/app.js"></script>
|
<script src="./src/app/alert.service.js"></script>
|
||||||
|
<script src="./src/app/component.service.js"></script>
|
||||||
|
<script src="./src/app/utils/inputs-are-valid.js"></script>
|
||||||
|
<script src="./src/app/utils/parse-inputs.js"></script>
|
||||||
|
<script src="./src/app/app.js"></script>
|
||||||
</html>
|
</html>
|
||||||
|
44
src/app.js
44
src/app.js
@ -1,44 +0,0 @@
|
|||||||
const numberOneInput = document.getElementById("numberOne");
|
|
||||||
const numberTwoInput = document.getElementById("numberTwo");
|
|
||||||
const addValuesButton = document.getElementById("addValues");
|
|
||||||
const resultDiv = document.getElementById("result");
|
|
||||||
const errorBox = document.getElementById("error");
|
|
||||||
|
|
||||||
const parseInputs = (...input) => {
|
|
||||||
return input.map(str => parseInt(str));
|
|
||||||
};
|
|
||||||
|
|
||||||
const inputsAreValid = (...input) => {
|
|
||||||
return input.every(num => typeof num === "number" && !isNaN(num));
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleAdditionError = (inputs, numbers) => {
|
|
||||||
const fullMessage = inputs.reduce((message, str, index) => {
|
|
||||||
if (inputsAreValid(numbers[index])) {
|
|
||||||
return message + "";
|
|
||||||
} else {
|
|
||||||
return message + `${str} is not a number. `;
|
|
||||||
}
|
|
||||||
}, "Please enter two valid numbers! ");
|
|
||||||
|
|
||||||
errorBox.classList.remove("invisible");
|
|
||||||
errorBox.innerText = fullMessage;
|
|
||||||
};
|
|
||||||
|
|
||||||
const hideErrors = () => {
|
|
||||||
errorBox.classList.add("invisible");
|
|
||||||
};
|
|
||||||
|
|
||||||
hideErrors();
|
|
||||||
addValuesButton.addEventListener("click", () => {
|
|
||||||
hideErrors();
|
|
||||||
const inputs = [numberOneInput.value, numberTwoInput.value];
|
|
||||||
const parsedInputs = parseInputs(...inputs);
|
|
||||||
if (inputsAreValid(...parsedInputs)) {
|
|
||||||
const [numA, numB] = parsedInputs;
|
|
||||||
resultDiv.innerText = numA + numB;
|
|
||||||
} else {
|
|
||||||
resultDiv.innerText = "";
|
|
||||||
handleAdditionError(inputs, parsedInputs);
|
|
||||||
}
|
|
||||||
});
|
|
22
src/app/alert.service.js
Normal file
22
src/app/alert.service.js
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
class AlertService {
|
||||||
|
constructor() {
|
||||||
|
this.errorBox = document.getElementById("error");
|
||||||
|
}
|
||||||
|
|
||||||
|
handleAdditionError(inputs, numbers) {
|
||||||
|
const fullMessage = inputs.reduce((message, str, index) => {
|
||||||
|
if (inputsAreValid(numbers[index])) {
|
||||||
|
return message + "";
|
||||||
|
} else {
|
||||||
|
return message + `${str} is not a number. `;
|
||||||
|
}
|
||||||
|
}, "Please enter two valid numbers! ");
|
||||||
|
|
||||||
|
this.errorBox.classList.remove("invisible");
|
||||||
|
this.errorBox.innerText = fullMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
hideErrors() {
|
||||||
|
this.errorBox.classList.add("invisible");
|
||||||
|
}
|
||||||
|
}
|
19
src/app/app.js
Normal file
19
src/app/app.js
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
const alertService = new AlertService();
|
||||||
|
const componentService = new ComponentService();
|
||||||
|
const run = (alertService, componentService) => {
|
||||||
|
alertService.hideErrors();
|
||||||
|
|
||||||
|
componentService.onClick(() => {
|
||||||
|
alertService.hideErrors();
|
||||||
|
const inputs = componentService.getInputs();
|
||||||
|
const parsedInputs = parseInputs(...inputs);
|
||||||
|
if (inputsAreValid(...parsedInputs)) {
|
||||||
|
const [numA, numB] = parsedInputs;
|
||||||
|
componentService.setResult(numA + numB);
|
||||||
|
} else {
|
||||||
|
componentService.setResult("");
|
||||||
|
alertService.handleAdditionError(inputs, parsedInputs);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
run(alertService, componentService);
|
20
src/app/component.service.js
Normal file
20
src/app/component.service.js
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
class ComponentService {
|
||||||
|
constructor() {
|
||||||
|
this.numberOneInput = document.getElementById("numberOne");
|
||||||
|
this.numberTwoInput = document.getElementById("numberTwo");
|
||||||
|
this.addValuesButton = document.getElementById("addValues");
|
||||||
|
this.resultDiv = document.getElementById("result");
|
||||||
|
}
|
||||||
|
|
||||||
|
getInputs() {
|
||||||
|
return [this.numberOneInput.value, this.numberTwoInput.value];
|
||||||
|
}
|
||||||
|
|
||||||
|
setResult(str) {
|
||||||
|
this.resultDiv.innerText = str;
|
||||||
|
}
|
||||||
|
|
||||||
|
onClick(cb) {
|
||||||
|
this.addValuesButton.addEventListener("click", cb);
|
||||||
|
}
|
||||||
|
}
|
3
src/app/utils/inputs-are-valid.js
Normal file
3
src/app/utils/inputs-are-valid.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
const inputsAreValid = (...input) => {
|
||||||
|
return input.every(num => typeof num === "number" && !isNaN(num));
|
||||||
|
};
|
3
src/app/utils/parse-inputs.js
Normal file
3
src/app/utils/parse-inputs.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
const parseInputs = (...input) => {
|
||||||
|
return input.map(str => parseInt(str));
|
||||||
|
};
|
Loading…
x
Reference in New Issue
Block a user