| 1 | {{define "wishlist_form.html"}}{{template "base.html" .}}{{end}} |
| 2 | {{define "title"}}{{if .Wine}}Edit{{else}}New{{end}} Wishlist Wine - Cellar{{end}} |
| 3 | {{define "content"}} |
| 4 | {{if .Error}}<p class="error">{{.Error}}</p>{{end}} |
| 5 | {{$w := .Wine}} |
| 6 | <form method="POST" enctype="multipart/form-data" |
| 7 | action="{{if $w}}/admin/wishlist/edit/{{$w.ShortID}}{{else}}/admin/wishlist/new{{end}}" |
| 8 | class="form"> |
| 9 | |
| 10 | <label for="image">image</label> |
| 11 | <div class="image-upload-row"> |
| 12 | <input type="file" id="image" name="image" accept="image/*"> |
| 13 | {{if .HasAnthropicKey}}<button type="button" id="analyze-btn" onclick="analyzeImage()">analyze</button>{{end}} |
| 14 | </div> |
| 15 | |
| 16 | <label for="name">name</label> |
| 17 | <input type="text" id="name" name="name" required value="{{if $w}}{{$w.Name}}{{end}}"> |
| 18 | |
| 19 | <label for="origin">origin</label> |
| 20 | <input type="text" id="origin" name="origin" value="{{if $w}}{{$w.Origin}}{{end}}"> |
| 21 | |
| 22 | <label for="grape">grape</label> |
| 23 | <input type="text" id="grape" name="grape" value="{{if $w}}{{$w.Grape}}{{end}}"> |
| 24 | |
| 25 | <label for="notes">notes</label> |
| 26 | <textarea id="notes" name="notes" rows="5">{{if $w}}{{$w.Notes}}{{end}}</textarea> |
| 27 | |
| 28 | <label for="background">background</label> |
| 29 | <textarea id="background" name="background" rows="5">{{if $w}}{{$w.Background}}{{end}}</textarea> |
| 30 | |
| 31 | <button type="submit">{{if $w}}update{{else}}create{{end}}</button> |
| 32 | </form> |
| 33 | |
| 34 | <script> |
| 35 | {{if .HasAnthropicKey}} |
| 36 | async function analyzeImage() { |
| 37 | var fileInput = document.getElementById('image'); |
| 38 | if (!fileInput.files.length) return; |
| 39 | var formData = new FormData(); |
| 40 | formData.append('image', fileInput.files[0]); |
| 41 | var btn = document.getElementById('analyze-btn'); |
| 42 | btn.textContent = 'analyzing...'; |
| 43 | btn.disabled = true; |
| 44 | try { |
| 45 | var res = await fetch('/admin/analyze-image', { method: 'POST', body: formData }); |
| 46 | if (res.ok) { |
| 47 | var data = await res.json(); |
| 48 | if (data.name) document.getElementById('name').value = data.name; |
| 49 | if (data.origin) document.getElementById('origin').value = data.origin; |
| 50 | if (data.grape) document.getElementById('grape').value = data.grape; |
| 51 | if (data.background) document.getElementById('background').value = data.background; |
| 52 | } |
| 53 | } catch (e) { console.error('Analysis failed:', e); } |
| 54 | finally { btn.textContent = 'analyze'; btn.disabled = false; } |
| 55 | } |
| 56 | {{end}} |
| 57 | </script> |
| 58 | {{end}} |