about summary refs log tree commit diff
path: root/src/librustdoc/html/layout.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/librustdoc/html/layout.rs')
-rw-r--r--src/librustdoc/html/layout.rs130
1 files changed, 130 insertions, 0 deletions
diff --git a/src/librustdoc/html/layout.rs b/src/librustdoc/html/layout.rs
new file mode 100644
index 00000000000..fcf13779389
--- /dev/null
+++ b/src/librustdoc/html/layout.rs
@@ -0,0 +1,130 @@
+// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+use std::fmt;
+use std::rt::io;
+
+#[deriving(Clone)]
+pub struct Layout {
+    logo: ~str,
+    favicon: ~str,
+    crate: ~str,
+}
+
+pub struct Page<'self> {
+    title: &'self str,
+    ty: &'self str,
+    root_path: &'self str,
+}
+
+pub fn render<T: fmt::Default, S: fmt::Default>(
+    dst: &mut io::Writer, layout: &Layout, page: &Page, sidebar: &S, t: &T)
+{
+    write!(dst, "
+<!DOCTYPE html>
+<html lang=\"en\">
+<head>
+    <meta charset=\"utf-8\" />
+    <title>{title}</title>
+
+    <link href='http://fonts.googleapis.com/css?family=Oswald:700|Inconsolata:400'
+          rel='stylesheet' type='text/css'>
+    <link rel=\"stylesheet\" type=\"text/css\" href=\"{root_path}main.css\">
+
+    {favicon, select, none{} other{
+        <link rel=\"icon\" href=\"#\" sizes=\"16x16\"
+              type=\"image/vnd.microsoft.icon\" />}}
+</head>
+<body>
+    <!--[if lte IE 8]>
+    <div class=\"warning\">
+        This old browser is unsupported and will most likely display funky
+        things
+    </div>
+    <![endif]-->
+
+    <section class=\"sidebar\">
+        {logo, select, none{} other{
+            <a href='{root_path}index.html'><img src='#' alt=''/></a>
+        }}
+
+        {sidebar}
+    </section>
+
+    <nav class=\"sub\">
+        <form class=\"search-form js-only\">
+            <input class=\"search-input\" name=\"search\"
+                   autocomplete=\"off\" />
+            <button class=\"do-search\">Search</button>
+        </form>
+    </nav>
+
+    <section class=\"content {ty}\">{content}</section>
+
+    <section class=\"footer\"></section>
+
+    <script>
+        var rootPath = \"{root_path}\";
+    </script>
+    <script src=\"{root_path}jquery.js\"></script>
+    <script src=\"{root_path}{crate}/search-index.js\"></script>
+    <script src=\"{root_path}main.js\"></script>
+
+    <div id=\"help\" class=\"hidden\">
+        <div class=\"shortcuts\">
+            <h1>Keyboard shortcuts</h1>
+            <dl>
+                <dt>?</dt>
+                <dd>Show this help dialog</dd>
+                <dt>S</dt>
+                <dd>Focus the search field</dd>
+                <dt>&uarr;</dt>
+                <dd>Move up in search results</dd>
+                <dt>&darr;</dt>
+                <dd>Move down in search results</dd>
+                <dt>&\\#9166;</dt>
+                <dd>Go to active search result</dd>
+            </dl>
+        </div>
+        <div class=\"infos\">
+            <h1>Search tricks</h1>
+            <p>
+                Prefix searches with a type followed by a colon (e.g.
+                <code>fn:</code>) to restrict the search to a given type.
+            </p>
+            <p>
+                Accepted types are: <code>fn</code>, <code>mod</code>,
+                <code>struct</code> (or <code>str</code>), <code>enum</code>,
+                <code>trait</code>, <code>typedef</code> (or
+                <code>tdef</code>).
+            </p>
+        </div>
+    </div>
+</body>
+</html>
+",
+    content   = *t,
+    root_path = page.root_path,
+    ty        = page.ty,
+    logo      = nonestr(layout.logo),
+    title     = page.title,
+    favicon   = nonestr(layout.favicon),
+    sidebar   = *sidebar,
+    crate     = layout.crate,
+    );
+}
+
+fn boolstr(b: bool) -> &'static str {
+    if b { "true" } else { "false" }
+}
+
+fn nonestr<'a>(s: &'a str) -> &'a str {
+    if s == "" { "none" } else { s }
+}