Plugin lives in Plugin/ — invisible to User Script Plugin. dev_install.sh symlinks into /usr/local/emhttp/plugins/varaverk/ for development. Pages: Monitor (5s poll), Scheduler (orchs + Advanced children, toggle + cron), Config (raw editor, host-aware file access), Docs (markdown + live $VAR substitution). API endpoints: monitor.php (JSON), scheduler.php (writes schedule.json + cron.d), config.php (writes conf files with host permission check). Includes: config.php (parser, host detection, var map), scheduler.php (job tree, cron.d rebuild), monitor.php (docker, GPU, resources, fallback, transcode), docs.php (file tree, var substitution, Parsedown renderer).
49 lines
1.6 KiB
PHP
49 lines
1.6 KiB
PHP
<?php
|
|
// Docs — markdown file discovery, $VAR substitution, and rendering.
|
|
// Requires parsedown or similar. Falls back to <pre> if not available.
|
|
|
|
define('PARSEDOWN_PATH', '/usr/local/emhttp/plugins/varaverk/lib/Parsedown.php');
|
|
|
|
function vv_docs_tree(): array {
|
|
$base = SCRIPTS_DIR;
|
|
$tree = [];
|
|
$files = new RecursiveIteratorIterator(
|
|
new RecursiveDirectoryIterator($base, FilesystemIterator::SKIP_DOTS),
|
|
RecursiveIteratorIterator::SELF_FIRST
|
|
);
|
|
foreach ($files as $f) {
|
|
if ($f->isFile() && strtolower($f->getExtension()) === 'md') {
|
|
$rel = ltrim(str_replace($base, '', $f->getPathname()), '/');
|
|
$tree[] = $rel;
|
|
}
|
|
}
|
|
sort($tree);
|
|
return $tree;
|
|
}
|
|
|
|
function vv_docs_render(string $rel, array $vars): string {
|
|
$path = SCRIPTS_DIR . '/' . $rel;
|
|
if (!file_exists($path)) return '<p>File not found.</p>';
|
|
|
|
$md = file_get_contents($path);
|
|
|
|
// Substitute `$VAR_NAME` markers with live conf values
|
|
$md = preg_replace_callback('/`\$([A-Z0-9_]+)`/', function($m) use ($vars) {
|
|
$key = $m[1];
|
|
return isset($vars[$key])
|
|
? '<code class="vv-live-var">' . htmlspecialchars($vars[$key]) . '</code>'
|
|
: '<code class="vv-unknown-var">$' . htmlspecialchars($key) . '</code>';
|
|
}, $md);
|
|
|
|
// Render markdown
|
|
if (file_exists(PARSEDOWN_PATH)) {
|
|
require_once PARSEDOWN_PATH;
|
|
$pd = new Parsedown();
|
|
$pd->setSafeMode(true);
|
|
return $pd->text($md);
|
|
}
|
|
|
|
// Fallback: plain preformatted text
|
|
return '<pre>' . htmlspecialchars($md) . '</pre>';
|
|
}
|