181 lines
6.1 KiB
Elixir
181 lines
6.1 KiB
Elixir
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
<title>Kaffy Admin</title>
|
|
|
|
<!-- Bootstrap core CSS -->
|
|
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
|
|
|
|
<style>
|
|
.bd-placeholder-img {
|
|
font-size: 1.125rem;
|
|
text-anchor: middle;
|
|
-webkit-user-select: none;
|
|
-moz-user-select: none;
|
|
-ms-user-select: none;
|
|
user-select: none;
|
|
}
|
|
|
|
@media (min-width: 768px) {
|
|
.bd-placeholder-img-lg {
|
|
font-size: 3.5rem;
|
|
}
|
|
}
|
|
|
|
body {
|
|
font-size: .875rem;
|
|
}
|
|
|
|
.feather {
|
|
width: 16px;
|
|
height: 16px;
|
|
vertical-align: text-bottom;
|
|
}
|
|
|
|
/*
|
|
* Sidebar
|
|
*/
|
|
|
|
.sidebar {
|
|
position: fixed;
|
|
top: 0;
|
|
bottom: 0;
|
|
left: 0;
|
|
z-index: 100; /* Behind the navbar */
|
|
padding: 48px 0 0; /* Height of navbar */
|
|
box-shadow: inset -1px 0 0 rgba(0, 0, 0, .1);
|
|
}
|
|
|
|
.sidebar-sticky {
|
|
position: relative;
|
|
top: 0;
|
|
height: calc(100vh - 48px);
|
|
padding-top: .5rem;
|
|
overflow-x: hidden;
|
|
overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */
|
|
}
|
|
|
|
@supports ((position: -webkit-sticky) or (position: sticky)) {
|
|
.sidebar-sticky {
|
|
position: -webkit-sticky;
|
|
position: sticky;
|
|
}
|
|
}
|
|
|
|
.sidebar .nav-link {
|
|
font-weight: 500;
|
|
color: #333;
|
|
}
|
|
|
|
.sidebar .nav-link .feather {
|
|
margin-right: 4px;
|
|
color: #999;
|
|
}
|
|
|
|
.sidebar .nav-link.active {
|
|
color: #007bff;
|
|
}
|
|
|
|
.sidebar .nav-link:hover .feather,
|
|
.sidebar .nav-link.active .feather {
|
|
color: inherit;
|
|
}
|
|
|
|
.sidebar-heading {
|
|
font-size: .75rem;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
/*
|
|
* Content
|
|
*/
|
|
|
|
[role="main"] {
|
|
padding-top: 133px; /* Space for fixed navbar */
|
|
}
|
|
|
|
@media (min-width: 768px) {
|
|
[role="main"] {
|
|
padding-top: 48px; /* Space for fixed navbar */
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Navbar
|
|
*/
|
|
|
|
.navbar-brand {
|
|
padding-top: .75rem;
|
|
padding-bottom: .75rem;
|
|
font-size: 1rem;
|
|
background-color: rgba(0, 0, 0, .25);
|
|
box-shadow: inset -1px 0 0 rgba(0, 0, 0, .25);
|
|
}
|
|
|
|
.navbar .form-control {
|
|
padding: .75rem 1rem;
|
|
border-width: 0;
|
|
border-radius: 0;
|
|
}
|
|
|
|
.form-control-dark {
|
|
color: #fff;
|
|
background-color: rgba(255, 255, 255, .1);
|
|
border-color: rgba(255, 255, 255, .1);
|
|
}
|
|
|
|
.form-control-dark:focus {
|
|
border-color: transparent;
|
|
box-shadow: 0 0 0 3px rgba(255, 255, 255, .25);
|
|
}
|
|
</style>
|
|
<!-- Custom styles for this template -->
|
|
|
|
</head>
|
|
|
|
<body>
|
|
<nav class="navbar navbar-dark fixed-top bg-dark flex-md-nowrap p-0 shadow">
|
|
<%= link Kaffy.Utils.title(), to: Kaffy.Utils.router().kaffy_home_path(@conn, :index), class: "navbar-brand col-sm-3 col-md-2 mr-0" %>
|
|
<ul class="navbar-nav px-3">
|
|
<li class="nav-item text-nowrap">
|
|
<a class="nav-link" href="#">Sign out</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
|
|
<div class="container-fluid">
|
|
<div class="row">
|
|
<nav class="col-md-2 d-md-block bg-light sidebar">
|
|
<div class="sidebar-sticky">
|
|
<ul class="nav flex-column">
|
|
<%= for context <- Kaffy.Utils.contexts(@conn) do %>
|
|
<li class="nav-item">
|
|
<a name="<%= context %>" class="nav-link"><strong><%= Kaffy.Utils.context_name(@conn, context) %></strong></a>
|
|
<ul style="list-style:none;">
|
|
<%= for {resource, options} <- Kaffy.Utils.schemas_for_context(@conn, context) do %>
|
|
<%= if Kaffy.ResourceAdmin.authorized?(options, @conn) do %>
|
|
<li class="nav-item">
|
|
<%= link Kaffy.ResourceAdmin.plural_name(options), to: Kaffy.Utils.router().kaffy_resource_path(@conn, :index, context, resource), class: "nav-link" %>
|
|
</li>
|
|
<% end %>
|
|
<% end %>
|
|
</ul>
|
|
</li>
|
|
<% end %>
|
|
</ul>
|
|
</div>
|
|
</nav>
|
|
|
|
<main role="main" class="col-md-9 ml-sm-auto col-lg-10 px-4 mt-3">
|
|
<%= if get_flash(@conn, :info) do %><p class="alert alert-info" role="alert"><%= get_flash(@conn, :info) %></p><% end %>
|
|
<%= if get_flash(@conn, :error) do %><p class="alert alert-danger" role="alert"><%= get_flash(@conn, :error) %></p><% end %>
|
|
<%= @inner_content %>
|
|
</main>
|
|
</div>
|
|
</div>
|
|
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
|
|
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
|
|
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
|
|
</html>
|