apps/cellar/templates/wishlist_form.html 2.4 K raw
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}}