Skip to content

Commit 2fe3b14

Browse files
authored
adding more files
1 parent 4f9b226 commit 2fe3b14

File tree

3 files changed

+345
-0
lines changed

3 files changed

+345
-0
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
blank {
2+
color: transparent;
3+
}
4+
5+
.sidebar .chapter-number {
6+
color: #F5F5EF;
7+
}
8+
9+
10+
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
:root {
2+
--incorrect: #983E82;
3+
--incorrect_alpha: #edaddd;
4+
--correct: #59935B;
5+
--correct_alpha: #c0edc2;
6+
--highlight: #467AAC;
7+
}
8+
9+
.webex-check {}
10+
11+
.webex-box {
12+
border: 2px solid var(--highlight);
13+
padding: 0.5em 0.25em;
14+
margin: 1em 0;
15+
border-radius: .25em;
16+
background-color: rgba(127, 127, 127, 0.05);
17+
}
18+
19+
.webex-total_correct {
20+
margin-left: 1em;
21+
}
22+
23+
.unchecked .webex-total_correct {
24+
display: none;
25+
}
26+
27+
.unchecked .webex-incorrect,
28+
.unchecked .webex-correct {
29+
border: 2px dotted grey !important;
30+
background-color: white !important;
31+
}
32+
33+
/* styles for webex-solveme */
34+
.webex-select, input.webex-solveme,
35+
.unchecked .webex-radiogroup label.webex-incorrect,
36+
.unchecked .webex-radiogroup label.webex-correct{
37+
border: 2px dotted grey;
38+
background-color: white;
39+
border-radius: 0.25em;
40+
}
41+
42+
.webex-incorrect,
43+
input.webex-solveme.webex-incorrect,
44+
.webex-radiogroup label.webex-incorrect {
45+
border: 2px dotted var(--incorrect);
46+
background-color: var(--incorrect_alpha);
47+
color: black;
48+
border-radius: 0.25em;
49+
}
50+
.webex-correct,
51+
input.webex-solveme.webex-correct,
52+
.webex-radiogroup label.webex-correct {
53+
border: 2px solid var(--correct);
54+
background-color: var(--correct_alpha);
55+
color: black;
56+
border-radius: 0.25em;
57+
}
58+
59+
.unchecked .webex-incorrect span::before,
60+
.unchecked .webex-incorrect + .webex-icon::after,
61+
.unchecked .webex-correct span::before,
62+
.unchecked .webex-correct + .webex-icon::after {
63+
content: " ";
64+
}
65+
66+
.webex-incorrect span::before,
67+
.webex-incorrect + .webex-icon::after {
68+
content: "\274C ";
69+
}
70+
71+
.webex-correct span::before,
72+
.webex-correct + .webex-icon::after {
73+
content: "\2705 ";
74+
}
75+
76+
77+
/* styles for hidden solutions */
78+
.webex-solution {
79+
height: 2.5em;
80+
overflow-y: hidden;
81+
padding: 0.5em;
82+
margin-bottom: 10px;
83+
}
84+
.webex-solution.open {
85+
height: auto;
86+
border: 2px solid var(--highlight);
87+
border-radius: 5px;
88+
}
89+
.webex-solution button, .webex-check-button {
90+
height: 2em;
91+
margin-bottom: 0.5em;
92+
border-radius: 0.5em;
93+
background-color: var(--highlight);
94+
color: white;
95+
padding: 0 0.5em;
96+
}
97+
.webex-solution pre.sourceCode {
98+
border-color: var(--correct);
99+
}
100+
101+
.webex-radiogroup label {
102+
margin-left: 2em;
103+
text-indent: -1em;
104+
padding-left: 0.5em;
105+
font-weight: 400;
106+
display: block;
107+
border: 2px solid rgba(255, 255, 255, 0);
108+
background-color: inherit;
109+
border-radius: 0.25em;
110+
}
111+
112+
.webex-radiogroup label input {
113+
position: relative;
114+
left: -1em;
115+
}
116+
117+
.webex-radiogroup {
118+
margin: 1em 0;
119+
}
120+
121+
blank {
122+
color: transparent;
123+
}
124+
125+
.sidebar .chapter-number {
126+
color: #F6CB74;
127+
}
128+
129+
Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
<script>
2+
3+
/* update total correct if #webex-total_correct exists */
4+
update_total_correct = function() {
5+
console.log("webex: update total_correct");
6+
7+
var t = document.getElementsByClassName("webex-total_correct");
8+
for (var i = 0; i < t.length; i++) {
9+
p = t[i].parentElement;
10+
var correct = p.getElementsByClassName("webex-correct").length;
11+
var solvemes = p.getElementsByClassName("webex-solveme").length;
12+
var radiogroups = p.getElementsByClassName("webex-radiogroup").length;
13+
var selects = p.getElementsByClassName("webex-select").length;
14+
15+
t[i].innerHTML = correct + " of " + (solvemes + radiogroups + selects) + " correct";
16+
}
17+
}
18+
19+
/* webex-solution button toggling function */
20+
b_func = function() {
21+
console.log("webex: toggle hide");
22+
23+
var cl = this.parentElement.classList;
24+
if (cl.contains('open')) {
25+
cl.remove("open");
26+
} else {
27+
cl.add("open");
28+
}
29+
}
30+
31+
/* check answers */
32+
check_func = function() {
33+
console.log("webex: check answers");
34+
35+
var cl = this.parentElement.classList;
36+
if (cl.contains('unchecked')) {
37+
cl.remove("unchecked");
38+
this.innerHTML = "Hide Answers";
39+
} else {
40+
cl.add("unchecked");
41+
this.innerHTML = "Show Answers";
42+
}
43+
}
44+
45+
/* function for checking solveme answers */
46+
solveme_func = function(e) {
47+
console.log("webex: check solveme");
48+
49+
var real_answers = JSON.parse(this.dataset.answer);
50+
var my_answer = this.value;
51+
var cl = this.classList;
52+
if (cl.contains("ignorecase")) {
53+
my_answer = my_answer.toLowerCase();
54+
}
55+
if (cl.contains("nospaces")) {
56+
my_answer = my_answer.replace(/ /g, "")
57+
}
58+
59+
if (my_answer == "") {
60+
cl.remove("webex-correct");
61+
cl.remove("webex-incorrect");
62+
} else if (real_answers.includes(my_answer)) {
63+
cl.add("webex-correct");
64+
cl.remove("webex-incorrect");
65+
} else {
66+
cl.add("webex-incorrect");
67+
cl.remove("webex-correct");
68+
}
69+
70+
// match numeric answers within a specified tolerance
71+
if(this.dataset.tol > 0){
72+
var tol = JSON.parse(this.dataset.tol);
73+
var matches = real_answers.map(x => Math.abs(x - my_answer) < tol)
74+
if (matches.reduce((a, b) => a + b, 0) > 0) {
75+
cl.add("webex-correct");
76+
} else {
77+
cl.remove("webex-correct");
78+
}
79+
}
80+
81+
// added regex bit
82+
if (cl.contains("regex")){
83+
answer_regex = RegExp(real_answers.join("|"))
84+
if (answer_regex.test(my_answer)) {
85+
cl.add("webex-correct");
86+
}
87+
}
88+
89+
update_total_correct();
90+
}
91+
92+
/* function for checking select answers */
93+
select_func = function(e) {
94+
console.log("webex: check select");
95+
96+
var cl = this.classList
97+
98+
/* add style */
99+
cl.remove("webex-incorrect");
100+
cl.remove("webex-correct");
101+
if (this.value == "answer") {
102+
cl.add("webex-correct");
103+
} else if (this.value != "blank") {
104+
cl.add("webex-incorrect");
105+
}
106+
107+
update_total_correct();
108+
}
109+
110+
/* function for checking radiogroups answers */
111+
radiogroups_func = function(e) {
112+
console.log("webex: check radiogroups");
113+
114+
var checked_button = document.querySelector('input[name=' + this.id + ']:checked');
115+
var cl = checked_button.parentElement.classList;
116+
var labels = checked_button.parentElement.parentElement.children;
117+
118+
/* get rid of styles */
119+
for (i = 0; i < labels.length; i++) {
120+
labels[i].classList.remove("webex-incorrect");
121+
labels[i].classList.remove("webex-correct");
122+
}
123+
124+
/* add style */
125+
if (checked_button.value == "answer") {
126+
cl.add("webex-correct");
127+
} else {
128+
cl.add("webex-incorrect");
129+
}
130+
131+
update_total_correct();
132+
}
133+
134+
window.onload = function() {
135+
console.log("webex onload");
136+
/* set up solution buttons */
137+
var buttons = document.getElementsByTagName("button");
138+
139+
for (var i = 0; i < buttons.length; i++) {
140+
if (buttons[i].parentElement.classList.contains('webex-solution')) {
141+
buttons[i].onclick = b_func;
142+
}
143+
}
144+
145+
var check_sections = document.getElementsByClassName("webex-check");
146+
console.log("check:", check_sections.length);
147+
for (var i = 0; i < check_sections.length; i++) {
148+
check_sections[i].classList.add("unchecked");
149+
150+
let btn = document.createElement("button");
151+
btn.innerHTML = "Show Answers";
152+
btn.classList.add("webex-check-button");
153+
btn.onclick = check_func;
154+
check_sections[i].appendChild(btn);
155+
156+
let spn = document.createElement("span");
157+
spn.classList.add("webex-total_correct");
158+
check_sections[i].appendChild(spn);
159+
}
160+
161+
/* set up webex-solveme inputs */
162+
var solveme = document.getElementsByClassName("webex-solveme");
163+
164+
for (var i = 0; i < solveme.length; i++) {
165+
/* make sure input boxes don't auto-anything */
166+
solveme[i].setAttribute("autocomplete","off");
167+
solveme[i].setAttribute("autocorrect", "off");
168+
solveme[i].setAttribute("autocapitalize", "off");
169+
solveme[i].setAttribute("spellcheck", "false");
170+
solveme[i].value = "";
171+
172+
/* adjust answer for ignorecase or nospaces */
173+
var cl = solveme[i].classList;
174+
var real_answer = solveme[i].dataset.answer;
175+
if (cl.contains("ignorecase")) {
176+
real_answer = real_answer.toLowerCase();
177+
}
178+
if (cl.contains("nospaces")) {
179+
real_answer = real_answer.replace(/ /g, "");
180+
}
181+
solveme[i].dataset.answer = real_answer;
182+
183+
/* attach checking function */
184+
solveme[i].onkeyup = solveme_func;
185+
solveme[i].onchange = solveme_func;
186+
187+
solveme[i].insertAdjacentHTML("afterend", " <span class='webex-icon'></span>")
188+
}
189+
190+
/* set up radiogroups */
191+
var radiogroups = document.getElementsByClassName("webex-radiogroup");
192+
for (var i = 0; i < radiogroups.length; i++) {
193+
radiogroups[i].onchange = radiogroups_func;
194+
}
195+
196+
/* set up selects */
197+
var selects = document.getElementsByClassName("webex-select");
198+
for (var i = 0; i < selects.length; i++) {
199+
selects[i].onchange = select_func;
200+
selects[i].insertAdjacentHTML("afterend", " <span class='webex-icon'></span>")
201+
}
202+
203+
update_total_correct();
204+
}
205+
206+
</script>

0 commit comments

Comments
 (0)