From b81c4a10f0a07d3a5ffa38ecc26f86be227922f0 Mon Sep 17 00:00:00 2001
From: Ernestas Poskus <ernestas.poskus@gmail.com>
Date: Mon, 5 Dec 2016 19:17:57 +0200
Subject: [PATCH 1/4] Add Javascript element

Drop type=text/javascript from Javascript fn

Rename Javascript fn to Js
---
 maud_extras/lib.rs | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/maud_extras/lib.rs b/maud_extras/lib.rs
index bbff757..93e3db2 100644
--- a/maud_extras/lib.rs
+++ b/maud_extras/lib.rs
@@ -30,3 +30,29 @@ impl<T: AsRef<str>> Render for Css<T> {
         }
     }
 }
+
+/// Links to an external javascript.
+///
+/// # Example
+///
+/// ```rust
+/// # #![feature(plugin)]
+/// # #![plugin(maud_macros)]
+/// # extern crate maud;
+/// # extern crate maud_extras;
+/// # use maud_extras::*;
+/// # fn main() {
+/// let markup = html! { (Js("app.js")) };
+/// assert_eq!(markup.into_string(),
+///            r#"<script src="app.js"></script>"#);
+/// # }
+/// ```
+pub struct Js<T: AsRef<str>>(pub T);
+
+impl<T: AsRef<str>> Render for Js<T> {
+    fn render(&self) -> Markup {
+        html! {
+            script src=(self.0.as_ref()) {}
+        }
+    }
+}

From 4d3e2cc775e81b3a4ce719aebe15779a9359e503 Mon Sep 17 00:00:00 2001
From: Ernestas Poskus <ernestas.poskus@gmail.com>
Date: Sun, 11 Dec 2016 22:13:26 +0200
Subject: [PATCH 2/4] Add meta tags element

---
 maud_extras/lib.rs | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/maud_extras/lib.rs b/maud_extras/lib.rs
index 93e3db2..54ee011 100644
--- a/maud_extras/lib.rs
+++ b/maud_extras/lib.rs
@@ -56,3 +56,29 @@ impl<T: AsRef<str>> Render for Js<T> {
         }
     }
 }
+
+/// Generate <meta> elements.
+///
+/// # Example
+///
+/// ```rust
+/// # #![feature(plugin)]
+/// # #![plugin(maud_macros)]
+/// # extern crate maud;
+/// # extern crate maud_extras;
+/// # use maud_extras::*;
+/// # fn main() {
+/// let m = Meta("description", "test description");
+/// assert_eq!(html!{ (m) }.into_string(),
+///            r#"<meta name="description" content="test description">"#);
+/// # }
+/// ```
+pub struct Meta<T: AsRef<str>, U: AsRef<str>>(pub T, pub U);
+
+impl<T: AsRef<str>, U: AsRef<str>> Render for Meta<T, U> {
+    fn render(&self) -> Markup {
+        html! {
+            meta name=(self.0.as_ref()) content=(self.1.as_ref()) /
+        }
+    }
+}

From 5410e73e11ff2bb9ad4a18a5e147d5bc7fe2055d Mon Sep 17 00:00:00 2001
From: Ernestas Poskus <ernestas.poskus@gmail.com>
Date: Sun, 11 Dec 2016 22:14:10 +0200
Subject: [PATCH 3/4] Add meta title element

---
 maud_extras/lib.rs | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/maud_extras/lib.rs b/maud_extras/lib.rs
index 54ee011..5b4db81 100644
--- a/maud_extras/lib.rs
+++ b/maud_extras/lib.rs
@@ -82,3 +82,29 @@ impl<T: AsRef<str>, U: AsRef<str>> Render for Meta<T, U> {
         }
     }
 }
+
+/// Generate <title> element.
+///
+/// # Example
+///
+/// ```rust
+/// # #![feature(plugin)]
+/// # #![plugin(maud_macros)]
+/// # extern crate maud;
+/// # extern crate maud_extras;
+/// # use maud_extras::*;
+/// # fn main() {
+/// let markup = html! { (Title("Maud")) };
+/// assert_eq!(markup.into_string(),
+///            r#"<title>Maud</title>"#);
+/// # }
+/// ```
+pub struct Title<T: AsRef<str>>(pub T);
+
+impl<T: AsRef<str>> Render for Title<T> {
+    fn render(&self) -> Markup {
+        html! {
+            title (self.0.as_ref())
+        }
+    }
+}

From 448fa0341ae9303ae0a61d5450c06a8d00d8b2ba Mon Sep 17 00:00:00 2001
From: Ernestas Poskus <ernestas.poskus@gmail.com>
Date: Sun, 11 Dec 2016 22:17:44 +0200
Subject: [PATCH 4/4] Add meta charset element

---
 maud_extras/lib.rs | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/maud_extras/lib.rs b/maud_extras/lib.rs
index 5b4db81..ceaa959 100644
--- a/maud_extras/lib.rs
+++ b/maud_extras/lib.rs
@@ -108,3 +108,29 @@ impl<T: AsRef<str>> Render for Title<T> {
         }
     }
 }
+
+/// Generate <meta charset=""> element.
+///
+/// # Example
+///
+/// ```rust
+/// # #![feature(plugin)]
+/// # #![plugin(maud_macros)]
+/// # extern crate maud;
+/// # extern crate maud_extras;
+/// # use maud_extras::*;
+/// # fn main() {
+/// let markup = html! { (Charset("utf-8")) };
+/// assert_eq!(markup.into_string(),
+///            r#"<meta charset="utf-8">"#);
+/// # }
+/// ```
+pub struct Charset<T: AsRef<str>>(pub T);
+
+impl<T: AsRef<str>> Render for Charset<T> {
+    fn render(&self) -> Markup {
+        html! {
+            meta charset=(self.0.as_ref()) /
+        }
+    }
+}