feat(templates): Add new MDL based index page
This commit is contained in:
parent
d0d3777eaa
commit
eaf1c46ba8
3 changed files with 157 additions and 36 deletions
|
@ -203,7 +203,8 @@ fn start_http_server(base_url: String,
|
||||||
.resource("/oidc/login", |r| r.method(Method::GET).with(login))
|
.resource("/oidc/login", |r| r.method(Method::GET).with(login))
|
||||||
.resource("/oidc/callback", |r| r.method(Method::POST).with3(callback))
|
.resource("/oidc/callback", |r| r.method(Method::POST).with3(callback))
|
||||||
.static_file("/static/highlight.css", include_bytes!("../static/highlight.css"))
|
.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 {
|
if require_login {
|
||||||
app.middleware(RequireLogin)
|
app.middleware(RequireLogin)
|
||||||
|
|
92
static/styles.css
Normal file
92
static/styles.css
Normal file
|
@ -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;
|
||||||
|
}
|
|
@ -2,44 +2,72 @@
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
|
||||||
<meta http-equiv="Content-Security-Policy" content="script-src 'self';">
|
<title>Converse: Index</title>
|
||||||
<!-- 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">
|
<!-- TODO -->
|
||||||
<title>Converse Index</title>
|
<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>
|
</head>
|
||||||
<body>
|
<body class="converse mdl-base mdl-color-text--grey-700 mdl-color--grey-100">
|
||||||
<header>
|
<div class="mdl-layout mdl-layout--fixed-header mdl-js-layout mdl-color--grey-100">
|
||||||
<nav class="navbar navbar-light bg-light justify-content-between mb-3">
|
<header class="mdl-layout__header mdl-layout__header--scroll mdl-color--primary-dark">
|
||||||
<a class="navbar-brand" href="/">
|
<div class="mdl-layout__header-row">
|
||||||
<h2>Converse</h2>
|
<a href="/" class="mdl-layout-title mdl-color-text--blue-grey-50 cvs-title">Converse</a>
|
||||||
</a>
|
<div class="mdl-layout-spacer"></div>
|
||||||
<form class="form-inline" method="get" action="/search">
|
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdl-color-text--blue-grey-50 search-field">
|
||||||
<input class="form-control mr-sm-2" type="search" placeholder="Search" name="query" aria-label="Search">
|
<form method="get" action="/search">
|
||||||
<button class="btn btn-outline-success my-2 my-sm-0 mr-1" type="submit">Search</button>
|
<input class="mdl-textfield__input" type="search" id="search-query" aria-label="Search" name="query">
|
||||||
<a class="btn btn-outline-secondary my-2" href="/thread/new">New thread</a>
|
<label class="mdl-textfield__label mdl-color-text--blue-grey-100" for="search-query">Search query...</label>
|
||||||
|
<input type="submit" hidden /> <!-- TODO: necessary? -->
|
||||||
</form>
|
</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>
|
</div>
|
||||||
|
|
||||||
|
<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>
|
</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 %}
|
{%- endfor %}
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</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>
|
</div>
|
||||||
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
|
<script src="https://code.getmdl.io/1.3.0/material.min.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
Loading…
Reference in a new issue