update gb js
This commit is contained in:
		
							parent
							
								
									545736690e
								
							
						
					
					
						commit
						5b2c99a849
					
				| @ -1,7 +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 { | ||||
|     static get observedAttributes() { | ||||
|         return ['src']; | ||||
|         return ['guestbook']; | ||||
|     } | ||||
| 
 | ||||
|     constructor() { | ||||
| @ -13,26 +80,28 @@ class CommentList extends HTMLElement { | ||||
|     } | ||||
| 
 | ||||
|     connectedCallback() { | ||||
|         if (this.hasAttribute('src')) { | ||||
|         if (this.hasAttribute('guestbook')) { | ||||
|             this.fetchComments(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     attributeChangedCallback(name, oldValue, newValue) { | ||||
|         if (name === 'src' && oldValue !== newValue) { | ||||
|         if (name === 'guestbook' && oldValue !== newValue) { | ||||
|             this.fetchComments(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     async fetchComments() { | ||||
|         const src = this.getAttribute('src'); | ||||
|         if (!src) return; | ||||
|         const guestbook = this.getAttribute('guestbook'); | ||||
|         if (!guestbook) return; | ||||
|         this.loading = true; | ||||
|         this.error = null; | ||||
|         this.render(); | ||||
| 
 | ||||
|         const commentsUrl = `${guestbook}/comments` | ||||
| 
 | ||||
|         try { | ||||
|             const response = await fetch(src); | ||||
|             const response = await fetch(commentsUrl); | ||||
|             if (!response.ok) throw new Error(`HTTP error: ${response.status}`); | ||||
|             const data = await response.json(); | ||||
|             this.comments = Array.isArray(data) ? data : []; | ||||
| @ -103,4 +172,6 @@ class CommentList extends HTMLElement { | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| customElements.define('comment-list', CommentList); | ||||
| customElements.define('guestbook-form', GuestbookForm); | ||||
| customElements.define('guestbook-comments', CommentList); | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user