-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
117 lines (94 loc) · 3.11 KB
/
script.js
File metadata and controls
117 lines (94 loc) · 3.11 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
/* Initialize Firebase */
firebase.initializeApp({
/* Fill in the following values based on your config. */
apiKey: "",
authDomain: "",
databaseURL: "",
projectId: "",
storageBucket: "",
messagingSenderId: ""
});
firebase.firestore().settings({
timestampsInSnapshots: true
});
/* Define firebase refs */
const messagesRef = firebase.firestore().collection("messages");
/* Define DOM elements */
const messageInputDOM = document.getElementById("messageInput");
const namePickerDOM= document.getElementById("namePicker");
const messagesDOM = document.getElementById("messages");
/* Define global variables */
const sessionId = btoa(Math.random()).substring(0, 16);
let userName;
/* Define helper functions */
const scrollToBottom = (element) => {
if (element) element.scrollTop = element.scrollHeight;
};
const createParagraph = (content) => {
const newParagraph = document.createElement("p");
if (content) {
const contentEl = document.createTextNode(content);
newParagraph.appendChild(contentEl);
}
return newParagraph;
};
const sendMessage = (message) => {
messagesRef.add({
message,
time: firebase.firestore.Timestamp.now(),
session: sessionId,
name: userName || "Anonymous",
});
};
const sendImage = (image) => {
messagesRef.add({
image,
time: firebase.firestore.Timestamp.now(),
session: sessionId,
name: userName || "Anonymous",
});
};
/* Setup message listener */
messagesRef.orderBy("time").onSnapshot((snapshot) => {
snapshot.docChanges().forEach((change) => {
if (change.type === "added") {
const { session, name, image, message, time } = change.doc.data();
const messageEl = document.createElement("div");
messageEl.className = `message${session === sessionId ? " own" : ""}`;
const nameEl = createParagraph(name);
nameEl.className = "name";
messageEl.appendChild(nameEl);
const messageContentEl = document.createElement("div");
messageContentEl.className = "messageContent";
if (change.doc.data().image !== undefined) {
const imageEl = document.createElement("img");
imageEl.className = "image";
imageEl.setAttribute("src", image);
imageEl.setAttribute("height", "256px");
messageContentEl.appendChild(imageEl);
}
if (change.doc.data().message !== undefined) {
const msgTextEl = createParagraph(message);
messageContentEl.appendChild(msgTextEl);
}
messageEl.appendChild(messageContentEl);
var timestampEl = createParagraph(time.toDate());
timestampEl.className = "timestamp";
messageEl.appendChild(timestampEl);
messagesDOM.appendChild(messageEl);
}
});
scrollToBottom(messagesDOM);
});
/* Setup event listeners */
namePickerDOM.addEventListener("click", () => {
userName = prompt("What's your name?").substring(0, 16);
namePickerDOM.parentNode.removeChild(namePickerDOM);
});
messageInputDOM.addEventListener("keydown", (event) => {
if (event.which === 13 || event.keyCode === 13) {
sendMessage(messageInputDOM.value);
messageInputDOM.value = "";
}
});
/* Setup Bitmoji Kit Web here */