shit
This commit is contained in:
@@ -30,6 +30,7 @@ use std::sync::RwLock;
|
|||||||
use serde_json;
|
use serde_json;
|
||||||
use sysinfo::{System, Pid, RefreshKind, CpuRefreshKind, ProcessRefreshKind};
|
use sysinfo::{System, Pid, RefreshKind, CpuRefreshKind, ProcessRefreshKind};
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
use regex::Regex;
|
||||||
|
|
||||||
const POSTS_CACHE_PATH: &str = "./cache/posts_cache.json";
|
const POSTS_CACHE_PATH: &str = "./cache/posts_cache.json";
|
||||||
const POST_STATS_PATH: &str = "./cache/post_stats.json";
|
const POST_STATS_PATH: &str = "./cache/post_stats.json";
|
||||||
@@ -145,6 +146,51 @@ fn strip_emojis(s: &str) -> String {
|
|||||||
.collect()
|
.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: ®ex::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(|| {
|
static AMMONIA: Lazy<ammonia::Builder<'static>> = Lazy::new(|| {
|
||||||
let mut builder = ammonia::Builder::default();
|
let mut builder = ammonia::Builder::default();
|
||||||
// All possible HTML Tags so that you can stylize via HTML
|
// 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("pre", &["style"]);
|
||||||
builder.add_tag_attributes("kbd", &["style"]);
|
builder.add_tag_attributes("kbd", &["style"]);
|
||||||
builder.add_tag_attributes("samp", &["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("section", &["style"]);
|
||||||
builder.add_tag_attributes("article", &["style"]);
|
builder.add_tag_attributes("article", &["style"]);
|
||||||
builder.add_tag_attributes("header", &["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 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 parser = Parser::new_ext(&processed_markdown, Options::all());
|
||||||
let mut html_output = String::new();
|
let mut html_output = String::new();
|
||||||
let mut heading_text = String::new();
|
let mut heading_text = String::new();
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ author: Rattatwinko
|
|||||||
- [Features 🎉](#features)
|
- [Features 🎉](#features)
|
||||||
- [Administration 🚧](#administration)
|
- [Administration 🚧](#administration)
|
||||||
- [Customization 🎨](#customization)
|
- [Customization 🎨](#customization)
|
||||||
|
- [Creating Posts with MdB ✍]()
|
||||||
- [Troubleshooting 🚨](#troubleshooting)
|
- [Troubleshooting 🚨](#troubleshooting)
|
||||||
- [Support 🤝](#support)
|
- [Support 🤝](#support)
|
||||||
- [Support the Project ❤️](#support-the-project)
|
- [Support the Project ❤️](#support-the-project)
|
||||||
@@ -31,7 +32,7 @@ author: Rattatwinko
|
|||||||
- [Folder Emojis 🇦🇹](#folder-emoji-technical-note)
|
- [Folder Emojis 🇦🇹](#folder-emoji-technical-note)
|
||||||
- [API 🏗️](#api)
|
- [API 🏗️](#api)
|
||||||
- [ToT, and Todo](#train-of-thought-for-this-project-and-todo)
|
- [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
|
## Troubleshooting
|
||||||
|
|
||||||
### Common Issues
|
### Common Issues
|
||||||
|
|||||||
@@ -444,3 +444,15 @@ select:focus {
|
|||||||
word-break: break-word;
|
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; }
|
||||||
Reference in New Issue
Block a user