Browse Source
First Commit
First Commit
This branch seeks to implement the admin area of the web app in a pre-made template. For now, start-bootstrap has been chosen. In this commit, the home page of the admin area has been implemented in a red black theme. Rest of the functionality will be implemented in subsequent commits.master
Rohan Sircar
5 years ago
12 changed files with 12168 additions and 75 deletions
-
52chatto/src/main/resources/static/css/admin-custom.css
-
11003chatto/src/main/resources/static/css/sb-admin-2.css
-
1chatto/src/main/resources/static/img/undraw_posting_photo.svg
-
118chatto/src/main/resources/static/js/demo/chart-area-demo.js
-
111chatto/src/main/resources/static/js/demo/chart-bar-demo.js
-
35chatto/src/main/resources/static/js/demo/chart-pie-demo.js
-
4chatto/src/main/resources/static/js/demo/datatables-demo.js
-
49chatto/src/main/resources/static/js/sb-admin-2.js
-
408chatto/src/main/resources/templates/admin/home.html
-
110chatto/src/main/resources/templates/admin/home_old.html
-
342chatto/src/main/resources/templates/fragments/admin.html
-
10chatto/src/main/resources/templates/fragments/head.html
@ -0,0 +1,52 @@ |
|||
.text-primary-dark { |
|||
/* color: #67b2fd; */ |
|||
color: #7accff; |
|||
} |
|||
|
|||
.border-left-primary-dark { |
|||
border-left: 0.25rem solid #7accff !important; |
|||
} |
|||
|
|||
.sidebar .nav-item .collapse .collapse-inner .collapse-item, |
|||
.sidebar .nav-item .collapsing .collapse-inner .collapse-item { |
|||
padding: 0.5rem 1rem; |
|||
margin: 0 0.5rem; |
|||
display: block; |
|||
color: #fff; |
|||
text-decoration: none; |
|||
border-radius: 0.35rem; |
|||
white-space: nowrap; |
|||
} |
|||
|
|||
.sidebar-dark .nav-item .nav-link i { |
|||
color: rgba(255, 255, 255, 0.7); |
|||
} |
|||
|
|||
.sidebar-dark .nav-item .nav-link { |
|||
color: rgba(255, 255, 255, 0.95); |
|||
} |
|||
|
|||
.sidebar-dark .nav-item .nav-link[data-toggle="collapse"]::after { |
|||
color: rgba(255, 255, 255, 0.8); |
|||
} |
|||
|
|||
.sidebar .nav-item .collapse .collapse-inner .collapse-item:hover, |
|||
.sidebar .nav-item .collapsing .collapse-inner .collapse-item:hover { |
|||
background-color: #f17261; |
|||
} |
|||
|
|||
.sidebar { |
|||
min-height: 100%; |
|||
} |
|||
|
|||
.text-info { |
|||
color: #5bd6e8 !important; |
|||
} |
|||
|
|||
/* :root { |
|||
--info: #5bd6e8; |
|||
} */ |
|||
|
|||
.sidebar-dark hr.sidebar-divider { |
|||
border-top: 1px solid rgba(255, 255, 255, 0.5); |
|||
} |
11003
chatto/src/main/resources/static/css/sb-admin-2.css
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1
chatto/src/main/resources/static/img/undraw_posting_photo.svg
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,118 @@ |
|||
// Set new default font family and font color to mimic Bootstrap's default styling
|
|||
Chart.defaults.global.defaultFontFamily = 'Nunito', '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif'; |
|||
Chart.defaults.global.defaultFontColor = '#858796'; |
|||
|
|||
function number_format(number, decimals, dec_point, thousands_sep) { |
|||
// * example: number_format(1234.56, 2, ',', ' ');
|
|||
// * return: '1 234,56'
|
|||
number = (number + '').replace(',', '').replace(' ', ''); |
|||
var n = !isFinite(+number) ? 0 : +number, |
|||
prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), |
|||
sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep, |
|||
dec = (typeof dec_point === 'undefined') ? '.' : dec_point, |
|||
s = '', |
|||
toFixedFix = function(n, prec) { |
|||
var k = Math.pow(10, prec); |
|||
return '' + Math.round(n * k) / k; |
|||
}; |
|||
// Fix for IE parseFloat(0.55).toFixed(0) = 0;
|
|||
s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.'); |
|||
if (s[0].length > 3) { |
|||
s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep); |
|||
} |
|||
if ((s[1] || '').length < prec) { |
|||
s[1] = s[1] || ''; |
|||
s[1] += new Array(prec - s[1].length + 1).join('0'); |
|||
} |
|||
return s.join(dec); |
|||
} |
|||
|
|||
// Area Chart Example
|
|||
var ctx = document.getElementById("myAreaChart"); |
|||
var myLineChart = new Chart(ctx, { |
|||
type: 'line', |
|||
data: { |
|||
labels: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], |
|||
datasets: [{ |
|||
label: "Earnings", |
|||
lineTension: 0.3, |
|||
backgroundColor: "rgba(78, 115, 223, 0.05)", |
|||
borderColor: "rgba(78, 115, 223, 1)", |
|||
pointRadius: 3, |
|||
pointBackgroundColor: "rgba(78, 115, 223, 1)", |
|||
pointBorderColor: "rgba(78, 115, 223, 1)", |
|||
pointHoverRadius: 3, |
|||
pointHoverBackgroundColor: "rgba(78, 115, 223, 1)", |
|||
pointHoverBorderColor: "rgba(78, 115, 223, 1)", |
|||
pointHitRadius: 10, |
|||
pointBorderWidth: 2, |
|||
data: [0, 10000, 5000, 15000, 10000, 20000, 15000, 25000, 20000, 30000, 25000, 40000], |
|||
}], |
|||
}, |
|||
options: { |
|||
maintainAspectRatio: false, |
|||
layout: { |
|||
padding: { |
|||
left: 10, |
|||
right: 25, |
|||
top: 25, |
|||
bottom: 0 |
|||
} |
|||
}, |
|||
scales: { |
|||
xAxes: [{ |
|||
time: { |
|||
unit: 'date' |
|||
}, |
|||
gridLines: { |
|||
display: false, |
|||
drawBorder: false |
|||
}, |
|||
ticks: { |
|||
maxTicksLimit: 7 |
|||
} |
|||
}], |
|||
yAxes: [{ |
|||
ticks: { |
|||
maxTicksLimit: 5, |
|||
padding: 10, |
|||
// Include a dollar sign in the ticks
|
|||
callback: function(value, index, values) { |
|||
return '$' + number_format(value); |
|||
} |
|||
}, |
|||
gridLines: { |
|||
color: "rgb(234, 236, 244)", |
|||
zeroLineColor: "rgb(234, 236, 244)", |
|||
drawBorder: false, |
|||
borderDash: [2], |
|||
zeroLineBorderDash: [2] |
|||
} |
|||
}], |
|||
}, |
|||
legend: { |
|||
display: false |
|||
}, |
|||
tooltips: { |
|||
backgroundColor: "rgb(255,255,255)", |
|||
bodyFontColor: "#858796", |
|||
titleMarginBottom: 10, |
|||
titleFontColor: '#6e707e', |
|||
titleFontSize: 14, |
|||
borderColor: '#dddfeb', |
|||
borderWidth: 1, |
|||
xPadding: 15, |
|||
yPadding: 15, |
|||
displayColors: false, |
|||
intersect: false, |
|||
mode: 'index', |
|||
caretPadding: 10, |
|||
callbacks: { |
|||
label: function(tooltipItem, chart) { |
|||
var datasetLabel = chart.datasets[tooltipItem.datasetIndex].label || ''; |
|||
return datasetLabel + ': $' + number_format(tooltipItem.yLabel); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}); |
@ -0,0 +1,111 @@ |
|||
// Set new default font family and font color to mimic Bootstrap's default styling
|
|||
Chart.defaults.global.defaultFontFamily = 'Nunito', '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif'; |
|||
Chart.defaults.global.defaultFontColor = '#858796'; |
|||
|
|||
function number_format(number, decimals, dec_point, thousands_sep) { |
|||
// * example: number_format(1234.56, 2, ',', ' ');
|
|||
// * return: '1 234,56'
|
|||
number = (number + '').replace(',', '').replace(' ', ''); |
|||
var n = !isFinite(+number) ? 0 : +number, |
|||
prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), |
|||
sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep, |
|||
dec = (typeof dec_point === 'undefined') ? '.' : dec_point, |
|||
s = '', |
|||
toFixedFix = function(n, prec) { |
|||
var k = Math.pow(10, prec); |
|||
return '' + Math.round(n * k) / k; |
|||
}; |
|||
// Fix for IE parseFloat(0.55).toFixed(0) = 0;
|
|||
s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.'); |
|||
if (s[0].length > 3) { |
|||
s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep); |
|||
} |
|||
if ((s[1] || '').length < prec) { |
|||
s[1] = s[1] || ''; |
|||
s[1] += new Array(prec - s[1].length + 1).join('0'); |
|||
} |
|||
return s.join(dec); |
|||
} |
|||
|
|||
// Bar Chart Example
|
|||
var ctx = document.getElementById("myBarChart"); |
|||
var myBarChart = new Chart(ctx, { |
|||
type: 'bar', |
|||
data: { |
|||
labels: ["January", "February", "March", "April", "May", "June"], |
|||
datasets: [{ |
|||
label: "Revenue", |
|||
backgroundColor: "#4e73df", |
|||
hoverBackgroundColor: "#2e59d9", |
|||
borderColor: "#4e73df", |
|||
data: [4215, 5312, 6251, 7841, 9821, 14984], |
|||
}], |
|||
}, |
|||
options: { |
|||
maintainAspectRatio: false, |
|||
layout: { |
|||
padding: { |
|||
left: 10, |
|||
right: 25, |
|||
top: 25, |
|||
bottom: 0 |
|||
} |
|||
}, |
|||
scales: { |
|||
xAxes: [{ |
|||
time: { |
|||
unit: 'month' |
|||
}, |
|||
gridLines: { |
|||
display: false, |
|||
drawBorder: false |
|||
}, |
|||
ticks: { |
|||
maxTicksLimit: 6 |
|||
}, |
|||
maxBarThickness: 25, |
|||
}], |
|||
yAxes: [{ |
|||
ticks: { |
|||
min: 0, |
|||
max: 15000, |
|||
maxTicksLimit: 5, |
|||
padding: 10, |
|||
// Include a dollar sign in the ticks
|
|||
callback: function(value, index, values) { |
|||
return '$' + number_format(value); |
|||
} |
|||
}, |
|||
gridLines: { |
|||
color: "rgb(234, 236, 244)", |
|||
zeroLineColor: "rgb(234, 236, 244)", |
|||
drawBorder: false, |
|||
borderDash: [2], |
|||
zeroLineBorderDash: [2] |
|||
} |
|||
}], |
|||
}, |
|||
legend: { |
|||
display: false |
|||
}, |
|||
tooltips: { |
|||
titleMarginBottom: 10, |
|||
titleFontColor: '#6e707e', |
|||
titleFontSize: 14, |
|||
backgroundColor: "rgb(255,255,255)", |
|||
bodyFontColor: "#858796", |
|||
borderColor: '#dddfeb', |
|||
borderWidth: 1, |
|||
xPadding: 15, |
|||
yPadding: 15, |
|||
displayColors: false, |
|||
caretPadding: 10, |
|||
callbacks: { |
|||
label: function(tooltipItem, chart) { |
|||
var datasetLabel = chart.datasets[tooltipItem.datasetIndex].label || ''; |
|||
return datasetLabel + ': $' + number_format(tooltipItem.yLabel); |
|||
} |
|||
} |
|||
}, |
|||
} |
|||
}); |
@ -0,0 +1,35 @@ |
|||
// Set new default font family and font color to mimic Bootstrap's default styling
|
|||
Chart.defaults.global.defaultFontFamily = 'Nunito', '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif'; |
|||
Chart.defaults.global.defaultFontColor = '#858796'; |
|||
|
|||
// Pie Chart Example
|
|||
var ctx = document.getElementById("myPieChart"); |
|||
var myPieChart = new Chart(ctx, { |
|||
type: 'doughnut', |
|||
data: { |
|||
labels: ["Direct", "Referral", "Social"], |
|||
datasets: [{ |
|||
data: [55, 30, 15], |
|||
backgroundColor: ['#4e73df', '#1cc88a', '#36b9cc'], |
|||
hoverBackgroundColor: ['#2e59d9', '#17a673', '#2c9faf'], |
|||
hoverBorderColor: "rgba(234, 236, 244, 1)", |
|||
}], |
|||
}, |
|||
options: { |
|||
maintainAspectRatio: false, |
|||
tooltips: { |
|||
backgroundColor: "rgb(255,255,255)", |
|||
bodyFontColor: "#858796", |
|||
borderColor: '#dddfeb', |
|||
borderWidth: 1, |
|||
xPadding: 15, |
|||
yPadding: 15, |
|||
displayColors: false, |
|||
caretPadding: 10, |
|||
}, |
|||
legend: { |
|||
display: false |
|||
}, |
|||
cutoutPercentage: 80, |
|||
}, |
|||
}); |
@ -0,0 +1,4 @@ |
|||
// Call the dataTables jQuery plugin
|
|||
$(document).ready(function() { |
|||
$('#dataTable').DataTable(); |
|||
}); |
@ -0,0 +1,49 @@ |
|||
(function($) { |
|||
"use strict"; // Start of use strict
|
|||
|
|||
// Toggle the side navigation
|
|||
$("#sidebarToggle, #sidebarToggleTop").on('click', function(e) { |
|||
$("body").toggleClass("sidebar-toggled"); |
|||
$(".sidebar").toggleClass("toggled"); |
|||
if ($(".sidebar").hasClass("toggled")) { |
|||
$('.sidebar .collapse').collapse('hide'); |
|||
}; |
|||
}); |
|||
|
|||
// Close any open menu accordions when window is resized below 768px
|
|||
$(window).resize(function() { |
|||
if ($(window).width() < 768) { |
|||
$('.sidebar .collapse').collapse('hide'); |
|||
}; |
|||
}); |
|||
|
|||
// Prevent the content wrapper from scrolling when the fixed side navigation hovered over
|
|||
$('body.fixed-nav .sidebar').on('mousewheel DOMMouseScroll wheel', function(e) { |
|||
if ($(window).width() > 768) { |
|||
var e0 = e.originalEvent, |
|||
delta = e0.wheelDelta || -e0.detail; |
|||
this.scrollTop += (delta < 0 ? 1 : -1) * 30; |
|||
e.preventDefault(); |
|||
} |
|||
}); |
|||
|
|||
// Scroll to top button appear
|
|||
$(document).on('scroll', function() { |
|||
var scrollDistance = $(this).scrollTop(); |
|||
if (scrollDistance > 100) { |
|||
$('.scroll-to-top').fadeIn(); |
|||
} else { |
|||
$('.scroll-to-top').fadeOut(); |
|||
} |
|||
}); |
|||
|
|||
// Smooth scrolling using jQuery easing
|
|||
$(document).on('click', 'a.scroll-to-top', function(e) { |
|||
var $anchor = $(this); |
|||
$('html, body').stop().animate({ |
|||
scrollTop: ($($anchor.attr('href')).offset().top) |
|||
}, 1000, 'easeInOutExpo'); |
|||
e.preventDefault(); |
|||
}); |
|||
|
|||
})(jQuery); // End of use strict
|
@ -0,0 +1,110 @@ |
|||
<!DOCTYPE html> |
|||
<html xmlns:th="http://www.thymeleaf.org"> |
|||
|
|||
<head> |
|||
<div th:replace="fragments/head :: headFragment"> |
|||
<title id="pageTitle">Admin Home</title> |
|||
</div> |
|||
<script src="https://code.jquery.com/jquery-2.1.4.min.js" th:if="false"></script> |
|||
<script src="http://blackpeppersoftware.github.io/thymeleaf-fragment.js/thymeleaf-fragment.js" data-template-prefix="../" defer="defer" th:if="false"></script> |
|||
<script th:src="@{js/admin.js}" src="../../static/js/admin.js" defer="defer"></script> |
|||
<link th:href="@{/css/master.css}" href="../../static/css/master.css" rel="stylesheet" th:if="false"> |
|||
<link th:href="@{/css/colors.css}" href="../../static/css/colors.css" rel="stylesheet" th:if="false"> |
|||
</head> |
|||
<!-- TODO |
|||
Make user admin / remove user from admin |
|||
Change E2E passphrase |
|||
Delete Messages |
|||
--> |
|||
|
|||
<body> |
|||
<div th:include="fragments/navbar :: navbarFragment"></div> |
|||
|
|||
<header> |
|||
<div class="container bg-primary"> |
|||
<div class="row"> |
|||
<div class="col-sm py-5"> |
|||
<h1 class="display-4 text-center">Admin Page</h1> |
|||
<p class="alert-danger px-2">Warning: these settings can be dangerous..</p> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-sm col-md-4"> |
|||
<h4>Make User an Admin</h4> |
|||
<form id="addUserToAdminForm"> |
|||
<div class="form-group"> |
|||
<label for="addUserToDropDown">Select User:</label> |
|||
<select class="form-control custom-select" size="4" id="addUserToAdminDropDown"> |
|||
|
|||
<option th:each="userName : ${userNames}" |
|||
th:value="${userName}" |
|||
th:text="#{${userName}}"> |
|||
Wireframe |
|||
</option> |
|||
|
|||
</select> |
|||
|
|||
|
|||
</div> |
|||
<div class="form-group"> |
|||
<button class="btn btn-danger form-control">Make admin</button> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
<div class="col-sm col-md-4"> |
|||
<h4>Change passphrases</h4> |
|||
<form id="changePassphraseForm"> |
|||
<div class="form-group"> |
|||
<label for="changePassphraseDropDown">Select User:</label> |
|||
<select class="form-control" id="changePassphraseDropDown"> |
|||
|
|||
<option th:each="userName : ${userNames}" |
|||
th:value="${userName}" |
|||
th:text="#{${userName}}"> |
|||
Wireframe |
|||
</option> |
|||
|
|||
</select> |
|||
|
|||
</div> |
|||
<div class="form-group"> |
|||
<label for="passphraseOld">Passphrase Old</label> |
|||
<input type="password" id="passphraseOld" class="form-control"> |
|||
</div> |
|||
<div class="form-group"> |
|||
<label for="passphraseNew">Passphrase New</label> |
|||
<input type="password" id="passphraseNew" class="form-control"> |
|||
</div> |
|||
<div class="form-group"> |
|||
<button class="btn btn-danger form-control">Change Passphrase</button> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<!-- <div class="col-sm"></div> --> |
|||
|
|||
<div class="col-sm d-lg-block"> |
|||
<div class="d-flex justify-content-center"> |
|||
<div class="py-5"> |
|||
<h4 class="p-2 text-center">Logout</h4> |
|||
<form action="#" th:action="@{/logout}" method="POST"> |
|||
<!-- <input type="submit" value="logout"> --> |
|||
<!-- <input type="hidden" th:name="${_csrf.parameterName}" |
|||
th:value="${_csrf.token}" /> --> |
|||
<div class="form-group"> |
|||
<button class="btn btn-secondary form-control">Logout</button> |
|||
</div> |
|||
</form> |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
</header> |
|||
|
|||
</body> |
|||
|
|||
</html> |
@ -0,0 +1,342 @@ |
|||
<!DOCTYPE html> |
|||
<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/extras/spring-security"> |
|||
|
|||
<head> |
|||
<!-- <div th:replace="head :: headFragment"> |
|||
<meta charset="UTF-8"> |
|||
<title id="pageTitle">Navbar Fragment</title> |
|||
</div> --> |
|||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" th:if="false" ></script> |
|||
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/js/bootstrap.bundle.js" th:if="false" ></script> |
|||
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.css" th:if="false" rel="stylesheet" type="text/css"> |
|||
<script src="https://code.jquery.com/jquery-2.1.4.min.js" th:if="false"></script> |
|||
<script src="http://blackpeppersoftware.github.io/thymeleaf-fragment.js/thymeleaf-fragment.js" defer="defer" th:if="false"></script> |
|||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/all.min.css" th:if="false"> |
|||
|
|||
<link href="../../static/css/sb-admin-2.css" rel="stylesheet" th:if="false"> |
|||
<link href="../../static/css/admin-custom.css" rel="stylesheet" th:if="false"> |
|||
</head> |
|||
|
|||
<body> |
|||
<th:block th:fragment="sidebar-fragment"> |
|||
<!-- Sidebar --> |
|||
<ul class="navbar-nav bg-gradient-danger sidebar sidebar-dark accordion" id="accordionSidebar"> |
|||
|
|||
<!-- Sidebar - Brand --> |
|||
<a class="sidebar-brand d-flex align-items-center justify-content-center" th:href="@{/admin}" href="../admin/home.html"> |
|||
<div class="sidebar-brand-icon rotate-n-15"> |
|||
<i class="fas fa-laugh-wink"></i> |
|||
</div> |
|||
<div class="sidebar-brand-text mx-3">SB Admin <sup>2</sup></div> |
|||
</a> |
|||
|
|||
<!-- Divider --> |
|||
<hr class="sidebar-divider my-0"> |
|||
|
|||
<!-- Nav Item - Dashboard --> |
|||
<li class="nav-item active"> |
|||
<a class="nav-link" th:href="@{/admin}" href="../admin/home.html"> |
|||
<i class="fas fa-fw fa-tachometer-alt"></i> |
|||
<span>Dashboard</span></a> |
|||
</li> |
|||
|
|||
<!-- Divider --> |
|||
<hr class="sidebar-divider"> |
|||
|
|||
<!-- Heading --> |
|||
<div class="sidebar-heading"> |
|||
Administration |
|||
</div> |
|||
|
|||
<!-- Nav Item - Pages Collapse Menu --> |
|||
<li class="nav-item"> |
|||
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseOne" aria-expanded="true" aria-controls="collapseTwo"> |
|||
<i class="fas fa-fw fa-cog"></i> |
|||
<span>Users</span> |
|||
</a> |
|||
<div id="collapseOne" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionSidebar"> |
|||
<div class="bg-dark py-2 collapse-inner rounded"> |
|||
<h6 class="collapse-header">Custom Components:</h6> |
|||
<a class="collapse-item" th:href="@{/admin/users.html}" href="../admin/users.html">Buttons</a> |
|||
<a class="collapse-item" href="cards.html">Cards</a> |
|||
</div> |
|||
</div> |
|||
</li> |
|||
|
|||
|
|||
<!-- Divider --> |
|||
<hr class="sidebar-divider"> |
|||
|
|||
<!-- Heading --> |
|||
<div class="sidebar-heading"> |
|||
Interface |
|||
</div> |
|||
|
|||
<!-- Nav Item - Pages Collapse Menu --> |
|||
<li class="nav-item"> |
|||
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseTwo" aria-expanded="true" aria-controls="collapseTwo"> |
|||
<i class="fas fa-fw fa-cog"></i> |
|||
<span>Components</span> |
|||
</a> |
|||
<div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionSidebar"> |
|||
<div class="bg-dark py-2 collapse-inner rounded"> |
|||
<h6 class="collapse-header">Custom Components:</h6> |
|||
<a class="collapse-item" href="buttons.html"> <span class="text-white"> Buttons </span></a> |
|||
<a class="collapse-item" href="cards.html"> <span class="text-white"> Cards </span></a> |
|||
</div> |
|||
</div> |
|||
</li> |
|||
|
|||
<!-- Nav Item - Utilities Collapse Menu --> |
|||
<li class="nav-item"> |
|||
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseUtilities" aria-expanded="true" aria-controls="collapseUtilities"> |
|||
<i class="fas fa-fw fa-wrench"></i> |
|||
<span>Utilities</span> |
|||
</a> |
|||
<div id="collapseUtilities" class="collapse" aria-labelledby="headingUtilities" data-parent="#accordionSidebar"> |
|||
<div class="bg-dark py-2 collapse-inner rounded"> |
|||
<h6 class="collapse-header">Custom Utilities:</h6> |
|||
<a class="collapse-item" href="utilities-color.html">Colors</a> |
|||
<a class="collapse-item" href="utilities-border.html">Borders</a> |
|||
<a class="collapse-item" href="utilities-animation.html">Animations</a> |
|||
<a class="collapse-item" href="utilities-other.html">Other</a> |
|||
</div> |
|||
</div> |
|||
</li> |
|||
|
|||
<!-- Divider --> |
|||
<hr class="sidebar-divider"> |
|||
|
|||
<!-- Heading --> |
|||
<div class="sidebar-heading"> |
|||
Addons |
|||
</div> |
|||
|
|||
<!-- Nav Item - Pages Collapse Menu --> |
|||
<li class="nav-item"> |
|||
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapsePages" aria-expanded="true" aria-controls="collapsePages"> |
|||
<i class="fas fa-fw fa-folder"></i> |
|||
<span>Pages</span> |
|||
</a> |
|||
<div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar"> |
|||
<div class="bg-dark py-2 collapse-inner rounded"> |
|||
<h6 class="collapse-header">Login Screens:</h6> |
|||
<a class="collapse-item" href="login.html">Login</a> |
|||
<a class="collapse-item" href="register.html">Register</a> |
|||
<a class="collapse-item" href="forgot-password.html">Forgot Password</a> |
|||
<div class="collapse-divider"></div> |
|||
<h6 class="collapse-header">Other Pages:</h6> |
|||
<a class="collapse-item" href="404.html">404 Page</a> |
|||
<a class="collapse-item" href="blank.html">Blank Page</a> |
|||
</div> |
|||
</div> |
|||
</li> |
|||
|
|||
<!-- Nav Item - Charts --> |
|||
<li class="nav-item"> |
|||
<a class="nav-link" href="charts.html"> |
|||
<i class="fas fa-fw fa-chart-area"></i> |
|||
<span>Charts</span></a> |
|||
</li> |
|||
|
|||
<!-- Nav Item - Tables --> |
|||
<li class="nav-item"> |
|||
<a class="nav-link" href="tables.html"> |
|||
<i class="fas fa-fw fa-table"></i> |
|||
<span>Tables</span></a> |
|||
</li> |
|||
|
|||
<!-- Divider --> |
|||
<hr class="sidebar-divider d-none d-md-block"> |
|||
|
|||
<!-- Sidebar Toggler (Sidebar) --> |
|||
<div class="text-center d-none d-md-inline"> |
|||
<button class="rounded-circle border-0" id="sidebarToggle"></button> |
|||
</div> |
|||
|
|||
</ul> |
|||
<!-- End of Sidebar --> |
|||
</th:block> |
|||
<th:block th:fragment="topbar-fragment"> |
|||
<!-- Topbar --> |
|||
<nav class="navbar navbar-expand navbar-dark bg-dark topbar mb-4 static-top shadow"> |
|||
|
|||
<!-- Sidebar Toggle (Topbar) --> |
|||
<button id="sidebarToggleTop" class="btn btn-link d-md-none rounded-circle mr-3"> |
|||
<i class="fa fa-bars"></i> |
|||
</button> |
|||
|
|||
<!-- Topbar Search --> |
|||
<form class="d-none d-sm-inline-block form-inline mr-auto ml-md-3 my-2 my-md-0 mw-100 navbar-search"> |
|||
<div class="input-group"> |
|||
<input type="text" class="form-control bg-light border-0 small" placeholder="Search for..." aria-label="Search" aria-describedby="basic-addon2"> |
|||
<div class="input-group-append"> |
|||
<button class="btn btn-primary" type="button"> |
|||
<i class="fas fa-search fa-sm"></i> |
|||
</button> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
|
|||
<!-- Topbar Navbar --> |
|||
<ul class="navbar-nav ml-auto"> |
|||
|
|||
<!-- Nav Item - Search Dropdown (Visible Only XS) --> |
|||
<li class="nav-item dropdown no-arrow d-sm-none"> |
|||
<a class="nav-link dropdown-toggle" href="#" id="searchDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
|||
<i class="fas fa-search fa-fw"></i> |
|||
</a> |
|||
<!-- Dropdown - Messages --> |
|||
<div class="dropdown-menu dropdown-menu-right p-3 shadow animated--grow-in" aria-labelledby="searchDropdown"> |
|||
<form class="form-inline mr-auto w-100 navbar-search"> |
|||
<div class="input-group"> |
|||
<input type="text" class="form-control bg-light border-0 small" placeholder="Search for..." aria-label="Search" aria-describedby="basic-addon2"> |
|||
<div class="input-group-append"> |
|||
<button class="btn btn-primary" type="button"> |
|||
<i class="fas fa-search fa-sm"></i> |
|||
</button> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</li> |
|||
|
|||
<!-- Nav Item - Alerts --> |
|||
<li class="nav-item dropdown no-arrow mx-1"> |
|||
<a class="nav-link dropdown-toggle" href="#" id="alertsDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
|||
<i class="fas fa-bell fa-fw"></i> |
|||
<!-- Counter - Alerts --> |
|||
<span class="badge badge-danger badge-counter">3+</span> |
|||
</a> |
|||
<!-- Dropdown - Alerts --> |
|||
<div class="dropdown-list dropdown-menu dropdown-menu-right shadow animated--grow-in" aria-labelledby="alertsDropdown"> |
|||
<h6 class="dropdown-header"> |
|||
Alerts Center |
|||
</h6> |
|||
<a class="dropdown-item d-flex align-items-center" href="#"> |
|||
<div class="mr-3"> |
|||
<div class="icon-circle bg-primary"> |
|||
<i class="fas fa-file-alt text-white"></i> |
|||
</div> |
|||
</div> |
|||
<div> |
|||
<div class="small text-gray-500">December 12, 2019</div> |
|||
<span class="font-weight-bold">A new monthly report is ready to download!</span> |
|||
</div> |
|||
</a> |
|||
<a class="dropdown-item d-flex align-items-center" href="#"> |
|||
<div class="mr-3"> |
|||
<div class="icon-circle bg-success"> |
|||
<i class="fas fa-donate text-white"></i> |
|||
</div> |
|||
</div> |
|||
<div> |
|||
<div class="small text-gray-500">December 7, 2019</div> |
|||
$290.29 has been deposited into your account! |
|||
</div> |
|||
</a> |
|||
<a class="dropdown-item d-flex align-items-center" href="#"> |
|||
<div class="mr-3"> |
|||
<div class="icon-circle bg-warning"> |
|||
<i class="fas fa-exclamation-triangle text-white"></i> |
|||
</div> |
|||
</div> |
|||
<div> |
|||
<div class="small text-gray-500">December 2, 2019</div> |
|||
Spending Alert: We've noticed unusually high spending for your account. |
|||
</div> |
|||
</a> |
|||
<a class="dropdown-item text-center small text-gray-500" href="#">Show All Alerts</a> |
|||
</div> |
|||
</li> |
|||
|
|||
<!-- Nav Item - Messages --> |
|||
<li class="nav-item dropdown no-arrow mx-1"> |
|||
<a class="nav-link dropdown-toggle" href="#" id="messagesDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
|||
<i class="fas fa-envelope fa-fw"></i> |
|||
<!-- Counter - Messages --> |
|||
<span class="badge badge-danger badge-counter">7</span> |
|||
</a> |
|||
<!-- Dropdown - Messages --> |
|||
<div class="dropdown-list dropdown-menu dropdown-menu-right shadow animated--grow-in" aria-labelledby="messagesDropdown"> |
|||
<h6 class="dropdown-header"> |
|||
Message Center |
|||
</h6> |
|||
<a class="dropdown-item d-flex align-items-center" href="#"> |
|||
<div class="dropdown-list-image mr-3"> |
|||
<img class="rounded-circle" src="https://source.unsplash.com/fn_BT9fwg_E/60x60" alt=""> |
|||
<div class="status-indicator bg-success"></div> |
|||
</div> |
|||
<div class="font-weight-bold"> |
|||
<div class="text-truncate">Hi there! I am wondering if you can help me with a problem I've been having.</div> |
|||
<div class="small text-gray-500">Emily Fowler · 58m</div> |
|||
</div> |
|||
</a> |
|||
<a class="dropdown-item d-flex align-items-center" href="#"> |
|||
<div class="dropdown-list-image mr-3"> |
|||
<img class="rounded-circle" src="https://source.unsplash.com/AU4VPcFN4LE/60x60" alt=""> |
|||
<div class="status-indicator"></div> |
|||
</div> |
|||
<div> |
|||
<div class="text-truncate">I have the photos that you ordered last month, how would you like them sent to you?</div> |
|||
<div class="small text-gray-500">Jae Chun · 1d</div> |
|||
</div> |
|||
</a> |
|||
<a class="dropdown-item d-flex align-items-center" href="#"> |
|||
<div class="dropdown-list-image mr-3"> |
|||
<img class="rounded-circle" src="https://source.unsplash.com/CS2uCrpNzJY/60x60" alt=""> |
|||
<div class="status-indicator bg-warning"></div> |
|||
</div> |
|||
<div> |
|||
<div class="text-truncate">Last month's report looks great, I am very happy with the progress so far, keep up the good work!</div> |
|||
<div class="small text-gray-500">Morgan Alvarez · 2d</div> |
|||
</div> |
|||
</a> |
|||
<a class="dropdown-item d-flex align-items-center" href="#"> |
|||
<div class="dropdown-list-image mr-3"> |
|||
<img class="rounded-circle" src="https://source.unsplash.com/Mv9hjnEUHR4/60x60" alt=""> |
|||
<div class="status-indicator bg-success"></div> |
|||
</div> |
|||
<div> |
|||
<div class="text-truncate">Am I a good boy? The reason I ask is because someone told me that people say this to all dogs, even if they aren't good...</div> |
|||
<div class="small text-gray-500">Chicken the Dog · 2w</div> |
|||
</div> |
|||
</a> |
|||
<a class="dropdown-item text-center small text-gray-500" href="#">Read More Messages</a> |
|||
</div> |
|||
</li> |
|||
|
|||
<div class="topbar-divider d-none d-sm-block"></div> |
|||
|
|||
<!-- Nav Item - User Information --> |
|||
<li class="nav-item dropdown no-arrow"> |
|||
<a class="nav-link dropdown-toggle" href="#" id="userDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
|||
<span class="mr-2 d-none d-lg-inline text-white small">Valerie Luna</span> |
|||
<img class="img-profile rounded-circle" src="https://source.unsplash.com/QAB-WJcbgJk/60x60"> |
|||
</a> |
|||
<!-- Dropdown - User Information --> |
|||
<div class="dropdown-menu dropdown-menu-right shadow animated--grow-in" aria-labelledby="userDropdown"> |
|||
<a class="dropdown-item" href="#"> |
|||
<i class="fas fa-user fa-sm fa-fw mr-2 text-gray-400"></i> Profile |
|||
</a> |
|||
<a class="dropdown-item" href="#"> |
|||
<i class="fas fa-cogs fa-sm fa-fw mr-2 text-gray-400"></i> Settings |
|||
</a> |
|||
<a class="dropdown-item" href="#"> |
|||
<i class="fas fa-list fa-sm fa-fw mr-2 text-gray-400"></i> Activity Log |
|||
</a> |
|||
<div class="dropdown-divider"></div> |
|||
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#logoutModal"> |
|||
<i class="fas fa-sign-out-alt fa-sm fa-fw mr-2 text-gray-400"></i> Logout |
|||
</a> |
|||
</div> |
|||
</li> |
|||
|
|||
</ul> |
|||
|
|||
</nav> |
|||
<!-- End of Topbar --> |
|||
</th:block> |
|||
</body> |
|||
|
|||
</html> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue