Merge branch 'improve-video-table' into 'dev'

improve videos table rendering speed

See merge request Shinobi-Systems/Shinobi!79
merge-requests/76/head
Moe 2019-07-19 20:25:07 +00:00
commit d42f04da3e
3 changed files with 83 additions and 16 deletions

View File

@ -426,3 +426,15 @@ ul.msg_list li .message {
letter-spacing: 3pt;
font-size: 8pt;
}
/* Start of custom table sorter */
.table .table-header-sorter {
cursor: pointer;
white-space: nowrap;
}
.table th.table-header-sorter i.fa-sort {
color: #ccc;
}
.table th.table-header-sorter i {
margin-left: 10px;
}
/* End of custom table sorter */

View File

@ -297,3 +297,47 @@ $.ccio.destroyStream = function(d,user,killElement){
}
}
}
jQuery(function () {
jQuery('body').on('click', '.table-header-sorter', function () {
var $sort = jQuery(this).find('i');
var currentSort = undefined;
if ($sort.hasClass('fa-sort-asc')) {
currentSort = 'asc';
} else if ($sort.hasClass('fa-sort-desc')) {
currentSort = 'desc';
}
jQuery(this)
.parent()
.find('i.fa')
.removeClass('fa-sort-asc')
.removeClass('fa-sort-desc')
.addClass('fa-sort');
jQuery(this)
.find('i.fa')
.toggleClass('fa-sort', currentSort === 'desc')
.toggleClass('fa-sort-asc', currentSort === undefined)
.toggleClass('fa-sort-desc', currentSort === 'asc');
const field = jQuery(this).data('field');
const $body = jQuery(this)
.closest('.table')
.find('tbody');
const sortedRows = $body
.find('tr')
.detach()
.sort(function(a,b) {
const data1 = jQuery(a).data('sort');
const data2 = jQuery(b).data('sort');
if (currentSort === undefined)
return data1[field] > data2[field] ? 1 : data1[field] < data2[field] ? -1 : 0;
else if (currentSort === 'asc')
return data1[field] > data2[field] ? -1 : data1[field] < data2[field] ? 1 : 0;
else
return data1._no > data2._no ? 1 : data1._no < data2._no ? -1 : 0;
});
$body.append(sortedRows);
});
});

View File

