redirect to proper location
This commit is contained in:
		
							parent
							
								
									c3b10ae239
								
							
						
					
					
						commit
						a15bbcee3d
					
				@ -5,6 +5,7 @@ import (
 | 
				
			|||||||
	"errors"
 | 
						"errors"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
						"net/url"
 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -279,10 +280,18 @@ func (app *application) postGuestbookCommentCreateRemote(w http.ResponseWriter,
 | 
				
			|||||||
	form.CheckField(validator.MaxChars(form.AuthorEmail, 256), "authorEmail", "This field cannot be more than 256 characters long")
 | 
						form.CheckField(validator.MaxChars(form.AuthorEmail, 256), "authorEmail", "This field cannot be more than 256 characters long")
 | 
				
			||||||
	form.CheckField(validator.MaxChars(form.AuthorSite, 256), "authorSite", "This field cannot be more than 256 characters long")
 | 
						form.CheckField(validator.MaxChars(form.AuthorSite, 256), "authorSite", "This field cannot be more than 256 characters long")
 | 
				
			||||||
	form.CheckField(validator.NotBlank(form.Content), "content", "This field cannot be blank")
 | 
						form.CheckField(validator.NotBlank(form.Content), "content", "This field cannot be blank")
 | 
				
			||||||
	// TODO: Add optional field filled with window.location.href
 | 
					
 | 
				
			||||||
	// If it is populated, use as redirect URL
 | 
						// if redirect path is filled out, redirect to that path on the website host
 | 
				
			||||||
	// Else redirect to homepage as stored in the website struct
 | 
						// otherwise redirect to the guestbook by default
 | 
				
			||||||
	redirectUrl := r.Header.Get("Referer")
 | 
						redirectUrl := fmt.Sprintf("/websites/%s/guestbook", shortIdToSlug(website.ShortId))
 | 
				
			||||||
 | 
						if form.Redirect != "" {
 | 
				
			||||||
 | 
							u := url.URL{
 | 
				
			||||||
 | 
								Scheme: "http",
 | 
				
			||||||
 | 
								Host:   website.SiteUrl,
 | 
				
			||||||
 | 
								Path:   form.Redirect,
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							redirectUrl = u.String()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !form.Valid() {
 | 
						if !form.Valid() {
 | 
				
			||||||
		views.GuestbookCommentCreateRemoteErrorView(redirectUrl, "Invalid Input").Render(r.Context(), w)
 | 
							views.GuestbookCommentCreateRemoteErrorView(redirectUrl, "Invalid Input").Render(r.Context(), w)
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,7 @@ import (
 | 
				
			|||||||
	"errors"
 | 
						"errors"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
						"net/url"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"git.32bit.cafe/32bitcafe/guestbook/internal/forms"
 | 
						"git.32bit.cafe/32bitcafe/guestbook/internal/forms"
 | 
				
			||||||
	"git.32bit.cafe/32bitcafe/guestbook/internal/models"
 | 
						"git.32bit.cafe/32bitcafe/guestbook/internal/models"
 | 
				
			||||||
@ -33,13 +34,15 @@ func (app *application) postWebsiteCreate(w http.ResponseWriter, r *http.Request
 | 
				
			|||||||
	form.CheckField(validator.NotBlank(form.SiteUrl), "siteurl", "This field cannot be blank")
 | 
						form.CheckField(validator.NotBlank(form.SiteUrl), "siteurl", "This field cannot be blank")
 | 
				
			||||||
	form.CheckField(validator.MaxChars(form.SiteUrl, 512), "siteurl", "This field cannot exceed 512 characters")
 | 
						form.CheckField(validator.MaxChars(form.SiteUrl, 512), "siteurl", "This field cannot exceed 512 characters")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !form.Valid() {
 | 
						u, err := url.Parse(form.SiteUrl)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if !form.Valid() || err != nil {
 | 
				
			||||||
		data := app.newCommonData(r)
 | 
							data := app.newCommonData(r)
 | 
				
			||||||
		w.WriteHeader(http.StatusUnprocessableEntity)
 | 
							w.WriteHeader(http.StatusUnprocessableEntity)
 | 
				
			||||||
		views.WebsiteCreate("Add a Website", data, form).Render(r.Context(), w)
 | 
							views.WebsiteCreate("Add a Website", data, form).Render(r.Context(), w)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	websiteShortID := app.createShortId()
 | 
						websiteShortID := app.createShortId()
 | 
				
			||||||
	_, err = app.websites.Insert(websiteShortID, userId, form.Name, form.SiteUrl, form.AuthorName)
 | 
						_, err = app.websites.Insert(websiteShortID, userId, form.Name, u.Host, form.AuthorName)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		app.serverError(w, r, err)
 | 
							app.serverError(w, r, err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
 | 
				
			|||||||
@ -20,6 +20,7 @@ type CommentCreateForm struct {
 | 
				
			|||||||
	AuthorEmail         string `schema:"authoremail"`
 | 
						AuthorEmail         string `schema:"authoremail"`
 | 
				
			||||||
	AuthorSite          string `schema:"authorsite"`
 | 
						AuthorSite          string `schema:"authorsite"`
 | 
				
			||||||
	Content             string `schema:"content"`
 | 
						Content             string `schema:"content"`
 | 
				
			||||||
 | 
						Redirect            string `schema:"redirect"`
 | 
				
			||||||
	validator.Validator `schema:"-"`
 | 
						validator.Validator `schema:"-"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,74 @@
 | 
				
			|||||||
 | 
					class GuestbookForm extends HTMLElement {
 | 
				
			||||||
 | 
					    static get observedAttributes() {
 | 
				
			||||||
 | 
					        return ['guestbook'];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constructor() {
 | 
				
			||||||
 | 
					        super();
 | 
				
			||||||
 | 
					        this.attachShadow({ mode: 'open' });
 | 
				
			||||||
 | 
					        this._guestbook = this.getAttribute('guestbook') || '';
 | 
				
			||||||
 | 
					        this._postUrl = `${this._guestbook}/comments/create/remote`
 | 
				
			||||||
 | 
					        this.render();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    attributeChangedCallback(name, oldValue, newValue) {
 | 
				
			||||||
 | 
					        if (name === 'guestbook') {
 | 
				
			||||||
 | 
					            this._guestbook = newValue;
 | 
				
			||||||
 | 
					            this.render();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    render() {
 | 
				
			||||||
 | 
					        this.shadowRoot.innerHTML = `
 | 
				
			||||||
 | 
					      <style>
 | 
				
			||||||
 | 
					        form div {
 | 
				
			||||||
 | 
					          margin-bottom: 0.75em;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        label {
 | 
				
			||||||
 | 
					          display: block;
 | 
				
			||||||
 | 
					          font-weight: bold;
 | 
				
			||||||
 | 
					          margin-bottom: 0.25em;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        input[type="text"], textarea {
 | 
				
			||||||
 | 
					          width: 100%;
 | 
				
			||||||
 | 
					          box-sizing: border-box;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        input[type="submit"] {
 | 
				
			||||||
 | 
					          font-size: 1em;
 | 
				
			||||||
 | 
					          padding: 0.5em 1em;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      </style>
 | 
				
			||||||
 | 
					      <form action="${this._postUrl}" method="post">
 | 
				
			||||||
 | 
					        <div>
 | 
				
			||||||
 | 
					          <label for="authorname">Name</label>
 | 
				
			||||||
 | 
					          <input type="text" name="authorname" id="authorname"/>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div>
 | 
				
			||||||
 | 
					          <label for="authoremail">Email (Optional)</label>
 | 
				
			||||||
 | 
					          <input type="text" name="authoremail" id="authoremail"/>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div>
 | 
				
			||||||
 | 
					          <label for="authorsite">Site Url (Optional)</label>
 | 
				
			||||||
 | 
					          <input type="text" name="authorsite" id="authorsite"/>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div>
 | 
				
			||||||
 | 
					          <label for="content">Comment</label>
 | 
				
			||||||
 | 
					          <textarea name="content" id="content"></textarea>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div>
 | 
				
			||||||
 | 
					          <input type="hidden" value="${window.location.pathname}" name="redirect" id="redirect" />
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div>
 | 
				
			||||||
 | 
					          <input type="submit" value="Submit"/>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </form>
 | 
				
			||||||
 | 
					    `;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class CommentList extends HTMLElement {
 | 
					class CommentList extends HTMLElement {
 | 
				
			||||||
    static get observedAttributes() {
 | 
					    static get observedAttributes() {
 | 
				
			||||||
        return ['src'];
 | 
					        return ['guestbook'];
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    constructor() {
 | 
					    constructor() {
 | 
				
			||||||
@ -12,26 +80,28 @@ class CommentList extends HTMLElement {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    connectedCallback() {
 | 
					    connectedCallback() {
 | 
				
			||||||
        if (this.hasAttribute('src')) {
 | 
					        if (this.hasAttribute('guestbook')) {
 | 
				
			||||||
            this.fetchComments();
 | 
					            this.fetchComments();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    attributeChangedCallback(name, oldValue, newValue) {
 | 
					    attributeChangedCallback(name, oldValue, newValue) {
 | 
				
			||||||
        if (name === 'src' && oldValue !== newValue) {
 | 
					        if (name === 'guestbook' && oldValue !== newValue) {
 | 
				
			||||||
            this.fetchComments();
 | 
					            this.fetchComments();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async fetchComments() {
 | 
					    async fetchComments() {
 | 
				
			||||||
        const src = this.getAttribute('src');
 | 
					        const guestbook = this.getAttribute('guestbook');
 | 
				
			||||||
        if (!src) return;
 | 
					        if (!guestbook) return;
 | 
				
			||||||
        this.loading = true;
 | 
					        this.loading = true;
 | 
				
			||||||
        this.error = null;
 | 
					        this.error = null;
 | 
				
			||||||
        this.render();
 | 
					        this.render();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const commentsUrl = `${guestbook}/comments`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            const response = await fetch(src);
 | 
					            const response = await fetch(commentsUrl);
 | 
				
			||||||
            if (!response.ok) throw new Error(`HTTP error: ${response.status}`);
 | 
					            if (!response.ok) throw new Error(`HTTP error: ${response.status}`);
 | 
				
			||||||
            const data = await response.json();
 | 
					            const data = await response.json();
 | 
				
			||||||
            this.comments = Array.isArray(data) ? data : [];
 | 
					            this.comments = Array.isArray(data) ? data : [];
 | 
				
			||||||
@ -102,4 +172,6 @@ class CommentList extends HTMLElement {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
customElements.define('comment-list', CommentList);
 | 
					customElements.define('guestbook-form', GuestbookForm);
 | 
				
			||||||
 | 
					customElements.define('guestbook-comments', CommentList);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -116,15 +116,6 @@ templ WebsiteDashboard(title string, data CommonData, website models.Website) {
 | 
				
			|||||||
			<div>
 | 
								<div>
 | 
				
			||||||
				<h1>{ website.Name }</h1>
 | 
									<h1>{ website.Name }</h1>
 | 
				
			||||||
				<h2>Embed your Guestbook</h2>
 | 
									<h2>Embed your Guestbook</h2>
 | 
				
			||||||
				<h3>Comment form</h3>
 | 
					 | 
				
			||||||
				<p>
 | 
					 | 
				
			||||||
					Use this form to allow readers of your website to comment on your guestbook!
 | 
					 | 
				
			||||||
				</p>
 | 
					 | 
				
			||||||
				<div>
 | 
					 | 
				
			||||||
					//<button>Copy to Clipboard</button>
 | 
					 | 
				
			||||||
					@embeddableForm(data.RootUrl, website)
 | 
					 | 
				
			||||||
				</div>
 | 
					 | 
				
			||||||
				<h3>Embed your comments</h3>
 | 
					 | 
				
			||||||
				<p>
 | 
									<p>
 | 
				
			||||||
					Upload <a href="/static/js/guestbook.js" download>this JavaScript WebComponent</a> to your site and include it in your <code>{ `<head>` }</code> tag.
 | 
										Upload <a href="/static/js/guestbook.js" download>this JavaScript WebComponent</a> to your site and include it in your <code>{ `<head>` }</code> tag.
 | 
				
			||||||
				</p>
 | 
									</p>
 | 
				
			||||||
@ -139,16 +130,26 @@ templ WebsiteDashboard(title string, data CommonData, website models.Website) {
 | 
				
			|||||||
						</code>
 | 
											</code>
 | 
				
			||||||
					</pre>
 | 
										</pre>
 | 
				
			||||||
					<p>
 | 
										<p>
 | 
				
			||||||
						Then add the custom element where you want the comments to show up
 | 
											Then add the custom elements where you want your form and comments to show up
 | 
				
			||||||
					</p>
 | 
										</p>
 | 
				
			||||||
					{{ getUrl := fmt.Sprintf("https://%s/websites/%s/guestbook/comments", data.RootUrl, shortIdToSlug(website.ShortId)) }}
 | 
										{{ gbUrl := fmt.Sprintf("https://%s/websites/%s/guestbook", data.RootUrl, shortIdToSlug(website.ShortId)) }}
 | 
				
			||||||
					//<button>Copy to Clipboard</button>
 | 
										//<button>Copy to Clipboard</button>
 | 
				
			||||||
					<pre>
 | 
										<pre>
 | 
				
			||||||
						<code>
 | 
											<code>
 | 
				
			||||||
							{ fmt.Sprintf(`<comment-list src="%s"></comment-list>`, getUrl) }
 | 
												{ fmt.Sprintf(`<guestbook-form guestbook="%s"></guestbook-form>
 | 
				
			||||||
 | 
					<guestbook-comments guestbook="%s"></guestbook-comments>`, gbUrl, gbUrl) }
 | 
				
			||||||
 | 
											</code>
 | 
				
			||||||
 | 
										</pre>
 | 
				
			||||||
 | 
									</div>
 | 
				
			||||||
 | 
									<p>
 | 
				
			||||||
 | 
										If your web host does not allow CORS requests, use an iframe instead
 | 
				
			||||||
 | 
									</p>
 | 
				
			||||||
 | 
									<div>
 | 
				
			||||||
 | 
										<pre>
 | 
				
			||||||
 | 
											<code>
 | 
				
			||||||
 | 
												{ fmt.Sprintf(`<iframe src="%s" title="Guestbook"></iframe>`, gbUrl) }
 | 
				
			||||||
						</code>
 | 
											</code>
 | 
				
			||||||
					</pre>
 | 
										</pre>
 | 
				
			||||||
					@embedJavaScriptSnippet(data.RootUrl, website)
 | 
					 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
 | 
				
			|||||||
@ -481,28 +481,20 @@ func WebsiteDashboard(title string, data CommonData, website models.Website) tem
 | 
				
			|||||||
			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, 38, "</h1><h2>Embed your Guestbook</h2><h3>Comment form</h3><p>Use this form to allow readers of your website to comment on your guestbook!</p><div>")
 | 
								templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "</h1><h2>Embed your Guestbook</h2><p>Upload <a href=\"/static/js/guestbook.js\" download>this JavaScript WebComponent</a> to your site and include it in your <code>")
 | 
				
			||||||
			if templ_7745c5c3_Err != nil {
 | 
					 | 
				
			||||||
				return templ_7745c5c3_Err
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			templ_7745c5c3_Err = embeddableForm(data.RootUrl, website).Render(ctx, templ_7745c5c3_Buffer)
 | 
					 | 
				
			||||||
			if templ_7745c5c3_Err != nil {
 | 
					 | 
				
			||||||
				return templ_7745c5c3_Err
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "</div><h3>Embed your comments</h3><p>Upload <a href=\"/static/js/guestbook.js\" download>this JavaScript WebComponent</a> to your site and include it in your <code>")
 | 
					 | 
				
			||||||
			if templ_7745c5c3_Err != nil {
 | 
								if templ_7745c5c3_Err != nil {
 | 
				
			||||||
				return templ_7745c5c3_Err
 | 
									return templ_7745c5c3_Err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			var templ_7745c5c3_Var26 string
 | 
								var templ_7745c5c3_Var26 string
 | 
				
			||||||
			templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(`<head>`)
 | 
								templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(`<head>`)
 | 
				
			||||||
			if templ_7745c5c3_Err != nil {
 | 
								if templ_7745c5c3_Err != nil {
 | 
				
			||||||
				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/websites.templ`, Line: 129, Col: 140}
 | 
									return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/websites.templ`, Line: 120, Col: 140}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			_, 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 {
 | 
				
			||||||
				return templ_7745c5c3_Err
 | 
									return templ_7745c5c3_Err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "</code> tag.</p><div><pre><code id=\"guestbookSnippet\">")
 | 
								templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "</code> tag.</p><div><pre><code id=\"guestbookSnippet\">")
 | 
				
			||||||
			if templ_7745c5c3_Err != nil {
 | 
								if templ_7745c5c3_Err != nil {
 | 
				
			||||||
				return templ_7745c5c3_Err
 | 
									return templ_7745c5c3_Err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@ -512,39 +504,45 @@ func WebsiteDashboard(title string, data CommonData, website models.Website) tem
 | 
				
			|||||||
    <script type="module" src="js/guestbook.js"></script>
 | 
					    <script type="module" src="js/guestbook.js"></script>
 | 
				
			||||||
</head>`)
 | 
					</head>`)
 | 
				
			||||||
			if templ_7745c5c3_Err != nil {
 | 
								if templ_7745c5c3_Err != nil {
 | 
				
			||||||
				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/websites.templ`, Line: 138, Col: 8}
 | 
									return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/websites.templ`, Line: 129, Col: 8}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			_, 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 {
 | 
				
			||||||
				return templ_7745c5c3_Err
 | 
									return templ_7745c5c3_Err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "</code></pre><p>Then add the custom element where you want the comments to show up</p>")
 | 
								templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "</code></pre><p>Then add the custom elements where you want your form and comments to show up</p>")
 | 
				
			||||||
			if templ_7745c5c3_Err != nil {
 | 
								if templ_7745c5c3_Err != nil {
 | 
				
			||||||
				return templ_7745c5c3_Err
 | 
									return templ_7745c5c3_Err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			getUrl := fmt.Sprintf("https://%s/websites/%s/guestbook/comments", data.RootUrl, shortIdToSlug(website.ShortId))
 | 
								gbUrl := fmt.Sprintf("https://%s/websites/%s/guestbook", data.RootUrl, shortIdToSlug(website.ShortId))
 | 
				
			||||||
			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "<pre><code>")
 | 
								templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "<pre><code>")
 | 
				
			||||||
			if templ_7745c5c3_Err != nil {
 | 
								if templ_7745c5c3_Err != nil {
 | 
				
			||||||
				return templ_7745c5c3_Err
 | 
									return templ_7745c5c3_Err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			var templ_7745c5c3_Var28 string
 | 
								var templ_7745c5c3_Var28 string
 | 
				
			||||||
			templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf(`<comment-list src="%s"></comment-list>`, getUrl))
 | 
								templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf(`<guestbook-form guestbook="%s"></guestbook-form>
 | 
				
			||||||
 | 
					<guestbook-comments guestbook="%s"></guestbook-comments>`, gbUrl, gbUrl))
 | 
				
			||||||
			if templ_7745c5c3_Err != nil {
 | 
								if templ_7745c5c3_Err != nil {
 | 
				
			||||||
				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/websites.templ`, Line: 148, Col: 70}
 | 
									return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/websites.templ`, Line: 140, Col: 72}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			_, 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 {
 | 
				
			||||||
				return templ_7745c5c3_Err
 | 
									return templ_7745c5c3_Err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "</code></pre>")
 | 
								templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "</code></pre></div><p>If your web host does not allow CORS requests, use an iframe instead</p><div><pre><code>")
 | 
				
			||||||
			if templ_7745c5c3_Err != nil {
 | 
								if templ_7745c5c3_Err != nil {
 | 
				
			||||||
				return templ_7745c5c3_Err
 | 
									return templ_7745c5c3_Err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			templ_7745c5c3_Err = embedJavaScriptSnippet(data.RootUrl, website).Render(ctx, templ_7745c5c3_Buffer)
 | 
								var templ_7745c5c3_Var29 string
 | 
				
			||||||
 | 
								templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf(`<iframe src="%s" title="Guestbook"></iframe>`, gbUrl))
 | 
				
			||||||
 | 
								if templ_7745c5c3_Err != nil {
 | 
				
			||||||
 | 
									return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/websites.templ`, Line: 150, Col: 75}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
 | 
				
			||||||
			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, 44, "</div></div></div>")
 | 
								templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "</code></pre></div></div></div>")
 | 
				
			||||||
			if templ_7745c5c3_Err != nil {
 | 
								if templ_7745c5c3_Err != nil {
 | 
				
			||||||
				return templ_7745c5c3_Err
 | 
									return templ_7745c5c3_Err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@ -574,12 +572,12 @@ func WebsiteDashboardComingSoon(title string, data CommonData, website models.We
 | 
				
			|||||||
			}()
 | 
								}()
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ctx = templ.InitializeContext(ctx)
 | 
							ctx = templ.InitializeContext(ctx)
 | 
				
			||||||
		templ_7745c5c3_Var29 := templ.GetChildren(ctx)
 | 
							templ_7745c5c3_Var30 := templ.GetChildren(ctx)
 | 
				
			||||||
		if templ_7745c5c3_Var29 == nil {
 | 
							if templ_7745c5c3_Var30 == nil {
 | 
				
			||||||
			templ_7745c5c3_Var29 = templ.NopComponent
 | 
								templ_7745c5c3_Var30 = templ.NopComponent
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ctx = templ.ClearChildren(ctx)
 | 
							ctx = templ.ClearChildren(ctx)
 | 
				
			||||||
		templ_7745c5c3_Var30 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
 | 
							templ_7745c5c3_Var31 := 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)
 | 
				
			||||||
			if !templ_7745c5c3_IsBuffer {
 | 
								if !templ_7745c5c3_IsBuffer {
 | 
				
			||||||
@ -591,7 +589,7 @@ func WebsiteDashboardComingSoon(title string, data CommonData, website models.We
 | 
				
			|||||||
				}()
 | 
									}()
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			ctx = templ.InitializeContext(ctx)
 | 
								ctx = templ.InitializeContext(ctx)
 | 
				
			||||||
			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "<div id=\"dashboard\">")
 | 
								templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "<div id=\"dashboard\">")
 | 
				
			||||||
			if templ_7745c5c3_Err != nil {
 | 
								if templ_7745c5c3_Err != nil {
 | 
				
			||||||
				return templ_7745c5c3_Err
 | 
									return templ_7745c5c3_Err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@ -599,26 +597,26 @@ func WebsiteDashboardComingSoon(title string, data CommonData, website models.We
 | 
				
			|||||||
			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, 46, "<div><h1>")
 | 
								templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "<div><h1>")
 | 
				
			||||||
			if templ_7745c5c3_Err != nil {
 | 
								if templ_7745c5c3_Err != nil {
 | 
				
			||||||
				return templ_7745c5c3_Err
 | 
									return templ_7745c5c3_Err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			var templ_7745c5c3_Var31 string
 | 
								var templ_7745c5c3_Var32 string
 | 
				
			||||||
			templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(website.Name)
 | 
								templ_7745c5c3_Var32, 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/websites.templ`, Line: 163, Col: 22}
 | 
									return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/websites.templ`, Line: 164, Col: 22}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
 | 
								_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
 | 
				
			||||||
			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, 47, "</h1><p>Coming Soon</p></div></div>")
 | 
								templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "</h1><p>Coming Soon</p></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(title, data).Render(templ.WithChildren(ctx, templ_7745c5c3_Var30), templ_7745c5c3_Buffer)
 | 
							templ_7745c5c3_Err = base(title, data).Render(templ.WithChildren(ctx, templ_7745c5c3_Var31), templ_7745c5c3_Buffer)
 | 
				
			||||||
		if templ_7745c5c3_Err != nil {
 | 
							if templ_7745c5c3_Err != nil {
 | 
				
			||||||
			return templ_7745c5c3_Err
 | 
								return templ_7745c5c3_Err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -642,12 +640,12 @@ func WebsiteCreate(title string, data CommonData, form forms.WebsiteCreateForm)
 | 
				
			|||||||
			}()
 | 
								}()
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ctx = templ.InitializeContext(ctx)
 | 
							ctx = templ.InitializeContext(ctx)
 | 
				
			||||||
		templ_7745c5c3_Var32 := templ.GetChildren(ctx)
 | 
							templ_7745c5c3_Var33 := templ.GetChildren(ctx)
 | 
				
			||||||
		if templ_7745c5c3_Var32 == nil {
 | 
							if templ_7745c5c3_Var33 == nil {
 | 
				
			||||||
			templ_7745c5c3_Var32 = templ.NopComponent
 | 
								templ_7745c5c3_Var33 = templ.NopComponent
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ctx = templ.ClearChildren(ctx)
 | 
							ctx = templ.ClearChildren(ctx)
 | 
				
			||||||
		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "<form hx-post=\"/websites/create\" hx-target=\"closest div\">")
 | 
							templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "<form hx-post=\"/websites/create\" hx-target=\"closest div\">")
 | 
				
			||||||
		if templ_7745c5c3_Err != nil {
 | 
							if templ_7745c5c3_Err != nil {
 | 
				
			||||||
			return templ_7745c5c3_Err
 | 
								return templ_7745c5c3_Err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -655,7 +653,7 @@ func WebsiteCreate(title string, data CommonData, form forms.WebsiteCreateForm)
 | 
				
			|||||||
		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, 49, "</form>")
 | 
							templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "</form>")
 | 
				
			||||||
		if templ_7745c5c3_Err != nil {
 | 
							if templ_7745c5c3_Err != nil {
 | 
				
			||||||
			return templ_7745c5c3_Err
 | 
								return templ_7745c5c3_Err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -679,9 +677,9 @@ func embeddableForm(root string, website models.Website) templ.Component {
 | 
				
			|||||||
			}()
 | 
								}()
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ctx = templ.InitializeContext(ctx)
 | 
							ctx = templ.InitializeContext(ctx)
 | 
				
			||||||
		templ_7745c5c3_Var33 := templ.GetChildren(ctx)
 | 
							templ_7745c5c3_Var34 := templ.GetChildren(ctx)
 | 
				
			||||||
		if templ_7745c5c3_Var33 == nil {
 | 
							if templ_7745c5c3_Var34 == nil {
 | 
				
			||||||
			templ_7745c5c3_Var33 = templ.NopComponent
 | 
								templ_7745c5c3_Var34 = templ.NopComponent
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ctx = templ.ClearChildren(ctx)
 | 
							ctx = templ.ClearChildren(ctx)
 | 
				
			||||||
		postUrl := fmt.Sprintf("https://%s/websites/%s/guestbook/comments/create/remote", root, shortIdToSlug(website.ShortId))
 | 
							postUrl := fmt.Sprintf("https://%s/websites/%s/guestbook/comments/create/remote", root, shortIdToSlug(website.ShortId))
 | 
				
			||||||
@ -707,20 +705,20 @@ func embeddableForm(root string, website models.Website) templ.Component {
 | 
				
			|||||||
            <input type="submit" value="Submit"/>
 | 
					            <input type="submit" value="Submit"/>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
</form>`
 | 
					</form>`
 | 
				
			||||||
		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "<pre><code>")
 | 
							templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "<pre><code>")
 | 
				
			||||||
		if templ_7745c5c3_Err != nil {
 | 
							if templ_7745c5c3_Err != nil {
 | 
				
			||||||
			return templ_7745c5c3_Err
 | 
								return templ_7745c5c3_Err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		var templ_7745c5c3_Var34 string
 | 
							var templ_7745c5c3_Var35 string
 | 
				
			||||||
		templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf(formStr, postUrl))
 | 
							templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf(formStr, postUrl))
 | 
				
			||||||
		if templ_7745c5c3_Err != nil {
 | 
							if templ_7745c5c3_Err != nil {
 | 
				
			||||||
			return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/websites.templ`, Line: 205, Col: 34}
 | 
								return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/websites.templ`, Line: 206, Col: 34}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))
 | 
							_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
 | 
				
			||||||
		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, 51, "</code></pre>")
 | 
							templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "</code></pre>")
 | 
				
			||||||
		if templ_7745c5c3_Err != nil {
 | 
							if templ_7745c5c3_Err != nil {
 | 
				
			||||||
			return templ_7745c5c3_Err
 | 
								return templ_7745c5c3_Err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -744,9 +742,9 @@ func embedJavaScriptSnippet(root string, website models.Website) templ.Component
 | 
				
			|||||||
			}()
 | 
								}()
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ctx = templ.InitializeContext(ctx)
 | 
							ctx = templ.InitializeContext(ctx)
 | 
				
			||||||
		templ_7745c5c3_Var35 := templ.GetChildren(ctx)
 | 
							templ_7745c5c3_Var36 := templ.GetChildren(ctx)
 | 
				
			||||||
		if templ_7745c5c3_Var35 == nil {
 | 
							if templ_7745c5c3_Var36 == nil {
 | 
				
			||||||
			templ_7745c5c3_Var35 = templ.NopComponent
 | 
								templ_7745c5c3_Var36 = templ.NopComponent
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ctx = templ.ClearChildren(ctx)
 | 
							ctx = templ.ClearChildren(ctx)
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user