-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
150 lines (138 loc) · 4.86 KB
/
script.js
File metadata and controls
150 lines (138 loc) · 4.86 KB
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/*==========================================================================
----------------------- Changing Theme Colors -------------------------
============================================================================*/
const root = document.documentElement;
const themeControlsContainer = document.querySelector(
".theme-controls-container"
);
let colorSchemes = {
theme1: `
--main-background: hsl(222, 26%, 31%);
--secondary-background: hsl(223, 31%, 20%);
--screen-background: hsl(224, 36%, 15%);
--button-other-background: hsl(225, 21%, 49%);
--button-other-shadow: hsl(224, 28%, 35%);
--button-equals-background: hsl(6, 63%, 50%);
--button-equals-shadow: hsl(6, 70%, 34%);
--button-main-background: hsl(30, 25%, 89%);
--button-main-shadow: hsl(28, 16%, 65%);
--text-main: hsl(221, 14%, 31%);
--text-other: #fff;
--text-equals: #fff;
--text-headers: #fff;`,
theme2: `
--main-background: hsl(0, 0%, 90%);
--secondary-background: hsl(0, 5%, 81%);
--screen-background: hsl(0, 0%, 93%);
--button-other-background: hsl(185, 42%, 37%);
--button-other-shadow: hsl(185, 58%, 25%);
--button-equals-background: hsl(25, 98%, 40%);
--button-equals-shadow: hsl(25, 99%, 27%);
--button-main-background: hsl(45, 7%, 89%);
--button-main-shadow: hsl(35, 11%, 61%);
--text-main: hsl(60, 10%, 19%);
--text-other: #fff;
--text-equals: #fff;
--text-headers: hsl(60, 10%, 19%);`,
theme3: `
--main-background: hsl(268, 75%, 9%);
--secondary-background: hsl(268, 71%, 12%);
--screen-background: hsl(268, 71%, 12%);
--button-other-background: hsl(281, 89%, 26%);
--button-other-shadow: hsl(285, 91%, 52%);
--button-equals-background: hsl(176, 100%, 44%);
--button-equals-shadow: hsl(177, 92%, 70%);
--button-main-background: hsl(268, 47%, 21%);
--button-main-shadow: hsl(290, 70%, 36%);
--text-main: hsl(52, 100%, 62%);
--text-other: #fff;
--text-equals: hsl(198, 20%, 13%);
--text-headers: hsl(52, 100%, 62%);`,
};
//checked for saved theme in local storage
let savedTheme = localStorage.getItem("theme");
if (savedTheme) {
//if saved theme apply colors
root.style.cssText = colorSchemes[savedTheme];
document.getElementById(`${savedTheme}`).checked = true;
} else {
//set color theme to browser settings
if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
root.style.cssText = colorSchemes.theme3;
document.getElementById("theme3").checked = true;
} else {
root.style.cssText = colorSchemes.theme2;
document.getElementById("theme2").checked = true;
}
}
//Change theme colors on click
themeControlsContainer.addEventListener("click", (e) => {
root.style.cssText = colorSchemes[e.target.id];
localStorage.setItem("theme", `${e.target.id}`);
});
/*==========================================================================
------------------------ Calculator Workings ---------------------------
============================================================================*/
const screen = document.querySelector(".screen-container span");
const screenContainer = document.querySelector(".screen-container");
const calculatorButtonsContainer = document.querySelector(
".main-calculator-container"
);
let currentSum = 0;
let currentArithmetic = null;
calculatorButtonsContainer.addEventListener("click", (e) => {
let click = e.target.innerHTML; //get current button clicked
/**
* @description Take current number on screen and do selected arithmetic
* @Param screen.innerHTML = number currently shown on calculator screen
*/
const doArithmetic = () => {
let number = parseFloat(screen.innerHTML);
switch (currentArithmetic) {
case "+":
currentSum += number;
break;
case "-":
currentSum -= number;
break;
case "x":
currentSum = number * currentSum;
break;
case "/":
currentSum = currentSum / number;
break;
default:
if (currentSum === 0) currentSum += number; //if first number entered into calculator add to currentSum
break;
}
};
if (/^\d$/.test(click)) {
//test for digit
if (screen.innerHTML === "0") {
screen.innerHTML = click;
} else {
screen.innerHTML = screen.innerHTML.concat(click);
}
} else if (click === ".") {
screen.innerHTML = screen.innerHTML.concat(click);
} else if (click === "=") {
doArithmetic();
currentArithmetic = null;
screen.innerHTML = currentSum;
} else if (click === "DEL") {
if (screen.innerHTML.length <= 1) {
screen.innerHTML = 0;
} else {
screen.innerHTML = screen.innerHTML.slice(0, -1);
}
} else if (click === "RESET") {
currentArithmetic = null;
currentSum = 0;
screen.innerHTML = 0;
} else if (click.length === 1) {
//only run if click occurs on button
doArithmetic();
currentArithmetic = click;
screen.innerHTML = 0;
}
});