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
99 lines
2.8 KiB
JavaScript
99 lines
2.8 KiB
JavaScript
module.exports = function SocketStateDirectiveFactory(
|
|
socket
|
|
, growl
|
|
, gettext
|
|
, $filter
|
|
, SocketDisconnectedService
|
|
, $window
|
|
) {
|
|
return {
|
|
restrict: 'EA',
|
|
template: require('./socket-state.pug'),
|
|
link: function(scope) {
|
|
var hasFailedOnce = false
|
|
|
|
function setState(state) {
|
|
switch (state) {
|
|
case 'connect':
|
|
if (hasFailedOnce) {
|
|
growl.success('<h4>WebSocket</h4>' + $filter('translate')(
|
|
gettext('Connected successfully.')) +
|
|
'<refresh-page></refresh-page>', {ttl: 2000})
|
|
}
|
|
break
|
|
case 'disconnect':
|
|
SocketDisconnectedService.open(
|
|
gettext('Socket connection was lost'))
|
|
break
|
|
case 'connect_error':
|
|
case 'error':
|
|
SocketDisconnectedService.open(
|
|
gettext('Error'))
|
|
break
|
|
case 'reconnect_failed':
|
|
SocketDisconnectedService.open(
|
|
gettext('Error while reconnecting'))
|
|
break
|
|
case 'reconnect':
|
|
growl.success('<h4>WebSocket</h4>' + $filter('translate')(
|
|
gettext('Reconnected successfully.')), {ttl: -1})
|
|
break
|
|
}
|
|
|
|
scope.$apply(function() {
|
|
scope.socketState = state
|
|
})
|
|
}
|
|
|
|
var socketListeners = {
|
|
connect: function() {
|
|
setState('connect')
|
|
}
|
|
, disconnect: function() {
|
|
setState('disconnect')
|
|
hasFailedOnce = true
|
|
}
|
|
, error: function() {
|
|
setState('error')
|
|
hasFailedOnce = true
|
|
}
|
|
, connect_error: function() {
|
|
setState('connect_error')
|
|
hasFailedOnce = true
|
|
}
|
|
, reconnect_error: function() {
|
|
setState('reconnect_error')
|
|
hasFailedOnce = true
|
|
}
|
|
, reconnect_failed: function() {
|
|
setState('reconnect_failed')
|
|
hasFailedOnce = true
|
|
}
|
|
, reconnect: function() {
|
|
setState('reconnect')
|
|
hasFailedOnce = true
|
|
}
|
|
}
|
|
|
|
Object.keys(socketListeners).forEach(function(event) {
|
|
socket.on(event, socketListeners[event])
|
|
})
|
|
|
|
function unloadListener() {
|
|
// On at least Firefox, the socket connection will close
|
|
// before the page unloads, causing the "socket disconnected"
|
|
// message to display on every unload. To prevent that from
|
|
// happening, let's unbind all the listeners when it's time.
|
|
Object.keys(socketListeners).forEach(function(event) {
|
|
socket.removeListener(event, socketListeners[event])
|
|
})
|
|
}
|
|
|
|
$window.addEventListener('beforeunload', unloadListener, false)
|
|
|
|
scope.$on('$destroy', function() {
|
|
$window.removeEventListener('beforeunload', unloadListener, false)
|
|
})
|
|
}
|
|
}
|
|
}
|