Implement guestbook settings #20
| @ -32,6 +32,20 @@ func (app *application) getGuestbook(w http.ResponseWriter, r *http.Request) { | |||||||
| 	views.GuestbookView("Guestbook", data, website, website.Guestbook, comments, forms.CommentCreateForm{}).Render(r.Context(), w) | 	views.GuestbookView("Guestbook", data, website, website.Guestbook, comments, forms.CommentCreateForm{}).Render(r.Context(), w) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (app *application) getGuestbookSettings(w http.ResponseWriter, r *http.Request) { | ||||||
|  | 	slug := r.PathValue("id") | ||||||
|  | 	website, err := app.websites.Get(slugToShortId(slug)) | ||||||
|  | 	if err != nil { | ||||||
|  | 		if errors.Is(err, models.ErrNoRecord) { | ||||||
|  | 			http.NotFound(w, r) | ||||||
|  | 		} else { | ||||||
|  | 			app.serverError(w, r, err) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	data := app.newCommonData(r) | ||||||
|  | 	views.GuestbookSettingsView(data, website).Render(r.Context(), w) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (app *application) getGuestbookComments(w http.ResponseWriter, r *http.Request) { | func (app *application) getGuestbookComments(w http.ResponseWriter, r *http.Request) { | ||||||
| 	slug := r.PathValue("id") | 	slug := r.PathValue("id") | ||||||
| 	website, err := app.websites.Get(slugToShortId(slug)) | 	website, err := app.websites.Get(slugToShortId(slug)) | ||||||
|  | |||||||
| @ -46,7 +46,10 @@ func (app *application) postWebsiteCreate(w http.ResponseWriter, r *http.Request | |||||||
| 	} | 	} | ||||||
| 	// TODO: how to handle website creation success but guestbook creation failure? | 	// TODO: how to handle website creation success but guestbook creation failure? | ||||||
| 	guestbookShortID := app.createShortId() | 	guestbookShortID := app.createShortId() | ||||||
| 	_, err = app.guestbooks.Insert(guestbookShortID, userId, websiteId) | 	guestbookSettings := models.GuestbookSettings{ | ||||||
|  | 		IsCommentingEnabled: true, | ||||||
|  | 	} | ||||||
|  | 	_, err = app.guestbooks.Insert(guestbookShortID, userId, websiteId, guestbookSettings) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		app.serverError(w, r, err) | 		app.serverError(w, r, err) | ||||||
| 		return | 		return | ||||||
|  | |||||||
| @ -41,7 +41,7 @@ func (app *application) routes() http.Handler { | |||||||
| 	mux.Handle("GET /websites/{id}/dashboard/guestbook/comments/queue", protected.ThenFunc(app.getCommentQueue)) | 	mux.Handle("GET /websites/{id}/dashboard/guestbook/comments/queue", protected.ThenFunc(app.getCommentQueue)) | ||||||
| 	mux.Handle("DELETE /websites/{id}/dashboard/guestbook/comments/{commentId}", protected.ThenFunc(app.deleteGuestbookComment)) | 	mux.Handle("DELETE /websites/{id}/dashboard/guestbook/comments/{commentId}", protected.ThenFunc(app.deleteGuestbookComment)) | ||||||
| 	mux.Handle("PUT /websites/{id}/dashboard/guestbook/comments/{commentId}", protected.ThenFunc(app.putHideGuestbookComment)) | 	mux.Handle("PUT /websites/{id}/dashboard/guestbook/comments/{commentId}", protected.ThenFunc(app.putHideGuestbookComment)) | ||||||
| 	mux.Handle("GET /websites/{id}/dashboard/guestbook/blocklist", protected.ThenFunc(app.getComingSoon)) | 	mux.Handle("GET /websites/{id}/dashboard/guestbook/settings", protected.ThenFunc(app.getGuestbookSettings)) | ||||||
| 	mux.Handle("GET /websites/{id}/dashboard/guestbook/comments/trash", protected.ThenFunc(app.getCommentTrash)) | 	mux.Handle("GET /websites/{id}/dashboard/guestbook/comments/trash", protected.ThenFunc(app.getCommentTrash)) | ||||||
| 	mux.Handle("GET /websites/{id}/dashboard/guestbook/themes", protected.ThenFunc(app.getComingSoon)) | 	mux.Handle("GET /websites/{id}/dashboard/guestbook/themes", protected.ThenFunc(app.getComingSoon)) | ||||||
| 	mux.Handle("GET /websites/{id}/dashboard/guestbook/customize", protected.ThenFunc(app.getComingSoon)) | 	mux.Handle("GET /websites/{id}/dashboard/guestbook/customize", protected.ThenFunc(app.getComingSoon)) | ||||||
|  | |||||||
| @ -5,166 +5,218 @@ import "git.32bit.cafe/32bitcafe/guestbook/internal/models" | |||||||
| import "git.32bit.cafe/32bitcafe/guestbook/internal/forms" | import "git.32bit.cafe/32bitcafe/guestbook/internal/forms" | ||||||
| 
 | 
 | ||||||
| templ GuestbookDashboardCommentsView(title string, data CommonData, website models.Website, guestbook models.Guestbook, comments []models.GuestbookComment) { | templ GuestbookDashboardCommentsView(title string, data CommonData, website models.Website, guestbook models.Guestbook, comments []models.GuestbookComment) { | ||||||
|     @base(title, data) { | 	@base(title, data) { | ||||||
|         <div id="dashboard"> | 		<div id="dashboard"> | ||||||
|             @wSidebar(website) | 			@wSidebar(website) | ||||||
|             <div> | 			<div> | ||||||
|                 <h1>Comments on { website.SiteUrl }</h1> | 				<h1>Comments on { website.SiteUrl }</h1> | ||||||
|                 <hr> | 				<hr/> | ||||||
|                 if len(comments) == 0 { | 				if len(comments) == 0 { | ||||||
|                     <p>No comments yet!</p> | 					<p>No comments yet!</p> | ||||||
|                 } | 				} | ||||||
|                 for  _, c := range comments { | 				for  _, c := range comments { | ||||||
|                     @GuestbookDashboardCommentView(data, website, c) | 					@GuestbookDashboardCommentView(data, website, c) | ||||||
|                 } | 				} | ||||||
|             </div> | 			</div> | ||||||
|         </div> | 		</div> | ||||||
|     } | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| templ GuestbookDashboardCommentView(data CommonData, w models.Website, c models.GuestbookComment) { | templ GuestbookDashboardCommentView(data CommonData, w models.Website, c models.GuestbookComment) { | ||||||
|     {{ commentUrl := fmt.Sprintf("%s/dashboard/guestbook/comments/%s", wUrl(w), shortIdToSlug(c.ShortId)) }} | 	{{ commentUrl := fmt.Sprintf("%s/dashboard/guestbook/comments/%s", wUrl(w), shortIdToSlug(c.ShortId)) }} | ||||||
|     {{ hxHeaders := fmt.Sprintf("{\"X-CSRF-Token\": \"%s\"}", data.CSRFToken) }} | 	{{ hxHeaders := fmt.Sprintf("{\"X-CSRF-Token\": \"%s\"}", data.CSRFToken) }} | ||||||
|     <div class="comment"> | 	<div class="comment"> | ||||||
|         <div> | 		<div> | ||||||
|             if c.Deleted.IsZero() { | 			if c.Deleted.IsZero() { | ||||||
|                 <button class="danger" hx-delete={ commentUrl } hx-target="closest div.comment" hx-headers={ hxHeaders }>Delete</button> | 				<button class="danger" hx-delete={ commentUrl } hx-target="closest div.comment" hx-headers={ hxHeaders }>Delete</button> | ||||||
|                 <button class="outline" hx-put={ commentUrl } hx-target="closest div.comment" hx-headers={ hxHeaders }> | 				<button class="outline" hx-put={ commentUrl } hx-target="closest div.comment" hx-headers={ hxHeaders }> | ||||||
|                     if !c.IsPublished { | 					if !c.IsPublished { | ||||||
|                         Publish | 						Publish | ||||||
|                     } else { | 					} else { | ||||||
|                         Hide | 						Hide | ||||||
|                     } | 					} | ||||||
|                 </button>  | 				</button> | ||||||
|             } | 			} | ||||||
|         </div> | 		</div> | ||||||
|         <div> | 		<div> | ||||||
|             <strong>{ c.AuthorName }</strong> | 			<strong>{ c.AuthorName }</strong> | ||||||
|             if len(c.AuthorEmail) > 0 { | 			if len(c.AuthorEmail) > 0 { | ||||||
|                 {{ email := "mailto:" + c.AuthorEmail}} | 				{{ email := "mailto:" + c.AuthorEmail }} | ||||||
|                 | <a href={ templ.URL(email) } target="_blank">{ c.AuthorEmail }</a> | 				| <a href={ templ.URL(email) } target="_blank">{ c.AuthorEmail }</a> | ||||||
|             } | 			} | ||||||
|             if len(c.AuthorSite) > 0 { | 			if len(c.AuthorSite) > 0 { | ||||||
|                 | <a href={ templ.URL(externalUrl(c.AuthorSite))} target="_blank">{ c.AuthorSite }</a> | 				| <a href={ templ.URL(externalUrl(c.AuthorSite)) } target="_blank">{ c.AuthorSite }</a> | ||||||
|             } | 			} | ||||||
|             <p> | 			<p> | ||||||
|                 { c.Created.In(data.CurrentUser.Settings.LocalTimezone).Format("01-02-2006 03:04PM") } | 				{ c.Created.In(data.CurrentUser.Settings.LocalTimezone).Format("01-02-2006 03:04PM") } | ||||||
|             </p> | 			</p> | ||||||
|         </div> | 		</div> | ||||||
|         <p> | 		<p> | ||||||
|             { c.CommentText } | 			{ c.CommentText } | ||||||
|         </p> | 		</p> | ||||||
|         <hr> | 		<hr/> | ||||||
|     </div> | 	</div> | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| templ commentForm(form forms.CommentCreateForm) { | templ commentForm(form forms.CommentCreateForm) { | ||||||
|     <div> | 	<div> | ||||||
|         <label for="authorname">Name: </label> | 		<label for="authorname">Name: </label> | ||||||
|         {{ error, exists := form.FieldErrors["authorName"] }} | 		{{ error, exists := form.FieldErrors["authorName"] }} | ||||||
|         if exists { | 		if exists { | ||||||
|         <label class="error">{ error }</label> | 			<label class="error">{ error }</label> | ||||||
|         } | 		} | ||||||
|         <input type="text" name="authorname" id="authorname"> | 		<input type="text" name="authorname" id="authorname"/> | ||||||
|     </div> | 	</div> | ||||||
|     <div> | 	<div> | ||||||
|         <label for="authoremail">Email: </label> | 		<label for="authoremail">Email: </label> | ||||||
|         {{ error, exists = form.FieldErrors["authorEmail"] }} | 		{{ error, exists = form.FieldErrors["authorEmail"] }} | ||||||
|         if exists { | 		if exists { | ||||||
|         <label class="error">{ error }</label> | 			<label class="error">{ error }</label> | ||||||
|         } | 		} | ||||||
|         <input type="text" name="authoremail" id="authoremail"> | 		<input type="text" name="authoremail" id="authoremail"/> | ||||||
|     </div> | 	</div> | ||||||
|     <div> | 	<div> | ||||||
|         <label for="authorsite">Site Url: </label> | 		<label for="authorsite">Site Url: </label> | ||||||
|         {{ error, exists = form.FieldErrors["authorSite"] }} | 		{{ error, exists = form.FieldErrors["authorSite"] }} | ||||||
|         if exists { | 		if exists { | ||||||
|         <label class="error">{ error }</label> | 			<label class="error">{ error }</label> | ||||||
|         } | 		} | ||||||
|         <input type="text" name="authorsite" id="authorsite"> | 		<input type="text" name="authorsite" id="authorsite"/> | ||||||
|     </div> | 	</div> | ||||||
|     <div> | 	<div> | ||||||
|         <label for="content">Comment: </label> | 		<label for="content">Comment: </label> | ||||||
|         {{ error, exists = form.FieldErrors["content"] }} | 		{{ error, exists = form.FieldErrors["content"] }} | ||||||
|         if exists { | 		if exists { | ||||||
|         <label class="error">{ error }</label> | 			<label class="error">{ error }</label> | ||||||
|         } | 		} | ||||||
|         <textarea name="content" id="content"></textarea> | 		<textarea name="content" id="content"></textarea> | ||||||
|     </div> | 	</div> | ||||||
|     <div> | 	<div> | ||||||
|         <input type="submit" value="Submit"> | 		<input type="submit" value="Submit"/> | ||||||
|     </div> | 	</div> | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| templ GuestbookView(title string, data CommonData, website models.Website, guestbook models.Guestbook, comments []models.GuestbookComment, form forms.CommentCreateForm) { | templ GuestbookView(title string, data CommonData, website models.Website, guestbook models.Guestbook, comments []models.GuestbookComment, form forms.CommentCreateForm) { | ||||||
|     {{ postUrl := fmt.Sprintf("/websites/%s/guestbook/comments/create", shortIdToSlug(website.ShortId)) }} | 	{{ postUrl := fmt.Sprintf("/websites/%s/guestbook/comments/create", shortIdToSlug(website.ShortId)) }} | ||||||
|     if data.IsHtmx { | 	if data.IsHtmx { | ||||||
|         @commentForm(form) | 		@commentForm(form) | ||||||
|     } else { | 	} else { | ||||||
|         <html> | 		<html> | ||||||
|             <head> | 			<head> | ||||||
|             <title>{ title }</title> | 				<title>{ title }</title> | ||||||
|             <link href="/static/css/classless.min.css" rel="stylesheet"> | 				<link href="/static/css/classless.min.css" rel="stylesheet"/> | ||||||
|             </head> | 			</head> | ||||||
|             <body> | 			<body> | ||||||
|                 <main> | 				<main> | ||||||
|                     <div> | 					<div> | ||||||
|                         <h1>Guestbook for { website.Name }</h1> | 						<h1>Guestbook for { website.Name }</h1> | ||||||
|                         <form action={ templ.URL(postUrl) } method="post"> | 						<form action={ templ.URL(postUrl) } method="post"> | ||||||
|                             <input type="hidden" name="csrf_token" value={data.CSRFToken}> | 							<input type="hidden" name="csrf_token" value={ data.CSRFToken }/> | ||||||
|                             @commentForm(form) | 							@commentForm(form) | ||||||
|                         </form> | 						</form> | ||||||
|                     </div> | 					</div> | ||||||
|                     <div id="comments"> | 					<div id="comments"> | ||||||
|                         if len(comments) == 0 { | 						if len(comments) == 0 { | ||||||
|                             <p>No comments yet!</p> | 							<p>No comments yet!</p> | ||||||
|                         } | 						} | ||||||
|                         for _, c := range comments { | 						for _, c := range comments { | ||||||
|                             <div> | 							<div> | ||||||
|                                 <h3>{ c.AuthorName }</h3> | 								<h3>{ c.AuthorName }</h3> | ||||||
|                                 { c.Created.Format("01-02-2006 03:04PM") } | 								{ c.Created.Format("01-02-2006 03:04PM") } | ||||||
|                                 <p> | 								<p> | ||||||
|                                     { c.CommentText } | 									{ c.CommentText } | ||||||
|                                 </p> | 								</p> | ||||||
|                             </div> | 							</div> | ||||||
|                         } | 						} | ||||||
|                     </div> | 					</div> | ||||||
|                     </main> | 				</main> | ||||||
|                 </body> | 			</body> | ||||||
|             </html> | 		</html> | ||||||
|         } | 	} | ||||||
|     } | } | ||||||
| 
 | 
 | ||||||
|     templ CreateGuestbookComment(title string, data CommonData, website models.Website, guestbook models.Guestbook, form forms.CommentCreateForm) { | templ CreateGuestbookComment(title string, data CommonData, website models.Website, guestbook models.Guestbook, form forms.CommentCreateForm) { | ||||||
|         {{ postUrl := fmt.Sprintf("/websites/%s/guestbook/comments/create", shortIdToSlug(website.ShortId)) }} | 	{{ postUrl := fmt.Sprintf("/websites/%s/guestbook/comments/create", shortIdToSlug(website.ShortId)) }} | ||||||
|         if data.IsHtmx { | 	if data.IsHtmx { | ||||||
|             <form hx-post={ postUrl } hx-target="closest div"> | 		<form hx-post={ postUrl } hx-target="closest div"> | ||||||
|             @commentForm(form) | 			@commentForm(form) | ||||||
|         </form> | 		</form> | ||||||
|     } else { | 	} else { | ||||||
|         @base(title, data) { | 		@base(title, data) { | ||||||
|             <form action={ templ.URL(postUrl) } method="post"> | 			<form action={ templ.URL(postUrl) } method="post"> | ||||||
|                 @commentForm(form) | 				@commentForm(form) | ||||||
|             </form> | 			</form> | ||||||
|         } | 		} | ||||||
|     } | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | templ GuestbookSettingsView(data CommonData, website models.Website) { | ||||||
|  | 	{{ putUrl := fmt.Sprintf("/websites/%s/dashboard/guestbook/settings", shortIdToSlug(website.ShortId)) }} | ||||||
|  | 	@base("Guestbook Settings", data) { | ||||||
|  | 		<div id="dashboard"> | ||||||
|  | 			@wSidebar(website) | ||||||
|  | 			<div> | ||||||
|  | 				<h1>Guestbook Settings</h1> | ||||||
|  | 				<form hx-put={ putUrl }> | ||||||
|  | 					<input type="hidden" name="csrf_token" value={ data.CSRFToken }/> | ||||||
|  | 					<div> | ||||||
|  | 						<label>Guestbook Visibility</label> | ||||||
|  | 						<label for="gb_visible_true"> | ||||||
|  | 							<input type="radio" name="gb_visible" id="gb_visible_true"/> | ||||||
|  | 							Public | ||||||
|  | 						</label> | ||||||
|  | 						<label for="gb_visible_false"> | ||||||
|  | 							<input type="radio" name="gb_visible" id="gb_visible_false"/> | ||||||
|  | 							Private | ||||||
|  | 						</label> | ||||||
|  | 					</div> | ||||||
|  | 					<div> | ||||||
|  | 						<label>Guestbook Commenting</label> | ||||||
|  | 						<select name="gb_commenting" id="gb-commenting"> | ||||||
|  | 							<option value="true">Enabled</option> | ||||||
|  | 							<option value="1h">Disabled for 1 Hour</option> | ||||||
|  | 							<option value="4h">Disabled for 4 Hours</option> | ||||||
|  | 							<option value="8h">Disabled for 8 Hours</option> | ||||||
|  | 							<option value="1d">Disabled for 1 Day</option> | ||||||
|  | 							<option value="3d">Disabled for 3 Days</option> | ||||||
|  | 							<option value="7d">Disabled for 7 Days</option> | ||||||
|  | 							<option value="false">Disabled Indefinitely</option> | ||||||
|  | 						</select> | ||||||
|  | 						<label>Commenting re-enabled at <datetime value="">sometime in the future</datetime></label> | ||||||
|  | 					</div> | ||||||
|  | 					<div> | ||||||
|  | 						<label>Enable Widgets</label> | ||||||
|  | 						<label for="gb_remote_true"> | ||||||
|  | 							<input type="radio" name="gb_remote" id="gb_remote_true"/> | ||||||
|  | 							Yes | ||||||
|  | 						</label> | ||||||
|  | 						<label for="gb_commenting_false"> | ||||||
|  | 							<input type="radio" name="gb_remote" id="gb_remote_false"/> | ||||||
|  | 							No | ||||||
|  | 						</label> | ||||||
|  | 					</div> | ||||||
|  | 					<input type="submit" value="Submit"/> | ||||||
|  | 				</form> | ||||||
|  | 			</div> | ||||||
|  | 		</div> | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| templ AllGuestbooksView(data CommonData, websites []models.Website) { | templ AllGuestbooksView(data CommonData, websites []models.Website) { | ||||||
|     @base("All Guestbooks", data) { | 	@base("All Guestbooks", data) { | ||||||
|         <div> | 		<div> | ||||||
|             <h1>All Guestbooks</h1> | 			<h1>All Guestbooks</h1> | ||||||
|             <p> | 			<p> | ||||||
|                 This page exists only for testing the service. | 				This page exists only for testing the service. | ||||||
|             </p> | 			</p> | ||||||
|             <ul> | 			<ul> | ||||||
|                 for _, w := range websites { | 				for _, w := range websites { | ||||||
|                     <li> | 					<li> | ||||||
|                         {{  gbUrl := fmt.Sprintf("/websites/%s/guestbook", shortIdToSlug(w.ShortId))}} | 						{{ gbUrl := fmt.Sprintf("/websites/%s/guestbook", shortIdToSlug(w.ShortId)) }} | ||||||
|                         <a href={ templ.URL(gbUrl) } target="_blank">{ w.Name }</a> | 						<a href={ templ.URL(gbUrl) } target="_blank">{ w.Name }</a> | ||||||
|                     </li> | 					</li> | ||||||
|                 } | 				} | ||||||
|             </ul> | 			</ul> | ||||||
|         </div> | 		</div> | ||||||
|     } | 	} | ||||||
| } | } | ||||||
|  | |||||||
| @ -60,7 +60,7 @@ func GuestbookDashboardCommentsView(title string, data CommonData, website model | |||||||
| 			var templ_7745c5c3_Var3 string | 			var templ_7745c5c3_Var3 string | ||||||
| 			templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(website.SiteUrl) | 			templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(website.SiteUrl) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 12, Col: 49} | 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 12, Col: 37} | ||||||
| 			} | 			} | ||||||
| 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) | 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| @ -131,7 +131,7 @@ func GuestbookDashboardCommentView(data CommonData, w models.Website, c models.G | |||||||
| 			var templ_7745c5c3_Var5 string | 			var templ_7745c5c3_Var5 string | ||||||
| 			templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(commentUrl) | 			templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(commentUrl) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 31, Col: 61} | 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 31, Col: 49} | ||||||
| 			} | 			} | ||||||
| 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5)) | 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5)) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| @ -144,7 +144,7 @@ func GuestbookDashboardCommentView(data CommonData, w models.Website, c models.G | |||||||
| 			var templ_7745c5c3_Var6 string | 			var templ_7745c5c3_Var6 string | ||||||
| 			templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(hxHeaders) | 			templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(hxHeaders) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 31, Col: 118} | 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 31, Col: 106} | ||||||
| 			} | 			} | ||||||
| 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6)) | 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6)) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| @ -157,7 +157,7 @@ func GuestbookDashboardCommentView(data CommonData, w models.Website, c models.G | |||||||
| 			var templ_7745c5c3_Var7 string | 			var templ_7745c5c3_Var7 string | ||||||
| 			templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(commentUrl) | 			templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(commentUrl) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 32, Col: 59} | 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 32, Col: 47} | ||||||
| 			} | 			} | ||||||
| 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7)) | 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7)) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| @ -170,7 +170,7 @@ func GuestbookDashboardCommentView(data CommonData, w models.Website, c models.G | |||||||
| 			var templ_7745c5c3_Var8 string | 			var templ_7745c5c3_Var8 string | ||||||
| 			templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(hxHeaders) | 			templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(hxHeaders) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 32, Col: 116} | 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 32, Col: 104} | ||||||
| 			} | 			} | ||||||
| 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8)) | 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8)) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| @ -203,7 +203,7 @@ func GuestbookDashboardCommentView(data CommonData, w models.Website, c models.G | |||||||
| 		var templ_7745c5c3_Var9 string | 		var templ_7745c5c3_Var9 string | ||||||
| 		templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(c.AuthorName) | 		templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(c.AuthorName) | ||||||
| 		if templ_7745c5c3_Err != nil { | 		if templ_7745c5c3_Err != nil { | ||||||
| 			return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 42, Col: 34} | 			return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 42, Col: 25} | ||||||
| 		} | 		} | ||||||
| 		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9)) | 		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9)) | ||||||
| 		if templ_7745c5c3_Err != nil { | 		if templ_7745c5c3_Err != nil { | ||||||
| @ -231,7 +231,7 @@ func GuestbookDashboardCommentView(data CommonData, w models.Website, c models.G | |||||||
| 			var templ_7745c5c3_Var11 string | 			var templ_7745c5c3_Var11 string | ||||||
| 			templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(c.AuthorEmail) | 			templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(c.AuthorEmail) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 45, Col: 78} | 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 45, Col: 66} | ||||||
| 			} | 			} | ||||||
| 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11)) | 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11)) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| @ -259,7 +259,7 @@ func GuestbookDashboardCommentView(data CommonData, w models.Website, c models.G | |||||||
| 			var templ_7745c5c3_Var13 string | 			var templ_7745c5c3_Var13 string | ||||||
| 			templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(c.AuthorSite) | 			templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(c.AuthorSite) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 48, Col: 96} | 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 48, Col: 85} | ||||||
| 			} | 			} | ||||||
| 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13)) | 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13)) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| @ -277,7 +277,7 @@ func GuestbookDashboardCommentView(data CommonData, w models.Website, c models.G | |||||||
| 		var templ_7745c5c3_Var14 string | 		var templ_7745c5c3_Var14 string | ||||||
| 		templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(c.Created.In(data.CurrentUser.Settings.LocalTimezone).Format("01-02-2006 03:04PM")) | 		templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(c.Created.In(data.CurrentUser.Settings.LocalTimezone).Format("01-02-2006 03:04PM")) | ||||||
| 		if templ_7745c5c3_Err != nil { | 		if templ_7745c5c3_Err != nil { | ||||||
| 			return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 51, Col: 100} | 			return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 51, Col: 88} | ||||||
| 		} | 		} | ||||||
| 		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14)) | 		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14)) | ||||||
| 		if templ_7745c5c3_Err != nil { | 		if templ_7745c5c3_Err != nil { | ||||||
| @ -290,7 +290,7 @@ func GuestbookDashboardCommentView(data CommonData, w models.Website, c models.G | |||||||
| 		var templ_7745c5c3_Var15 string | 		var templ_7745c5c3_Var15 string | ||||||
| 		templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(c.CommentText) | 		templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(c.CommentText) | ||||||
| 		if templ_7745c5c3_Err != nil { | 		if templ_7745c5c3_Err != nil { | ||||||
| 			return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 55, Col: 27} | 			return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 55, Col: 18} | ||||||
| 		} | 		} | ||||||
| 		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15)) | 		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15)) | ||||||
| 		if templ_7745c5c3_Err != nil { | 		if templ_7745c5c3_Err != nil { | ||||||
| @ -338,7 +338,7 @@ func commentForm(form forms.CommentCreateForm) templ.Component { | |||||||
| 			var templ_7745c5c3_Var17 string | 			var templ_7745c5c3_Var17 string | ||||||
| 			templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(error) | 			templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(error) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 66, Col: 36} | 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 66, Col: 31} | ||||||
| 			} | 			} | ||||||
| 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17)) | 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17)) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| @ -362,7 +362,7 @@ func commentForm(form forms.CommentCreateForm) templ.Component { | |||||||
| 			var templ_7745c5c3_Var18 string | 			var templ_7745c5c3_Var18 string | ||||||
| 			templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(error) | 			templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(error) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 74, Col: 36} | 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 74, Col: 31} | ||||||
| 			} | 			} | ||||||
| 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18)) | 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18)) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| @ -386,7 +386,7 @@ func commentForm(form forms.CommentCreateForm) templ.Component { | |||||||
| 			var templ_7745c5c3_Var19 string | 			var templ_7745c5c3_Var19 string | ||||||
| 			templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(error) | 			templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(error) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 82, Col: 36} | 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 82, Col: 31} | ||||||
| 			} | 			} | ||||||
| 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19)) | 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19)) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| @ -410,7 +410,7 @@ func commentForm(form forms.CommentCreateForm) templ.Component { | |||||||
| 			var templ_7745c5c3_Var20 string | 			var templ_7745c5c3_Var20 string | ||||||
| 			templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(error) | 			templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(error) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 90, Col: 36} | 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 90, Col: 31} | ||||||
| 			} | 			} | ||||||
| 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20)) | 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20)) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| @ -464,7 +464,7 @@ func GuestbookView(title string, data CommonData, website models.Website, guestb | |||||||
| 			var templ_7745c5c3_Var22 string | 			var templ_7745c5c3_Var22 string | ||||||
| 			templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinStringErrs(title) | 			templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinStringErrs(title) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 106, Col: 26} | 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 106, Col: 18} | ||||||
| 			} | 			} | ||||||
| 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22)) | 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22)) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| @ -477,7 +477,7 @@ func GuestbookView(title string, data CommonData, website models.Website, guestb | |||||||
| 			var templ_7745c5c3_Var23 string | 			var templ_7745c5c3_Var23 string | ||||||
| 			templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(website.Name) | 			templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(website.Name) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 112, Col: 56} | 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 112, Col: 38} | ||||||
| 			} | 			} | ||||||
| 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23)) | 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23)) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| @ -499,7 +499,7 @@ func GuestbookView(title string, data CommonData, website models.Website, guestb | |||||||
| 			var templ_7745c5c3_Var25 string | 			var templ_7745c5c3_Var25 string | ||||||
| 			templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(data.CSRFToken) | 			templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(data.CSRFToken) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 114, Col: 88} | 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 114, Col: 68} | ||||||
| 			} | 			} | ||||||
| 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25)) | 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25)) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| @ -531,7 +531,7 @@ func GuestbookView(title string, data CommonData, website models.Website, guestb | |||||||
| 				var templ_7745c5c3_Var26 string | 				var templ_7745c5c3_Var26 string | ||||||
| 				templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(c.AuthorName) | 				templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(c.AuthorName) | ||||||
| 				if templ_7745c5c3_Err != nil { | 				if templ_7745c5c3_Err != nil { | ||||||
| 					return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 124, Col: 50} | 					return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 124, Col: 26} | ||||||
| 				} | 				} | ||||||
| 				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26)) | 				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26)) | ||||||
| 				if templ_7745c5c3_Err != nil { | 				if templ_7745c5c3_Err != nil { | ||||||
| @ -544,7 +544,7 @@ func GuestbookView(title string, data CommonData, website models.Website, guestb | |||||||
| 				var templ_7745c5c3_Var27 string | 				var templ_7745c5c3_Var27 string | ||||||
| 				templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(c.Created.Format("01-02-2006 03:04PM")) | 				templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(c.Created.Format("01-02-2006 03:04PM")) | ||||||
| 				if templ_7745c5c3_Err != nil { | 				if templ_7745c5c3_Err != nil { | ||||||
| 					return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 125, Col: 72} | 					return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 125, Col: 48} | ||||||
| 				} | 				} | ||||||
| 				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27)) | 				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27)) | ||||||
| 				if templ_7745c5c3_Err != nil { | 				if templ_7745c5c3_Err != nil { | ||||||
| @ -557,7 +557,7 @@ func GuestbookView(title string, data CommonData, website models.Website, guestb | |||||||
| 				var templ_7745c5c3_Var28 string | 				var templ_7745c5c3_Var28 string | ||||||
| 				templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinStringErrs(c.CommentText) | 				templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinStringErrs(c.CommentText) | ||||||
| 				if templ_7745c5c3_Err != nil { | 				if templ_7745c5c3_Err != nil { | ||||||
| 					return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 127, Col: 51} | 					return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 127, Col: 24} | ||||||
| 				} | 				} | ||||||
| 				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var28)) | 				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var28)) | ||||||
| 				if templ_7745c5c3_Err != nil { | 				if templ_7745c5c3_Err != nil { | ||||||
| @ -607,7 +607,7 @@ func CreateGuestbookComment(title string, data CommonData, website models.Websit | |||||||
| 			var templ_7745c5c3_Var30 string | 			var templ_7745c5c3_Var30 string | ||||||
| 			templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(postUrl) | 			templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(postUrl) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 141, Col: 35} | 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 141, Col: 25} | ||||||
| 			} | 			} | ||||||
| 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30)) | 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30)) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| @ -670,7 +670,7 @@ func CreateGuestbookComment(title string, data CommonData, website models.Websit | |||||||
| 	}) | 	}) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func AllGuestbooksView(data CommonData, websites []models.Website) templ.Component { | func GuestbookSettingsView(data CommonData, website models.Website) templ.Component { | ||||||
| 	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { | 	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { | ||||||
| 		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context | 		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context | ||||||
| 		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { | 		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { | ||||||
| @ -691,6 +691,7 @@ func AllGuestbooksView(data CommonData, websites []models.Website) templ.Compone | |||||||
| 			templ_7745c5c3_Var33 = templ.NopComponent | 			templ_7745c5c3_Var33 = templ.NopComponent | ||||||
| 		} | 		} | ||||||
| 		ctx = templ.ClearChildren(ctx) | 		ctx = templ.ClearChildren(ctx) | ||||||
|  | 		putUrl := fmt.Sprintf("/websites/%s/dashboard/guestbook/settings", shortIdToSlug(website.ShortId)) | ||||||
| 		templ_7745c5c3_Var34 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { | 		templ_7745c5c3_Var34 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { | ||||||
| 			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context | 			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context | ||||||
| 			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) | 			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) | ||||||
| @ -703,50 +704,131 @@ func AllGuestbooksView(data CommonData, websites []models.Website) templ.Compone | |||||||
| 				}() | 				}() | ||||||
| 			} | 			} | ||||||
| 			ctx = templ.InitializeContext(ctx) | 			ctx = templ.InitializeContext(ctx) | ||||||
| 			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "<div><h1>All Guestbooks</h1><p>This page exists only for testing the service.</p><ul>") | 			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "<div id=\"dashboard\">") | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| 				return templ_7745c5c3_Err | 				return templ_7745c5c3_Err | ||||||
| 			} | 			} | ||||||
| 			for _, w := range websites { | 			templ_7745c5c3_Err = wSidebar(website).Render(ctx, templ_7745c5c3_Buffer) | ||||||
| 				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "<li>") | 			if templ_7745c5c3_Err != nil { | ||||||
| 				if templ_7745c5c3_Err != nil { | 				return templ_7745c5c3_Err | ||||||
| 					return templ_7745c5c3_Err |  | ||||||
| 				} |  | ||||||
| 				gbUrl := fmt.Sprintf("/websites/%s/guestbook", shortIdToSlug(w.ShortId)) |  | ||||||
| 				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "<a href=\"") |  | ||||||
| 				if templ_7745c5c3_Err != nil { |  | ||||||
| 					return templ_7745c5c3_Err |  | ||||||
| 				} |  | ||||||
| 				var templ_7745c5c3_Var35 templ.SafeURL = templ.URL(gbUrl) |  | ||||||
| 				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(string(templ_7745c5c3_Var35))) |  | ||||||
| 				if templ_7745c5c3_Err != nil { |  | ||||||
| 					return templ_7745c5c3_Err |  | ||||||
| 				} |  | ||||||
| 				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "\" target=\"_blank\">") |  | ||||||
| 				if templ_7745c5c3_Err != nil { |  | ||||||
| 					return templ_7745c5c3_Err |  | ||||||
| 				} |  | ||||||
| 				var templ_7745c5c3_Var36 string |  | ||||||
| 				templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(w.Name) |  | ||||||
| 				if templ_7745c5c3_Err != nil { |  | ||||||
| 					return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 164, Col: 77} |  | ||||||
| 				} |  | ||||||
| 				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36)) |  | ||||||
| 				if templ_7745c5c3_Err != nil { |  | ||||||
| 					return templ_7745c5c3_Err |  | ||||||
| 				} |  | ||||||
| 				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "</a></li>") |  | ||||||
| 				if templ_7745c5c3_Err != nil { |  | ||||||
| 					return templ_7745c5c3_Err |  | ||||||
| 				} |  | ||||||
| 			} | 			} | ||||||
| 			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "</ul></div>") | 			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "<div><h1>Guestbook Settings</h1><form hx-put=\"") | ||||||
|  | 			if templ_7745c5c3_Err != nil { | ||||||
|  | 				return templ_7745c5c3_Err | ||||||
|  | 			} | ||||||
|  | 			var templ_7745c5c3_Var35 string | ||||||
|  | 			templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(putUrl) | ||||||
|  | 			if templ_7745c5c3_Err != nil { | ||||||
|  | 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 160, Col: 25} | ||||||
|  | 			} | ||||||
|  | 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35)) | ||||||
|  | 			if templ_7745c5c3_Err != nil { | ||||||
|  | 				return templ_7745c5c3_Err | ||||||
|  | 			} | ||||||
|  | 			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "\"><input type=\"hidden\" name=\"csrf_token\" value=\"") | ||||||
|  | 			if templ_7745c5c3_Err != nil { | ||||||
|  | 				return templ_7745c5c3_Err | ||||||
|  | 			} | ||||||
|  | 			var templ_7745c5c3_Var36 string | ||||||
|  | 			templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(data.CSRFToken) | ||||||
|  | 			if templ_7745c5c3_Err != nil { | ||||||
|  | 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 161, Col: 66} | ||||||
|  | 			} | ||||||
|  | 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36)) | ||||||
|  | 			if templ_7745c5c3_Err != nil { | ||||||
|  | 				return templ_7745c5c3_Err | ||||||
|  | 			} | ||||||
|  | 			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "\"><div><label>Guestbook Visibility</label> <label for=\"gb_visible_true\"><input type=\"radio\" name=\"gb_visible\" id=\"gb_visible_true\"> Public</label> <label for=\"gb_visible_false\"><input type=\"radio\" name=\"gb_visible\" id=\"gb_visible_false\"> Private</label></div><div><label>Guestbook Commenting</label> <select name=\"gb_commenting\" id=\"gb-commenting\"><option value=\"true\">Enabled</option> <option value=\"1h\">Disabled for 1 Hour</option> <option value=\"4h\">Disabled for 4 Hours</option> <option value=\"8h\">Disabled for 8 Hours</option> <option value=\"1d\">Disabled for 1 Day</option> <option value=\"3d\">Disabled for 3 Days</option> <option value=\"7d\">Disabled for 7 Days</option> <option value=\"false\">Disabled Indefinitely</option></select> <label>Commenting re-enabled at <datetime value=\"\">sometime in the future</datetime></label></div><div><label>Enable Widgets</label> <label for=\"gb_remote_true\"><input type=\"radio\" name=\"gb_remote\" id=\"gb_remote_true\"> Yes</label> <label for=\"gb_commenting_false\"><input type=\"radio\" name=\"gb_remote\" id=\"gb_remote_false\"> No</label></div><input type=\"submit\" value=\"Submit\"></form></div></div>") | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| 				return templ_7745c5c3_Err | 				return templ_7745c5c3_Err | ||||||
| 			} | 			} | ||||||
| 			return nil | 			return nil | ||||||
| 		}) | 		}) | ||||||
| 		templ_7745c5c3_Err = base("All Guestbooks", data).Render(templ.WithChildren(ctx, templ_7745c5c3_Var34), templ_7745c5c3_Buffer) | 		templ_7745c5c3_Err = base("Guestbook Settings", data).Render(templ.WithChildren(ctx, templ_7745c5c3_Var34), templ_7745c5c3_Buffer) | ||||||
|  | 		if templ_7745c5c3_Err != nil { | ||||||
|  | 			return templ_7745c5c3_Err | ||||||
|  | 		} | ||||||
|  | 		return nil | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func AllGuestbooksView(data CommonData, websites []models.Website) templ.Component { | ||||||
|  | 	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { | ||||||
|  | 		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context | ||||||
|  | 		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { | ||||||
|  | 			return templ_7745c5c3_CtxErr | ||||||
|  | 		} | ||||||
|  | 		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) | ||||||
|  | 		if !templ_7745c5c3_IsBuffer { | ||||||
|  | 			defer func() { | ||||||
|  | 				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) | ||||||
|  | 				if templ_7745c5c3_Err == nil { | ||||||
|  | 					templ_7745c5c3_Err = templ_7745c5c3_BufErr | ||||||
|  | 				} | ||||||
|  | 			}() | ||||||
|  | 		} | ||||||
|  | 		ctx = templ.InitializeContext(ctx) | ||||||
|  | 		templ_7745c5c3_Var37 := templ.GetChildren(ctx) | ||||||
|  | 		if templ_7745c5c3_Var37 == nil { | ||||||
|  | 			templ_7745c5c3_Var37 = templ.NopComponent | ||||||
|  | 		} | ||||||
|  | 		ctx = templ.ClearChildren(ctx) | ||||||
|  | 		templ_7745c5c3_Var38 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { | ||||||
|  | 			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context | ||||||
|  | 			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) | ||||||
|  | 			if !templ_7745c5c3_IsBuffer { | ||||||
|  | 				defer func() { | ||||||
|  | 					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) | ||||||
|  | 					if templ_7745c5c3_Err == nil { | ||||||
|  | 						templ_7745c5c3_Err = templ_7745c5c3_BufErr | ||||||
|  | 					} | ||||||
|  | 				}() | ||||||
|  | 			} | ||||||
|  | 			ctx = templ.InitializeContext(ctx) | ||||||
|  | 			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "<div><h1>All Guestbooks</h1><p>This page exists only for testing the service.</p><ul>") | ||||||
|  | 			if templ_7745c5c3_Err != nil { | ||||||
|  | 				return templ_7745c5c3_Err | ||||||
|  | 			} | ||||||
|  | 			for _, w := range websites { | ||||||
|  | 				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "<li>") | ||||||
|  | 				if templ_7745c5c3_Err != nil { | ||||||
|  | 					return templ_7745c5c3_Err | ||||||
|  | 				} | ||||||
|  | 				gbUrl := fmt.Sprintf("/websites/%s/guestbook", shortIdToSlug(w.ShortId)) | ||||||
|  | 				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "<a href=\"") | ||||||
|  | 				if templ_7745c5c3_Err != nil { | ||||||
|  | 					return templ_7745c5c3_Err | ||||||
|  | 				} | ||||||
|  | 				var templ_7745c5c3_Var39 templ.SafeURL = templ.URL(gbUrl) | ||||||
|  | 				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(string(templ_7745c5c3_Var39))) | ||||||
|  | 				if templ_7745c5c3_Err != nil { | ||||||
|  | 					return templ_7745c5c3_Err | ||||||
|  | 				} | ||||||
|  | 				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "\" target=\"_blank\">") | ||||||
|  | 				if templ_7745c5c3_Err != nil { | ||||||
|  | 					return templ_7745c5c3_Err | ||||||
|  | 				} | ||||||
|  | 				var templ_7745c5c3_Var40 string | ||||||
|  | 				templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.JoinStringErrs(w.Name) | ||||||
|  | 				if templ_7745c5c3_Err != nil { | ||||||
|  | 					return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 216, Col: 59} | ||||||
|  | 				} | ||||||
|  | 				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var40)) | ||||||
|  | 				if templ_7745c5c3_Err != nil { | ||||||
|  | 					return templ_7745c5c3_Err | ||||||
|  | 				} | ||||||
|  | 				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "</a></li>") | ||||||
|  | 				if templ_7745c5c3_Err != nil { | ||||||
|  | 					return templ_7745c5c3_Err | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "</ul></div>") | ||||||
|  | 			if templ_7745c5c3_Err != nil { | ||||||
|  | 				return templ_7745c5c3_Err | ||||||
|  | 			} | ||||||
|  | 			return nil | ||||||
|  | 		}) | ||||||
|  | 		templ_7745c5c3_Err = base("All Guestbooks", data).Render(templ.WithChildren(ctx, templ_7745c5c3_Var38), templ_7745c5c3_Buffer) | ||||||
| 		if templ_7745c5c3_Err != nil { | 		if templ_7745c5c3_Err != nil { | ||||||
| 			return templ_7745c5c3_Err | 			return templ_7745c5c3_Err | ||||||
| 		} | 		} | ||||||
|  | |||||||
| @ -25,8 +25,8 @@ templ wSidebar(website models.Website) { | |||||||
| 			<ul> | 			<ul> | ||||||
| 				<li><a href={ templ.URL(dashUrl + "/guestbook/comments") }>Manage messages</a></li> | 				<li><a href={ templ.URL(dashUrl + "/guestbook/comments") }>Manage messages</a></li> | ||||||
| 				<li><a href={ templ.URL(dashUrl + "/guestbook/comments/queue") }>Review message queue</a></li> | 				<li><a href={ templ.URL(dashUrl + "/guestbook/comments/queue") }>Review message queue</a></li> | ||||||
| 				<li><a href={ templ.URL(dashUrl + "/guestbook/blocklist") }>Block users</a></li> |  | ||||||
| 				<li><a href={ templ.URL(dashUrl + "/guestbook/comments/trash") }>Trash</a></li> | 				<li><a href={ templ.URL(dashUrl + "/guestbook/comments/trash") }>Trash</a></li> | ||||||
|  | 				<li><a href={ templ.URL(dashUrl + "/guestbook/settings") }>Settings</a></li> | ||||||
| 			</ul> | 			</ul> | ||||||
| 			<ul> | 			<ul> | ||||||
| 				<li><a href={ templ.URL(dashUrl + "/guestbook/themes") }>Themes</a></li> | 				<li><a href={ templ.URL(dashUrl + "/guestbook/themes") }>Themes</a></li> | ||||||
|  | |||||||
| @ -101,21 +101,21 @@ func wSidebar(website models.Website) templ.Component { | |||||||
| 		if templ_7745c5c3_Err != nil { | 		if templ_7745c5c3_Err != nil { | ||||||
| 			return templ_7745c5c3_Err | 			return templ_7745c5c3_Err | ||||||
| 		} | 		} | ||||||
| 		var templ_7745c5c3_Var8 templ.SafeURL = templ.URL(dashUrl + "/guestbook/blocklist") | 		var templ_7745c5c3_Var8 templ.SafeURL = templ.URL(dashUrl + "/guestbook/comments/trash") | ||||||
| 		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(string(templ_7745c5c3_Var8))) | 		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(string(templ_7745c5c3_Var8))) | ||||||
| 		if templ_7745c5c3_Err != nil { | 		if templ_7745c5c3_Err != nil { | ||||||
| 			return templ_7745c5c3_Err | 			return templ_7745c5c3_Err | ||||||
| 		} | 		} | ||||||
| 		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "\">Block users</a></li><li><a href=\"") | 		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "\">Trash</a></li><li><a href=\"") | ||||||
| 		if templ_7745c5c3_Err != nil { | 		if templ_7745c5c3_Err != nil { | ||||||
| 			return templ_7745c5c3_Err | 			return templ_7745c5c3_Err | ||||||
| 		} | 		} | ||||||
| 		var templ_7745c5c3_Var9 templ.SafeURL = templ.URL(dashUrl + "/guestbook/comments/trash") | 		var templ_7745c5c3_Var9 templ.SafeURL = templ.URL(dashUrl + "/guestbook/settings") | ||||||
| 		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(string(templ_7745c5c3_Var9))) | 		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(string(templ_7745c5c3_Var9))) | ||||||
| 		if templ_7745c5c3_Err != nil { | 		if templ_7745c5c3_Err != nil { | ||||||
| 			return templ_7745c5c3_Err | 			return templ_7745c5c3_Err | ||||||
| 		} | 		} | ||||||
| 		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "\">Trash</a></li></ul><ul><li><a href=\"") | 		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "\">Settings</a></li></ul><ul><li><a href=\"") | ||||||
| 		if templ_7745c5c3_Err != nil { | 		if templ_7745c5c3_Err != nil { | ||||||
| 			return templ_7745c5c3_Err | 			return templ_7745c5c3_Err | ||||||
| 		} | 		} | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user