Add blog list page css
This commit is contained in:
parent
c30d1d5531
commit
178fa113a5
5 changed files with 120 additions and 10 deletions
68
markdowns/posts/test_2.md
Normal file
68
markdowns/posts/test_2.md
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
---
|
||||||
|
image_path: "https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Test-Logo.svg/783px-Test-Logo.svg.png?20150906031702"
|
||||||
|
title: Testing layout 2
|
||||||
|
date: 2023-11-27
|
||||||
|
description: Testing the layout of the site 2.
|
||||||
|
project_link: none
|
||||||
|
---
|
||||||
|
|
||||||
|
### Heading Tags
|
||||||
|
|
||||||
|
# Heading 1
|
||||||
|
## Heading 2
|
||||||
|
### Heading 3
|
||||||
|
#### Heading 4
|
||||||
|
##### Heading 5
|
||||||
|
###### Heading 6
|
||||||
|
|
||||||
|
This is a paragraph tag. It's used for displaying text content.
|
||||||
|
|
||||||
|
[Click me to visit Example website!](https://www.example.com)
|
||||||
|
|
||||||
|
Unordered list
|
||||||
|
|
||||||
|
* Item 1
|
||||||
|
* Item 2
|
||||||
|
* Item 3
|
||||||
|
|
||||||
|
Ordered list
|
||||||
|
|
||||||
|
1. Item 1
|
||||||
|
2. Item 2
|
||||||
|
3. Item 3
|
||||||
|
|
||||||
|
|
||||||
|
> It's probably important that images look okay here by default as well:
|
||||||
|
|
||||||
|
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Test-Logo.svg/783px-Test-Logo.svg.png?20150906031702">
|
||||||
|
|
||||||
|
### Code Blocks
|
||||||
|
|
||||||
|
```python
|
||||||
|
def hello_world():
|
||||||
|
print("Hello World!")
|
||||||
|
```
|
||||||
|
|
||||||
|
```rust
|
||||||
|
fn main() {
|
||||||
|
println!("Hello World!");
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
function helloWorld() {
|
||||||
|
console.log("Hello World!");
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
def hello_world
|
||||||
|
puts "Hello World!"
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
```dockerfile
|
||||||
|
FROM rust
|
||||||
|
RUN cargo build --release
|
||||||
|
CMD ["./target/release/hello_world"]
|
||||||
|
```
|
|
@ -1,4 +1,4 @@
|
||||||
mod components;
|
pub mod components;
|
||||||
pub mod models;
|
pub mod models;
|
||||||
mod pages;
|
mod pages;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
use leptos::*;
|
use leptos::*;
|
||||||
use leptos_router::*;
|
use leptos_router::*;
|
||||||
use crate::app::models::Post;
|
use crate::app::models::Post;
|
||||||
|
use crate::app::components::Link;
|
||||||
|
|
||||||
#[server]
|
#[server]
|
||||||
pub async fn get_posts() -> Result<Vec<Post>, ServerFnError> {
|
pub async fn get_posts() -> Result<Vec<Post>, ServerFnError> {
|
||||||
|
@ -31,20 +32,26 @@ pub fn PostList() -> impl IntoView {
|
||||||
posts.and_then(|posts| {
|
posts.and_then(|posts| {
|
||||||
posts.iter()
|
posts.iter()
|
||||||
.map(|post| view! {
|
.map(|post| view! {
|
||||||
<li>
|
<div>
|
||||||
<a href={format!("/posts/{}", post.slug.clone())}>{post.metadata.title.clone()}</a>
|
<img src={post.metadata.image_path.clone()} alt=format!("Image {}", post.metadata.title)/>
|
||||||
</li>
|
|
||||||
|
<div>
|
||||||
|
<h2>{post.metadata.title.clone()}</h2>
|
||||||
|
<p>{post.metadata.description.clone()}</p>
|
||||||
|
<span>{post.metadata.date.clone()}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
})
|
})
|
||||||
.collect_view()
|
.collect_view()
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
view! {
|
view! {
|
||||||
<main class="m-0 p-0 bg-surface dark:bg-dark_surface text-on_surface dark:text-dark_on_surface">
|
<main class="posts">
|
||||||
<h1>"My Great Blog"</h1>
|
<h1>Blog</h1>
|
||||||
|
|
||||||
<Suspense fallback=move || view! { <p>"Loading posts..."</p> }>
|
<Suspense fallback=move || view! { <p>"Chargement des posts..."</p> }>
|
||||||
<ul>{posts_view}</ul>
|
<div class="posts__cards">{posts_view}</div>
|
||||||
</Suspense>
|
</Suspense>
|
||||||
</main>
|
</main>
|
||||||
}
|
}
|
||||||
|
@ -66,8 +73,8 @@ pub fn PostElement() -> impl IntoView {
|
||||||
};
|
};
|
||||||
|
|
||||||
view! {
|
view! {
|
||||||
<main class="m-0 p-0 bg-surface dark:bg-dark_surface text-on_surface dark:text-dark_on_surface">
|
<main class="post">
|
||||||
<Suspense fallback=move || view! { <p>"Loading posts..."</p> }>
|
<Suspense fallback=move || view! { <p>"Chargement des posts..."</p> }>
|
||||||
{post_view}
|
{post_view}
|
||||||
</Suspense>
|
</Suspense>
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
@import './link.css';
|
@import './link.css';
|
||||||
@import './project.css';
|
@import './project.css';
|
||||||
|
@import './post.css';
|
||||||
@import './social_links.css';
|
@import './social_links.css';
|
||||||
@import './tag.css';
|
@import './tag.css';
|
||||||
@import './timeline.css';
|
@import './timeline.css';
|
||||||
|
|
34
style/post.css
Normal file
34
style/post.css
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
@layer components {
|
||||||
|
.posts, .post {
|
||||||
|
@apply bg-surface dark:bg-dark_surface text-on_surface dark:text-dark_on_surface;
|
||||||
|
@apply min-h-screen py-5;
|
||||||
|
|
||||||
|
& > h1 {
|
||||||
|
@apply font-bold text-3xl text-center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.posts {
|
||||||
|
& > .posts__cards {
|
||||||
|
@apply grid grid-cols-1 gap-5 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5 m-5;
|
||||||
|
|
||||||
|
& > div {
|
||||||
|
@apply rounded-xl overflow-hidden relative;
|
||||||
|
@apply bg-primary/10 dark:bg-dark_primary/10;
|
||||||
|
@apply shadow-md shadow-primary/5 dark:shadow-dark_primary/5;
|
||||||
|
|
||||||
|
& > img {
|
||||||
|
@apply w-full h-48 object-cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
& > div {
|
||||||
|
@apply p-5 flex flex-col gap-3;
|
||||||
|
|
||||||
|
& > h2 {
|
||||||
|
@apply font-bold text-2xl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue