-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsurveyor.js
117 lines (105 loc) · 3.17 KB
/
surveyor.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
/**
* index.js
* - All our useful JS goes here, awesome!
*/
class Surveyor {
constructor(obj, root) {
this.data = obj;
let style = document.createElement("style");
style.innerHTML = `.surveyor-content {
display: flex;
flex-flow: column;
justify-content: center;
align-items: center;
width: 100%;
}
.surveyor-question, .surveyor-submit {
font-size: 25px;
padding: 15px;
margin: 15px;
box-shadow: 0px 2px 10px #999;
}
.surveyor-submit {
display: none;
cursor: pointer;
}
.surveyor-answer {
font-size: 20px;
display: flex;
justify-content: center;
align-items: center;
padding: 10px;
cursor: pointer;
}
.surveyor-answer:first-child {
margin-top: 15px;
}`;
document.querySelector('head').appendChild(style);
let cont = document.createElement("div");
cont.className = "surveyor-content";
obj.forEach(question => {
let ques = document.createElement("div");
ques.className = "surveyor-question";
ques.innerHTML = question.question;
question.answers.forEach(answer => {
let answ = document.createElement("div");
answ.className = "surveyor-answer";
answ.innerHTML = answer;
ques.appendChild(answ);
});
cont.appendChild(ques);
});
let submit = document.createElement("div");
submit.className = "surveyor-submit";
submit.innerHTML = "Submit";
cont.appendChild(submit);
document.querySelector(root).appendChild(cont);
let _this = this;
[].slice
.call(cont.querySelectorAll(".surveyor-question"))
.forEach(question => {
[].slice
.call(question.querySelectorAll(".surveyor-answer"))
.forEach(answer => {
answer.addEventListener("click", () => {
[].slice.call(answer.parentNode.children).forEach(ans => {
ans.style.boxShadow = "";
});
answer.style.boxShadow = "0px 2px 10px #999";
answer.parentNode.setAttribute("data-answered", "true");
answer.parentNode.setAttribute("data-answer", answer.innerHTML);
let questions = [].slice.call(
answer.parentNode.parentNode.querySelectorAll(
".surveyor-question"
)
);
for (let i = 0; i < questions.length; i++) {
if (questions[i].getAttribute("data-answered") !== "true") {
console.log("Not all questions answered!");
return;
}
}
console.log("All questions answered!");
if (_this.completed) {
_this.completed();
}
cont.querySelector(".surveyor-submit").style.display = "flex";
});
});
});
cont.querySelector(".surveyor-submit").addEventListener("click", () => {
let results = [];
let i = 0;
[].slice
.call(cont.querySelectorAll(".surveyor-question"))
.forEach(question => {
results.push({
question: this.data[i].question,
answer: question.getAttribute("data-answer")
});
++i;
});
_this.submitted(results);
});
}
}