summaryrefslogtreecommitdiffstats
path: root/prog/skovikanje
diff options
context:
space:
mode:
authorAnton Luka Šijanec <anton@sijanec.eu>2023-11-22 00:13:58 +0100
committerAnton Luka Šijanec <anton@sijanec.eu>2023-11-22 00:13:58 +0100
commitee9ea17367518b4589ee988526d17dc09686e4eb (patch)
treef0389c020413967abd46550941102d189c99accf /prog/skovikanje
parentDN04 (diff)
downloadr-ee9ea17367518b4589ee988526d17dc09686e4eb.tar
r-ee9ea17367518b4589ee988526d17dc09686e4eb.tar.gz
r-ee9ea17367518b4589ee988526d17dc09686e4eb.tar.bz2
r-ee9ea17367518b4589ee988526d17dc09686e4eb.tar.lz
r-ee9ea17367518b4589ee988526d17dc09686e4eb.tar.xz
r-ee9ea17367518b4589ee988526d17dc09686e4eb.tar.zst
r-ee9ea17367518b4589ee988526d17dc09686e4eb.zip
Diffstat (limited to 'prog/skovikanje')
-rwxr-xr-xprog/skovikanje/generiraj.sh15
-rw-r--r--prog/skovikanje/header.html5
-rw-r--r--prog/skovikanje/index.html26
-rw-r--r--prog/skovikanje/komentar.php129
-rwxr-xr-xprog/skovikanje/komentar.sh113
-rw-r--r--prog/skovikanje/komentarji/AnJicLws2
-rw-r--r--prog/skovikanje/komentarji/D1B+ra+816
-rw-r--r--prog/skovikanje/komentarji/kjsXwJwK3
-rw-r--r--prog/skovikanje/komentarji/ogGlgfcH2
-rw-r--r--prog/skovikanje/komentarji/smYGeT5A3
-rw-r--r--prog/skovikanje/komentarji/tHMD--st8
-rw-r--r--prog/skovikanje/komentarji/u9XDzZvP2
-rw-r--r--prog/skovikanje/komentarji/uXkECHXA3
-rw-r--r--prog/skovikanje/komentarji/xDAUknvS3
-rw-r--r--prog/skovikanje/makefile7
-rw-r--r--prog/skovikanje/objave/test11
-rwxr-xr-xprog/skovikanje/run.sh7
-rw-r--r--prog/skovikanje/skovik/test.html213
18 files changed, 568 insertions, 0 deletions
diff --git a/prog/skovikanje/generiraj.sh b/prog/skovikanje/generiraj.sh
new file mode 100755
index 0000000..d8f00ac
--- /dev/null
+++ b/prog/skovikanje/generiraj.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+set -xeuo pipefail
+start=$(($(date +%s%N)/1000000))
+cat header.html
+echo "<title>🦉 skovikanje :: blog nesmiselnih stvari</title>"
+echo "<h1>🦉 skovikanje :: blog nesmiselnih stvari</h2>"
+echo "<h3><a href=//splet.šijanec.eu./>nazaj na varno (na mojo spletno stran)</a></h3>"
+echo "<p>Tu so objave, ki se mi ne zdijo vredne objave na prvi strani. Za njihovo kvaliteto ne odgovarjam, je pa moč pod vsako objavo puščati komentarje.</p>"
+for file in `ls --reverse --sort=time --time=birth objave`
+do
+ echo "<hr>"
+ ./komentar.sh objava html $file 0
+ cat header.html <(./komentar.sh objava html $file 1) > skovik/$file.html
+done
+echo "<hr><small>ta stran, vključno z vsemi podstranmi s skoviki, je bila generirana dne `date` na `hostname` v $(($(date +%s%N)/1000000-$start)) ms.</small>"
diff --git a/prog/skovikanje/header.html b/prog/skovikanje/header.html
new file mode 100644
index 0000000..1c409da
--- /dev/null
+++ b/prog/skovikanje/header.html
@@ -0,0 +1,5 @@
+<style>
+.komentar {
+ margin-left: 1em;
+}
+</style>
diff --git a/prog/skovikanje/index.html b/prog/skovikanje/index.html
new file mode 100644
index 0000000..e92bb82
--- /dev/null
+++ b/prog/skovikanje/index.html
@@ -0,0 +1,26 @@
+<style>
+.komentar {
+ margin-left: 1em;
+}
+</style>
+<title>🦉 skovikanje :: blog nesmiselnih stvari</title>
+<h1>🦉 skovikanje :: blog nesmiselnih stvari</h2>
+<h3><a href=//splet.šijanec.eu./>nazaj na varno (na mojo spletno stran)</a></h3>
+<p>Tu so objave, ki se mi ne zdijo vredne objave na prvi strani. Za njihovo kvaliteto ne odgovarjam, je pa moč pod vsako objavo puščati komentarje.</p>
+<hr>
+<meta name=referrer content=unsafe-url />
+<script>function citiraj(slug) {odgovor.hidden=false;besedilo.value+='>>'+slug+'\n';} </script>
+<h1 class=naslov>Testni skovik</h1>
+<p>spisal <span class=spisal>2023-11-20</span>
+| nazadnje spremenil <span class=spremenil>2023-11-21</span>
+</p>
+<div class=besedilo>
+Kar berete, je prvi testni skovik na mojem skromnem portalu za skovike. Tu je še nekaj besedila.
+<br>
+Še ena vrstica
+<br>
+Odstavek.
+<br>
+</div>
+<h4><a href=skovik/test.html>Klikni sem za ogled celotnega besedila, komentiranje in branje komentarjev (6).</a></h4>
+<hr><small>ta stran, vključno z vsemi podstranmi s skoviki, je bila generirana dne sre 22 nov 2023 00:13:16 CET na b v 1219 ms.</small>
diff --git a/prog/skovikanje/komentar.php b/prog/skovikanje/komentar.php
new file mode 100644
index 0000000..c6939ed
--- /dev/null
+++ b/prog/skovikanje/komentar.php
@@ -0,0 +1,129 @@
+<?php
+session_start();
+$na = "";
+$koga = "";
+$ref = @str_replace("HTTP_REFERER", $_SERVER["HTTP_REFERER"], $_REQUEST["ref"]);
+if (!empty($_REQUEST["na"]))
+ $na = str_replace(" ", "+", $_REQUEST["na"]);
+if (!empty($_REQUEST["koga"]))
+ $koga = str_replace(" ", "+", $_REQUEST["koga"]);
+if (!empty($_POST["besedilo"]))
+ $_SESSION["besedilo"] = $_POST["besedilo"];
+if (!empty($_POST["geslo"]))
+ $_SESSION["geslo"] = $_POST["geslo"];
+if (!empty($_POST["avtor"]))
+ $_SESSION["avtor"] = $_POST["avtor"];
+if (!empty($_POST["antispam"]))
+ $_SESSION["antispam"] = $_POST["antispam"];
+if (str_contains($koga, "..") || str_contains($koga, "/"))
+ die("brez .. in / v id-ju komentarja!");
+$naregex = "/^[a-z0-9-+čžš]*$/i";
+if (!preg_match($naregex, $na)) {
+ die("na bi moral ustrezati $naregex");
+}
+$requesturi = $_SERVER["REQUEST_URI"];
+if ($_SERVER["REQUEST_METHOD"] == "POST" && !empty($_REQUEST["koga"]))
+ $obstojey = file_get_contents("komentarji/" . $koga);
+if ($_SERVER["REQUEST_METHOD"] == "POST" && empty($_REQUEST["login"])) {
+ if ($koga) {
+ if (!password_verify($_POST["geslo"], explode("\t", explode("\n", $obstojey)[0])[2]))
+ die("napaka! napačno geslo. <a href=$requesturi>vrnitev nazaj</a>");
+ }
+ if (strtolower($_POST["antispam"]) != "a")
+ die("napaka! v polje za onemogočanje dostopa robotom bi morali vnesti črko a. <a href=$requesturi>vrnitev nazaj</a>");
+ if (str_contains($_POST["avtor"], "\t") || str_contains($_POST["avtor"], "\n"))
+ die("napaka! polje z imenom avtorja ne bi smelo vsebovati niti tabulatorja niti presledka. <a href=$requesturi>vrnitev nazaj</a>");
+ $d = $na . "\t" . $_POST["avtor"] . "\t" . (!empty($_POST["geslo"]) ? password_hash($_POST["geslo"], PASSWORD_DEFAULT) : "") . "\n" . trim($_POST["besedilo"]) . "\n";
+ if (file_put_contents("komentarji/" . ($koga ? $koga : str_replace("/", "-", base64_encode(random_bytes(6)))), $d)) {
+ echo "komentar oddan! ";
+ if (!empty($_REQUEST["ref"]))
+ echo "<a href='" . htmlspecialchars($ref) . "'>vrnitev nazaj na diskusijo</a>";
+ $_SESSION["besedilo"] = "";
+ if ($_POST["besedilo"] == "" && $koga) {
+ echo "\n------------- KOMENTAR IZBRISAN! --------------";
+ unlink("komentarji/$koga");
+ die();
+ }
+ if (!empty($koga))
+ $obstojey = file_get_contents("komentarji/" . $koga);
+ else
+ die();
+ } else
+ die("napaka! shranjevanje ni uspelo. pišite na <a href=mailto:anton@sijanec.eu>anton@šijanec.eu</a>. <a href=$requesturi>vrnitev nazaj</a>");
+}
+$avtor = @$_SESSION["avtor"] ? htmlspecialchars($_SESSION["avtor"]) : "";
+$besedilo = @$_SESSION["besedilo"] ? htmlspecialchars($_SESSION["besedilo"]) : "";
+$geslo = @$_SESSION["geslo"] ? htmlspecialchars($_SESSION["geslo"]) : (empty($na) ? "" : trim(`pwgen 8 1`));
+if ($koga) {
+ if (empty($_POST["geslo"])) {
+?>
+<form method=post <?php if (!empty($_REQUEST["action"])) echo "action='" . @htmlspecialchars(str_replace("HTTP_REFERER", $_SERVER["HTTP_REFERER"], $_REQUEST["action"])) . "'"; ?>>
+<label for=geslo>
+geslo za urejanje:
+</label>
+<input type=password value="<?= !empty($_SESSION["geslo"]) ? htmlspecialchars($_SESSION["geslo"]) : "" ?>" name=geslo id=geslo />
+<input type=submit name=login value=login />
+</form>
+<?php
+ die();
+ }
+ if (!password_verify($_POST["geslo"], explode("\t", explode("\n", $obstojey)[0])[2]))
+ die("napaka! napačno geslo. <a href=$requesturi>vrnitev nazaj</a>");
+ $avtor = explode("\t", explode("\n", $obstojey)[0])[1];
+ $geslo = $_POST["geslo"];
+ $besedilo = implode("\n", array_slice(explode("\n", $obstojey), 1));
+}
+?>
+<?php if ($na || $koga) { ?>
+<h1><?= $koga ? "urejanje" : "komentiranje" ?></h1>
+<?= file_get_contents("header.html"); ?>
+<?= $koga ? "koga" : "na" ?>:
+<div style="border:1px solid red">
+<?php
+$tip = "komentar";
+if (@$_REQUEST["tip"] == "objava")
+ $tip = "objava";
+?>
+<?= $koga ? `./komentar.sh $tip html $koga` : `./komentar.sh $tip html $na` ?>
+</div>
+<?php } ?>
+<form method=post <?php if (!empty($_REQUEST["action"])) echo "action='" . @htmlspecialchars(str_replace("HTTP_REFERER", $_SERVER["HTTP_REFERER"], $_REQUEST["action"])) . "'"; ?>>
+<label for=avtor>
+avtor:
+</label>
+<input id=avtor name=avtor placeholder="lahko pustite prazno" value="<?= $avtor ?>" />
+<br>
+<textarea cols=40 rows=14 id=besedilo placeholder="besedilo komentarja ..." name=besedilo>
+<?= $besedilo ?>
+</textarea>
+<br>
+<div <?= $koga ? "hidden" : "" ?>>
+<label for=geslo>
+geslo za urejanje:
+</label>
+<input id=geslo name=geslo value="<?= $geslo ?>" placeholder="geslo ..." />
+</div>
+<div id=antispamdiv>
+<label for=antispam <?= @$_SESSION["antispam"] == "a" ? "hidden" : "" ?>>
+v polje vpišite črko a (za onemogočanje robotov):
+</label>
+<input id=antispam name=antispam placeholder="sem vpišite črko a" value="<?= @htmlspecialchars($_SESSION["antispam"]) ?>" />
+<script>
+ document.getElementById("antispam").value = "a";
+ document.getElementById("antispamdiv").hidden = true;
+</script>
+</div>
+<input type=submit value=<?= $koga ? "uredi!" : "komentiraj!" ?> />
+<ul>
+<li>na novi vrstici napišite <code>!http://url/do/slike</code> da vgradite sliko
+<li>začni vrstico z *, da izdelaš seznam
+<li>vrstice, ki se začno z <code>&gt;</code>, bodo obarvane zeleno
+<li>nizi <code>&lt;&lt;xxxxxxxx</code> bodo citirali komentarje
+<li>povezave zaznam avtomatično
+<?php if ($koga) {
+echo "<li><b>komentar bo izbrisan, če mu med urejanjem shranite prazno telo.</b>";
+echo "<input type=hidden name=na value=" . htmlspecialchars(explode("\t", explode("\n", $obstojey)[0])[0]) . " />";
+}
+?>
+</ul>
+</form>
diff --git a/prog/skovikanje/komentar.sh b/prog/skovikanje/komentar.sh
new file mode 100755
index 0000000..a007822
--- /dev/null
+++ b/prog/skovikanje/komentar.sh
@@ -0,0 +1,113 @@
+#!/bin/bash
+set -xeuo pipefail
+function besedilo () { # <tip -- html> <datoteka> <zaupanje - 0 za html escaping, 1 brez html escapinga> <nesting level>
+ seznam=1
+ echo "<div class=besedilo>"
+ tail -n+2 $2 | while read -r l
+ do
+ navadno=1
+ if grep ^!http <<<"$l" > /dev/null && grep -v \' <<<"$l" > /dev/null
+ then
+ echo "<img style=max-width:100% src='`sed -e s/!// <<<"$l"`' />"
+ navadno=0
+ fi
+ seznam=$(($seznam-1))
+ if grep '^*' <<<"$l" > /dev/null
+ then
+ [ $seznam -eq 0 ] && echo "<ul>"
+ seznam=2
+ navadno=0
+ fi
+ zelena=0
+ if grep '^>' <<<"$l" > /dev/null
+ then
+ echo "<span style=color:green>"
+ zelena=1
+ fi
+ [ $seznam -eq 1 ] && echo "</ul>"
+ if [ $navadno -eq 1 ]
+ then
+ if [ $3 -eq 0 ]
+ then
+ tekst=`sed -e 's/</&lt;/g' <<<"$l"`
+ else
+ tekst=$l
+ fi
+ if [ $seznam -eq 2 ]
+ then
+ tekst=`sed 's/^*/<li>/' <<<"$tekst"`
+ fi
+ if [ $4 -gt 0 ]
+ then
+ for you in `grep -Eo ">>[A-Za-z0-9+-]{8}" <<<"$l"`
+ do
+ stil="border:1px solid green"
+ if [ $(($4%2)) -eq 0 ]
+ then
+ stil="border:1px solid red"
+ fi
+ koment=`komentar $1 $(cut -d\> -f3 <<<$you) $(($4-1))`
+ echo "<details class=komentar style='$stil'><summary>`head -n1 <<<$koment`</summary>`tail -n+2 <<<$koment`</details>"
+
+ done
+ fi
+ sed -e 's,\(http[s]*://[A-Za-z0-9._~:/?#@!$&()*+,;=-]*\),<a href="\1">\1</a>,g' <<<"$tekst"
+ echo "<br>"
+ fi
+ if [ $zelena -eq 1 ]
+ then
+ echo "</span>"
+ fi
+ done
+ echo "</div>"
+}
+function komentar () { # tip id nesting-level
+ stat komentarji/$2 > /dev/null || { echo komentar ne $3 ne obstaja.; return; }
+ echo -n "<a onclick=citiraj('$2')><code>$2</code></a> <b class=avtor>$(head -n1 komentarji/$2 | cut -f2 | cut -d@ -f1 | sed -e 's/</&lt;/g')</b> "
+ echo "dne <span class=datum>`date --date @$(stat --format %W komentarji/$2)`</span> <a href=//z.4a.si/skovikanje/komentar.php?koga=$2 target=_blank>uredi</a> <a href=/skovikanje/skovik/$(head -n1 komentarji/$2 | cut -f1).html>na</a>"
+ besedilo $1 komentarji/$2 0 $3
+}
+if [ $1 = komentar ]
+then
+ komentar $2 $3 5
+fi
+if [ $1 = objava ]
+then
+ echo "<meta name=referrer content=unsafe-url />"
+ if [ $4 -eq 1 ]
+ then
+ echo "<title>`head -n1 objave/$3 | cut -f1`</title>"
+ echo "<h2><a href=..><<< nazaj</a></h2>"
+ fi
+ echo "<script>function citiraj(slug) {odgovor.hidden=false;besedilo.value+='>>'+slug+'\n';} </script>"
+ echo "<h1 class=naslov>`head -n1 objave/$3 | cut -f1`</h1>"
+ echo "<p>spisal <span class=spisal>`head -n1 objave/$3 | cut -f2`</span>"
+ if [ ! `head -n1 objave/$3 | cut -f2` = `date --iso-8601 --date @$(stat --format %Y objave/$3)` ]
+ then
+ echo "| nazadnje spremenil <span class=spremenil>`date --iso-8601 --date @$(stat --format %Y objave/$3)`</span>"
+ fi
+ echo "</p>"
+ if [ $4 -eq 1 ]
+ then
+ besedilo $2 objave/$3 1 5
+ echo "<hr><h2>komentarji</h2>"
+ komentiraj="<input id=komentiraj hidden type=button onclick='document.getElementById(&quot;odgovor&quot;).hidden=false' value=komentiraj />"
+ echo $komentiraj
+ for file in `ls --reverse --sort=time --time=birth komentarji`
+ do
+
+ grep "^$3 " komentarji/$file > /dev/null && { echo "<div class=komentar style='border:1px solid red'>"; komentar $1 $file 5; echo "</div>"; }
+ done
+ echo "<div id=odgovor>`curl --fail-with-body http://z.4a.si/skovikanje/komentar.php?action=//z.4a.si./skovikanje/komentar.php%3Fna=$3%26tip=objava%26ref=REPLACEME | sed s/REPLACEME/HTTP_REFERER/`</div>"
+ echo $komentiraj
+ echo "<script>odgovor.style='background:gray;position:fixed;right:0;bottom:0';odgovor.hidden=true;komentiraj.hidden=false;</script>"
+ else
+ besedilo $2 <(head -n4 objave/$3) 1 5
+ komentarjev=0
+ for file in `ls --reverse --sort=time --time=birth komentarji`
+ do
+ grep "^$3 " komentarji/$file > /dev/null && komentarjev=$(($komentarjev+1))
+ done
+ echo "<h4><a href=skovik/$3.html>Klikni sem za ogled celotnega besedila, komentiranje in branje komentarjev ($komentarjev).</a></h4>"
+ fi
+fi
diff --git a/prog/skovikanje/komentarji/AnJicLws b/prog/skovikanje/komentarji/AnJicLws
new file mode 100644
index 0000000..3a778b9
--- /dev/null
+++ b/prog/skovikanje/komentarji/AnJicLws
@@ -0,0 +1,2 @@
+test anton@sijanec.eu $2y$10$AfTk9cvVIDW9IrrnuMwXv.cVmlmv.YNxEQYP9rcHYFXbi9ke0Ft7W
+živjo, ne strinjam se
diff --git a/prog/skovikanje/komentarji/D1B+ra+8 b/prog/skovikanje/komentarji/D1B+ra+8
new file mode 100644
index 0000000..01ac838
--- /dev/null
+++ b/prog/skovikanje/komentarji/D1B+ra+8
@@ -0,0 +1,16 @@
+test anton@sijanec.eu $2y$10$1NcCaWB6Z4X4/Q8EZgdv7.pm.j9KPjJwmUJRgEvF2W785X16LhXnO
+AnJicLwsogGlgfcH
+>>AnJicLws
+in druge besedi
+>>ogGlgfcH
+in druge besedi
+>>u9XDzZvP
+in druge besedi
+bye
+>lol
+* seznam
+* seznam
+bye
+kaj?
+resno?
+seveda.
diff --git a/prog/skovikanje/komentarji/kjsXwJwK b/prog/skovikanje/komentarji/kjsXwJwK
new file mode 100644
index 0000000..325899e
--- /dev/null
+++ b/prog/skovikanje/komentarji/kjsXwJwK
@@ -0,0 +1,3 @@
+test anton@sijanec.eu $2y$10$4.Bd8gbW9idUSQ2gtvhVnek2YH3m.pa33Go5aGCZHoTwoG5y6SH3K
+a ugnezdeno citiranje deluje?
+>>D1B+ra+8
diff --git a/prog/skovikanje/komentarji/ogGlgfcH b/prog/skovikanje/komentarji/ogGlgfcH
new file mode 100644
index 0000000..9854e21
--- /dev/null
+++ b/prog/skovikanje/komentarji/ogGlgfcH
@@ -0,0 +1,2 @@
+test anton@sijanec.eu $2y$10$xt0tJQPCHu14L0U2eMA17eZ3QV0RVqhNfy2STM.yvlZsJAI0IEfei
+živjo, ne strinjam se
diff --git a/prog/skovikanje/komentarji/smYGeT5A b/prog/skovikanje/komentarji/smYGeT5A
new file mode 100644
index 0000000..eae113b
--- /dev/null
+++ b/prog/skovikanje/komentarji/smYGeT5A
@@ -0,0 +1,3 @@
+test anton@sijanec.eu $2y$10$PXyKUy/JxbZE1t2vDPOCTO4DE8ywi8wJgev9APy2awVPP7mrNGwd6
+asd
+urejen
diff --git a/prog/skovikanje/komentarji/tHMD--st b/prog/skovikanje/komentarji/tHMD--st
new file mode 100644
index 0000000..56ba201
--- /dev/null
+++ b/prog/skovikanje/komentarji/tHMD--st
@@ -0,0 +1,8 @@
+ anton@sijanec.eu $2y$10$aDJq.y9VKP4DVN5RroK1Ge49L1Sv9dyuDOCnWjvjy0NmM2sMOikQa
+To je prvi testni komentar.
+Urejanje komentarja!
+Še enkrat?
+Prosim, več!
+Resno?
+ne dela. asdasd
+ojča
diff --git a/prog/skovikanje/komentarji/u9XDzZvP b/prog/skovikanje/komentarji/u9XDzZvP
new file mode 100644
index 0000000..a556084
--- /dev/null
+++ b/prog/skovikanje/komentarji/u9XDzZvP
@@ -0,0 +1,2 @@
+test anton@sijanec.eu $2y$10$O04g6s5sroYww6CWq8dIpuQBwLWNkKb8cKrSW02zOnMnzWJxEAosq
+živjo, ne strinjam se
diff --git a/prog/skovikanje/komentarji/uXkECHXA b/prog/skovikanje/komentarji/uXkECHXA
new file mode 100644
index 0000000..545be7a
--- /dev/null
+++ b/prog/skovikanje/komentarji/uXkECHXA
@@ -0,0 +1,3 @@
+ anton@sijanec.eu $2y$10$2yu9PByOKfkhyCOCgfMkNeKmnE6M0Ml8Abepaj1/CHCjpaSFbbXVO
+ojla2
+urejen
diff --git a/prog/skovikanje/komentarji/xDAUknvS b/prog/skovikanje/komentarji/xDAUknvS
new file mode 100644
index 0000000..e0b2d6a
--- /dev/null
+++ b/prog/skovikanje/komentarji/xDAUknvS
@@ -0,0 +1,3 @@
+ anton@sijanec.eu $2y$10$QfoIcmO5n07B9AT2bNXr7ee9vdDGJShLoJijmMXbjcd4r.uZvee3a
+ojla
+urejanje
diff --git a/prog/skovikanje/makefile b/prog/skovikanje/makefile
new file mode 100644
index 0000000..037552e
--- /dev/null
+++ b/prog/skovikanje/makefile
@@ -0,0 +1,7 @@
+default: fetchsrc
+
+fetchsrc:
+ rsync -av z@b:~/www/skovikanje/ .
+
+
+.PHONY: default fetchsrc
diff --git a/prog/skovikanje/objave/test b/prog/skovikanje/objave/test
new file mode 100644
index 0000000..09661d5
--- /dev/null
+++ b/prog/skovikanje/objave/test
@@ -0,0 +1,11 @@
+Testni skovik 2023-11-20
+Kar berete, je prvi testni skovik na mojem skromnem portalu za skovike. Tu je še nekaj besedila.
+Še ena vrstica
+Odstavek.
+!http://upload.4a.si/d/1.jpg
+
+To zgoraj je ena slika.
+Tu spodaj pa je ena manjša aztec koda:
+!http://upload.4a.si/d/32.png
+
+Za več informacij lahko odprete https://sl.wikipedia.org/wiki/Glavna_stran -- ali pa tudi ne
diff --git a/prog/skovikanje/run.sh b/prog/skovikanje/run.sh
new file mode 100755
index 0000000..120748d
--- /dev/null
+++ b/prog/skovikanje/run.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+while :
+do
+./generiraj.sh > index.html
+inotifywait -re modify .
+sleep .1
+done
diff --git a/prog/skovikanje/skovik/test.html b/prog/skovikanje/skovik/test.html
new file mode 100644
index 0000000..a9f8628
--- /dev/null
+++ b/prog/skovikanje/skovik/test.html
@@ -0,0 +1,213 @@
+<style>
+.komentar {
+ margin-left: 1em;
+}
+</style>
+<meta name=referrer content=unsafe-url />
+<title>Testni skovik</title>
+<h2><a href=..><<< nazaj</a></h2>
+<script>function citiraj(slug) {odgovor.hidden=false;besedilo.value+='>>'+slug+'\n';} </script>
+<h1 class=naslov>Testni skovik</h1>
+<p>spisal <span class=spisal>2023-11-20</span>
+| nazadnje spremenil <span class=spremenil>2023-11-21</span>
+</p>
+<div class=besedilo>
+Kar berete, je prvi testni skovik na mojem skromnem portalu za skovike. Tu je še nekaj besedila.
+<br>
+Še ena vrstica
+<br>
+Odstavek.
+<br>
+<img style=max-width:100% src='http://upload.4a.si/d/1.jpg' />
+
+<br>
+To zgoraj je ena slika.
+<br>
+Tu spodaj pa je ena manjša aztec koda:
+<br>
+<img style=max-width:100% src='http://upload.4a.si/d/32.png' />
+
+<br>
+Za več informacij lahko odprete <a href="https://sl.wikipedia.org/wiki/Glavna_stran">https://sl.wikipedia.org/wiki/Glavna_stran</a> -- ali pa tudi ne
+<br>
+</div>
+<hr><h2>komentarji</h2>
+<input id=komentiraj hidden type=button onclick='document.getElementById(&quot;odgovor&quot;).hidden=false' value=komentiraj />
+<div class=komentar style='border:1px solid red'>
+<a onclick=citiraj('AnJicLws')><code>AnJicLws</code></a> <b class=avtor>anton</b> dne <span class=datum>tor 21 nov 2023 22:42:16 CET</span> <a href=//z.4a.si/skovikanje/komentar.php?koga=AnJicLws target=_blank>uredi</a> <a href=/skovikanje/skovik/test.html>na</a>
+<div class=besedilo>
+živjo, ne strinjam se
+<br>
+</div>
+</div>
+<div class=komentar style='border:1px solid red'>
+<a onclick=citiraj('ogGlgfcH')><code>ogGlgfcH</code></a> <b class=avtor>anton</b> dne <span class=datum>tor 21 nov 2023 22:45:19 CET</span> <a href=//z.4a.si/skovikanje/komentar.php?koga=ogGlgfcH target=_blank>uredi</a> <a href=/skovikanje/skovik/test.html>na</a>
+<div class=besedilo>
+živjo, ne strinjam se
+<br>
+</div>
+</div>
+<div class=komentar style='border:1px solid red'>
+<a onclick=citiraj('u9XDzZvP')><code>u9XDzZvP</code></a> <b class=avtor>anton</b> dne <span class=datum>tor 21 nov 2023 22:45:28 CET</span> <a href=//z.4a.si/skovikanje/komentar.php?koga=u9XDzZvP target=_blank>uredi</a> <a href=/skovikanje/skovik/test.html>na</a>
+<div class=besedilo>
+živjo, ne strinjam se
+<br>
+</div>
+</div>
+<div class=komentar style='border:1px solid red'>
+<a onclick=citiraj('smYGeT5A')><code>smYGeT5A</code></a> <b class=avtor>anton</b> dne <span class=datum>tor 21 nov 2023 22:50:21 CET</span> <a href=//z.4a.si/skovikanje/komentar.php?koga=smYGeT5A target=_blank>uredi</a> <a href=/skovikanje/skovik/test.html>na</a>
+<div class=besedilo>
+asd
+<br>
+urejen
+<br>
+</div>
+</div>
+<div class=komentar style='border:1px solid red'>
+<a onclick=citiraj('D1B+ra+8')><code>D1B+ra+8</code></a> <b class=avtor>anton</b> dne <span class=datum>tor 21 nov 2023 23:16:37 CET</span> <a href=//z.4a.si/skovikanje/komentar.php?koga=D1B+ra+8 target=_blank>uredi</a> <a href=/skovikanje/skovik/test.html>na</a>
+<div class=besedilo>
+AnJicLwsogGlgfcH
+<br>
+<span style=color:green>
+<details class=komentar style='border:1px solid green'><summary><a onclick=citiraj('AnJicLws')><code>AnJicLws</code></a> <b class=avtor>anton</b> dne <span class=datum>tor 21 nov 2023 22:42:16 CET</span> <a href=//z.4a.si/skovikanje/komentar.php?koga=AnJicLws target=_blank>uredi</a> <a href=/skovikanje/skovik/test.html>na</a></summary><div class=besedilo>
+živjo, ne strinjam se
+<br>
+</div></details>
+>>AnJicLws
+<br>
+</span>
+in druge besedi
+<br>
+<span style=color:green>
+<details class=komentar style='border:1px solid green'><summary><a onclick=citiraj('ogGlgfcH')><code>ogGlgfcH</code></a> <b class=avtor>anton</b> dne <span class=datum>tor 21 nov 2023 22:45:19 CET</span> <a href=//z.4a.si/skovikanje/komentar.php?koga=ogGlgfcH target=_blank>uredi</a> <a href=/skovikanje/skovik/test.html>na</a></summary><div class=besedilo>
+živjo, ne strinjam se
+<br>
+</div></details>
+>>ogGlgfcH
+<br>
+</span>
+in druge besedi
+<br>
+<span style=color:green>
+<details class=komentar style='border:1px solid green'><summary><a onclick=citiraj('u9XDzZvP')><code>u9XDzZvP</code></a> <b class=avtor>anton</b> dne <span class=datum>tor 21 nov 2023 22:45:28 CET</span> <a href=//z.4a.si/skovikanje/komentar.php?koga=u9XDzZvP target=_blank>uredi</a> <a href=/skovikanje/skovik/test.html>na</a></summary><div class=besedilo>
+živjo, ne strinjam se
+<br>
+</div></details>
+>>u9XDzZvP
+<br>
+</span>
+in druge besedi
+<br>
+bye
+<br>
+<span style=color:green>
+>lol
+<br>
+</span>
+</ul>
+bye
+<br>
+kaj?
+<br>
+resno?
+<br>
+seveda.
+<br>
+</div>
+</div>
+<div class=komentar style='border:1px solid red'>
+<a onclick=citiraj('kjsXwJwK')><code>kjsXwJwK</code></a> <b class=avtor>anton</b> dne <span class=datum>tor 21 nov 2023 23:50:25 CET</span> <a href=//z.4a.si/skovikanje/komentar.php?koga=kjsXwJwK target=_blank>uredi</a> <a href=/skovikanje/skovik/test.html>na</a>
+<div class=besedilo>
+a ugnezdeno citiranje deluje?
+<br>
+<span style=color:green>
+<details class=komentar style='border:1px solid green'><summary><a onclick=citiraj('D1B+ra+8')><code>D1B+ra+8</code></a> <b class=avtor>anton</b> dne <span class=datum>tor 21 nov 2023 23:16:37 CET</span> <a href=//z.4a.si/skovikanje/komentar.php?koga=D1B+ra+8 target=_blank>uredi</a> <a href=/skovikanje/skovik/test.html>na</a></summary><div class=besedilo>
+AnJicLwsogGlgfcH
+<br>
+<span style=color:green>
+<details class=komentar style='border:1px solid red'><summary><a onclick=citiraj('AnJicLws')><code>AnJicLws</code></a> <b class=avtor>anton</b> dne <span class=datum>tor 21 nov 2023 22:42:16 CET</span> <a href=//z.4a.si/skovikanje/komentar.php?koga=AnJicLws target=_blank>uredi</a> <a href=/skovikanje/skovik/test.html>na</a></summary><div class=besedilo>
+živjo, ne strinjam se
+<br>
+</div></details>
+>>AnJicLws
+<br>
+</span>
+in druge besedi
+<br>
+<span style=color:green>
+<details class=komentar style='border:1px solid red'><summary><a onclick=citiraj('ogGlgfcH')><code>ogGlgfcH</code></a> <b class=avtor>anton</b> dne <span class=datum>tor 21 nov 2023 22:45:19 CET</span> <a href=//z.4a.si/skovikanje/komentar.php?koga=ogGlgfcH target=_blank>uredi</a> <a href=/skovikanje/skovik/test.html>na</a></summary><div class=besedilo>
+živjo, ne strinjam se
+<br>
+</div></details>
+>>ogGlgfcH
+<br>
+</span>
+in druge besedi
+<br>
+<span style=color:green>
+<details class=komentar style='border:1px solid red'><summary><a onclick=citiraj('u9XDzZvP')><code>u9XDzZvP</code></a> <b class=avtor>anton</b> dne <span class=datum>tor 21 nov 2023 22:45:28 CET</span> <a href=//z.4a.si/skovikanje/komentar.php?koga=u9XDzZvP target=_blank>uredi</a> <a href=/skovikanje/skovik/test.html>na</a></summary><div class=besedilo>
+živjo, ne strinjam se
+<br>
+</div></details>
+>>u9XDzZvP
+<br>
+</span>
+in druge besedi
+<br>
+bye
+<br>
+<span style=color:green>
+>lol
+<br>
+</span>
+</ul>
+bye
+<br>
+kaj?
+<br>
+resno?
+<br>
+seveda.
+<br>
+</div></details>
+>>D1B+ra+8
+<br>
+</span>
+</div>
+</div>
+<div id=odgovor><form method=post action='//z.4a.si./skovikanje/komentar.php?na=test&amp;tip=objava&amp;ref=HTTP_REFERER'>
+<label for=avtor>
+avtor:
+</label>
+<input id=avtor name=avtor placeholder="lahko pustite prazno" value="" />
+<br>
+<textarea cols=40 rows=14 id=besedilo placeholder="besedilo komentarja ..." name=besedilo>
+</textarea>
+<br>
+<div >
+<label for=geslo>
+geslo za urejanje:
+</label>
+<input id=geslo name=geslo value="" placeholder="geslo ..." />
+</div>
+<div id=antispamdiv>
+<label for=antispam >
+v polje vpišite črko a (za onemogočanje robotov):
+</label>
+<input id=antispam name=antispam placeholder="sem vpišite črko a" value="" />
+<script>
+ document.getElementById("antispam").value = "a";
+ document.getElementById("antispamdiv").hidden = true;
+</script>
+</div>
+<input type=submit value=komentiraj! />
+<ul>
+<li>na novi vrstici napišite <code>!http://url/do/slike</code> da vgradite sliko
+<li>začni vrstico z *, da izdelaš seznam
+<li>vrstice, ki se začno z <code>&gt;</code>, bodo obarvane zeleno
+<li>nizi <code>&lt;&lt;xxxxxxxx</code> bodo citirali komentarje
+<li>povezave zaznam avtomatično
+</ul>
+</form></div>
+<input id=komentiraj hidden type=button onclick='document.getElementById(&quot;odgovor&quot;).hidden=false' value=komentiraj />
+<script>odgovor.style='background:gray;position:fixed;right:0;bottom:0';odgovor.hidden=true;komentiraj.hidden=false;</script>