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) | ||||
| } | ||||
| 
 | ||||
| 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) { | ||||
| 	slug := r.PathValue("id") | ||||
| 	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? | ||||
| 	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 { | ||||
| 		app.serverError(w, r, err) | ||||
| 		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("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("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/themes", 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" | ||||
| 
 | ||||
| templ GuestbookDashboardCommentsView(title string, data CommonData, website models.Website, guestbook models.Guestbook, comments []models.GuestbookComment) { | ||||
|     @base(title, data) { | ||||
|         <div id="dashboard"> | ||||
|             @wSidebar(website) | ||||
|             <div> | ||||
|                 <h1>Comments on { website.SiteUrl }</h1> | ||||
|                 <hr> | ||||
|                 if len(comments) == 0 { | ||||
|                     <p>No comments yet!</p> | ||||
|                 } | ||||
|                 for  _, c := range comments { | ||||
|                     @GuestbookDashboardCommentView(data, website, c) | ||||
|                 } | ||||
|             </div> | ||||
|         </div> | ||||
|     } | ||||
| 	@base(title, data) { | ||||
| 		<div id="dashboard"> | ||||
| 			@wSidebar(website) | ||||
| 			<div> | ||||
| 				<h1>Comments on { website.SiteUrl }</h1> | ||||
| 				<hr/> | ||||
| 				if len(comments) == 0 { | ||||
| 					<p>No comments yet!</p> | ||||
| 				} | ||||
| 				for  _, c := range comments { | ||||
| 					@GuestbookDashboardCommentView(data, website, c) | ||||
| 				} | ||||
| 			</div> | ||||
| 		</div> | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| templ GuestbookDashboardCommentView(data CommonData, w models.Website, c models.GuestbookComment) { | ||||
|     {{ commentUrl := fmt.Sprintf("%s/dashboard/guestbook/comments/%s", wUrl(w), shortIdToSlug(c.ShortId)) }} | ||||
|     {{ hxHeaders := fmt.Sprintf("{\"X-CSRF-Token\": \"%s\"}", data.CSRFToken) }} | ||||
|     <div class="comment"> | ||||
|         <div> | ||||
|             if c.Deleted.IsZero() { | ||||
|                 <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 }> | ||||
|                     if !c.IsPublished { | ||||
|                         Publish | ||||
|                     } else { | ||||
|                         Hide | ||||
|                     } | ||||
|                 </button>  | ||||
|             } | ||||
|         </div> | ||||
|         <div> | ||||
|             <strong>{ c.AuthorName }</strong> | ||||
|             if len(c.AuthorEmail) > 0 { | ||||
|                 {{ email := "mailto:" + c.AuthorEmail}} | ||||
|                 | <a href={ templ.URL(email) } target="_blank">{ c.AuthorEmail }</a> | ||||
|             } | ||||
|             if len(c.AuthorSite) > 0 { | ||||
|                 | <a href={ templ.URL(externalUrl(c.AuthorSite))} target="_blank">{ c.AuthorSite }</a> | ||||
|             } | ||||
|             <p> | ||||
|                 { c.Created.In(data.CurrentUser.Settings.LocalTimezone).Format("01-02-2006 03:04PM") } | ||||
|             </p> | ||||
|         </div> | ||||
|         <p> | ||||
|             { c.CommentText } | ||||
|         </p> | ||||
|         <hr> | ||||
|     </div> | ||||
| 	{{ commentUrl := fmt.Sprintf("%s/dashboard/guestbook/comments/%s", wUrl(w), shortIdToSlug(c.ShortId)) }} | ||||
| 	{{ hxHeaders := fmt.Sprintf("{\"X-CSRF-Token\": \"%s\"}", data.CSRFToken) }} | ||||
| 	<div class="comment"> | ||||
| 		<div> | ||||
| 			if c.Deleted.IsZero() { | ||||
| 				<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 }> | ||||
| 					if !c.IsPublished { | ||||
| 						Publish | ||||
| 					} else { | ||||
| 						Hide | ||||
| 					} | ||||
| 				</button> | ||||
| 			} | ||||
| 		</div> | ||||
| 		<div> | ||||
| 			<strong>{ c.AuthorName }</strong> | ||||
| 			if len(c.AuthorEmail) > 0 { | ||||
| 				{{ email := "mailto:" + c.AuthorEmail }} | ||||
| 				| <a href={ templ.URL(email) } target="_blank">{ c.AuthorEmail }</a> | ||||
| 			} | ||||
| 			if len(c.AuthorSite) > 0 { | ||||
| 				| <a href={ templ.URL(externalUrl(c.AuthorSite)) } target="_blank">{ c.AuthorSite }</a> | ||||
| 			} | ||||
| 			<p> | ||||
| 				{ c.Created.In(data.CurrentUser.Settings.LocalTimezone).Format("01-02-2006 03:04PM") } | ||||
| 			</p> | ||||
| 		</div> | ||||
| 		<p> | ||||
| 			{ c.CommentText } | ||||
| 		</p> | ||||
| 		<hr/> | ||||
| 	</div> | ||||
| } | ||||
| 
 | ||||
| templ commentForm(form forms.CommentCreateForm) { | ||||
|     <div> | ||||
|         <label for="authorname">Name: </label> | ||||
|         {{ error, exists := form.FieldErrors["authorName"] }} | ||||
|         if exists { | ||||
|         <label class="error">{ error }</label> | ||||
|         } | ||||
|         <input type="text" name="authorname" id="authorname"> | ||||
|     </div> | ||||
|     <div> | ||||
|         <label for="authoremail">Email: </label> | ||||
|         {{ error, exists = form.FieldErrors["authorEmail"] }} | ||||
|         if exists { | ||||
|         <label class="error">{ error }</label> | ||||
|         } | ||||
|         <input type="text" name="authoremail" id="authoremail"> | ||||
|     </div> | ||||
|     <div> | ||||
|         <label for="authorsite">Site Url: </label> | ||||
|         {{ error, exists = form.FieldErrors["authorSite"] }} | ||||
|         if exists { | ||||
|         <label class="error">{ error }</label> | ||||
|         } | ||||
|         <input type="text" name="authorsite" id="authorsite"> | ||||
|     </div> | ||||
|     <div> | ||||
|         <label for="content">Comment: </label> | ||||
|         {{ error, exists = form.FieldErrors["content"] }} | ||||
|         if exists { | ||||
|         <label class="error">{ error }</label> | ||||
|         } | ||||
|         <textarea name="content" id="content"></textarea> | ||||
|     </div> | ||||
|     <div> | ||||
|         <input type="submit" value="Submit"> | ||||
|     </div> | ||||
| 	<div> | ||||
| 		<label for="authorname">Name: </label> | ||||
| 		{{ error, exists := form.FieldErrors["authorName"] }} | ||||
| 		if exists { | ||||
| 			<label class="error">{ error }</label> | ||||
| 		} | ||||
| 		<input type="text" name="authorname" id="authorname"/> | ||||
| 	</div> | ||||
| 	<div> | ||||
| 		<label for="authoremail">Email: </label> | ||||
| 		{{ error, exists = form.FieldErrors["authorEmail"] }} | ||||
| 		if exists { | ||||
| 			<label class="error">{ error }</label> | ||||
| 		} | ||||
| 		<input type="text" name="authoremail" id="authoremail"/> | ||||
| 	</div> | ||||
| 	<div> | ||||
| 		<label for="authorsite">Site Url: </label> | ||||
| 		{{ error, exists = form.FieldErrors["authorSite"] }} | ||||
| 		if exists { | ||||
| 			<label class="error">{ error }</label> | ||||
| 		} | ||||
| 		<input type="text" name="authorsite" id="authorsite"/> | ||||
| 	</div> | ||||
| 	<div> | ||||
| 		<label for="content">Comment: </label> | ||||
| 		{{ error, exists = form.FieldErrors["content"] }} | ||||
| 		if exists { | ||||
| 			<label class="error">{ error }</label> | ||||
| 		} | ||||
| 		<textarea name="content" id="content"></textarea> | ||||
| 	</div> | ||||
| 	<div> | ||||
| 		<input type="submit" value="Submit"/> | ||||
| 	</div> | ||||
| } | ||||
| 
 | ||||
| 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)) }} | ||||
|     if data.IsHtmx { | ||||
|         @commentForm(form) | ||||
|     } else { | ||||
|         <html> | ||||
|             <head> | ||||
|             <title>{ title }</title> | ||||
|             <link href="/static/css/classless.min.css" rel="stylesheet"> | ||||
|             </head> | ||||
|             <body> | ||||
|                 <main> | ||||
|                     <div> | ||||
|                         <h1>Guestbook for { website.Name }</h1> | ||||
|                         <form action={ templ.URL(postUrl) } method="post"> | ||||
|                             <input type="hidden" name="csrf_token" value={data.CSRFToken}> | ||||
|                             @commentForm(form) | ||||
|                         </form> | ||||
|                     </div> | ||||
|                     <div id="comments"> | ||||
|                         if len(comments) == 0 { | ||||
|                             <p>No comments yet!</p> | ||||
|                         } | ||||
|                         for _, c := range comments { | ||||
|                             <div> | ||||
|                                 <h3>{ c.AuthorName }</h3> | ||||
|                                 { c.Created.Format("01-02-2006 03:04PM") } | ||||
|                                 <p> | ||||
|                                     { c.CommentText } | ||||
|                                 </p> | ||||
|                             </div> | ||||
|                         } | ||||
|                     </div> | ||||
|                     </main> | ||||
|                 </body> | ||||
|             </html> | ||||
|         } | ||||
|     } | ||||
| 	{{ postUrl := fmt.Sprintf("/websites/%s/guestbook/comments/create", shortIdToSlug(website.ShortId)) }} | ||||
| 	if data.IsHtmx { | ||||
| 		@commentForm(form) | ||||
| 	} else { | ||||
| 		<html> | ||||
| 			<head> | ||||
| 				<title>{ title }</title> | ||||
| 				<link href="/static/css/classless.min.css" rel="stylesheet"/> | ||||
| 			</head> | ||||
| 			<body> | ||||
| 				<main> | ||||
| 					<div> | ||||
| 						<h1>Guestbook for { website.Name }</h1> | ||||
| 						<form action={ templ.URL(postUrl) } method="post"> | ||||
| 							<input type="hidden" name="csrf_token" value={ data.CSRFToken }/> | ||||
| 							@commentForm(form) | ||||
| 						</form> | ||||
| 					</div> | ||||
| 					<div id="comments"> | ||||
| 						if len(comments) == 0 { | ||||
| 							<p>No comments yet!</p> | ||||
| 						} | ||||
| 						for _, c := range comments { | ||||
| 							<div> | ||||
| 								<h3>{ c.AuthorName }</h3> | ||||
| 								{ c.Created.Format("01-02-2006 03:04PM") } | ||||
| 								<p> | ||||
| 									{ c.CommentText } | ||||
| 								</p> | ||||
| 							</div> | ||||
| 						} | ||||
| 					</div> | ||||
| 				</main> | ||||
| 			</body> | ||||
| 		</html> | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|     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)) }} | ||||
|         if data.IsHtmx { | ||||
|             <form hx-post={ postUrl } hx-target="closest div"> | ||||
|             @commentForm(form) | ||||
|         </form> | ||||
|     } else { | ||||
|         @base(title, data) { | ||||
|             <form action={ templ.URL(postUrl) } method="post"> | ||||
|                 @commentForm(form) | ||||
|             </form> | ||||
|         } | ||||
|     } | ||||
| 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)) }} | ||||
| 	if data.IsHtmx { | ||||
| 		<form hx-post={ postUrl } hx-target="closest div"> | ||||
| 			@commentForm(form) | ||||
| 		</form> | ||||
| 	} else { | ||||
| 		@base(title, data) { | ||||
| 			<form action={ templ.URL(postUrl) } method="post"> | ||||
| 				@commentForm(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) { | ||||
|     @base("All Guestbooks", data) { | ||||
|         <div> | ||||
|             <h1>All Guestbooks</h1> | ||||
|             <p> | ||||
|                 This page exists only for testing the service. | ||||
|             </p> | ||||
|             <ul> | ||||
|                 for _, w := range websites { | ||||
|                     <li> | ||||
|                         {{  gbUrl := fmt.Sprintf("/websites/%s/guestbook", shortIdToSlug(w.ShortId))}} | ||||
|                         <a href={ templ.URL(gbUrl) } target="_blank">{ w.Name }</a> | ||||
|                     </li> | ||||
|                 } | ||||
|             </ul> | ||||
|         </div> | ||||
|     } | ||||
| 	@base("All Guestbooks", data) { | ||||
| 		<div> | ||||
| 			<h1>All Guestbooks</h1> | ||||
| 			<p> | ||||
| 				This page exists only for testing the service. | ||||
| 			</p> | ||||
| 			<ul> | ||||
| 				for _, w := range websites { | ||||
| 					<li> | ||||
| 						{{ gbUrl := fmt.Sprintf("/websites/%s/guestbook", shortIdToSlug(w.ShortId)) }} | ||||
| 						<a href={ templ.URL(gbUrl) } target="_blank">{ w.Name }</a> | ||||
| 					</li> | ||||
| 				} | ||||
| 			</ul> | ||||
| 		</div> | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -60,7 +60,7 @@ func GuestbookDashboardCommentsView(title string, data CommonData, website model | ||||
| 			var templ_7745c5c3_Var3 string | ||||
| 			templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(website.SiteUrl) | ||||
| 			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)) | ||||
| 			if templ_7745c5c3_Err != nil { | ||||
| @ -131,7 +131,7 @@ func GuestbookDashboardCommentView(data CommonData, w models.Website, c models.G | ||||
| 			var templ_7745c5c3_Var5 string | ||||
| 			templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(commentUrl) | ||||
| 			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)) | ||||
| 			if templ_7745c5c3_Err != nil { | ||||
| @ -144,7 +144,7 @@ func GuestbookDashboardCommentView(data CommonData, w models.Website, c models.G | ||||
| 			var templ_7745c5c3_Var6 string | ||||
| 			templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(hxHeaders) | ||||
| 			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)) | ||||
| 			if templ_7745c5c3_Err != nil { | ||||
| @ -157,7 +157,7 @@ func GuestbookDashboardCommentView(data CommonData, w models.Website, c models.G | ||||
| 			var templ_7745c5c3_Var7 string | ||||
| 			templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(commentUrl) | ||||
| 			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)) | ||||
| 			if templ_7745c5c3_Err != nil { | ||||
| @ -170,7 +170,7 @@ func GuestbookDashboardCommentView(data CommonData, w models.Website, c models.G | ||||
| 			var templ_7745c5c3_Var8 string | ||||
| 			templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(hxHeaders) | ||||
| 			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)) | ||||
| 			if templ_7745c5c3_Err != nil { | ||||
| @ -203,7 +203,7 @@ func GuestbookDashboardCommentView(data CommonData, w models.Website, c models.G | ||||
| 		var templ_7745c5c3_Var9 string | ||||
| 		templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(c.AuthorName) | ||||
| 		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)) | ||||
| 		if templ_7745c5c3_Err != nil { | ||||
| @ -231,7 +231,7 @@ func GuestbookDashboardCommentView(data CommonData, w models.Website, c models.G | ||||
| 			var templ_7745c5c3_Var11 string | ||||
| 			templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(c.AuthorEmail) | ||||
| 			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)) | ||||
| 			if templ_7745c5c3_Err != nil { | ||||
| @ -259,7 +259,7 @@ func GuestbookDashboardCommentView(data CommonData, w models.Website, c models.G | ||||
| 			var templ_7745c5c3_Var13 string | ||||
| 			templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(c.AuthorSite) | ||||
| 			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)) | ||||
| 			if templ_7745c5c3_Err != nil { | ||||
| @ -277,7 +277,7 @@ func GuestbookDashboardCommentView(data CommonData, w models.Website, c models.G | ||||
| 		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")) | ||||
| 		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)) | ||||
| 		if templ_7745c5c3_Err != nil { | ||||
| @ -290,7 +290,7 @@ func GuestbookDashboardCommentView(data CommonData, w models.Website, c models.G | ||||
| 		var templ_7745c5c3_Var15 string | ||||
| 		templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(c.CommentText) | ||||
| 		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)) | ||||
| 		if templ_7745c5c3_Err != nil { | ||||
| @ -338,7 +338,7 @@ func commentForm(form forms.CommentCreateForm) templ.Component { | ||||
| 			var templ_7745c5c3_Var17 string | ||||
| 			templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(error) | ||||
| 			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)) | ||||
| 			if templ_7745c5c3_Err != nil { | ||||
| @ -362,7 +362,7 @@ func commentForm(form forms.CommentCreateForm) templ.Component { | ||||
| 			var templ_7745c5c3_Var18 string | ||||
| 			templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(error) | ||||
| 			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)) | ||||
| 			if templ_7745c5c3_Err != nil { | ||||
| @ -386,7 +386,7 @@ func commentForm(form forms.CommentCreateForm) templ.Component { | ||||
| 			var templ_7745c5c3_Var19 string | ||||
| 			templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(error) | ||||
| 			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)) | ||||
| 			if templ_7745c5c3_Err != nil { | ||||
| @ -410,7 +410,7 @@ func commentForm(form forms.CommentCreateForm) templ.Component { | ||||
| 			var templ_7745c5c3_Var20 string | ||||
| 			templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(error) | ||||
| 			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)) | ||||
| 			if templ_7745c5c3_Err != nil { | ||||
| @ -464,7 +464,7 @@ func GuestbookView(title string, data CommonData, website models.Website, guestb | ||||
| 			var templ_7745c5c3_Var22 string | ||||
| 			templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinStringErrs(title) | ||||
| 			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)) | ||||
| 			if templ_7745c5c3_Err != nil { | ||||
| @ -477,7 +477,7 @@ func GuestbookView(title string, data CommonData, website models.Website, guestb | ||||
| 			var templ_7745c5c3_Var23 string | ||||
| 			templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(website.Name) | ||||
| 			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)) | ||||
| 			if templ_7745c5c3_Err != nil { | ||||
| @ -499,7 +499,7 @@ func GuestbookView(title string, data CommonData, website models.Website, guestb | ||||
| 			var templ_7745c5c3_Var25 string | ||||
| 			templ_7745c5c3_Var25, 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: 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)) | ||||
| 			if templ_7745c5c3_Err != nil { | ||||
| @ -531,7 +531,7 @@ func GuestbookView(title string, data CommonData, website models.Website, guestb | ||||
| 				var templ_7745c5c3_Var26 string | ||||
| 				templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(c.AuthorName) | ||||
| 				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)) | ||||
| 				if templ_7745c5c3_Err != nil { | ||||
| @ -544,7 +544,7 @@ func GuestbookView(title string, data CommonData, website models.Website, guestb | ||||
| 				var templ_7745c5c3_Var27 string | ||||
| 				templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(c.Created.Format("01-02-2006 03:04PM")) | ||||
| 				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)) | ||||
| 				if templ_7745c5c3_Err != nil { | ||||
| @ -557,7 +557,7 @@ func GuestbookView(title string, data CommonData, website models.Website, guestb | ||||
| 				var templ_7745c5c3_Var28 string | ||||
| 				templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinStringErrs(c.CommentText) | ||||
| 				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)) | ||||
| 				if templ_7745c5c3_Err != nil { | ||||
| @ -607,7 +607,7 @@ func CreateGuestbookComment(title string, data CommonData, website models.Websit | ||||
| 			var templ_7745c5c3_Var30 string | ||||
| 			templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(postUrl) | ||||
| 			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)) | ||||
| 			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) { | ||||
| 		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context | ||||
| 		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 | ||||
| 		} | ||||
| 		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_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context | ||||
| 			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) | ||||
| 			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 { | ||||
| 				return templ_7745c5c3_Err | ||||
| 			} | ||||
| 			for _, w := range websites { | ||||
| 				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "<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, 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 = wSidebar(website).Render(ctx, templ_7745c5c3_Buffer) | ||||
| 			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 { | ||||
| 				return templ_7745c5c3_Err | ||||
| 			} | ||||
| 			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 { | ||||
| 			return templ_7745c5c3_Err | ||||
| 		} | ||||
|  | ||||
| @ -25,8 +25,8 @@ templ wSidebar(website models.Website) { | ||||
| 			<ul> | ||||
| 				<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/blocklist") }>Block users</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> | ||||
| 				<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 { | ||||
| 			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))) | ||||
| 		if templ_7745c5c3_Err != nil { | ||||
| 			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 { | ||||
| 			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))) | ||||
| 		if templ_7745c5c3_Err != nil { | ||||
| 			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 { | ||||
| 			return templ_7745c5c3_Err | ||||
| 		} | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user