JSFiddle - React, Tailwind, and code Playground
by Daedalus
HTML
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<div class="container">
<div class="row">
<div class="col-md-12">
The modal will pop up if there is no activity for 20 seconds
</div>
</div>
</div>
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel"><span class="reason"></span></h4>
</div>
<div class="modal-body">
<span class="reason"></span>
</div>
<div class="modal-footer">
<button type="button" id="stayLoggedInBtn" class="btn btn-primary">Yes</button>
</div>
</div>
</div>
</div>
JavaScript
jQuery(function($) {
var logoutUser, popupOpen, modalOpen = false,
popupOpenFn = _.debounce(function() {
popupOpen = window.setTimeout(function() {
logoutUser = window.setTimeout(function() {
$('.reason', $('#myModal')).text('Logging you out.');
window.setTimeout(function () {
$('#myModal').modal('hide');
}, 2000); // 2 seconds
}, 20000); // 20 seconds
$('.reason', $('#myModal')).text('Stay logged in?');
if (!modalOpen) {
$('#myModal').modal('show');
}
}, 20000); // 20 seconds
}, 600); // 0.6 seconds
$('#myModal').modal({
backdrop: 'static',
show: false
});
$('#myModal').on('show.bs.modal', function () {
modalOpen = true;
});
$('#myModal').on('hide.bs.modal', function () {
modalOpen = false;
});
$('#stayLoggedInBtn').click(function (evt) {
window.clearTimeout(logoutUser);
$('#myModal').modal('hide');
popupOpenFn();
});
$('body').on('click keypress keyup keydown mousemove', function(evt) {
window.clearTimeout(popupOpen);
popupOpenFn();
});
popupOpenFn();
});