#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum Tool {
Bold,
Italic,
Underline,
Strike,
Code,
Link,
Heading1,
Heading2,
Heading3,
BulletList,
OrderedList,
Blockquote,
CodeBlock,
HorizontalRule,
Undo,
Redo,
}
impl Tool {
pub const DEFAULT: &[&[Tool]] = &[
&[
Tool::Bold,
Tool::Italic,
Tool::Underline,
Tool::Strike,
Tool::Link,
],
&[Tool::Heading2, Tool::Heading3],
&[
Tool::BulletList,
Tool::OrderedList,
Tool::Blockquote,
Tool::CodeBlock,
],
&[Tool::Undo, Tool::Redo],
];
pub(crate) const ALL: &[Tool] = &[
Tool::Bold,
Tool::Italic,
Tool::Underline,
Tool::Strike,
Tool::Code,
Tool::Link,
Tool::Heading1,
Tool::Heading2,
Tool::Heading3,
Tool::BulletList,
Tool::OrderedList,
Tool::Blockquote,
Tool::CodeBlock,
Tool::HorizontalRule,
Tool::Undo,
Tool::Redo,
];
pub(crate) fn key(self) -> &'static str {
match self {
Tool::Bold => "bold",
Tool::Italic => "italic",
Tool::Underline => "underline",
Tool::Strike => "strike",
Tool::Code => "code",
Tool::Link => "link",
Tool::Heading1 => "heading-1",
Tool::Heading2 => "heading-2",
Tool::Heading3 => "heading-3",
Tool::BulletList => "bullet-list",
Tool::OrderedList => "ordered-list",
Tool::Blockquote => "blockquote",
Tool::CodeBlock => "code-block",
Tool::HorizontalRule => "horizontal-rule",
Tool::Undo => "undo",
Tool::Redo => "redo",
}
}
pub(crate) fn label(self) -> &'static str {
match self {
Tool::Bold => "tablo-rich-bold",
Tool::Italic => "tablo-rich-italic",
Tool::Underline => "tablo-rich-underline",
Tool::Strike => "tablo-rich-strike",
Tool::Code => "tablo-rich-code",
Tool::Link => "tablo-rich-link",
Tool::Heading1 => "tablo-rich-heading-1",
Tool::Heading2 => "tablo-rich-heading-2",
Tool::Heading3 => "tablo-rich-heading-3",
Tool::BulletList => "tablo-rich-bullet-list",
Tool::OrderedList => "tablo-rich-ordered-list",
Tool::Blockquote => "tablo-rich-blockquote",
Tool::CodeBlock => "tablo-rich-code-block",
Tool::HorizontalRule => "tablo-rich-horizontal-rule",
Tool::Undo => "tablo-rich-undo",
Tool::Redo => "tablo-rich-redo",
}
}
pub(super) fn elements(self) -> &'static [(&'static str, &'static [&'static str])] {
match self {
Tool::Bold => &[("strong", &[])],
Tool::Italic => &[("em", &[])],
Tool::Underline => &[("u", &[])],
Tool::Strike => &[("s", &[])],
Tool::Code => &[("code", &[])],
Tool::Link => &[("a", &["href"])],
Tool::Heading1 => &[("h1", &[])],
Tool::Heading2 => &[("h2", &[])],
Tool::Heading3 => &[("h3", &[])],
Tool::BulletList => &[("ul", &[]), ("li", &[])],
Tool::OrderedList => &[("ol", &["start", "type"]), ("li", &[])],
Tool::Blockquote => &[("blockquote", &[])],
Tool::CodeBlock => &[("pre", &[]), ("code", &[])],
Tool::HorizontalRule => &[("hr", &[])],
Tool::Undo | Tool::Redo => &[],
}
}
}