|
@@ -16,6 +16,9 @@
|
|
|
<span class="message-datetime"><%- message.datetime %></span>
|
|
<span class="message-datetime"><%- message.datetime %></span>
|
|
|
</div>
|
|
</div>
|
|
|
<% }); %>
|
|
<% }); %>
|
|
|
|
|
+ <% if (hasMoreMessages) { %>
|
|
|
|
|
+ <button id="load-more" class="button">Load More</button>
|
|
|
|
|
+ <% } %>
|
|
|
</div>
|
|
</div>
|
|
|
<form onsubmit="return onMessageSubmit(event)" class="input-form">
|
|
<form onsubmit="return onMessageSubmit(event)" class="input-form">
|
|
|
<input type="text" id="message-input" name="text" placeholder="Enter message..." class="text-input" required />
|
|
<input type="text" id="message-input" name="text" placeholder="Enter message..." class="text-input" required />
|
|
@@ -23,6 +26,7 @@
|
|
|
</form>
|
|
</form>
|
|
|
</div>
|
|
</div>
|
|
|
<script>
|
|
<script>
|
|
|
|
|
+ var firstTimestamp = new Date("<%- firstTimestamp %>").toISOString();
|
|
|
var lastTimestamp = new Date().toISOString()
|
|
var lastTimestamp = new Date().toISOString()
|
|
|
var messageList = document.getElementById("message-list")
|
|
var messageList = document.getElementById("message-list")
|
|
|
var messageInput = document.getElementById("message-input")
|
|
var messageInput = document.getElementById("message-input")
|
|
@@ -31,7 +35,7 @@
|
|
|
var timestamp = timestamps[i]
|
|
var timestamp = timestamps[i]
|
|
|
timestamp.innerText = new Date(timestamp.innerText).toLocaleString()
|
|
timestamp.innerText = new Date(timestamp.innerText).toLocaleString()
|
|
|
}
|
|
}
|
|
|
- function addMessage(message) {
|
|
|
|
|
|
|
+ function addMessage(message, before) {
|
|
|
var container = document.createElement("div")
|
|
var container = document.createElement("div")
|
|
|
var nameSpan = document.createElement("span")
|
|
var nameSpan = document.createElement("span")
|
|
|
var textSpan = document.createElement("span")
|
|
var textSpan = document.createElement("span")
|
|
@@ -46,8 +50,8 @@
|
|
|
container.appendChild(nameSpan)
|
|
container.appendChild(nameSpan)
|
|
|
container.appendChild(textSpan)
|
|
container.appendChild(textSpan)
|
|
|
container.appendChild(datetimeSpan)
|
|
container.appendChild(datetimeSpan)
|
|
|
- messageList.insertBefore(container, messageList.firstChild)
|
|
|
|
|
lastTimestamp = message.datetime
|
|
lastTimestamp = message.datetime
|
|
|
|
|
+ messageList.insertBefore(container, before)
|
|
|
}
|
|
}
|
|
|
function onMessageSubmit(event) {
|
|
function onMessageSubmit(event) {
|
|
|
event.preventDefault()
|
|
event.preventDefault()
|
|
@@ -73,7 +77,7 @@
|
|
|
var response = JSON.parse(xhr.responseText)
|
|
var response = JSON.parse(xhr.responseText)
|
|
|
for (var i = 0; i < response["messages"].length; i++) {
|
|
for (var i = 0; i < response["messages"].length; i++) {
|
|
|
var message = response["messages"][i]
|
|
var message = response["messages"][i]
|
|
|
- addMessage(message)
|
|
|
|
|
|
|
+ addMessage(message, messageList.firstChild)
|
|
|
}
|
|
}
|
|
|
pollMessages()
|
|
pollMessages()
|
|
|
}
|
|
}
|
|
@@ -82,5 +86,28 @@
|
|
|
}
|
|
}
|
|
|
xhr.send(JSON.stringify(data))
|
|
xhr.send(JSON.stringify(data))
|
|
|
}
|
|
}
|
|
|
|
|
+ function loadMoreMessages() {
|
|
|
|
|
+ var data = { timestamp: firstTimestamp }
|
|
|
|
|
+ var xhr = new XMLHttpRequest()
|
|
|
|
|
+ xhr.open("POST", "/chat/<%- title %>/messages")
|
|
|
|
|
+ xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8")
|
|
|
|
|
+ xhr.onload = function () {
|
|
|
|
|
+ var response = JSON.parse(xhr.responseText)
|
|
|
|
|
+ if (response.messages.length > 0) {
|
|
|
|
|
+ for (var i = 0; i < response["messages"].length; i++) {
|
|
|
|
|
+ var message = response["messages"][i]
|
|
|
|
|
+ addMessage(message, messageList.lastChild)
|
|
|
|
|
+ }
|
|
|
|
|
+ firstTimestamp = response.timestamp
|
|
|
|
|
+ if (!response.hasMoreMessages) {
|
|
|
|
|
+ document.getElementById("load-more").style.display = "none"
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ document.getElementById("load-more").style.display = "none"
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ xhr.send(JSON.stringify(data))
|
|
|
|
|
+ }
|
|
|
|
|
+ document.getElementById("load-more")?.addEventListener("click", loadMoreMessages)
|
|
|
pollMessages()
|
|
pollMessages()
|
|
|
</script>
|
|
</script>
|