person-form.html 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. {% extends "base.html" %}
  2. {% block title %}{% if action == 'add' %}Add Person{% else %}Edit {{ person.name }}{% endif %} - astro-mcp{% endblock %}
  3. {% block content %}
  4. <h1>{% if action == 'add' %}Add Person{% else %}Edit {{ person.name }}{% endif %}</h1>
  5. <div class="toolbar">
  6. {% if action == 'edit' %}
  7. <a href="/dashboard/persons/{{ person.id }}" class="btn btn-ghost">← Back</a>
  8. {% else %}
  9. <a href="/dashboard/persons" class="btn btn-ghost">← Back</a>
  10. {% endif %}
  11. </div>
  12. <form method="post"
  13. {% if action == 'add' %}
  14. action="/dashboard/persons"
  15. {% else %}
  16. action="/dashboard/persons/{{ person.id }}"
  17. {% endif %}
  18. >
  19. <div class="card">
  20. <h2>Identity</h2>
  21. <div class="form-row">
  22. <div class="form-group">
  23. <label for="name">Full Name *</label>
  24. <input type="text" id="name" name="name" required
  25. value="{{ person.name if person else '' }}">
  26. </div>
  27. <div class="form-group">
  28. <label for="nickname">Nickname</label>
  29. <input type="text" id="nickname" name="nickname"
  30. value="{{ person.nickname if person else '' }}">
  31. <div class="form-hint">Short name for quick lookup</div>
  32. </div>
  33. </div>
  34. <div class="form-group">
  35. <label for="description">Description</label>
  36. <input type="text" id="description" name="description"
  37. value="{{ person.description if person else '' }}"
  38. placeholder="e.g. My sister, Client A, Famous person...">
  39. </div>
  40. <div class="form-row">
  41. <div class="form-group">
  42. <label for="gender">Gender</label>
  43. <select id="gender" name="gender">
  44. <option value="" {% if not person or not person.gender %}selected{% endif %}>—</option>
  45. <option value="male" {% if person and person.gender == 'male' %}selected{% endif %}>male</option>
  46. <option value="female" {% if person and person.gender == 'female' %}selected{% endif %}>female</option>
  47. <option value="other" {% if person and person.gender == 'other' %}selected{% endif %}>other</option>
  48. </select>
  49. </div>
  50. <div class="form-group">
  51. <label for="alive">Status</label>
  52. <select id="alive" name="alive">
  53. <option value="true" {% if not person or person.alive %}selected{% endif %}>Alive</option>
  54. <option value="false" {% if person and not person.alive %}selected{% endif %}>Deceased</option>
  55. </select>
  56. </div>
  57. <div class="form-group">
  58. <label for="private">Visibility</label>
  59. <select id="private" name="private">
  60. <option value="false" {% if not person or not person.private %}selected{% endif %}>Visible</option>
  61. <option value="true" {% if person and person.private %}selected{% endif %}>Private</option>
  62. </select>
  63. </div>
  64. </div>
  65. </div>
  66. <div class="card">
  67. <h2>Birth Data *</h2>
  68. <div class="form-row">
  69. <div class="form-group">
  70. <label for="birth_datetime">Birth Datetime *</label>
  71. <input type="text" id="birth_datetime" name="birth_datetime" required
  72. value="{{ person.birth_datetime if person else '' }}"
  73. placeholder="2000-01-01T12:00:00+01:00">
  74. <div class="form-hint">ISO 8601 with timezone, e.g. 2000-01-01T12:00:00+01:00</div>
  75. </div>
  76. <div class="form-group">
  77. <label for="birthplace">Birthplace</label>
  78. <input type="text" id="birthplace" name="birthplace"
  79. value="{{ person.birthplace if person else '' }}"
  80. placeholder="e.g. Graz, Austria">
  81. </div>
  82. </div>
  83. <div class="form-row">
  84. <div class="form-group">
  85. <label for="latitude">Latitude *</label>
  86. <input type="number" id="latitude" name="latitude" step="any" required
  87. value="{{ person.latitude if person else '' }}"
  88. placeholder="47.07">
  89. </div>
  90. <div class="form-group">
  91. <label for="longitude">Longitude *</label>
  92. <input type="number" id="longitude" name="longitude" step="any" required
  93. value="{{ person.longitude if person else '' }}"
  94. placeholder="15.42">
  95. </div>
  96. <div class="form-group">
  97. <label for="elevation">Elevation (m)</label>
  98. <input type="number" id="elevation" name="elevation" step="any"
  99. value="{{ person.elevation if person else '0' }}">
  100. </div>
  101. </div>
  102. <div class="form-row">
  103. <div class="form-group">
  104. <label for="tz">Timezone</label>
  105. <input type="text" id="tz" name="tz"
  106. value="{{ person.timezone if person else '' }}"
  107. placeholder="e.g. Europe/Vienna">
  108. <div class="form-hint">IANA timezone name</div>
  109. </div>
  110. <div class="form-group">
  111. <label for="birth_time_known">Birth Time Known?</label>
  112. <select id="birth_time_known" name="birth_time_known">
  113. <option value="true" {% if not person or person.birth_time_known %}selected{% endif %}>Yes, accurate</option>
  114. <option value="false" {% if person and not person.birth_time_known %}selected{% endif %}>Unknown / approximate</option>
  115. </select>
  116. </div>
  117. </div>
  118. </div>
  119. <div class="card">
  120. <h2>Notes</h2>
  121. <div class="form-group">
  122. <textarea id="notes" name="notes"
  123. placeholder="Freeform notes about this person..."
  124. >{{ person.notes if person else '' }}</textarea>
  125. </div>
  126. </div>
  127. <div class="form-actions">
  128. <button type="submit" class="btn btn-primary">
  129. {% if action == 'add' %}Add Person{% else %}Save Changes{% endif %}
  130. </button>
  131. {% if action == 'edit' %}
  132. <a href="/dashboard/persons/{{ person.id }}" class="btn btn-ghost">Cancel</a>
  133. {% else %}
  134. <a href="/dashboard/persons" class="btn btn-ghost">Cancel</a>
  135. {% endif %}
  136. </div>
  137. </form>
  138. {% endblock %}