This commit is contained in:
2025-06-28 20:38:37 +02:00
parent e444d0d7ae
commit ce6037350c
3 changed files with 93 additions and 5 deletions

View File

@@ -30,6 +30,7 @@ use std::sync::RwLock;
use serde_json;
use sysinfo::{System, Pid, RefreshKind, CpuRefreshKind, ProcessRefreshKind};
use serde::Serialize;
use regex::Regex;
const POSTS_CACHE_PATH: &str = "./cache/posts_cache.json";
const POST_STATS_PATH: &str = "./cache/post_stats.json";
@@ -145,6 +146,51 @@ fn strip_emojis(s: &str) -> String {
.collect()
}
// Function to process custom tags in markdown content
fn process_custom_tags(content: &str) -> String {
let mut processed = content.to_string();
// Handle simple tags without parameters FIRST
let simple_tags = [
("<mytag />", "<div class=\"custom-tag mytag\">This is my custom tag content!</div>"),
("<warning />", "<div class=\"custom-tag warning\" style=\"background: #fff3cd; border: 1px solid #ffeaa7; padding: 1rem; border-radius: 4px; margin: 1rem 0;\">⚠️ Warning: This is a custom warning tag!</div>"),
("<info />", "<div class=\"custom-tag info\" style=\"background: #d1ecf1; border: 1px solid #bee5eb; padding: 1rem; border-radius: 4px; margin: 1rem 0;\"> Info: This is a custom info tag!</div>"),
("<success />", "<div class=\"custom-tag success\" style=\"background: #d4edda; border: 1px solid #c3e6cb; padding: 1rem; border-radius: 4px; margin: 1rem 0;\">✅ Success: This is a custom success tag!</div>"),
("<error />", "<div class=\"custom-tag error\" style=\"background: #f8d7da; border: 1px solid #f5c6cb; padding: 1rem; border-radius: 4px; margin: 1rem 0;\">❌ Error: This is a custom error tag!</div>"),
];
for (tag, replacement) in simple_tags.iter() {
processed = processed.replace(tag, replacement);
}
// Handle tags with parameters like <mytag param="value" />
let tag_with_params = Regex::new(r"<(\w+)\s+([^>]*?[a-zA-Z0-9=])[^>]*/>").unwrap();
processed = tag_with_params.replace_all(&processed, |caps: &regex::Captures| {
let tag_name = &caps[1];
let params = &caps[2];
match tag_name {
"mytag" => {
// Parse parameters and generate custom HTML
format!("<div class=\"custom-tag mytag\" data-params=\"{}\">Custom content with params: {}</div>", params, params)
},
"alert" => {
// Parse alert type from params
if params.contains("type=\"warning\"") {
"<div class=\"custom-tag alert warning\" style=\"background: #fff3cd; border: 1px solid #ffeaa7; padding: 1rem; border-radius: 4px; margin: 1rem 0;\">⚠️ Warning Alert!</div>".to_string()
} else if params.contains("type=\"error\"") {
"<div class=\"custom-tag alert error\" style=\"background: #f8d7da; border: 1px solid #f5c6cb; padding: 1rem; border-radius: 4px; margin: 1rem 0;\">❌ Error Alert!</div>".to_string()
} else {
"<div class=\"custom-tag alert info\" style=\"background: #d1ecf1; border: 1px solid #bee5eb; padding: 1rem; border-radius: 4px; margin: 1rem 0;\"> Info Alert!</div>".to_string()
}
},
_ => format!("<div class=\"custom-tag {}\">Unknown custom tag: {}</div>", tag_name, tag_name)
}
}).to_string();
processed
}
static AMMONIA: Lazy<ammonia::Builder<'static>> = Lazy::new(|| {
let mut builder = ammonia::Builder::default();
// All possible HTML Tags so that you can stylize via HTML
@@ -170,7 +216,7 @@ static AMMONIA: Lazy<ammonia::Builder<'static>> = Lazy::new(|| {
builder.add_tag_attributes("pre", &["style"]);
builder.add_tag_attributes("kbd", &["style"]);
builder.add_tag_attributes("samp", &["style"]);
builder.add_tag_attributes("div", &["style"]);
builder.add_tag_attributes("div", &["style", "class"]);
builder.add_tag_attributes("section", &["style"]);
builder.add_tag_attributes("article", &["style"]);
builder.add_tag_attributes("header", &["style"]);
@@ -280,7 +326,7 @@ pub fn get_post_by_slug(slug: &str) -> Result<Post, Box<dyn std::error::Error>>
let created_at = get_file_creation_date(&file_path)?;
let processed_markdown = process_anchor_links(&result.content);
let processed_markdown = process_custom_tags(&process_anchor_links(&result.content));
let parser = Parser::new_ext(&processed_markdown, Options::all());
let mut html_output = String::new();
let mut heading_text = String::new();

View File

@@ -24,6 +24,7 @@ author: Rattatwinko
- [Features 🎉](#features)
- [Administration 🚧](#administration)
- [Customization 🎨](#customization)
- [Creating Posts with MdB ✍]()
- [Troubleshooting 🚨](#troubleshooting)
- [Support 🤝](#support)
- [Support the Project ❤️](#support-the-project)
@@ -31,7 +32,7 @@ author: Rattatwinko
- [Folder Emojis 🇦🇹](#folder-emoji-technical-note)
- [API 🏗️](#api)
- [ToT, and Todo](#train-of-thought-for-this-project-and-todo)
- [Recent Changes](#)
- [Recent Changes](#recent-changes)
---
@@ -302,6 +303,35 @@ The codebase is well-structured and documented. Key files:
---
## Creating Posts with MdB ✍
If you are reading posts. Then you probably dont need this explenation!
Else you should read this.
First of all, if you are creating posts within the terminal. then you should create posts with the following headers.
```Markdown
---
title: Welcome to MarkdownBlog
date: '2025-06-19'
tags:
- welcome
- introduction
- getting-started
- documentation
summary: A comprehensive guide to getting started with MarkdownBlog
author: Rattatwinko
---
```
As you can see this is the header for the current Post.
You can write this like YML (idk).
If you are writing posts within the Admin-Panel then you are a _lucky piece of shit_ cause there it does that **automatically**
---
## Troubleshooting
### Common Issues
@@ -450,4 +480,4 @@ If you are wondering:
>
> *"DEVELOPERS! DEVELOPERS! DEVELOPERS!"* - Steve Ballmer
>
> <cite>— Rattatwinko, 2025 Q3</cite>
> <cite>— Rattatwinko, 2025 Q3</cite>

View File

@@ -443,4 +443,16 @@ select:focus {
.prose a {
word-break: break-word;
}
}
}
.custom-tag {
padding: 1rem;
border-radius: 6px;
margin: 1rem 0;
font-weight: 500;
}
.custom-tag.warning { background: #fff3cd; border: 1px solid #ffeaa7; color: #856404; }
.custom-tag.info { background: #d1ecf1; border: 1px solid #bee5eb; color: #0c5460; }
.custom-tag.success { background: #d4edda; border: 1px solid #c3e6cb; color: #155724; }
.custom-tag.error { background: #f8d7da; border: 1px solid #f5c6cb; color: #721c24; }
.custom-tag.mytag { background: #e3e3ff; border: 1px solid #b3b3ff; color: #333366; }