mirror of
https://github.com/openstf/stf
synced 2025-10-04 18:29:17 +02:00

Using temporarily npm-shrinkwrap since `template-html-loader` uses an old `consolidate.js` version which doesn't support `pug`. Follow here: https://github.com/jtangelder/template-html-loader/issues/8
113 lines
3.6 KiB
JavaScript
113 lines
3.6 KiB
JavaScript
var _ = require('lodash')
|
|
|
|
module.exports =
|
|
function logcatTableDirective($rootScope, $timeout, LogcatService) {
|
|
return {
|
|
restrict: 'E',
|
|
replace: true,
|
|
template: require('./logcat-table.pug'),
|
|
link: function(scope, element) {
|
|
var autoScroll = true
|
|
var autoScrollDependingOnScrollPosition = true
|
|
var scrollPosition = 0
|
|
var scrollHeight = 0
|
|
var parent = element[0]
|
|
var body = element.find('tbody')[0]
|
|
var maxEntriesBuffer = 3000
|
|
var numberOfEntries = 0
|
|
|
|
function incrementNumberEntry() {
|
|
numberOfEntries++
|
|
if (numberOfEntries > maxEntriesBuffer) {
|
|
scope.clearTable()
|
|
}
|
|
}
|
|
|
|
LogcatService.addEntryListener = function(entry) {
|
|
incrementNumberEntry()
|
|
addRow(body, entry)
|
|
}
|
|
|
|
LogcatService.addFilteredEntriesListener = function(entries) {
|
|
clearTable()
|
|
//var fragment = document.createDocumentFragment()
|
|
_.each(entries, function(entry) {
|
|
// TODO: This is not adding all the entries after first scope creation
|
|
incrementNumberEntry()
|
|
addRow(body, entry, true)
|
|
})
|
|
}
|
|
|
|
function shouldAutoScroll() {
|
|
if (autoScrollDependingOnScrollPosition) {
|
|
return scrollPosition === scrollHeight
|
|
} else {
|
|
return true
|
|
}
|
|
}
|
|
|
|
function scrollListener(event) {
|
|
scrollPosition = event.target.scrollTop + event.target.clientHeight
|
|
scrollHeight = event.target.scrollHeight
|
|
}
|
|
|
|
var throttledScrollListener = _.throttle(scrollListener, 100)
|
|
parent.addEventListener('scroll', throttledScrollListener, false)
|
|
|
|
function scrollToBottom() {
|
|
parent.scrollTop = parent.scrollHeight + 20
|
|
$timeout(function() {
|
|
parent.scrollTop = parent.scrollHeight
|
|
}, 10)
|
|
}
|
|
|
|
function addRow(rowParent, data, batchRequest) {
|
|
var newRow = rowParent.insertRow(-1)
|
|
|
|
newRow.classList.add('log-' + data.priorityLabel)
|
|
|
|
//newRow.insertCell(-1)
|
|
// .appendChild(document.createTextNode(LogcatService.numberOfEntries))
|
|
//newRow.insertCell(-1)
|
|
// .appendChild(document.createTextNode(data.deviceLabel))
|
|
newRow.insertCell(-1)
|
|
.appendChild(document.createTextNode(data.priorityLabel))
|
|
newRow.insertCell(-1)
|
|
.appendChild(document.createTextNode(data.dateLabel))
|
|
if ($rootScope.platform === 'native') {
|
|
newRow.insertCell(-1)
|
|
.appendChild(document.createTextNode(data.pid))
|
|
newRow.insertCell(-1)
|
|
.appendChild(document.createTextNode(data.tid))
|
|
//newRow.insertCell(-1)
|
|
// .appendChild(document.createTextNode(data.app))
|
|
newRow.insertCell(-1)
|
|
.appendChild(document.createTextNode(data.tag))
|
|
}
|
|
newRow.insertCell(-1)
|
|
.appendChild(document.createTextNode(data.message))
|
|
|
|
if (autoScroll && shouldAutoScroll() && !batchRequest) {
|
|
_.throttle(scrollToBottom, 30)()
|
|
}
|
|
}
|
|
|
|
function clearTable() {
|
|
var oldBody = body
|
|
var newBody = document.createElement('tbody')
|
|
oldBody.parentNode.replaceChild(newBody, oldBody)
|
|
body = newBody
|
|
}
|
|
|
|
scope.clearTable = function() {
|
|
LogcatService.clear()
|
|
numberOfEntries = 0
|
|
clearTable()
|
|
}
|
|
|
|
scope.$on('$destroy', function() {
|
|
parent.removeEventListener('scroll', throttledScrollListener)
|
|
})
|
|
}
|
|
}
|
|
}
|