104 lines
2.8 KiB
Plaintext
104 lines
2.8 KiB
Plaintext
package views
|
|
|
|
import (
|
|
"git.32bit.cafe/32bitcafe/guestbook/internal/forms"
|
|
"git.32bit.cafe/32bitcafe/guestbook/internal/models"
|
|
)
|
|
|
|
templ UserLogin(title string, data CommonData, form forms.UserLoginForm) {
|
|
@base(title, data) {
|
|
<h1>Login</h1>
|
|
<form action="/users/login" method="POST" novalidate>
|
|
<input type="hidden" name="csrf_token" value={ data.CSRFToken }/>
|
|
for _, error := range form.NonFieldErrors {
|
|
<div class="error">{ error }</div>
|
|
}
|
|
<div>
|
|
<label>Email: </label>
|
|
{{ error, exists := form.FieldErrors["email"] }}
|
|
if exists {
|
|
<label class="error">{ error }</label>
|
|
}
|
|
<input type="email" name="email" value={ form.Email }/>
|
|
</div>
|
|
<div>
|
|
<label>Password: </label>
|
|
{{ error, exists = form.FieldErrors["password"] }}
|
|
if exists {
|
|
<label class="error">{ error }</label>
|
|
}
|
|
<input type="password" name="password"/>
|
|
</div>
|
|
<div>
|
|
<input type="submit" value="login"/>
|
|
</div>
|
|
</form>
|
|
}
|
|
}
|
|
|
|
templ UserRegistration(title string, data CommonData, form forms.UserRegistrationForm) {
|
|
@base(title, data) {
|
|
<h1>User Registration</h1>
|
|
<form action="/users/register" method="post">
|
|
<input type="hidden" name="csrf_token" value={ data.CSRFToken }/>
|
|
<div>
|
|
{{ error, exists := form.FieldErrors["name"] }}
|
|
<label for="username">Username: </label>
|
|
if exists {
|
|
<label class="error">{ error }</label>
|
|
}
|
|
<input type="text" name="username" id="username" value={ form.Name } required/>
|
|
</div>
|
|
<div>
|
|
{{ error, exists = form.FieldErrors["email"] }}
|
|
<label for="email">Email: </label>
|
|
if exists {
|
|
<label class="error">{ error }</label>
|
|
}
|
|
<input type="text" name="email" id="email" value={ form.Email } required/>
|
|
</div>
|
|
<div>
|
|
{{ error, exists = form.FieldErrors["password"] }}
|
|
<label for="password">Password: </label>
|
|
if exists {
|
|
<label class="error">{ error }</label>
|
|
}
|
|
<input type="password" name="password" id="password"/>
|
|
</div>
|
|
<div>
|
|
<input type="submit" value="Register"/>
|
|
</div>
|
|
</form>
|
|
}
|
|
}
|
|
|
|
templ UserProfile(title string, data CommonData, user models.User) {
|
|
@base(title, data) {
|
|
<h1>{ user.Username }</h1>
|
|
<p>{ user.Email }</p>
|
|
}
|
|
}
|
|
|
|
templ UserSettingsView(data CommonData, timezones []string) {
|
|
{{ user := data.CurrentUser }}
|
|
@base("User Settings", data) {
|
|
<div>
|
|
<h1>User Settings</h1>
|
|
<form hx-put="/users/settings">
|
|
<input type="hidden" name="csrf_token" value={ data.CSRFToken }/>
|
|
<label>Local Timezone</label>
|
|
<select name="timezones" id="timezone-select">
|
|
for _, tz := range timezones {
|
|
if tz == user.Settings.LocalTimezone.String() {
|
|
<option value={ tz } selected="true">{ tz }</option>
|
|
} else {
|
|
<option value={ tz }>{ tz }</option>
|
|
}
|
|
}
|
|
</select>
|
|
<input type="submit" value="Submit"/>
|
|
</form>
|
|
</div>
|
|
}
|
|
}
|