GoBlog/templates/assets/js/mdpreview.js

48 lines
1.6 KiB
JavaScript
Raw Normal View History

2021-11-01 17:39:08 +00:00
(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 = ''
2021-11-01 17:39:08 +00:00
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
2021-11-01 17:39:08 +00:00
element.addEventListener('input', function () {
clearTimeout(timeout)
timeout = setTimeout(function () {
if (ws) {
ws.send(element.value)
}
}, 500)
2021-11-01 17:39:08 +00:00
})
})
})()