json_decode(file_get_contents($f), true), "link" => uri_from_file($f)]; } } else { $fy = "$f/index.json"; if (file_exists($fy) && !page_locked($fy)) $titles[] = ["c" => json_decode(file_get_contents($fy), true), "link" => uri_from_file($fy)]; } } return $titles; } function uri_from_file($file) { $name = substr($file, strrpos($file, '/')+1); if ($name == "index.json") { return substr($file, 0, -strlen($name)-1); } if (!strcmp(substr($file, strrpos($file, '.')+1), "json")) { return substr($file, 0, -5); } } function load_page($tryuri) { global $site; $mainphp = ""; $jsonf = ""; $parsef = ""; /* Looking for 3 things: a base, a content, and a template */ $tryf = "$tryuri/index"; $tryf = ltrim($tryf, '/'); if (file_exists("$tryf.json")) { $jsonf = "$tryf.json"; } else if (file_exists("$tryuri.json")) { $jsonf = "$tryuri.json"; } if (file_exists("$tryf.php")) { $mainphp = "$tryf.php"; } else if (file_exists("$tryuri.php")) { $mainphp = "$tryuri.php"; } if (file_exists("$tryf.md")) { $parsef = "$tryf.md"; } else if (file_exists("$tryuri.md")) { $parsef = "$tryuri.md"; } if (empty($mainphp) && empty($jsonf) && empty($parsef)) { load_page("404"); return; } if (empty($mainphp)) { while ($tryuri != "") { if (file_exists("$tryuri/temp.php")) { $mainphp = "$tryuri/temp.php"; goto endmain; } $tryuri = substr($tryuri, 0, strrpos($tryuri, '/')); } $mainphp = "temp.php"; } endmain: if (!empty($jsonf)) { $file = file_get_contents($jsonf); $obj = json_decode($file); } if (!empty($parsef)) { $pd = new Parsedown(); $parse = $pd->text(file_get_contents($parsef)); } $page['title'] = $obj->title ?? $site['title']; $page['desc'] = $obj->desc ?? $site['desc']; include "base.php"; $tt = microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']; echo << console.log("Generated page in " + $tt.toFixed(5) + " seconds."); END; die(); } function img_src($src, $root = "" ) { if (empty($root)) $root = $_SERVER['REQUEST_URI']; if ($root == "/") $root = ""; if ($src[0] != '/') { $write = "$root/$src"; } else $write = $src; return $write; } function page_locked($page) { if (file_exists("$page.lock" )) return true; while ($page != "" && is_dir($page)) { $files = scandir($page); if (!$files) goto CONT; for ($i = 2; $i < count($files); $i++) { if ($files[$i] == "lock") { return true; } } CONT: $page = substr($page, 0, strrpos($page, '/')); } return false; } function gen_images($src) { $path = pathinfo($src); if (in_array($path['extension'], ["jpg", "jpeg"])) { $pwebp = "$path[dirname]/$path[filename].webp"; $pe = ltrim($src, '/'); $we = ltrim($pwebp, '/'); if (!file_exists($we)) { exec("convert -quality 80 $pe $we"); } } } function make_img($src, $q=80) { $p = img_src($src); gen_images($p); $path = pathinfo($p); $pwebp = "$path[dirname]/$path[filename].webp"; echo << END; } function make_bkgd_img($src, $q=80) { $p = img_src($src); gen_images($p); $path = pathinfo($p); $pwebp = "$path[dirname]/$path[filename].webp"; $pe = ltrim($pwebp, '/'); $we = ltrim($p, '/'); return "background-image: image-set(url($pe) 1x, url($we) 1x)"; } ?>