Documentation ¶
Index ¶
Constants ¶
View Source
const Monitor = `<html>
<head>
<title>Rod Monitor - Pages</title>
<style>
body {
margin: 0;
background: #2d2c2f;
color: white;
padding: 20px;
font-family: sans-serif;
}
a {
color: white;
padding: 1em;
margin: 0.5em 0;
font-size: 1em;
text-decoration: none;
display: block;
border-radius: 0.3em;
border: 1px solid transparent;
background: #212225;
}
a:visited {
color: #c3c3c3;
}
a:hover {
background: #25272d;
border-color: #8d8d96;
}
</style>
</head>
<body>
<h3>Choose a Page to Monitor</h3>
<div id="targets"></div>
<script>
async function update() {
const list = await (await fetch('/api/pages')).json()
let html = ''
list.forEach((el) => {
html += ` + "`" + `<a href='/page/${el.targetId}' title="${el.url}">${el.title}</a>` + "`" + `
})
window.targets.innerHTML = html
setTimeout(update, 1000)
}
update()
</script>
</body>
</html>
`
Monitor for rod
View Source
const MonitorPage = `<html>
<head>
<style>
body {
margin: 0;
background: #2d2c2f;
color: #ffffff;
}
.navbar {
font-family: sans-serif;
border-bottom: 1px solid #1413158c;
display: flex;
flex-direction: row;
}
.error {
color: #ff3f3f;
background: #3e1f1f;
border-bottom: 1px solid #1413158c;
display: none;
padding: 10px;
margin: 0;
}
input {
background: transparent;
color: white;
border: none;
border: 1px solid #4f475a;
border-radius: 3px;
padding: 5px;
margin: 5px;
}
.title {
flex: 2;
}
.url {
flex: 5;
}
.rate {
flex: 1;
}
</style>
</head>
<body>
<div class="navbar">
<input
type="text"
class="title"
title="title of the remote page"
readonly
/>
<input type="text" class="url" title="url of the remote page" readonly />
<input
type="number"
class="rate"
value="0.5"
min="0"
step="0.1"
title="refresh rate (second)"
/>
</div>
<pre class="error"></pre>
<img class="screen" />
</body>
<script>
const id = location.pathname.split('/').slice(-1)[0]
const elImg = document.querySelector('.screen')
const elTitle = document.querySelector('.title')
const elUrl = document.querySelector('.url')
const elRate = document.querySelector('.rate')
const elErr = document.querySelector('.error')
document.title = ` + "`" + `Rod Monitor - ${id}` + "`" + `
async function update() {
const res = await fetch(` + "`" + `/api/page/${id}` + "`" + `)
const info = await res.json()
elTitle.value = info.title
elUrl.value = info.url
await new Promise((resolve, reject) => {
const now = new Date()
elImg.src = ` + "`" + `/screenshot/${id}?t=${now.getTime()}` + "`" + `
elImg.style.maxWidth = innerWidth + 'px'
elImg.onload = resolve
elImg.onerror = () => reject(new Error('error loading screenshots'))
})
}
async function mainLoop() {
try {
await update()
elErr.attributeStyleMap.delete('display')
} catch (err) {
elErr.style.display = 'block'
elErr.textContent = err + ''
}
setTimeout(mainLoop, parseFloat(elRate.value) * 1000)
}
mainLoop()
</script>
</html>
`
MonitorPage for rod
View Source
const MousePointer = `` /* 1518-byte string literal not displayed */
MousePointer for rod
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.