moosey-cms 0.5.0__py3-none-any.whl → 0.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
moosey_cms/filters.py
CHANGED
|
@@ -472,6 +472,43 @@ def read_time(text: str) -> str:
|
|
|
472
472
|
return "1 min read"
|
|
473
473
|
return f"{minutes} min read"
|
|
474
474
|
|
|
475
|
+
|
|
476
|
+
# ============================================================================
|
|
477
|
+
# HTML UTILITIES
|
|
478
|
+
# ============================================================================
|
|
479
|
+
|
|
480
|
+
def strip_comments(text, enabled=True):
|
|
481
|
+
"""
|
|
482
|
+
Removes HTML comments from the output.
|
|
483
|
+
Usage: {% filter strip_comments(enabled=True) %} ... {% endfilter %}
|
|
484
|
+
"""
|
|
485
|
+
if not enabled or not text:
|
|
486
|
+
return text
|
|
487
|
+
|
|
488
|
+
# Regex: Matches <!-- followed by anything (including newlines) until -->
|
|
489
|
+
# The *? ensures it is non-greedy (stops at the first closing tag)
|
|
490
|
+
return re.sub(r'<!--[\s\S]*?-->', '', str(text))
|
|
491
|
+
|
|
492
|
+
def minify_html(text, enabled=True):
|
|
493
|
+
"""
|
|
494
|
+
Minifies HTML by removing unnecessary whitespace and newlines.
|
|
495
|
+
WARNING: This is a regex-based minifier. It does not respect <pre> tags.
|
|
496
|
+
"""
|
|
497
|
+
if not enabled or not text:
|
|
498
|
+
return text
|
|
499
|
+
|
|
500
|
+
text = str(text)
|
|
501
|
+
|
|
502
|
+
# 1. Normalize whitespace:
|
|
503
|
+
# Replace sequences of whitespace (tabs, newlines) with a single space
|
|
504
|
+
text = re.sub(r'\s+', ' ', text)
|
|
505
|
+
|
|
506
|
+
# 2. Remove space between tags:
|
|
507
|
+
# Turns "</div> <div..." into "</div><div..."
|
|
508
|
+
text = re.sub(r'>\s+<', '><', text)
|
|
509
|
+
|
|
510
|
+
return text.strip()
|
|
511
|
+
|
|
475
512
|
# ============================================================================
|
|
476
513
|
# REGISTRATION FUNCTION
|
|
477
514
|
# ============================================================================
|
|
@@ -511,7 +548,9 @@ def register_filters(jinja_env):
|
|
|
511
548
|
'filesize': filesize,
|
|
512
549
|
'default_if_none': default_if_none,
|
|
513
550
|
'yesno': yesno,
|
|
514
|
-
'read_time':read_time
|
|
551
|
+
'read_time':read_time,
|
|
552
|
+
'strip_comments': strip_comments,
|
|
553
|
+
'minify_html': minify_html
|
|
515
554
|
}
|
|
516
555
|
|
|
517
556
|
for name, func in filters_dict.items():
|
moosey_cms/main.py
CHANGED
|
@@ -24,6 +24,30 @@ from .hot_reload_script import inject_script_middleware
|
|
|
24
24
|
|
|
25
25
|
from fastapi import WebSocket, WebSocketDisconnect
|
|
26
26
|
|
|
27
|
+
from jinja2 import Environment, FileSystemLoader
|
|
28
|
+
from jinja2.ext import Extension
|
|
29
|
+
import re
|
|
30
|
+
|
|
31
|
+
class AutoRemoveCommentsExtension(Extension):
|
|
32
|
+
"""Automatically removes HTML comments from all included files"""
|
|
33
|
+
|
|
34
|
+
def __init__(self, environment):
|
|
35
|
+
super().__init__(environment)
|
|
36
|
+
|
|
37
|
+
# Store original include function
|
|
38
|
+
original_include = environment.globals['include']
|
|
39
|
+
|
|
40
|
+
# Create wrapper that removes comments
|
|
41
|
+
def include_no_comments(template_name, **kwargs):
|
|
42
|
+
# Get the included template
|
|
43
|
+
included = environment.get_template(template_name)
|
|
44
|
+
rendered = included.render(**kwargs)
|
|
45
|
+
# Remove comments
|
|
46
|
+
return re.sub(r'<!--.*?-->', '', rendered, flags=re.DOTALL)
|
|
47
|
+
|
|
48
|
+
# Replace include function
|
|
49
|
+
environment.globals['include_no_comments'] = include_no_comments
|
|
50
|
+
|
|
27
51
|
|
|
28
52
|
class ConnectionManager:
|
|
29
53
|
def __init__(self):
|
|
@@ -81,6 +105,7 @@ def init_cms(
|
|
|
81
105
|
# This ensures site_data is available in 404.html and base.html automatically
|
|
82
106
|
templates.env.globals["site_data"] = site_data
|
|
83
107
|
templates.env.globals["mode"] = mode
|
|
108
|
+
|
|
84
109
|
|
|
85
110
|
# Register all custom filters once
|
|
86
111
|
filters.register_filters(templates.env)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: moosey-cms
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.0
|
|
4
4
|
Summary: Add your description here
|
|
5
5
|
Requires-Python: >=3.9
|
|
6
6
|
Requires-Dist: cachetools>=6.2.4
|
|
@@ -259,6 +259,8 @@ Moosey CMS comes packed with a comprehensive library of Jinja2 filters to help y
|
|
|
259
259
|
|
|
260
260
|
---
|
|
261
261
|
|
|
262
|
+
[Read More On Filters](docs/filters.md) and how to use some interesting ones such as stripping comments.
|
|
263
|
+
|
|
262
264
|
## ⚙️ Configuration Reference
|
|
263
265
|
|
|
264
266
|
The `init_cms` function accepts the following parameters:
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
moosey_cms/__init__.py,sha256=y7gzxC1LB7qRmjqJHJpN4kEqBNAbuIwNc4xeEI2clMY,184
|
|
2
2
|
moosey_cms/cache.py,sha256=YI6rRb4OVi-Mb1CmMW-jRz0CC9U6YZyszqLmjqLOsq8,2067
|
|
3
3
|
moosey_cms/file_watcher.py,sha256=0miTFpKZuT8aZPTByC0OVRr8A0mIG-fgPGrz2QfMG1k,915
|
|
4
|
-
moosey_cms/filters.py,sha256=
|
|
4
|
+
moosey_cms/filters.py,sha256=8bMVixNbjlnOMfxXATpj4K1xRIxLrIZf8W-c6ecFpHg,17255
|
|
5
5
|
moosey_cms/helpers.py,sha256=m94mDAaDKiH6wvzqoICQuavJ53EVTJ5VmJiRsfLT38o,10277
|
|
6
6
|
moosey_cms/hot_reload_script.py,sha256=394R-AtjCWEMjLp1ONdvzfg6ETp8TXMF8psoklW_z5c,3074
|
|
7
|
-
moosey_cms/main.py,sha256=
|
|
7
|
+
moosey_cms/main.py,sha256=oj_tePjiZXeOT4ujv8dMqodgZ7n5OCUYr5wROFboYwg,9815
|
|
8
8
|
moosey_cms/md.py,sha256=m857SKApJkK62wNrMVsypuJAqumbBt5GuPvcnuN1O6w,4970
|
|
9
9
|
moosey_cms/models.py,sha256=kYNIf7utTq94PUdqqZXfil5vpp0wciI5UgqRHJ56A0E,3070
|
|
10
10
|
moosey_cms/seo.py,sha256=jQ2FVuELNoytJkbp0ILK_IF7sZSaz9fkl59HM7xlg70,5246
|
|
11
11
|
moosey_cms/static/js/reload-script.js,sha256=hnrVXEWeTK-Y2vLeADmtlZ7fOXpDJMF-0zK09o3mrOA,2247
|
|
12
|
-
moosey_cms-0.
|
|
13
|
-
moosey_cms-0.
|
|
14
|
-
moosey_cms-0.
|
|
12
|
+
moosey_cms-0.6.0.dist-info/METADATA,sha256=ghuwQT1ZZXLEtG_zLQT9-AzWdpDuLx5PcR7KAAM0iB4,11005
|
|
13
|
+
moosey_cms-0.6.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
14
|
+
moosey_cms-0.6.0.dist-info/RECORD,,
|
|
File without changes
|