diff options
Diffstat (limited to 'src/templates')
-rw-r--r-- | src/templates/base.hbs | 155 | ||||
-rw-r--r-- | src/templates/index.hbs | 74 | ||||
-rw-r--r-- | src/templates/index.html | 85 | ||||
-rw-r--r-- | src/templates/login.hbs | 7 | ||||
-rw-r--r-- | src/templates/login.html | 6 | ||||
-rw-r--r-- | src/templates/mod.rs | 25 | ||||
-rw-r--r-- | src/templates/suggestions.hbs | 9 |
7 files changed, 261 insertions, 100 deletions
diff --git a/src/templates/base.hbs b/src/templates/base.hbs new file mode 100644 index 0000000..df3ba9d --- /dev/null +++ b/src/templates/base.hbs @@ -0,0 +1,155 @@ +<!DOCTYPE html> +<html> + +<head> + <style> + :root { + --balboa: #195970; + } + + body { + margin: 0; + padding: 0; + font-size: 1em; + } + + .model::before { + content: "⤷"; + } + + .topbar { + background-color: var(--balboa); + box-shadow: 0 0 0.5em black; + position: relative; + height: 3em; + z-index: 2; + } + + .topbar ul { + margin: 0; + padding: 0; + overflow: hidden; + } + + .topbar li { + float: left; + display: block; + padding: 14px 14px; + } + + .topbar li.right { + float: right; + } + + .topbar li a { + color: white; + text-decoration: none; + } + + .sidebar { + background-color: var(--balboa); + box-shadow: inset -0.5em 0 0.5em -0.5em black; + z-index: 1; + position: fixed; + top: 3em; + left: 0; + width: 20%; + height: 100%; + transition: 0.25s; + } + + .sidebar form { + padding: 10px 10px; + } + + .sidebar button { + font-size: 1em; + display: block; + background: none; + border: 0 none; + cursor: pointer; + color: white; + } + + .model { + margin-left: 20px; + } + + #hidden:target .sidebar { + left: -20%; + } + + .menuToggle a.openMenu { + display: none; + } + + #hidden:target .menuToggle a.closeMenu { + display: none; + } + + #hidden:target .menuToggle a.openMenu { + display: block; + } + + #hidden:target section { + margin-left: 0; + } + + .catalogTable { + width: 100%; + border-collapse: collapse; + } + + .catalogTable td, + .catalogTable th { + padding: 0.5em; + } + + .catalogTable tr:nth-child(even) { + background-color: #f2f2f2; + } + + .catalogTable tr:hover { + background-color: #ddd; + } + + .catalogTable th { + padding-top: 12px; + padding-bottom: 12px; + text-align: left; + background-color: var(--balboa); + color: white; + } + + input[type="search"] { + width: 100%; + } + + section { + /* TODO: need to make this not applicable to other templates that don't have sidebar */ + margin-left: 20%; + transition: margin-left 0.25s; + padding-top: 2em; + padding-left: 2em; + padding-right: 2em; + } + </style> +</head> + +<body id="hidden"> + <nav class="topbar"> + <ul> + {{~> navItem}} + <li><a href="/">Index</a></li> + <li><a href="#">Parts</a></li> + <li><a href="#">Cars</a></li> + <li><a href="#">Suggestions</a></li> + <li><a href="#">About</a></li> + <li class="right"><a href="/login">Login</a></li> + </ul> + </nav> + + {{~> body}} +</body> + +</html> diff --git a/src/templates/index.hbs b/src/templates/index.hbs new file mode 100644 index 0000000..6bd539b --- /dev/null +++ b/src/templates/index.hbs @@ -0,0 +1,74 @@ +{{#> base}} +{{#*inline "navItem"}} +<li> + <div class="menuToggle"> + <a class="openMenu" href="#"><span> + <svg style="width: 24px; height: 24px" viewBox="0 0 24 24"> + <path fill="currentColor" d="M3,6H21V8H3V6M3,11H21V13H3V11M3,16H21V18H3V16Z" /> + </svg> + </span></a> + <a class="closeMenu" href="#hidden"><span> + <svg style="width: 24px; height: 24px" viewBox="0 0 24 24"> + <path fill="currentColor" + d="M21,15.61L19.59,17L14.58,12L19.59,7L21,8.39L17.44,12L21,15.61M3,6H16V8H3V6M3,13V11H13V13H3M3,18V16H16V18H3Z" /> + </svg> + </span></a> + </div> +</li> +{{/inline}} +{{#*inline "body"}} +<nav class="sidebar"> + {{#each makes}} + <form action="/"> + {{#if (eq this ../selected_make)}} + <button disabled class="make"> + {{ this }} + </button> + <input type="hidden" name="make" value="{{ ../selected_make }}" /> + {{#each ../models}} + {{#if (eq this ../../selected_model)}} + <button disabled class="model">{{~ this ~}}</button> + {{else}} + <button class="model" name="model" value="{{ this }}"> + {{~ this ~}} + </button> + {{/if}} + {{else}} + <button disabled class="model">(No models found)</button> + {{/each}} + {{else}} + <button class="make" name="make" value="{{ this }}"> + {{~ this ~}} + </button> + {{/if}} + </form> + {{else}} + <button disabled class="make">(No makes found)</button> + {{/each}} +</nav> + +<section> + <form> + {{#if selected_make}} + <input type="hidden" name="make" value="{{ selected_make }}" /> + {{/if}} + {{#if selected_model}} + <input type="hidden" name="model" value="{{ selected_model }}" /> + {{/if}} + <input autofocus type="search" name="search" placeholder="hit enter to search" /> + </form> +</section> + +<section> + <table class="catalogTable"> + <tbody> + {{#each parts}} + <tr> + <td>{{ this }}</td> + </tr> + {{/each}} + </tbody> + </table> +</section> +{{/inline}} +{{/base}} diff --git a/src/templates/index.html b/src/templates/index.html deleted file mode 100644 index 4663f5d..0000000 --- a/src/templates/index.html +++ /dev/null @@ -1,85 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset="UTF-8" /> - - <style> - .make { - display: block; - background: none; - border: 0 none; - cursor: pointer; - } - - .model { - display: block; - background: none; - border: 0 none; - cursor: pointer; - margin-left: 20px; - } - - .sidebar { - width: 300px; - height: 100%; - position: fixed; - z-index: 1; - } - - .main { - margin-left: 300px; - height: 100%; - } - </style> - </head> - <body> - <div class="sidebar"> - <h1>Parts Catalog</h1> - {{#each makes}} - <form action="/parts"> - {{#if (eq this ../selected_make)}} - <button disabled class="make"> - {{ this }} - </button> - <input type="hidden" name="make" value="{{ ../selected_make }}" /> - {{#each ../models}} - {{#if (eq this ../../selected_model)}} - <button disabled class="model">{{ this }}</button> - {{else}} - <button class="model" name="model" value="{{ this }}"> - {{ this }} - </button> - {{/if}} - {{else}} - <button disabled class="model">(No models found)</button> - {{/each}} - {{else}} - <button class="make" name="make" value="{{ this }}">{{ this }}</button> - {{/if}} - </form> - {{else}} - No makes found. - {{/each}} - </div> - - <div class="main"> - <form action="/parts"> - <input type="hidden" name="make" value="{{ selected_make }}" /> - <input type="hidden" name="model" value="{{ selected_model }}" /> - <input - type="search" - name="search" - placeholder="Part #, Name, Source, etc." - /> - <button>Search</button> - </form> - <table> - {{#each parts}} - <tr> - <td>{{ this }}</td> - </tr> - {{/each}} - </table> - </div> - </body> -</html> diff --git a/src/templates/login.hbs b/src/templates/login.hbs new file mode 100644 index 0000000..84b354b --- /dev/null +++ b/src/templates/login.hbs @@ -0,0 +1,7 @@ +{{#> base}} +{{#*inline "body"}} +<body> + <a href="/login/google">Login with Google</a> +</body> +{{/inline}} +{{/base}} diff --git a/src/templates/login.html b/src/templates/login.html deleted file mode 100644 index 9329a22..0000000 --- a/src/templates/login.html +++ /dev/null @@ -1,6 +0,0 @@ -<!DOCTYPE html> -<html> - <body> - <a href="/login/google">Login with Google</a> - </body> -</html> diff --git a/src/templates/mod.rs b/src/templates/mod.rs index 3a6eb2b..534ada0 100644 --- a/src/templates/mod.rs +++ b/src/templates/mod.rs @@ -1,9 +1,16 @@ -pub static INDEX_T: &str = include_str!("index.html"); -pub static LOGIN_T: &str = include_str!("login.html"); -pub const CATALOG_L: &str = "/#menu"; -pub const PARTS_L: &str = "/parts"; -pub const PARTS_CSV_L: &str = "/parts.csv"; -pub const CARS_L: &str = "/cars"; -pub const CARS_CSV_L: &str = "/cars.csv"; -pub const SUGGESTIONS_L: &str = "/suggestions"; -pub const LOGIN_L: &str = "/login"; +use handlebars::Handlebars; +use once_cell::sync::Lazy; + +pub static REGISTRY: Lazy<Handlebars> = Lazy::new(|| { + let mut handlebars = Handlebars::new(); + handlebars + .register_template_string("index", include_str!("index.hbs")) + .unwrap(); + handlebars + .register_template_string("login", include_str!("login.hbs")) + .unwrap(); + handlebars + .register_template_string("base", include_str!("base.hbs")) + .unwrap(); + handlebars +}); diff --git a/src/templates/suggestions.hbs b/src/templates/suggestions.hbs new file mode 100644 index 0000000..f979be7 --- /dev/null +++ b/src/templates/suggestions.hbs @@ -0,0 +1,9 @@ +{{#> base}} +{{#*inline "body"}} +<section> + <form> + <!-- input for new car or part --> + </form> +</section> +{{/inline}} +{{/base}} |