-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdynamic.js
155 lines (135 loc) · 5.43 KB
/
dynamic.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
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
151
152
153
154
155
/*
* Author: Riley Radle
* Description:
* This file handles the dynamic styling of the website
* which requires javascript to perform.
*
* Last Edited: December 2021
*
*/
/*
* This function controls the navbar in the
* user and admin profile. It hides and shows
* information depending on which button was clicked
*
* It also handles changing some basic settings
*/
document.addEventListener('click', e => {
const src = e.target.parentElement;
const srcClass = src.className;
if (srcClass != '') {
// Get the events and settings elements
let events = document.getElementById('events-list');
let settings = document.getElementById('settings');
let users = document.getElementById('users-list');
let cancelled = document.getElementById('cancelledevent-list');
// Set the attirbutes of these elements
if (srcClass == 'events-toggler') {
// Set the attribute of this one to be shown
events.setAttribute("data-visible", true);
settings.setAttribute("data-visible", false);
users.setAttribute("data-visible", false);
cancelled.setAttribute("data-visible", false);
}
else if (srcClass == 'settings-toggler') {
// Set the current settings
settingsSetup();
settings.setAttribute("data-visible", true);
events.setAttribute("data-visible", false);
users.setAttribute("data-visible", false);
cancelled.setAttribute("data-visible", false);
}
else if (srcClass == 'users-toggler') {
users.setAttribute("data-visible", true);
events.setAttribute("data-visible", false);
settings.setAttribute("data-visible", false);
cancelled.setAttribute("data-visible", false);
}
else if (srcClass == 'cancelledevent-toggler') {
cancelled.setAttribute("data-visible", true);
users.setAttribute("data-visible", false);
events.setAttribute("data-visible", false);
settings.setAttribute("data-visible", false);
}
}
});
/* ========== Handle changing the settings ========== */
// Set defaults for the values
const defaultTheme = "#EB8B32";
const defaultForegroundColor = "#1F1F1F";
const defaultBackgroundPrimary = "#F0F0F0";
const defaultBackgroundSecondary = "#FFFFFF";
const defaultFontSize = "1rem";
// Use later when doing dark theme
const rootProperties = [
"--foreground-color", "--background-primary",
"background-secondary", "--theme1", "font-size"
];
/*
* This function changes the settings when the user
* submits a form. Called on submission of a form
*/
function changeSettings() {
let selectedColor = document.getElementById("accent-color").value;
let selectedFontSize = document.getElementById("font-size").value;
sessionStorage.setItem("--theme1", selectedColor);
sessionStorage.setItem("font-size", selectedFontSize);
}
/*
* This function assigns the setting elements to have
* the currently selected settings when they view them.
*/
function settingsSetup() {
let color = document.documentElement.style.getPropertyValue("--theme1");
let fontSize = document.documentElement.style.getPropertyValue("font-size");
// If there is no current color or font size, set to default
if (color == "") {
document.documentElement.style.setProperty("--theme1", defaultTheme);
}
if (fontSize == "") {
document.documentElement.style.setProperty("font-size", defaultFontSize);
}
// Set the current settings to be the value of the form elements in settings
document.getElementById("accent-color").setAttribute("value",
document.documentElement.style.getPropertyValue("--theme1"));
// Determine which value of the dropdown is already selected
let selectFontSize = document.getElementById("font-size");
let currentFontSize = document.documentElement.style.getPropertyValue("font-size");
let parent = document.getElementById("font-size");
let temp = parent.firstElementChild;
while (temp != null) {
if(temp.getAttribute("value") == currentFontSize)
temp.setAttribute("selected", "selected");
else
temp.removeAttribute("selected");
temp = temp.nextElementSibling;
}
}
/*
* This function loads the saved settings every time a page is loaded.
* Setting data is stored in the session rather than database for simplicity.
*/
const loadSavedSettings = function() {
// Use later when doing dark theme
// for (property in rootProperties) {
// document.documentElement.style.setProperty(
// property, sessionStorage.getItem(property)
// );
// }
let userTheme = sessionStorage.getItem("--theme1");
let userFontSize = sessionStorage.getItem("font-size");
// If they have not set anything yet, set the defaults
if (userTheme == null) {
userTheme = defaultTheme;
sessionStorage.setItem("--theme1", defaultTheme);
}
if (userFontSize == null) {
userFontSize = defaultFontSize;
sessionStorage.setItem("font-size", defaultFontSize);
}
// Apply the styles
document.documentElement.style.setProperty("--theme1", userTheme);
document.documentElement.style.setProperty("font-size", userFontSize);
}
// Load the user's settings every time that the page is loaded
window.addEventListener("load", loadSavedSettings, false);