diff --git a/src/shared-configs/BlockRules.ts b/src/shared-configs/BlockRules.ts new file mode 100644 index 0000000..f934095 --- /dev/null +++ b/src/shared-configs/BlockRules.ts @@ -0,0 +1,11 @@ +import { Format } from "src/enums"; +import { BlockFormat, BlockFormatRule } from "src/types"; + +export const BlockRules: Record = { + [Format.FENCED_DIV]: { + char: ":", + length: 3, + exactLen: false, + class: "fenced-div" + } +} \ No newline at end of file diff --git a/src/shared-configs/FormatRules.ts b/src/shared-configs/FormatRules.ts deleted file mode 100644 index 4de2b50..0000000 --- a/src/shared-configs/FormatRules.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Format } from "src/enums"; -import { MainFormat } from "src/types"; - -export const FormatRules: Record Element }> = { - [Format.INSERTION]: { - char: "+", - length: 2, - exactLen: true, - allowSpace: true, - getEl: () => document.createElement("ins") - }, - [Format.SPOILER]: { - char: "|", - length: 2, - exactLen: true, - allowSpace: true, - getEl: () => { - let spoilerEl = document.createElement("span"); - spoilerEl.addClass("spoiler"); - spoilerEl.addEventListener("click", (evt) => { - let spoilerEl = evt.currentTarget as Element, - isHidden = !spoilerEl.hasClass("spoiler-revealed"); - spoilerEl.toggleClass("spoiler-revealed", isHidden); - }); - return spoilerEl; - } - }, - [Format.SUPERSCRIPT]: { - char: "^", - length: 1, - exactLen: true, - allowSpace: false, - getEl: () => document.createElement("sup") - }, - [Format.SUBSCRIPT]: { - char: "~", - length: 1, - exactLen: true, - allowSpace: false, - getEl: () => document.createElement("sub") - }, - // unused - [Format.HIGHLIGHT]: { - char: "=", - length: 2, - exactLen: false, - allowSpace: true, - getEl: () => document.createElement("mark") - } -} \ No newline at end of file diff --git a/src/shared-configs/InlineRules.ts b/src/shared-configs/InlineRules.ts new file mode 100644 index 0000000..bdc97d1 --- /dev/null +++ b/src/shared-configs/InlineRules.ts @@ -0,0 +1,78 @@ +import { Format } from "src/enums"; +import { InlineFormatRule, InlineFormat } from "src/types"; + +export const InlineRules: Record = { + [Format.INSERTION]: { + char: "+", + length: 2, + exactLen: true, + allowSpace: true, + mustBeClosed: true, + class: "ins", + getEl: () => document.createElement("ins"), + builtin: false + }, + [Format.SPOILER]: { + char: "|", + length: 2, + exactLen: true, + allowSpace: true, + mustBeClosed: true, + class: "spoiler", + getEl: () => { + let spoilerEl = document.createElement("span"); + spoilerEl.addClass("spoiler"); + spoilerEl.addEventListener("click", (evt) => { + let spoilerEl = evt.currentTarget as Element, + isHidden = !spoilerEl.hasClass("spoiler-revealed"); + spoilerEl.toggleClass("spoiler-revealed", isHidden); + }); + return spoilerEl; + }, + builtin: false + }, + [Format.SUPERSCRIPT]: { + char: "^", + length: 1, + exactLen: true, + allowSpace: false, + mustBeClosed: true, + class: "sup", + getEl: () => document.createElement("sup"), + builtin: false + }, + [Format.SUBSCRIPT]: { + char: "~", + length: 1, + exactLen: true, + allowSpace: false, + mustBeClosed: true, + class: "sub", + getEl: () => document.createElement("sub"), + builtin: false + }, + [Format.HIGHLIGHT]: { + char: "=", + length: 2, + exactLen: false, + allowSpace: true, + mustBeClosed: false, + class: "custom-highlight", + getEl: () => document.createElement("mark"), + builtin: true + }, + [Format.CUSTOM_SPAN]: { + char: "!", + length: 2, + exactLen: true, + allowSpace: true, + mustBeClosed: true, + class: "custom-span", + getEl() { + let el = document.createElement("span"); + el.classList.add(InlineRules[Format.CUSTOM_SPAN].class); + return el; + }, + builtin: false + } +} \ No newline at end of file