mirror of
https://github.com/jlelse/GoBlog
synced 2024-07-02 03:37:34 +00:00
124 lines
4.2 KiB
JavaScript
124 lines
4.2 KiB
JavaScript
(function () {
|
|
// Preview
|
|
function openPreviewWS(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, try to reopen in 1 second")
|
|
previewContainer.classList.add('hide')
|
|
previewContainer.classList.remove('preview')
|
|
previewContainer.innerHTML = ''
|
|
ws = null
|
|
setTimeout(function () { openPreviewWS(element) }, 1000);
|
|
}
|
|
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)
|
|
})
|
|
}
|
|
Array.from(document.querySelectorAll('#editor-create, #editor-update')).forEach(element => openPreviewWS(element))
|
|
|
|
// Sync state
|
|
function openSyncStateWS(element, initial) {
|
|
// Get websocket path
|
|
let wsUrl = element.dataset.syncws
|
|
if (!wsUrl) {
|
|
return
|
|
}
|
|
// Create and open websocket
|
|
let ws = new WebSocket(((window.location.protocol === "https:") ? "wss://" : "ws://") + window.location.host + wsUrl + '?initial=' + initial)
|
|
ws.onopen = function () {
|
|
console.log("Sync-Websocket opened")
|
|
}
|
|
ws.onclose = function () {
|
|
console.log("Sync-Websocket closed, try to reopen in 1 second")
|
|
ws = null
|
|
setTimeout(function () { openSyncStateWS(element, "0") }, 1000);
|
|
}
|
|
ws.onmessage = function (evt) {
|
|
element.value = evt.data
|
|
}
|
|
ws.onerror = function (evt) {
|
|
console.log("Sync-Websocket error: " + evt.data)
|
|
}
|
|
// Add listener
|
|
let timeout = null
|
|
element.addEventListener('input', function () {
|
|
clearTimeout(timeout)
|
|
timeout = setTimeout(function () {
|
|
if (ws) {
|
|
ws.send(element.value)
|
|
}
|
|
}, 100)
|
|
})
|
|
// Clear on submit
|
|
element.form.addEventListener('submit', function () {
|
|
if (ws) {
|
|
ws.send('')
|
|
}
|
|
})
|
|
}
|
|
Array.from(document.querySelectorAll('#editor-create')).forEach(element => openSyncStateWS(element, "1"))
|
|
|
|
// Geo button
|
|
let geoBtn = document.querySelector('#geobtn')
|
|
geoBtn.addEventListener('click', function () {
|
|
let status = document.querySelector('#geostatus')
|
|
status.classList.add('hide')
|
|
status.value = ''
|
|
|
|
function success(position) {
|
|
let latitude = position.coords.latitude
|
|
let longitude = position.coords.longitude
|
|
status.value = `geo:${latitude},${longitude}`
|
|
status.classList.remove('hide')
|
|
}
|
|
|
|
function error() {
|
|
alert(geoBtn.dataset.failed)
|
|
}
|
|
|
|
if (navigator.geolocation) {
|
|
navigator.geolocation.getCurrentPosition(success, error)
|
|
} else {
|
|
alert(geoBtn.dataset.notsupported)
|
|
}
|
|
})
|
|
|
|
// Template button
|
|
document.querySelector('#templatebtn').addEventListener('click', function () {
|
|
let area = document.querySelector('#editor-create')
|
|
area.value = area.dataset.template;
|
|
})
|
|
})() |