GoBlog/templates/assets/js/mdpreview.js

48 lines
1.6 KiB
JavaScript

(function () {
Array.from(document.querySelectorAll('.mdpreview')).forEach(element => {
// Get preview container
let previewContainer = document.getElementById(element.dataset.preview)
if (!previewContainer) {
return
}
// Get websocket path
let wsUrl = element.dataset.previewws
if (!wsUrl) {
return
}
// Create and open websocket
let ws = new WebSocket(((window.location.protocol === "https:") ? "wss://" : "ws://") + window.location.host + wsUrl)
ws.onopen = function () {
console.log("Preview-Websocket opened")
previewContainer.classList.add('preview')
previewContainer.classList.remove('hide')
if (ws) {
ws.send(element.value)
}
}
ws.onclose = function () {
console.log("Preview-Websocket closed")
previewContainer.classList.add('hide')
previewContainer.classList.remove('preview')
previewContainer.innerHTML = ''
ws = null
}
ws.onmessage = function (evt) {
// Set preview HTML
previewContainer.innerHTML = evt.data
}
ws.onerror = function (evt) {
console.log("Preview-Websocket error: " + evt.data)
}
// Add listener
let timeout = null
element.addEventListener('input', function () {
clearTimeout(timeout)
timeout = setTimeout(function () {
if (ws) {
ws.send(element.value)
}
}, 500)
})
})
})()