New class to handle Datatables requests (very rough still)

Start cleaning up webserve
This commit is contained in:
Tim 2015-06-19 14:40:29 +02:00
parent 253a1efb3a
commit 7e238d6e62
6 changed files with 594 additions and 224 deletions

View file

@ -34,11 +34,12 @@
<th align='left' id="ip_address"><i class='fa fa-sort'></i> IP Address</th>
<th align='left' id="title"><i class='fa fa-sort'></i> Title</th>
<th align='left' id="started"><i class='fa fa-sort'></i> Started</th>
<th align='left' id="paused"><i class='fa fa-sort'></i> Paused</th>
<th align='left' id="paused_counter"><i class='fa fa-sort'></i> Paused</th>
<th align='left' id="stopped"><i class='fa fa-sort'></i> Stopped</th>
<th align='left' id="duration"><i class='fa fa-sort'></i> Duration</th>
<th align='left' id="percent_complete"> Completed</th>
<th align='left' id="rating_key"> RatingKey</th>
<th align='left' id="xml"></th>
</tr>
</thead>
<tbody>
@ -134,7 +135,8 @@
{
"targets": [0],
"data":"id",
"visible": false
"visible": false,
"searchable": false
},
{
"targets": [1],
@ -146,7 +148,8 @@
} else {
$(td).html(moment(cellData,"X").format("${date_format}"));
}
}
},
"searchable": false
},
{
"targets": [2],
@ -185,14 +188,16 @@
"data":"started",
"render": function ( data, type, full ) {
return moment(data, "X").format("${time_format}");
}
},
"searchable": false
},
{
"targets": [7],
"data":"paused",
"data":"paused_counter",
"render": function ( data, type, full ) {
return Math.round(moment.duration(data, 'seconds').as('minutes')) + ' mins';
}
},
"searchable": false
},
{
"targets": [8],
@ -203,7 +208,8 @@
} else {
return data;
}
}
},
"searchable": false
},
{
"targets": [9],
@ -214,7 +220,8 @@
} else {
return data;
}
}
},
"searchable": false
},
{
"targets": [10],
@ -226,12 +233,20 @@
} else {
return '<span class="badge">100%</span>';
}
}
},
"searchable": false
},
{
"targets": [11],
"data":"rating_key",
"visible": false
"visible": false,
"searchable": false
},
{
"targets": [12],
"data":"xml",
"searchable":false,
"visible":false
}
],
"drawCallback": function (settings) {

View file

@ -0,0 +1,152 @@
<%inherit file="base.html"/>
<%!
from plexpy import helpers
%>
<%def name="headIncludes()">
<link rel="stylesheet" href="interfaces/default/css/plexwatch-tables.css">
</%def>
<%def name="body()">
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div class="user-info-wrapper">
<div class="user-info-poster-face">
<img src="interfaces/default/images/gravatar-default-80x80.png">
</div>
<div class="user-info-username">
Username
</div>
<div class="user-info-nav">
<ul class="user-info-nav">
<li class="active"><a href="#profile" data-toggle="tab">Profile</a></li>
<li><a id="ip-tab-btn" href="#userAddresses" data-toggle="tab">IP Addresses</a></li>
<li><a href="#userHistory" data-toggle="tab">History</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="tab-content">
<div class="tab-pane active" id="profile">
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div class="wellbg">
<div class="wellheader">
<div class="dashboard-wellheader">
<h3>Global Stats</h3>
</div>
</div>
<div id="user-time-stats" class="user-overview-stats-wrapper">
<div id="user-stats-spinner" class="spinner"></div>
</div>
</div>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div class="wellbg">
<div class="wellheader">
<div class="dashboard-wellheader">
<h3>Platform Stats</h3>
</div>
</div>
<div id="user-platform-stats" class="user-platforms">
<div id="user-platform-spinner" class="spinner"></div>
</div>
</div>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div class="wellbg">
<div class="wellheader">
<div class="dashboard-wellheader">
<h3>Recently watched</h3>
</div>
</div>
<div id="user-recently-watched" class="dashboard-recent-media-row">
<div id="user-watched-spinner" class="spinner"></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="tab-pane" id="userAddresses">
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div class="wellbg">
<div class="wellheader">
<div class="dashboard-wellheader">
<h3>Public IP Addresses for <strong>
Username
</strong></h3>
</div>
</div>
<table id="tableUserIpAddresses" class="display" width="100%">
<thead>
<tr>
<th align="left"><i class="fa fa-sort"></i> Last seen</th>
<th align="left"><i class="fa fa-sort"></i> IP Address</th>
<th align="left"><i class="fa fa-sort"></i> Play Count</th>
<th align="left"><i class="fa fa-sort"></i> Platform (Last Seen)</th>
<th align="left"><i class="fa fa-sort"></i> Location</th>
<th align="left"><i class="fa fa-sort"></i> Location</th>
</tr>
</thead>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="tab-pane" id="userHistory">
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div class="wellbg">
<div class="wellheader">
<div class="dashboard-wellheader">
<h3>Watching History for <strong>
Username
</strong></h3>
</div>
</div>
Table
<div id="info-modal" class="modal hide fade" tabindex="-1"
role="dialog" aria-labelledby="info-modal" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-hidden="true"><i class="fa fa-remove"></i></button>
<h3 id="myModalLabel">Stream Info: <span id="modal-stream-info"></span></h3>
</div>
<div class="modal-body" id="modal-text"></div>
<div class="modal-footer"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<footer></footer>
</%def>
<%def name="javascriptIncludes()">
<script src="interfaces/default/js/jquery.dataTables.min.js"></script>
<script src="interfaces/default/js/jquery.dataTables.bootstrap.pagination.integration.js"></script>
<script src="interfaces/default/js/moment-with-locale.js"></script>
<script>
</script>
</%def>

View file

@ -57,7 +57,7 @@
"lengthMenu":"Show _MENU_ entries per page",
"info":"Showing _START_ to _END_ of _TOTAL_ active users",
"infoEmpty":"Showing 0 to 0 of 0 entries",
"infoFiltered":"(filtered from _MAX_ total entries)",
"infoFiltered":"",
"emptyTable": "No data in table",
},
"destroy": true,
@ -80,11 +80,11 @@
"targets": [0],
"data": null,
"createdCell": function (td, cellData, rowData, row, col) {
if (rowData['user_thumb'] === '') {
//if (rowData['user_thumb'] === '') {
$(td).html('<img src="interfaces/default/images/gravatar-default-80x80.png" alt="User Logo"/>');
} else {
$(td).html('<img src="' + rowData['user_thumb'] + '" alt="User Logo"/>');
}
//} else {
// $(td).html('<img src="' + rowData['user_thumb'] + '" alt="User Logo"/>');
//}
},
"orderable": false,
"className": "users-poster-face",
@ -103,7 +103,8 @@
},
{
"targets": [3],
"data": "ip_address"
"data": "ip_address",
"searchable": false
},
{
"targets": [4],