1
0
mirror of https://github.com/avinal/avinal.github.io.git synced 2026-07-04 15:50:08 +05:30

fix highlighting

Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
This commit is contained in:
2023-09-30 12:31:37 +05:30
parent 531a3c7f55
commit 26a9b72dff
7 changed files with 810 additions and 581 deletions
+1 -5
View File
@@ -131,11 +131,7 @@
"href": "https://avinal.space" "href": "https://avinal.space"
} }
], ],
"script": [ "script": []
{
"defer src": "https://cdn.jsdelivr.net/npm/marked/marked.min.js"
}
]
}, },
"router": { "router": {
"useHashRouting": false "useHashRouting": false
+704 -443
View File
File diff suppressed because it is too large Load Diff
+4 -1
View File
@@ -5,6 +5,9 @@
"tailwindcss": "^3.2.4" "tailwindcss": "^3.2.4"
}, },
"dependencies": { "dependencies": {
"npm": "^9.3.1" "marked": "^9.0.3",
"marked-highlight": "^2.0.6",
"npm": "^9.3.1",
"prismjs": "^1.29.0"
} }
} }
+46 -79
View File
@@ -1,74 +1,40 @@
import "./prism.js"; import { marked } from "marked";
import { markedHighlight } from "marked-highlight";
import Prism from "prismjs";
import "./Prism";
customElements.define( customElements.define(
"rendered-md", "rendered-md",
class extends HTMLElement { class extends HTMLElement {
constructor() { constructor() {
super(); super();
this.lead = 0; // Moved lead here
} }
connectedCallback() { connectedCallback() {
this.runMarked(); this.runMarked();
} }
updateMeta(title, description) { updateMeta(title, description) {
document const metaInfo = {
.querySelector('meta[name="title"]') 'meta[name="title"]': `${title} | Avinal Kumar | Personal Website`,
.setAttribute("content", title + " | Avinal Kumar | Personal Website"); 'meta[name="description"]': description,
document 'meta[property="og:title"]': `${title} | Avinal Kumar | Personal Website`,
.querySelector('meta[name="description"]') 'meta[property="og:description"]': description,
.setAttribute("content", description); 'meta[property="og:url"]': window.location,
document 'meta[property="twitter:title"]': `${title} | Avinal Kumar | Personal Website`,
.querySelector('meta[property="og:title"]') 'meta[property="twitter:description"]': description,
.setAttribute("content", title + " | Avinal Kumar | Personal Website"); 'meta[property="twitter:url"]': window.location,
document
.querySelector('meta[property="og:description"]')
.setAttribute("content", description);
document
.querySelector('meta[property="og:url"]')
.setAttribute("content", window.location);
document
.querySelector('meta[property="twitter:title"]')
.setAttribute("content", title + " | Avinal Kumar | Personal Website");
document
.querySelector('meta[property="twitter:description"]')
.setAttribute("content", description);
document
.querySelector('meta[property="twitter:url"]')
.setAttribute("content", window.location);
}
addLineNumber() {
var env = {
container: document,
selector:
'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code',
}; };
env.elements = Array.prototype.slice.apply( for (const [selector, content] of Object.entries(metaInfo)) {
env.container.querySelectorAll(env.selector) const element = document.querySelector(selector);
); if (element) {
element.setAttribute("content", content);
for (var i = 0, element; (element = env.elements[i++]); ) { } else {
highlightElement(element); console.warn(`Element ${selector} not found`);
} }
function highlightElement(element) {
var language = Prism.util.getLanguage(element);
if (language == "bash") {
return;
}
var grammar = Prism.languages[language];
var parent = element.parentElement;
if (parent && parent.nodeName.toLowerCase() === "pre") {
Prism.util.setLanguage(parent, language);
}
var code = element.textContent;
var env = {
element: element,
language: language,
grammar: grammar,
code: code,
};
Prism.hooks.run("complete", env);
} }
} }
@@ -97,14 +63,16 @@ customElements.define(
} }
runMarked() { runMarked() {
const renderer = new marked.Renderer(); const {
const data = this.getAttribute("markdowndata"); markdowndata: data,
const fragment = this.getAttribute("fragment"); fragment,
const title = this.getAttribute("title"); title,
const description = this.getAttribute("description"); description,
this.updateMeta(title, description); } = this.attributes;
this.updateMeta(title.value, description.value);
const renderer = new marked.Renderer();
var lead = 0;
renderer.heading = (text, level) => { renderer.heading = (text, level) => {
const escapedText = text const escapedText = text
.trim() .trim()
@@ -120,11 +88,10 @@ customElements.define(
}; };
renderer.paragraph = (text) => { renderer.paragraph = (text) => {
lead++; this.lead++;
if (lead === 1) { return this.lead === 1
return `<p class="lead">${text}</p>`; ? `<p class="lead">${text}</p>`
} : `<p>${text}</p>`;
return `<p>${text}</p>`;
}; };
renderer.image = (href, title, text) => { renderer.image = (href, title, text) => {
@@ -147,7 +114,11 @@ customElements.define(
marked.setOptions({ marked.setOptions({
renderer: renderer, renderer: renderer,
highlight: function (code, lang) { });
marked.use(
markedHighlight({
highlight(code, lang) {
const grammer = Prism.languages[lang]; const grammer = Prism.languages[lang];
if (!grammer) { if (!grammer) {
console.warn(`Unable to find prism highlight for '${lang}'`); console.warn(`Unable to find prism highlight for '${lang}'`);
@@ -155,18 +126,14 @@ customElements.define(
} }
return Prism.highlight(code, grammer, lang); return Prism.highlight(code, grammer, lang);
}, },
}); })
);
this.innerHTML = marked.parse(data); this.innerHTML = marked(data.value);
console.log("Markdown rendering complete!");
this.addLineNumber();
this.addComments(); this.addComments();
if (fragment) { if (fragment && fragment.value) {
console.log( window.location = `#${fragment.value}`;
`Fragment found, scrolling to: ${window.location}#${fragment}`
);
window.location = "#" + fragment;
} }
} }
+48
View File
@@ -0,0 +1,48 @@
// Load Plugins
// import 'prismjs/plugins/toolbar/prism-toolbar';
// import "prismjs/plugins/line-numbers/prism-line-numbers";
// import "prismjs/plugins/line-numbers/prism-line-numbers.css";
// import "prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard";
// load languages
import "prismjs/components/prism-bash";
import "prismjs/components/prism-markup";
import "prismjs/components/prism-css";
import "prismjs/components/prism-clike";
import "prismjs/components/prism-javascript";
import "prismjs/components/prism-bash";
import "prismjs/components/prism-basic";
import "prismjs/components/prism-brainfuck";
import "prismjs/components/prism-c";
import "prismjs/components/prism-cpp";
import "prismjs/components/prism-cmake";
import "prismjs/components/prism-diff";
import "prismjs/components/prism-docker";
import "prismjs/components/prism-elm";
import "prismjs/components/prism-git";
import "prismjs/components/prism-go";
import "prismjs/components/prism-go-module";
import "prismjs/components/prism-graphql";
import "prismjs/components/prism-haskell";
import "prismjs/components/prism-http";
import "prismjs/components/prism-java";
import "prismjs/components/prism-json";
import "prismjs/components/prism-json5";
import "prismjs/components/prism-jsonp";
import "prismjs/components/prism-makefile";
import "prismjs/components/prism-markdown";
import "prismjs/components/prism-matlab";
import "prismjs/components/prism-mermaid";
import "prismjs/components/prism-powershell";
import "prismjs/components/prism-protobuf";
import "prismjs/components/prism-python";
import "prismjs/components/prism-rest";
import "prismjs/components/prism-rust";
import "prismjs/components/prism-shell-session";
import "prismjs/components/prism-sql";
import "prismjs/components/prism-toml";
import "prismjs/components/prism-typescript";
import "prismjs/components/prism-vim";
import "prismjs/components/prism-wasm";
import "prismjs/components/prism-yaml";
File diff suppressed because one or more lines are too long
@@ -87,7 +87,7 @@ sudo logid -d
You can get output like this: You can get output like this:
```log ```bash
[INFO] Device found: MX Master 3S on /dev/hidraw4:255 [INFO] Device found: MX Master 3S on /dev/hidraw4:255
[DEBUG] /dev/hidraw4:255 remappable buttons: [DEBUG] /dev/hidraw4:255 remappable buttons:
[DEBUG] CID | reprog? | fn key? | mouse key? | gesture support? [DEBUG] CID | reprog? | fn key? | mouse key? | gesture support?