/* doner-kebab-html-encoder.js
Encodes every tag name and text content into Doner-Kebab Morse.
Dot -> kebab
Dash -> doner
Space -> space
Numbers and special characters unchanged.
*/
(function() {
const MORSE = {
A: ".-", B: "-...", C: "-.-.", D: "-..", E: ".",
F: "..-.", G: "--.", H: "....", I: "..", J: ".---",
K: "-.-", L: ".-..", M: "--", N: "-.", O: "---",
P: ".--.", Q: "--.-", R: ".-.", S: "...", T: "-",
U: "..-", V: "...-", W: ".--", X: "-..-", Y: "-.--", Z: "--.."
};
const DOT = "kebab";
const DASH = "doner";
function toDonerKebabMorse(text) {
return text.split("").map(ch => {
if (ch === " ") return " ";
const upper = ch.toUpperCase();
if (MORSE[upper]) {
return MORSE[upper].split("").map(s => s === "." ? DOT : DASH).join("");
}
return ch; // keep special chars/numbers
}).join("");
}
function convertHTMLToDonerKebab(htmlString) {
const parser = new DOMParser();
const doc = parser.parseFromString(htmlString, "text/html");
function processNode(node) {
if (node.nodeType === Node.TEXT_NODE) {
return toDonerKebabMorse(node.textContent);
}
if (node.nodeType === Node.ELEMENT_NODE) {
const tagName = toDonerKebabMorse(node.tagName.toLowerCase());
let inner = "";
node.childNodes.forEach(child => {
inner += processNode(child);
});
return `
This is HTML!
')); })();