mirror of https://github.com/gophish/gophish
Removed chartjs in favor of chartist-js (better interaction, more customization, etc.)
Made a poc of the dashboard charts - need to work on styling. Some basic css / nav changespull/24/head
parent
a2252c1b5b
commit
1183cc1bee
File diff suppressed because one or more lines are too long
|
@ -153,22 +153,18 @@
|
||||||
cursor: inherit;
|
cursor: inherit;
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.typeahead {
|
.typeahead {
|
||||||
border-left-radius:6px !important;
|
border-left-radius:6px !important;
|
||||||
float:none !important;
|
float:none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tt-query {
|
.tt-query {
|
||||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
|
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
|
||||||
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
|
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
|
||||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
|
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
|
||||||
}
|
}
|
||||||
|
|
||||||
.tt-hint {
|
.tt-hint {
|
||||||
color: #999
|
color: #999
|
||||||
}
|
}
|
||||||
|
|
||||||
.tt-menu { // used to be tt-dropdown-menu in older versions
|
.tt-menu { // used to be tt-dropdown-menu in older versions
|
||||||
width: 422px;
|
width: 422px;
|
||||||
margin-top: 4px;
|
margin-top: 4px;
|
||||||
|
@ -183,22 +179,49 @@
|
||||||
-moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);
|
-moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);
|
||||||
box-shadow: 0 5px 10px rgba(0,0,0,.2);
|
box-shadow: 0 5px 10px rgba(0,0,0,.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
.tt-suggestion {
|
.tt-suggestion {
|
||||||
padding: 3px 20px;
|
padding: 3px 20px;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tt-suggestion.tt-cursor {
|
.tt-suggestion.tt-cursor {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background-color: #0097cf;
|
background-color: #0097cf;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.tt-suggestion p {
|
.tt-suggestion p {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.typeahead-button {
|
.typeahead-button {
|
||||||
line-height:1.39 !important;
|
line-height:1.39 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ct-point {
|
||||||
|
cursor:pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chartist-tooltip{
|
||||||
|
position:absolute;
|
||||||
|
display:inline-block;
|
||||||
|
min-width:5em;
|
||||||
|
padding:.5em;
|
||||||
|
background:#34495e;
|
||||||
|
color:#ffffff;
|
||||||
|
font-weight:700;
|
||||||
|
text-align:center;
|
||||||
|
pointer-events:none;
|
||||||
|
z-index:1;
|
||||||
|
margin-left:1.25em;
|
||||||
|
font-size: .75em;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
.chartist-tooltip:after{
|
||||||
|
content:"";
|
||||||
|
position:absolute;
|
||||||
|
top:100%;
|
||||||
|
left:50%;
|
||||||
|
width:0;
|
||||||
|
height:0;
|
||||||
|
margin-left:-15px;
|
||||||
|
border:15px solid transparent;
|
||||||
|
border-top-color:#34495e
|
||||||
|
}
|
||||||
|
|
|
@ -1,23 +1,30 @@
|
||||||
var overview_chart_options = {
|
var campaigns = []
|
||||||
animationEasing:"linear",
|
|
||||||
customTooltips: function(tooltip) {
|
|
||||||
console.log(tooltip)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function load(){
|
$(document).ready(function(){
|
||||||
api.campaigns.get()
|
api.campaigns.get()
|
||||||
.success(function(campaigns){
|
.success(function(cs){
|
||||||
|
campaigns = cs
|
||||||
if (campaigns.length > 0){
|
if (campaigns.length > 0){
|
||||||
var overview_ctx = $("#overview_chart").get(0).getContext("2d");
|
|
||||||
// Create the overview chart data
|
// Create the overview chart data
|
||||||
var overview_data = {labels:[],datasets:[{data:[]}]}
|
var overview_data = {labels:[],series:[[]]}
|
||||||
|
var average_data = {series:[]}
|
||||||
|
var overview_opts = {
|
||||||
|
axisX: {
|
||||||
|
showGrid: false
|
||||||
|
},
|
||||||
|
showArea: true,
|
||||||
|
plugins: []
|
||||||
|
}
|
||||||
|
var average_opts = {
|
||||||
|
donut : true,
|
||||||
|
donutWidth: 30
|
||||||
|
}
|
||||||
var average = 0
|
var average = 0
|
||||||
$("#emptyMessage").hide()
|
$("#emptyMessage").hide()
|
||||||
$("#campaignTable").show()
|
$("#campaignTable").show()
|
||||||
campaignTable = $("#campaignTable").DataTable();
|
campaignTable = $("#campaignTable").DataTable();
|
||||||
$.each(campaigns, function(i, campaign){
|
$.each(campaigns, function(i, campaign){
|
||||||
var campaign_date = moment(campaign.created_date).format('MMMM Do YYYY, h:mm:ss a')
|
var campaign_date = moment(campaign.created_date).format('MMMM Do YYYY h:mm')
|
||||||
// Add it to the table
|
// Add it to the table
|
||||||
campaignTable.row.add([
|
campaignTable.row.add([
|
||||||
campaign.name,
|
campaign.name,
|
||||||
|
@ -25,7 +32,6 @@ function load(){
|
||||||
campaign.status
|
campaign.status
|
||||||
]).draw()
|
]).draw()
|
||||||
// Add it to the chart data
|
// Add it to the chart data
|
||||||
overview_data.labels.push(campaign_date)
|
|
||||||
campaign.y = 0
|
campaign.y = 0
|
||||||
$.each(campaign.results, function(j, result){
|
$.each(campaign.results, function(j, result){
|
||||||
if (result.status == "Success"){
|
if (result.status == "Success"){
|
||||||
|
@ -34,17 +40,45 @@ function load(){
|
||||||
})
|
})
|
||||||
campaign.y = Math.floor((campaign.y / campaign.results.length) * 100)
|
campaign.y = Math.floor((campaign.y / campaign.results.length) * 100)
|
||||||
average += campaign.y
|
average += campaign.y
|
||||||
overview_data.datasets[0].data.push({y:campaign.y, test: "test"})
|
// Add the data to the overview chart
|
||||||
|
overview_data.labels.push(campaign_date)
|
||||||
|
overview_data.series[0].push({meta : i, value: campaign.y})
|
||||||
})
|
})
|
||||||
average = Math.floor(average / campaigns.length);
|
average = Math.floor(average / campaigns.length);
|
||||||
var overview_chart = new Chart(overview_ctx).Line(overview_data, overview_chart_options);
|
average_data.series.push({meta: "Successful Phishes", value: average})
|
||||||
|
average_data.series.push({meta: "Unsuccessful Phishes", value: 100 - average})
|
||||||
|
var average_chart = new Chartist.Pie("#average_chart", average_data, average_opts)
|
||||||
|
var overview_chart = new Chartist.Line('#overview_chart', overview_data, overview_opts)
|
||||||
|
$chart = $("#overview_chart")
|
||||||
|
$chart.on("click", '.ct-point', function(d){console.log(d)});
|
||||||
|
var $toolTip = $chart
|
||||||
|
.append('<div class="chartist-tooltip"></div>')
|
||||||
|
.find('.chartist-tooltip')
|
||||||
|
.hide();
|
||||||
|
|
||||||
|
$chart.on('mouseenter', '.ct-point', function() {
|
||||||
|
var $point = $(this)
|
||||||
|
value = $point.attr('ct:value')
|
||||||
|
cidx = $point.attr('ct:meta')
|
||||||
|
$toolTip.html(campaigns[cidx].name + '<br>' + "Successes: " + value.toString()).show();
|
||||||
|
});
|
||||||
|
|
||||||
|
$chart.on('mouseleave', '.ct-point', function() {
|
||||||
|
$toolTip.hide();
|
||||||
|
});
|
||||||
|
$chart.on('mousemove', function(event) {
|
||||||
|
$toolTip.css({
|
||||||
|
left: (event.offsetX || event.originalEvent.layerX) - $toolTip.width() / 2 - 10,
|
||||||
|
top: (event.offsetY || event.originalEvent.layerY) - $toolTip.height() - 40
|
||||||
|
});
|
||||||
|
});
|
||||||
|
$("#overview_chart").on("click", ".ct-point", function(e) {
|
||||||
|
var $cidx = $(this).attr('ct:meta');
|
||||||
|
window.location.href = "/campaigns/" + campaigns[cidx].id
|
||||||
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.error(function(){
|
.error(function(){
|
||||||
errorFlash("Error fetching campaigns")
|
errorFlash("Error fetching campaigns")
|
||||||
})
|
})
|
||||||
}
|
|
||||||
|
|
||||||
$(document).ready(function(){
|
|
||||||
load()
|
|
||||||
})
|
})
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -21,6 +21,7 @@
|
||||||
<link href="/css/flat-ui.css" rel="stylesheet">
|
<link href="/css/flat-ui.css" rel="stylesheet">
|
||||||
<link href="/css/dataTables.bootstrap.css" rel="stylesheet">
|
<link href="/css/dataTables.bootstrap.css" rel="stylesheet">
|
||||||
<link href="/css/font-awesome.min.css" rel="stylesheet">
|
<link href="/css/font-awesome.min.css" rel="stylesheet">
|
||||||
|
<link href="/css/chartist.min.css" rel="stylesheet">
|
||||||
<link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,600,700' rel='stylesheet' type='text/css'>
|
<link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,600,700' rel='stylesheet' type='text/css'>
|
||||||
<script>
|
<script>
|
||||||
{{if .User}}
|
{{if .User}}
|
||||||
|
@ -67,18 +68,10 @@
|
||||||
<li>
|
<li>
|
||||||
{{if .User}}
|
{{if .User}}
|
||||||
<div class="btn-group" id="navbar-dropdown">
|
<div class="btn-group" id="navbar-dropdown">
|
||||||
<button type="button" class="btn btn-primary"><i class="fa fa-user"></i> {{.User.Username}}</button>
|
<a class="btn btn-primary" href="/settings"><i class="fa fa-user"></i> {{.User.Username}}</a>
|
||||||
<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
|
<a class="btn btn-primary dropdown-toggle" href="/logout">
|
||||||
<span class="caret" style="border-top-color:#FFFFFF"></span>
|
<i class="fa fa-sign-out"></i>
|
||||||
<span class="sr-only">Toggle Dropdown</span>
|
</a>
|
||||||
</button>
|
|
||||||
<ul class="dropdown-menu" role="menu">
|
|
||||||
<li><a href="#/settings">Settings</a>
|
|
||||||
</li>
|
|
||||||
<li class="divider"></li>
|
|
||||||
<li><a href="/logout">Logout</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
</div>
|
||||||
{{else}}
|
{{else}}
|
||||||
<a href="/login">
|
<a href="/login">
|
||||||
|
@ -96,7 +89,7 @@
|
||||||
<script src="/js/bootstrap.min.js"></script>
|
<script src="/js/bootstrap.min.js"></script>
|
||||||
<script src="/js/jquery.dataTables.min.js"></script>
|
<script src="/js/jquery.dataTables.min.js"></script>
|
||||||
<script src="/js/dataTables.bootstrap.js"></script>
|
<script src="/js/dataTables.bootstrap.js"></script>
|
||||||
<script src="/js/chartjs.min.js"></script>
|
<script src="/js/chartist.min.js"></script>
|
||||||
<script src="/js/moment.min.js"></script>
|
<script src="/js/moment.min.js"></script>
|
||||||
<script src="/js/ckeditor/ckeditor.js"></script>
|
<script src="/js/ckeditor/ckeditor.js"></script>
|
||||||
<script src="/js/ckeditor/adapters/jquery.js"></script>
|
<script src="/js/ckeditor/adapters/jquery.js"></script>
|
||||||
|
|
|
@ -32,8 +32,8 @@
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<canvas id="overview_chart" class="col-lg-6 col-md-6 col-sm-12 col-xs-12"></canvas>
|
<div id="overview_chart" class="col-lg-6 col-md-6 col-sm-12 col-xs-12"></div>
|
||||||
<canvas id="average_chart" class="col-lg-6 col-md-6 col-sm-12 col-xs-12"></canvas>
|
<div id="average_chart" class="col-lg-6 col-md-6 col-sm-12 col-xs-12"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<h2>Recent Campaigns</h2>
|
<h2>Recent Campaigns</h2>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-3 col-md-2 sidebar">
|
<div class="col-sm-3 col-md-2 sidebar">
|
||||||
<ul class="nav nav-sidebar">
|
<ul class="nav nav-sidebar">
|
||||||
<li><a href="#">Dashboard</a>
|
<li><a href="/">Dashboard</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="/campaigns">Campaigns</a>
|
<li><a href="/campaigns">Campaigns</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-3 col-md-2 sidebar">
|
<div class="col-sm-3 col-md-2 sidebar">
|
||||||
<ul class="nav nav-sidebar">
|
<ul class="nav nav-sidebar">
|
||||||
<li><a href="#">Dashboard</a>
|
<li><a href="/">Dashboard</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="/campaigns">Campaigns</a>
|
<li><a href="/campaigns">Campaigns</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-3 col-md-2 sidebar">
|
<div class="col-sm-3 col-md-2 sidebar">
|
||||||
<ul class="nav nav-sidebar">
|
<ul class="nav nav-sidebar">
|
||||||
<li><a href="#">Dashboard</a>
|
<li><a href="/">Dashboard</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="/campaigns">Campaigns</a>
|
<li><a href="/campaigns">Campaigns</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
Loading…
Reference in New Issue