diff --git a/CHANGELOG.md b/CHANGELOG.md index 033eb1a..e7d4241 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,10 @@ A dependency update to an incompatible version is considered a breaking change. ## Unreleased +### Added + +- `html::attr::Rel` + ## v0.1.2 - 2024-12-14 ### Added diff --git a/src/html/attr.rs b/src/html/attr.rs index 636a552..7a6b71a 100644 --- a/src/html/attr.rs +++ b/src/html/attr.rs @@ -107,6 +107,35 @@ macro_rules! attr_enum { } } }; + ( + $name:ident as $article:ident $actual:expr, separated by $separator:expr; + at $url:expr; + $( $valname:ident => $valstr:expr, )* + ) => { + #[doc = concat!("Create (or append to) ", stringify!($article), " `", $actual, "` attribute")] + #[doc = concat!("(", $url, ").")] + #[derive(Debug, Clone, Copy, PartialEq, Eq)] + pub enum $name { + $( + #[doc = concat!("The value `", stringify!($valstr), "`.")] + $valname, + )* + } + + impl fmt::Display for $name { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + $( Self::$valname => $valstr.fmt(f), )* + } + } + } + + impl ElementComponent for $name { + fn add_to_element(self, element: &mut Element) { + Attr::append($actual, self, $separator).add_to_element(element); + } + } + }; } //////////////// @@ -757,6 +786,40 @@ attr_enum! { UnsafeUrl => "unsafe-url", } +attr_enum! { + Rel as a "rel", separated by " "; + at url!(normal, "rel"); + Alternate => "alternate", + Author => "author", + Bookmark => "bookmark", + Canonical => "canonical", + DnsPrefetch => "dns-prefetch", + External => "external", + Expect => "expect", + Help => "help", + Icon => "icon", + License => "license", + Manifest => "manifest", + Me => "me", + Modulepreload => "modulepreload", + Next => "next", + Nofollow => "nofollow", + Noopener => "noopener", + Noreferrer => "noreferrer", + Opener => "opener", + Pingback => "pingback", + Preconnect => "preconnect", + Prefetch => "prefetch", + Preload => "preload", + Prerender => "prerender", + Prev => "prev", + PrivacyPolicy => "privacy-policy", + Search => "search", + Stylesheet => "stylesheet", + Tag => "tag", + TermsOfService => "terms-of-service", +} + attr_append! { rel as a "rel", separated by " "; at url!(normal, "rel");