Blogposts are a thing now
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is passing
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			This commit is contained in:
		
							parent
							
								
									5e688e3870
								
							
						
					
					
						commit
						4eb00e38bc
					
				| @ -1,4 +1,74 @@ | ||||
| package main | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"io" | ||||
| 	"net/http" | ||||
| 
 | ||||
| 	"dutchellie.nl/DutchEllie/proper-website-2/entity" | ||||
| 	"github.com/maxence-charriere/go-app/v9/pkg/app" | ||||
| ) | ||||
| 
 | ||||
| type blogLinks struct { | ||||
| 	app.Compo | ||||
| 
 | ||||
| 	blogposts []entity.BlogPost | ||||
| } | ||||
| 
 | ||||
| func (b *blogLinks) OnMount(ctx app.Context) { | ||||
| 	b.LoadPosts(ctx) | ||||
| } | ||||
| 
 | ||||
| func (b *blogLinks) Render() app.UI { | ||||
| 	return newUIBlock(). | ||||
| 		Class("left"). | ||||
| 		Class("leftbarblock"). | ||||
| 		Class("blogpost-bar"). | ||||
| 		UI( | ||||
| 			app.P(). | ||||
| 				Class("p-h3"). | ||||
| 				Style("margin-left", "10px"). | ||||
| 				Style("margin-top", "10px"). | ||||
| 				Style("text-decoration", "underline"). | ||||
| 				Text("Posts"), | ||||
| 			app.Range(b.blogposts).Slice(func(i int) app.UI { | ||||
| 				return app.P(). | ||||
| 					Class("blogpost-titles"). | ||||
| 					Style("cursor", "pointer"). | ||||
| 					Text(b.blogposts[i].Title). | ||||
| 					OnClick(func(ctx app.Context, e app.Event) { | ||||
| 						//e.PreventDefault()
 | ||||
| 
 | ||||
| 						// Calling the update-blogpost action defined in the blogpage.go file.
 | ||||
| 						// There it's updated
 | ||||
| 						ctx.NewAction("update-blogpost", app.T("blogpost", b.blogposts[i].Path)) | ||||
| 					}) | ||||
| 			}), | ||||
| 		) | ||||
| } | ||||
| 
 | ||||
| func (b *blogLinks) LoadPosts(ctx app.Context) { | ||||
| 	// TODO: maybe you can put this in a localbrowser storage?
 | ||||
| 	url := ApiURL + "/blogpost" | ||||
| 	ctx.Async(func() { | ||||
| 		res, err := http.Get(url) | ||||
| 		if err != nil { | ||||
| 			app.Log(err) | ||||
| 			return | ||||
| 		} | ||||
| 		defer res.Body.Close() | ||||
| 		jsondata, err := io.ReadAll(res.Body) | ||||
| 		if err != nil { | ||||
| 			app.Log(err) | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| 		ctx.Dispatch(func(ctx app.Context) { | ||||
| 			err = json.Unmarshal(jsondata, &b.blogposts) | ||||
| 			if err != nil { | ||||
| 				app.Log(err) | ||||
| 				return | ||||
| 			} | ||||
| 		}) | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| @ -1,9 +1,16 @@ | ||||
| package main | ||||
| 
 | ||||
| import "github.com/maxence-charriere/go-app/v9/pkg/app" | ||||
| import ( | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	"github.com/maxence-charriere/go-app/v9/pkg/app" | ||||
| ) | ||||
| 
 | ||||
| type BlogPage struct { | ||||
| 	app.Compo | ||||
| 
 | ||||
| 	display         bool | ||||
| 	currentPostPath string | ||||
| } | ||||
| 
 | ||||
| // TODO: write the backend API for this
 | ||||
| @ -18,11 +25,30 @@ func NewBlogPage() *BlogPage { | ||||
| 	return &BlogPage{} | ||||
| } | ||||
| 
 | ||||
| func (b *BlogPage) OnMount(ctx app.Context) { | ||||
| 	ctx.Handle("update-blogpost", b.onUpdateBlogPost) | ||||
| 	b.display = false | ||||
| } | ||||
| 
 | ||||
| func (b *BlogPage) Render() app.UI { | ||||
| 	return newPage(). | ||||
| 		Title("Blog"). | ||||
| 		LeftBar( | ||||
| 			newHTMLBlock(). | ||||
| 				Class("left leftbarblock"), | ||||
| 			&blogLinks{}, | ||||
| 		). | ||||
| 		Main( | ||||
| 			app.If(b.display, | ||||
| 				newHTMLBlock(). | ||||
| 					Class("right"). | ||||
| 					Class("contentblock"). | ||||
| 					Src(b.currentPostPath), | ||||
| 			), | ||||
| 		) | ||||
| } | ||||
| 
 | ||||
| func (b *BlogPage) onUpdateBlogPost(ctx app.Context, a app.Action) { | ||||
| 	fmt.Printf("Called the update-blogpost ActionHandler\n") | ||||
| 	blogpost := a.Tags.Get("blogpost") | ||||
| 	b.currentPostPath = blogpost | ||||
| 	b.display = true | ||||
| } | ||||
|  | ||||
| @ -20,12 +20,11 @@ func main() { | ||||
| 	aboutpage := NewAboutPage() | ||||
| 	galaxiespage := NewGalaxiesPage() | ||||
| 	undertalePage := NewUndertalePage() | ||||
| 	emptyPage := NewEmptyPage() | ||||
| 	app.Route("/", homepage) | ||||
| 	app.Route("/about", aboutpage) | ||||
| 	app.Route("/galaxies", galaxiespage) | ||||
| 	app.Route("/undertale", undertalePage) | ||||
| 	app.Route("/empty", emptyPage) | ||||
| 	app.Route("/blog", NewBlogPage()) | ||||
| 
 | ||||
| 	app.Handle(getHTML, handleGetHTML) | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										6
									
								
								web/blocks/blogposts/testpost1.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								web/blocks/blogposts/testpost1.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | ||||
| <p class="p-h1">Test blogpost</p> | ||||
| <p>This is some text under the title</p> | ||||
| <p class="p-h2">Header 2</p> | ||||
| <p class="p-h3">Header 3</p> | ||||
| <p>Regular text here</p> | ||||
| <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Minus, omnis nesciunt beatae dolorem laudantium quidem? Eos fugiat doloribus, ipsam, suscipit repudiandae culpa laboriosam accusamus alias atque esse rerum, tenetur illum.</p> | ||||
| @ -138,6 +138,15 @@ body { | ||||
| 	margin-bottom: 5px; | ||||
| } | ||||
| 
 | ||||
| .blogpost-bar { | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| .blogpost-titles { | ||||
| 	margin-left: 10px; | ||||
| 	text-decoration: none; | ||||
|     color: rgb(252, 230, 255); | ||||
| } | ||||
| 
 | ||||
| /* | ||||
| .content p { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user