diff options
| author | Marin Ivanov <[email protected]> | 2026-01-17 03:07:06 +0200 |
|---|---|---|
| committer | Marin Ivanov <[email protected]> | 2026-01-17 03:07:06 +0200 |
| commit | 044ad65b3e9b6169741e237d4ad04406b4875c13 (patch) | |
| tree | a54738000bb3030f3d8792490569ca88f0f69c11 /template.html | |
| parent | dcec8b701f13bd7510423985aa2e570e4b425390 (diff) | |
combine result and form into single template
Diffstat (limited to 'template.html')
| -rw-r--r-- | template.html | 238 |
1 files changed, 238 insertions, 0 deletions
diff --git a/template.html b/template.html new file mode 100644 index 0000000..c780b4b --- /dev/null +++ b/template.html @@ -0,0 +1,238 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Gloginki</title> + + <style> + :root { + --bg: #f6f8fa; + --card-bg: #ffffff; + --border: #d0d7de; + --text: #24292f; + --muted: #57606a; + --primary: #2da44e; + --primary-hover: #2c974b; + --danger: #cf222e; + --radius: 6px; + } + + * { + box-sizing: border-box; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", + Helvetica, Arial, sans-serif; + } + + body { + margin: 0; + padding: 2rem; + background: var(--bg); + color: var(--text); + } + + h1 { + margin-bottom: 1rem; + font-size: 1.6rem; + } + + .container { + max-width: 900px; + margin: 0 auto; + } + + #error { + color: var(--danger); + margin-bottom: 1rem; + font-weight: 500; + } + + .card { + background: var(--card-bg); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 1.5rem; + margin-bottom: 2rem; + } + + fieldset { + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 1rem; + margin-bottom: 1.2rem; + } + + legend { + padding: 0 0.5rem; + color: var(--muted); + font-size: 0.9rem; + } + + textarea { + width: 100%; + min-height: 250px; + resize: vertical; + padding: 0.75rem; + border-radius: var(--radius); + border: 1px solid var(--border); + font-size: 0.95rem; + } + + textarea:focus, + input:focus { + outline: none; + border-color: #0969da; + } + + input[type="file"], + input[type="text"] { + margin-top: 0.5rem; + } + + .submit-row { + display: flex; + gap: 1rem; + align-items: center; + flex-wrap: wrap; + } + + input[type="submit"] { + background: var(--primary); + color: white; + border: none; + padding: 0.6rem 1.2rem; + border-radius: var(--radius); + font-weight: 600; + cursor: pointer; + } + + input[type="submit"]:hover { + background: var(--primary-hover); + } + + /* Preview card */ + #preview-container { + background: var(--card-bg); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 1rem; + } + + #preview-container h2 { + margin-top: 0; + font-size: 1rem; + color: var(--muted); + } + + #preview { + max-width: 100%; + border-radius: var(--radius); + display: none; + } + + .hint { + font-size: 0.85rem; + color: var(--muted); + margin-top: 0.5rem; + } + </style> +</head> + +<body> + <div class="container"> + <h1>Bin-ки и глогинки.</h1> + + <div class="card"> + <div id="error"></div> + + {{if .Form }} + <form enctype="multipart/form-data" action="/" method="post"> + <fieldset> + <legend>Text Posting</legend> + <textarea name="text" placeholder="Write something..."></textarea> + <label> + Mime-Type: + <input type="text" name="text_mimetype" value="text/plain" /> + </label> + </fieldset> + + <fieldset> + <legend>File Upload</legend> + <input type="file" name="file" /> + <div class="hint">You can also paste an image directly</div> + <label> + Mime-Type: + <input type="text" name="file_mimetype" value="auto" /> + </label> + </fieldset> + + <fieldset> + <legend>Submit</legend> + <div class="submit-row"> + <input type="submit" value="Post" /> + </div> + </fieldset> + </form> + + <div id="preview-container"> + <h2>Image Preview</h2> + <img id="preview" /> + <div class="hint" id="preview-hint">Paste an image to preview it</div> + </div> + {{end}} + + {{if .TextLink }} + <fieldset> + <legend>Text Link</legend> + <a href="{{ .TextLink }}">{{ .TextLink }}</a> + </fieldset> + {{end}} + + {{if .FileLink }} + <fieldset> + <legend>File Link</legend> + <a href="{{ .FileLink }}">{{ .FileLink }}</a> + </fieldset> + {{end}} + + </div> + </div> + + {{if .Form }} + <script> + const pasteArea = document.body; + const preview = document.getElementById("preview"); + const previewHint = document.getElementById("preview-hint"); + const form = document.querySelector("form"); + + let pastedFile = null; + + pasteArea.addEventListener("paste", (event) => { + const items = event.clipboardData.items; + + for (const item of items) { + if (item.type.startsWith("image/")) { + pastedFile = item.getAsFile(); + + preview.src = URL.createObjectURL(pastedFile); + preview.style.display = "block"; + previewHint.style.display = "none"; + + event.preventDefault(); + break; + } + } + }); + + form.addEventListener("submit", () => { + if (pastedFile) { + const fileInput = form.querySelector('input[type="file"]'); + const dt = new DataTransfer(); + dt.items.add(pastedFile); + fileInput.files = dt.files; + } + }); + </script> + {{ end }} +</body> +</html> |
