about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVincent Ambo <tazjin@gmail.com>2018-05-20T12·12+0200
committerVincent Ambo <github@tazj.in>2018-05-22T07·45+0200
commiteaf1c46ba8515323c9d86c6fa2daa828f41e791c (patch)
tree63b32a7d13c06aa6ee0a2670f4fede165ba7545a
parentd0d3777eaab9c1be13e68db3171040288ad94dd6 (diff)
feat(templates): Add new MDL based index page
-rw-r--r--src/main.rs3
-rw-r--r--static/styles.css92
-rw-r--r--templates/index.html98
3 files changed, 157 insertions, 36 deletions
diff --git a/src/main.rs b/src/main.rs
index 9ca3c8552c18..4db4ab5cc920 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -203,7 +203,8 @@ fn start_http_server(base_url: String,
             .resource("/oidc/login", |r| r.method(Method::GET).with(login))
             .resource("/oidc/callback", |r| r.method(Method::POST).with3(callback))
             .static_file("/static/highlight.css", include_bytes!("../static/highlight.css"))
-            .static_file("/static/highlight.js", include_bytes!("../static/highlight.js"));
+            .static_file("/static/highlight.js", include_bytes!("../static/highlight.js"))
+            .static_file("/static/styles.css", include_bytes!("../static/styles.css"));
 
         if require_login {
             app.middleware(RequireLogin)
diff --git a/static/styles.css b/static/styles.css
new file mode 100644
index 000000000000..9e0ea7c692f1
--- /dev/null
+++ b/static/styles.css
@@ -0,0 +1,92 @@
+* :not(.material-icons) {
+  font-family: 'Ubuntu', sans-serif !important;
+}
+
+.cvs-title, .thread-link {
+    text-decoration: none;
+}
+
+.thread-list-item:hover {
+    background-color: #f5f5f5;
+}
+
+.thread-link {
+    padding: 5px;
+    padding-top: 10px;
+}
+
+.thread-title {
+    padding-right: 15vw;
+}
+
+.search-field {
+    margin-right: 15px;
+    max-width: 200px;
+}
+
+.thread-author {
+    font-style: italic;
+    font-size: 85%;
+}
+
+@media only screen and (min-width: 768px) {
+    .converse main {
+        padding-top: 10px;
+        padding-bottom: 10px;
+    }
+}
+
+.mdl-list__item-text-body {
+    max-height: 40px;
+}
+
+.mdl-list__item-primary-content:after {
+    border-bottom: 1px solid rgba(0,0,0,.13);
+    content:"";
+    position: absolute;
+    width: 80%;
+}
+
+html, body {
+  margin: 0;
+  padding: 0;
+}
+.converse .mdl-layout__header-row {
+  padding-left: 40px;
+}
+.converse .mdl-layout.is-small-screen .mdl-layout__header-row h3 {
+  font-size: inherit;
+}
+.converse .mdl-card {
+  height: auto;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-flex-direction: column;
+      -ms-flex-direction: column;
+          flex-direction: column;
+}
+.converse .mdl-card > * {
+  height: auto;
+}
+.converse .mdl-card .mdl-card__supporting-text {
+  margin: 40px;
+  -webkit-flex-grow: 1;
+      -ms-flex-positive: 1;
+          flex-grow: 1;
+  padding: 0;
+  color: inherit;
+  width: calc(100% - 80px);
+}
+.mdl-demo.converse .mdl-card__supporting-text h4 {
+  margin-top: 0;
+  margin-bottom: 20px;
+}
+.converse .mdl-card__actions {
+  margin: 0;
+  padding: 4px 40px;
+  color: inherit;
+}
+.converse section.section--center {
+  max-width: 860px;
+}
diff --git a/templates/index.html b/templates/index.html
index 024d0aef534d..12369d379238 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -2,44 +2,72 @@
 <html lang="en">
   <head>
     <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
-    <meta http-equiv="Content-Security-Policy" content="script-src 'self';">
-    <!-- Bootstrap CSS -->
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
-    <title>Converse Index</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
+    <title>Converse: Index</title>
+
+    <!-- TODO -->
+    <meta http-equiv="Content-Security-Policy" content="script-src https://code.getmdl.io 'self';">
+    <!-- <link rel="shortcut icon" href="images/favicon.png"> -->
+
+    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Ubuntu">
+    <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
+    <link rel="stylesheet" href="https://code.getmdl.io/1.3.0/material.blue_grey-orange.min.css" />
+    <link rel="stylesheet" href="/static/styles.css">
   </head>
-  <body>
-    <header>
-      <nav class="navbar navbar-light bg-light justify-content-between mb-3">
-        <a class="navbar-brand" href="/">
-          <h2>Converse</h2>
-        </a>
-        <form class="form-inline" method="get" action="/search">
-          <input class="form-control mr-sm-2" type="search" placeholder="Search" name="query" aria-label="Search">
-          <button class="btn btn-outline-success my-2 my-sm-0 mr-1" type="submit">Search</button>
-          <a class="btn btn-outline-secondary my-2" href="/thread/new">New thread</a>
-        </form>
-      </nav>
-    </header>
-    <div class="container">
-      <div class="row">
-        <div class="col-12">
-          <div class="list-group">
-            {% for thread in threads -%}
-            <a href="/thread/{{ thread.id }}" class="list-group-item list-group-item-action flex-column align-items-start {%- if thread.sticky %} bg-secondary text-white {% endif -%}">
-              <div class="d-flex w-100 justify-content-between">
-                <h5 class="mb-1">{% if thread.sticky %}<span class="badge badge-light">Sticky</span> {% endif %}{{ thread.title | safe }}</h5>
-                <small class="{% if thread.sticky %}text-white{% else %}text-muted{% endif %}">{{ thread.posted }}</small>
-              </div>
-              <div class="d-flex justify-content-between">
-                <p class="mb-1">Created by {{ thread.author_name }}</p>
-                <small>Last post by {{ thread.post_author }}</small>
-              </div>
-            </a>
-            {%- endfor %}
+  <body class="converse mdl-base mdl-color-text--grey-700 mdl-color--grey-100">
+    <div class="mdl-layout mdl-layout--fixed-header mdl-js-layout mdl-color--grey-100">
+      <header class="mdl-layout__header mdl-layout__header--scroll mdl-color--primary-dark">
+        <div class="mdl-layout__header-row">
+          <a href="/" class="mdl-layout-title mdl-color-text--blue-grey-50 cvs-title">Converse</a>
+          <div class="mdl-layout-spacer"></div>
+          <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdl-color-text--blue-grey-50 search-field">
+            <form method="get" action="/search">
+              <input class="mdl-textfield__input" type="search" id="search-query" aria-label="Search" name="query">
+              <label class="mdl-textfield__label mdl-color-text--blue-grey-100" for="search-query">Search query...</label>
+              <input type="submit" hidden /> <!-- TODO: necessary? -->
+            </form>
           </div>
+          &nbsp;
+          <a href="/thread/new">
+            <button class="mdl-button mdl-js-button mdl-button--raised mdl-button--accent mdl-js-ripple-effect">
+              New Thread
+            </button>
+          </a>
         </div>
+      </header>
+      <main class="mdl-layout__content">
+        <section class="section--center mdl-grid mdl-grid--no-spacing mdl-shadow--2dp">
+          <div class="mdl-card mdl-cell mdl-cell--12-col">
+            <div class="mdl-card__supporting-text mdl-grid">
+              <h4 class="mdl-cell mdl-cell--12-col">Latest threads:</h4>
+              <ul class="mdl-list">
+                {% for thread in threads -%}
+                <li class="mdl-list__item thread-list-item mdl-list__item--three-line">
+                  <a class="thread-link mdl-color-text--grey-800" href="/thread/{{ thread.id }}">
+
+                    <span class="mdl-list__item-primary-content {% if not loop.last %}thread-divider{% endif %}">
+                      <button class="mdl-button mdl-js-button mdl-button--fab mdl-button--mini-fab mdl-button--colored mdl-list__item-icon">
+                        <i class="material-icons">{% if thread.sticky -%} announcement {%- else -%} library_books{% endif %}</i>
+                      </button>
+                      <span class="thread-title">{{ thread.title | safe }}<span class="thread-author"> by {{ thread.author_name }}</span></span>
+                      <span class="mdl-list__item-text-body">
+                        Last reply by {{ thread.post_author }} on {{ thread.posted }}.
+                      </span>
+                    </span>
+                  </a>
+                </li>
+                {%- endfor %}
+              </ul>
+            </div>
+          </div>
+        </section>
+      </main>
+      <footer class="mdl-mini-footer">
+        <div class="mdl-mini-footer--right-section">
+          <p>Powered by <a href="https://github.com/tazjin/converse">Converse</a></p>
+        </div>
+      </footer>
       </div>
-    </div>
+      <script src="https://code.getmdl.io/1.3.0/material.min.js"></script>
   </body>
 </html>