var app = angular.module('plunker', ['rx']);
app.controller('MainCtrl', function($scope) {
$scope.stopped = stopped;
$scope.resumed = resumed;
function stopped(){
console.log('user wants to quit');
}
function resumed(){
console.log('user wants to stay');
}
});
app.directive('idleUser', ['rx', idleUser])
function idleUser(rx) {
return {
restrict: 'E',
scope: {
stopped: '&',
resumed: '&'
},
controller: function($scope){
var mergedStreams = rx.Observable.merge(
rx.DOM.keydown(document),
rx.DOM.click(document),
rx.DOM.mousemove(document),
rx.DOM.scroll(document),
rx.DOM.touchstart(document)
);
var idleStream = mergedStreams
.bufferWithTime(1000)
.filter(function(arr){
return arr.length===0;
})
.pausable();
var subscriber = idleStream.subscribe(
function () {
idleStream.pause();
if (!confirm("Idle timeout. Quit?")){
idleStream.resume();
$scope.resumed();
} else {
$scope.stopped();
}
},
function (err) {
console.log(err);
});
$scope.$on("$destroy", function() {
subscriber.dispose();
});
//start
idleStream.resume();
}
};
}
<!DOCTYPE html>
<html ng-app="plunker">
<head>
<meta charset="utf-8" />
<title>AngularJS Plunker</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<link rel="stylesheet" href="style.css" />
<script data-require="angular.js@1.4.x" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.min.js" data-semver="1.4.6"></script>
<script data-require="rxjs@*" data-semver="2.5.3" src="//cdnjs.cloudflare.com/ajax/libs/rxjs/2.5.3/rx.all.js"></script>
<script data-require="rx.angular.js@*" data-semver="0.0.14" src="https://cdn.rawgit.com/Reactive-Extensions/rx.angular.js/v0.0.14/dist/rx.angular.js"></script>
<script data-require="rx.dom.js@*" data-semver="4.0.4" src="https://cdn.rawgit.com/Reactive-Extensions/RxJS-DOM/v4.0.4/dist/rx.dom.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
<input type="text" id="input" value="123">
<p>Idle timeout triggers after 5 seconds of inactivity. You can stop with Quit and restart it refreshing the page. Check console for messages.</p>
<idle-user stopped="stopped()" resumed="resumed()" ng-if="show"></idle-user>
<button ng-click="show=!show">Activate/Deactivate</button>{{show|json}}
</body>
</html>
/* Put your css in here */