mirror of
https://github.com/nextcloud/all-in-one.git
synced 2026-05-21 10:50:10 +00:00
Merge pull request #7634 from nextcloud/auto-reload-logs
Auto-reload the log view, and scroll to bottom.
This commit is contained in:
@@ -11,6 +11,7 @@ use Psr\Http\Message\ResponseInterface as Response;
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
use AIO\Data\ConfigurationManager;
|
||||
use Slim\Psr7\NonBufferedBody;
|
||||
use Slim\Views\Twig;
|
||||
|
||||
readonly class DockerController {
|
||||
private const string TOP_CONTAINER = 'nextcloud-aio-apache';
|
||||
@@ -76,13 +77,8 @@ readonly class DockerController {
|
||||
$logs = 'Container not found.';
|
||||
}
|
||||
|
||||
$body = $response->getBody();
|
||||
$body->write($logs);
|
||||
|
||||
return $response
|
||||
->withStatus(200)
|
||||
->withHeader('Content-Type', 'text/plain; charset=utf-8')
|
||||
->withHeader('Content-Disposition', 'inline');
|
||||
$view = Twig::fromRequest($request);
|
||||
return $view->render($response, 'log.twig', ['logContent' => $logs]);
|
||||
}
|
||||
|
||||
public function StartBackupContainerBackup(Request $request, Response $response, array $args) : Response {
|
||||
|
||||
45
php/templates/log.twig
Normal file
45
php/templates/log.twig
Normal file
@@ -0,0 +1,45 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<style>
|
||||
button {
|
||||
position: fixed;
|
||||
top: 1rem;
|
||||
right: 1rem;
|
||||
font-size: 1.3rem;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
// Give the browser a short moment to render all text and calculate the scrollHeight, to avoid
|
||||
// problems with scrolling to the bottom.
|
||||
setTimeout(() => window.scrollTo(0, document.body.scrollHeight), 100);
|
||||
// Reload after a short while if the window is visible to the user.
|
||||
const reloadTimer = setTimeout(() => {
|
||||
if (document.visibilityState === 'visible') {
|
||||
location.reload()
|
||||
}
|
||||
}, 5000);
|
||||
// Provide a button that allows to disable the reloads.
|
||||
const button = document.querySelector('button');
|
||||
document.querySelector('button').addEventListener('click', (event) => {
|
||||
event.preventDefault();
|
||||
clearTimeout(reloadTimer);
|
||||
button.disabled = true;
|
||||
button.textContent = 'Reloading was disabled';
|
||||
});
|
||||
// Reload immediately if the window gets visible to the user again (unless the
|
||||
// no-reload-button had been clicked).
|
||||
document.addEventListener('visibilitychange', () => {
|
||||
if (document.visibilityState === 'visible' && button.disabled !== true) {
|
||||
location.reload();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<button>Disable auto-reloading</button>
|
||||
<pre>{{ logContent }}</pre>
|
||||
<div id="bottom"></div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user