<!DOCTYPE html> <html> <head> <title> <?php if (isset($_GET['action']) && $_GET['action'] == 'open') { echo $_GET['param']; } ?> </title> <link rel="manifest" href="manifest.json" /> <meta name="theme-color" content="white" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="style.css"> </style> </head> <body> <?php require 'settings.php'; if ($password && (!isset($_SERVER['PHP_AUTH_PW']) || $_SERVER['PHP_AUTH_PW'] != $password)) { header('WWW-Authenticate: Basic realm="bbn"'); header('HTTP/1.0 401 Unauthorized'); echo '<p>Access denied.</p>'; exit; } $action = ''; if (isset($_POST['action'])) $action = $_POST['action']; else if (isset($_GET['action'])) $action = $_GET['action']; $param = ''; if (isset($_GET['param'])) $param = $_GET['param']; if (isset($_POST['home'])) { $action = 'save'; } $content = ''; if ($action == 'save') { $title = $_POST['title']; $content = $_POST['content']; file_put_contents($dir . '/' . $title, $content); $previoustitle = $_POST['previoustitle']; if ($title != $previoustitle) { rename($dir . '/' . $previoustitle, $dir . '/' . $previoustitle . '.del'); } $action = 'open'; $param = $title; if (isset($_POST['home'])) { header('Location: index.php'); } } else if ($action == 'delete') { $title = $_POST['title']; rename($dir . '/' . $title, $dir . '/' . $title . '.del'); } if ($action == 'preview') { require 'libs/Parsedown.php'; $title = $_POST['title']; $content = $_POST['content']; $Parsedown = new Parsedown(); $Parsedown->setBreaksEnabled(true); echo $Parsedown->text('# ' . $title . "\r\n" . $content); } else if ($action == 'open') { $now = date("Y-m-d H.i.s", time()); if (!$param) { $param = $now; } if (!file_exists($dir . '/' . $param)) { $content = "---\r\ndate: " . substr($now, 0, 10) . "\r\ntags: \r\n---\r\n"; file_put_contents($dir . '/' . $param, $content); } else if (!$content) { $content = file_get_contents($dir . '/' . $param); } $lines = substr_count($content, "\r\n") + 1; $words = $lines + substr_count($content, " "); $rows = max(20, $lines) + 10; $length = strlen($content); echo '<form action="index.php" method="POST"> <div> <input type="submit" name="home" value="home" accesskey="h"> <select name="action"> <option value="save">save</option> <option value="delete">delete</option> <option value="preview">preview</option> </select> <input class="title" name="title" value="' . $param . '"> <input type="submit" name="go" value="go" accesskey="s"> </div> <br> <div> <textarea rows="' . $rows. '" autofocus name="content" spellcheck="false">' . $content . '</textarea> </div> <input hidden name="previoustitle" value="' . $param . '"> </form>'; $links = array(); if (preg_match_all('/\[\[(.*)\]\]/', $content, $links, PREG_SET_ORDER)) { echo '<div>Internal links:</div>'; foreach($links as $link) { echo '<div> <a href="index.php?action=open¶m=' . urlencode($link[1]) . '">' . $link[1] . '</a> </div>'; } echo '<br>'; } $links = array(); if (preg_match_all('/https:(.*)[ \r]/', $content, $links, PREG_SET_ORDER)) { echo '<div>External links:</div>'; foreach($links as $link) { echo '<div> <a target="_blank" href="https:' . $link[1] . '">https:' . $link[1] . '</a> </div>'; } echo '<br>'; } echo '<span class="grey">' . $param . ' - ' . $now . ' - ' . $length . 'c - ' . $words . 'w - ' . $lines . 'l </span>'; } else { echo '<form action="index.php" method="GET"> <select name="action"> <option ' . ($action == 'open' ? 'selected' : '') . ' value="open">open</option> <option ' . ($action == 'filter' ? 'selected' : '') . ' value="filter">filter</option> <option ' . ($action == 'search' ? 'selected' : '') . ' value="search">search</option> <option ' . ($action == 'tags' ? 'selected' : '') . ' value="tags">tags</option> </select> <input autofocus name="param" value="' . $param . '"> <input accesskey="s" type="submit" value="go"> </form>'; echo '<br>'; $files = glob($dir . '/*'); usort($files, function($a, $b) { return filemtime($b) - filemtime($a); }); foreach($files as $path) { $tags = ''; $name = basename($path); if (!str_ends_with($name, '.del') && ($action != 'filter' || str_contains($name, $param))) { if ($action == 'search' || $action == 'tags') { $content = file_get_contents($path); if (($action == 'search' && !str_contains($content, $param)) || ($action == 'tags' && !preg_match('/tags:.*' . $param . '/', $content))) { continue; } } echo '<div><a href=index.php?action=open¶m=' . urlencode($name) . '>' . $name .'</a>'; if ($action == 'tags') { $tags = array(); $hastags = preg_match_all('/tags:(.*)/', $content, $tags, PREG_SET_ORDER); if ($hastags) { $tagslist = explode(',', $tags[0][1]); echo '<span class="grey"> '; foreach ($tagslist as $tag) { $tag = trim($tag); echo('<a class="grey" href="index.php?action=tags¶m=' . $tag . '">' . $tag . '</a> '); } echo '</span>'; } } else if ($action == 'search') { $pos = strpos($content, $param); echo '<span class="grey"> <b>' . $param . '</b>' . substr($content, $pos + strlen($param), 42) . '</span>'; } echo'</div>'; } } echo '<br>'; } ?> </body> </html>