["<?php\nsession_start();\n\n$password="1234";\n$dir="notes\/";\n\nif(!file_exists($dir)) mkdir($dir);\n\nif(isset($_GET["logout"])){\nsession_destroy();\nheader("Location:?");\nexit;\n}\n\nif(isset($_POST["login"])){\nif($_POST["pass"]==$password){\n$_SESSION["ok"]=true;\nheader("Location:?");\nexit;\n}\n$error="Fel l\u00f6senord";\n}\n\nif(isset($_GET["api"])){\n\n$data=json_decode(file_get_contents("php:\/\/input"),true);\n$action=$_GET["api"];\n\nif($action=="save"){\n$id=time();\nfile_put_contents($dir.$id.".txt",$data["text"]);\n}\n\nif($action=="list"){\n\n$files=glob($dir."*.txt");\nrsort($files);\n\n$out=[];\n\nforeach($files as $f){\n$out[]=[\n"id"=>basename($f,".txt"),\n"text"=>htmlspecialchars(file_get_contents($f))\n];\n}\n\necho json_encode($out);\nexit;\n}\n\nif($action=="edit"){\nfile_put_contents($dir.$data["id"].".txt",$data["text"]);\n}\n\nif($action=="delete"){\nunlink($dir.$data["id"].".txt");\n}\n\nexit;\n}\n\nif(!isset($_SESSION["ok"])){\n?>\n\n<h2>Login<\/h2>\n<form method="post">\n<input type="password" name="pass">\n<button name="login">Login<\/button>\n<?php if(isset($error)) echo $error; ?>\n<\/form>\n\n<?php\nexit;\n}\n?>\n\n<!DOCTYPE html>\n<html lang="sv">\n<head>\n\n<meta charset="UTF-8">\n<meta name="viewport" content="width=device-width,initial-scale=1">\n\n<title>Voice Notes<\/title>\n\n<style>\n\nbody{\nfont-family:Arial;\nbackground:#f3f3f3;\nmax-width:700px;\nmargin:auto;\npadding:20px;\n}\n\nh1{text-align:center;}\n\ntextarea{\nwidth:100%;\nheight:150px;\nfont-size:18px;\npadding:10px;\n}\n\nbutton{\npadding:10px 14px;\nmargin:4px;\nfont-size:16px;\n}\n\n.note{\nbackground:white;\npadding:12px;\nmargin-top:10px;\nborder-radius:6px;\n}\n\n.search{\nwidth:100%;\npadding:8px;\nmargin-top:10px;\n}\n\n#status{\nfont-weight:bold;\nmargin-top:6px;\n}\n\n<\/style>\n<\/head>\n\n<body>\n\n<h1>\ud83c\udfa4 Voice Notes<\/h1>\n\n<a href="?logout=1">Logga ut<\/a>\n\n<br><br>\n\n<button onclick="startRec()">Start<\/button>\n<button onclick="stopRec()">Stop<\/button>\n<button onclick="saveNote()">Spara<\/button>\n\n<div id="status">\u26aa stoppad<\/div>\n\n<br>\n\n<textarea id="text"><\/textarea>\n\n<input class="search" id="search" placeholder="S\u00f6k..." onkeyup="filterNotes()">\n\n<div id="notes"><\/div>\n\n<script>\n\nlet recognition;\nlet listening=false;\nlet notes=[];\nlet finalText="";\n\nfunction startRec(){\n\nif(listening) return;\n\ndocument.getElementById("status").innerHTML="\ud83d\udd34 Lyssnar";\n\nconst SR = window.SpeechRecognition || window.webkitSpeechRecognition;\n\nif(!SR){\nalert("Taligenk\u00e4nning st\u00f6ds inte i denna webbl\u00e4sare");\nreturn;\n}\n\nrecognition = new SR();\n\nrecognition.lang="sv-SE";\nrecognition.continuous=true;\nrecognition.interimResults=true;\n\nrecognition.onresult=function(e){\n\nlet interim="";\n\nfor(let i=e.resultIndex;i<e.results.length;i++){\n\nlet transcript=e.results[i][0].transcript;\n\nif(e.results[i].isFinal){\nfinalText += transcript + " ";\n}else{\ninterim += transcript;\n}\n\n}\n\ndocument.getElementById("text").value = finalText + interim;\n\n};\n\nrecognition.onerror=function(e){\n\nconsole.log("speech error:",e.error);\n\n};\n\nrecognition.onend=function(){\n\nif(listening){\nrecognition.start(); \/\/ auto restart (Android fix)\n}else{\ndocument.getElementById("status").innerHTML="\u26aa stoppad";\n}\n\n};\n\nrecognition.start();\n\nlistening=true;\n\n}\n\nfunction stopRec(){\n\nlistening=false;\n\nif(recognition){\nrecognition.stop();\n}\n\ndocument.getElementById("status").innerHTML="\u26aa stoppad";\n\n}\n\nfunction saveNote(){\n\nlet text=document.getElementById("text").value;\n\nfetch("?api=save",{\nmethod:"POST",\nbody:JSON.stringify({text:text})\n})\n.then(()=>{\n\ndocument.getElementById("text").value="";\nfinalText="";\nloadNotes();\n\n});\n\n}\n\nfunction loadNotes(){\n\nfetch("?api=list")\n.then(r=>r.json())\n.then(data=>{\n\nnotes=data;\nrenderNotes(data);\n\n});\n\n}\n\nfunction renderNotes(data){\n\nlet html="";\n\ndata.forEach(n=>{\n\nhtml+=`\n<div class="note">\n<div>${n.text}<\/div>\n\n<button onclick="editNote('${n.id}','${n.text.replace(\/'\/g,"")}')">Edit<\/button>\n<button onclick="deleteNote('${n.id}')">Delete<\/button>\n\n<\/div>\n`;\n\n});\n\ndocument.getElementById("notes").innerHTML=html;\n\n}\n\nfunction editNote(id,text){\n\nlet newText=prompt("Redigera",text);\n\nfetch("?api=edit",{\nmethod:"POST",\nbody:JSON.stringify({id:id,text:newText})\n}).then(loadNotes);\n\n}\n\nfunction deleteNote(id){\n\nif(!confirm("Ta bort?")) return;\n\nfetch("?api=delete",{\nmethod:"POST",\nbody:JSON.stringify({id:id})\n}).then(loadNotes);\n\n}\n\nfunction filterNotes(){\n\nlet s=document.getElementById("search").value.toLowerCase();\n\nlet filtered=notes.filter(n=>n.text.toLowerCase().includes(s));\n\nrenderNotes(filtered);\n\n}\n\nloadNotes();\n\n<\/script>\n\n<\/body>\n<\/html>","13.58","Grej."]