@ -574,21 +574,21 @@ $(document).ready(function(e){
var showThumbnail = $.ccio.op().showThumbnail === '1'
$.vidview.e.removeClass('dark')
e.t.attr('class','fa fa-film')
var tmp = '<table class="table table-striped" style="max-height:500px">';
var tmp = '<table class="table table-striped table-bordered">';
tmp+='<thead>';
tmp+='<tr>';
tmp+='<th><div class="checkbox"><input id="videos_select_all" type="checkbox"><label for="videos_select_all"></label></div></th>';
if(showThumbnail)tmp+='<th data-field="Thumbnail" data-sortable="true">'+lang.Thumbnail+'</th>';
tmp+='<th data-field="Closed" data-sortable="true">'+lang.Closed+'</th>';
tmp+='<th data-field="Ended" data-sortable="true">'+lang.Ended+'</th>';
tmp+='<th data-field="Started" data-sortable="true">'+lang.Started+'</th>';
tmp+='<th data-field="Monitor" data-sortable="true">'+lang.Monitor+'</th>';
tmp+='<th data-field="Filename" data-sortable="true">'+lang.Filename+'</th>';
tmp+='<th data-field="Size" data-sortable="true">'+lang['Size (mb)']+'</th>';
tmp+='<th data-field="Preview" data-sortable="true">'+lang.Preview+'</th>';
tmp+='<th data-field="Watch" data-sortable="true">'+lang.Watch+'</th>';
tmp+='<th data-field="Download" data-sortable="true">'+lang.Download+'</th>';
tmp+='<th class="permission_video_delete" data-field="Delete" data-sortable="true">'+lang.Delete+'</th>';
if(showThumbnail)tmp+='<th>'+lang.Thumbnail+'</th>';
tmp+='<th class="table-header-sorter" data-field="Closed">'+lang.Closed+'<i class="fa fa-sort"></i></th>';
tmp+='<th class="table-header-sorter" data-field="Ended">'+lang.Ended+'<i class="fa fa-sort"></i></th>';
tmp+='<th class="table-header-sorter" data-field="Started">'+lang.Started+'<i class="fa fa-sort"></i></th>';
tmp+='<th class="table-header-sorter" data-field="Monitor">'+lang.Monitor+'<i class="fa fa-sort"></i></th>';
tmp+='<th class="table-header-sorter" data-field="Filename">'+lang.Filename+'<i class="fa fa-sort"></i></th>';
tmp+='<th class="table-header-sorter" data-field="Size">'+lang['Size (mb)']+'<i class="fa fa-sort"></i></th>';
tmp+='<th>'+lang.Preview+'</th>';
tmp+='<th>'+lang.Watch+'</th>';
tmp+='<th>'+lang.Download+'</th>';
tmp+='<th class="permission_video_delete">'+lang.Delete+'</th>';
// tmp+='<th class="permission_video_delete" data-field="Fix" data-sortable="true">'+lang.Fix+'</th>';
tmp+='</tr>';
tmp+='</thead>';
@ -600,10 +600,19 @@ $(document).ready(function(e){
v.mon=$.ccio.mon[v.ke+v.mid+user.auth_token];
v.start=v.time;
// v.filename=$.ccio.init('tf',v.time)+'.'+v.ext;
tmp+='<tr data-ke="'+v.ke+'" data-status="'+v.status+'" data-mid="'+v.mid+'" data-file="'+v.filename+'" data-auth="'+v.mon.user.auth_token+'">';
const sortData = {
_no: n,
Closed: $.ccio.timeObject(v.end).unix(),
Ended: $.ccio.timeObject(v.end).unix(),
Started: $.ccio.timeObject(v.time).unix(),
Monitor: v.mon.name,
Filename: v.filename,
Size: v.size,
};
tmp+='<tr data-sort="' + JSON.stringify(sortData).replace(/"/g, "&#34;") + '" data-ke="'+v.ke+'" data-status="'+v.status+'" data-mid="'+v.mid+'" data-file="'+v.filename+'" data-auth="'+v.mon.user.auth_token+'">';
tmp+='<td><div class="checkbox"><input id="'+v.ke+'_'+v.filename+'" name="'+v.filename+'" value="'+v.mid+'" type="checkbox"><label for="'+v.ke+'_'+v.filename+'"></label></div></td>';
if(showThumbnail)tmp+='<td class="text-center"><img class="thumbnail"></td>';
tmp+='<td><span class="livestamp" title="'+$.ccio.timeObject(v.end).format('YYYY-MM-DD HH:mm:ss')+'"></span></td>';
tmp+='<td>'+$.ccio.timeObject(v.end).fromNow()+'</td>';
tmp+='<td title="'+v.end+'">'+$.ccio.timeObject(v.end).format('h:mm:ss A, MMMM Do YYYY')+'</td>';
tmp+='<td title="'+v.time+'">'+$.ccio.timeObject(v.time).format('h:mm:ss A, MMMM Do YYYY')+'</td>';
tmp+='<td>'+v.mon.name+'</td>';
@ -620,6 +629,10 @@ $(document).ready(function(e){
tmp+='</tbody>';
tmp+='</table>';
e.b.html(tmp)
e.b.css({
overflow: 'auto',
height: '100%',
}).scrollTop(0);
if(showThumbnail){
var i = 0
var getThumbnail = function(){
@ -636,8 +649,6 @@ $(document).ready(function(e){
}
getThumbnail()
}
$.ccio.init('ls');
$.vidview.e.find('table').bootstrapTable();
break;
}
})