Skip to content

Commit 7dac955

Browse files
committed
update
1 parent 6f8f1dd commit 7dac955

File tree

4 files changed

+54
-34
lines changed

4 files changed

+54
-34
lines changed

main.ts

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,36 +16,50 @@ export default class SafeLearnPlugin extends Plugin {
1616
function cleanPreview(el: HTMLElement) {
1717
el.querySelectorAll("*").forEach((node) => {
1818
if (!(node instanceof HTMLElement)) return;
19+
1920
const text = node.textContent?.trim();
2021
if (!text) return;
2122

23+
// Check for @@@ blocks, ##fragment, and ##side-by-side blocks
2224
if (
2325
/^ *@{3} *$/.test(text) ||
24-
/^ *@{3} +([^\s,]+([ ,]+[^\s,]+)*)$/.test(text)
26+
/^ *@{3} +([^\s,]+([ ,]+[^\s,]+)*)$/.test(text) ||
27+
/^##fragment$/.test(text) ||
28+
/^##(side-by-side-(start|end)|separator)$/.test(text)
2529
) {
26-
node.classList.add("safelearn-hidden");
27-
return;
28-
}
29-
30-
if (/^##fragment$/.test(text)) {
31-
node.classList.add("safelearn-hidden");
30+
node.addClass("safelearn-hidden");
3231
return;
3332
}
3433

35-
if (/^##(side-by-side-(start|end)|separator)$/.test(text)) {
36-
node.classList.add("safelearn-hidden");
37-
return;
38-
}
34+
// Remove @@@ blocks, ##fragment, and ##side-by-side blocks from text nodes
35+
node.childNodes.forEach(child => {
36+
if (child.nodeType === Node.TEXT_NODE) {
37+
let changed = false;
38+
let newText = child.textContent ?? "";
39+
40+
const replacePatterns: RegExp[] = [
41+
/@@@(?: +[^\s,]+([ ,]+[^\s,]+)*)?/g,
42+
/##fragment(?![\w-])/gi,
43+
/##(side-by-side-(start|end)|separator)/gi
44+
];
45+
46+
for (const pattern of replacePatterns) {
47+
if (pattern.test(newText)) {
48+
newText = newText.replace(pattern, "");
49+
changed = true;
50+
}
51+
}
3952

40-
node.innerHTML = node.innerHTML
41-
.replace(/(##fragment)(?![\w-])/gi, '<span class="safelearn-hidden">$1</span>')
42-
.replace(/@@@(?: +[^\s,]+([ ,]+[^\s,]+)*)?/g, '<span class="safelearn-hidden">$&</span>')
43-
.replace(/##(side-by-side-(start|end)|separator)/g, '<span class="safelearn-hidden">$&</span>');
53+
if (changed) {
54+
const span = document.createElement("span");
55+
span.textContent = newText;
56+
child.replaceWith(span);
57+
}
58+
}
59+
});
4460
});
4561
}
4662

47-
48-
4963
const safelearnHighlighter = ViewPlugin.fromClass(class {
5064
decorations;
5165

@@ -76,10 +90,17 @@ const safelearnHighlighter = ViewPlugin.fromClass(class {
7690
const text = line.text.trim();
7791

7892
// === ##fragment ===
79-
const fragIndex = line.text.indexOf("##fragment");
93+
let fragIndex = line.text.indexOf("##fragment ");
94+
if (fragIndex === -1) {
95+
fragIndex = line.text.indexOf("##fragment");
96+
// only if the line ends with this "##fragment" without any trailing text
97+
if (fragIndex !== -1 && line.text.slice(fragIndex + "##fragment".length).trim() !== "") {
98+
fragIndex = -1;
99+
}
100+
}
80101
if (fragIndex !== -1) {
81102
const from = line.from + fragIndex;
82-
const to = from + "##fragment".length;
103+
const to = from + "##fragment ".length;
83104
decorations.push({
84105
from,
85106
to,

manifest.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{
2-
"id": "safelearn-formatter",
3-
"name": "SafeLearn Formatter",
2+
"id": "safelearn-plugin",
3+
"name": "SafeLearn Plugin",
44
"version": "1.0.1",
55
"minAppVersion": "1.5.7",
6-
"description": "Offers visual aids for tags specific for SafeLearn (an open-source project) such as ##fragment, permission blocks, and side-by-side layouts for Reveal.js.",
6+
"description": "This plugin offers visual aids for SafeLearn-specific tags such as ##fragment, permission blocks, and side-by-side layouts for Reveal.js.",
77
"author": "UnterrainerInformatik",
88
"authorUrl": "https://github.com/UnterrainerInformatik",
99
"repo": "UnterrainerInformatik/safeLearn-Obsidian-plugin",

styles.css

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,12 @@
6161

6262
/* Light Theme */
6363
.theme-light {
64-
--fragment-bg: #eaf7f9;
65-
--fragment-fg: #006164a7;
66-
--fragment-border: #91bcc2;
64+
--fragment-bg: #f59c2e25;
65+
--fragment-fg: #51320c;
66+
--fragment-border: #f59c2e8e;
6767

68-
--permission-bg: #ede2e2;
69-
--permission-border: #db9a8f;
68+
--permission-bg: #ede2e218;
69+
--permission-border: #db9a8fdc;
7070
--permission-label-bg: #f9e2e2;
7171
--permission-label-fg: #225577;
7272

@@ -78,17 +78,17 @@
7878

7979
/* Dark Theme */
8080
.theme-dark {
81-
--fragment-bg: #004d4041;
82-
--fragment-fg: #5c7574;
83-
--fragment-border: #004d40;
81+
--fragment-bg: #f59c2e13;
82+
--fragment-fg: #6a5c4b;
83+
--fragment-border: #f59c2e63;
8484

85-
--permission-bg: #5739344b;
85+
--permission-bg: #290a0510;
8686
--permission-border: #290a05;
8787
--permission-label-bg: #573934;
8888
--permission-label-fg: #b2dfdb;
8989

9090
--side-separator-fg: #444466;
91-
--side-block-bg: #2a2a33;
91+
--side-block-bg: #2a2a3337;
9292
--side-block-border: #444466;
9393
--side-separator-color: #666;
9494
}

tsconfig.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
"esModuleInterop": true,
99
"resolveJsonModule": true,
1010
"skipLibCheck": true,
11-
"types": [],
12-
"typeRoots": ["types"]
11+
"types": []
1312
},
1413
"include": ["./**/*.ts"]
1514
}

0 commit comments

Comments
 (0)