index.html 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset='utf-8' />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <meta name="description" content="Jquery-idletimer : provides you a way to monitor user activity with a page." />
  8. <title>Jquery-idletimer</title>
  9. <!-- jQuery and idleTimer -->
  10. <script type="text/javascript" src="//code.jquery.com/jquery-1.11.0.min.js"></script>
  11. <script type="text/javascript" src="../src/idle-timer.js"></script>
  12. <!-- Bootstrap/respond (ie8) and moment -->
  13. <link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
  14. <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
  15. <script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.js"></script>
  16. <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.5.1/moment.js"></script>
  17. <!-- Respond.js proxy on external server -->
  18. <link href="//netdna.bootstrapcdn.com/respond-proxy.html" id="respond-proxy" rel="respond-proxy" />
  19. <link href="respond.proxy.gif" id="respond-redirect" rel="respond-redirect" />
  20. <script src="respond.proxy.js"></script>
  21. <style>
  22. body {
  23. margin-top: 40px;
  24. margin-bottom: 40px;
  25. }
  26. .btn {
  27. padding: 5px 6px;
  28. }
  29. </style>
  30. </head>
  31. <body>
  32. <div class="navbar navbar-default navbar-fixed-top" role="navigation">
  33. <div class="container">
  34. <div class="navbar-header">
  35. <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
  36. <span class="sr-only">Toggle navigation</span>
  37. <span class="icon-bar"></span>
  38. <span class="icon-bar"></span>
  39. <span class="icon-bar"></span>
  40. </button>
  41. <a class="navbar-brand" href="index.html">Jquery-idletimer</a>
  42. </div>
  43. <div class="navbar-collapse collapse">
  44. <ul class="nav navbar-nav">
  45. <li><a href="autologout.html">Auto Logout</a></li>
  46. <li><a href="defaultbinding.html">Default Binding</a></li>
  47. <li><a href="https://github.com/thorst/jquery-idletimer">Documentation</a></li>
  48. </ul>
  49. <ul class="nav navbar-nav navbar-right">
  50. <li><a href="https://github.com/thorst/jquery-idletimer/zipball/master">Zip</a></li>
  51. <li><a href="https://github.com/thorst/jquery-idletimer/tarball/master">Tar</a></li>
  52. <li><a href="https://github.com/thorst/jquery-idletimer">Github</a></li>
  53. </ul>
  54. </div> <!--/.nav-collapse -->
  55. </div>
  56. </div>
  57. <div class="container">
  58. <h2>Concept</h2>
  59. <p>The idle timer is built on <a href="http://jquery.com/">jQuery</a> and provides two events: <code>idle.idleTimer</code> and <code>active.idleTimer</code>, which fire when the user's idle state has changed.</p>
  60. <p>When you move your mouse over the page or start typing, you're considered "active".</p>
  61. <p>On this page we have two idle timers. One for the entire document. Another for the text area on the right (or bottom if your on mobile).</p>
  62. <p>I use explicit instantiation here</p>
  63. <div class="row">
  64. <div class="col-md-6">
  65. <h3>Document <small><span id="docTimeout"></span> second timeout</small></h3>
  66. <div class="btn-group">
  67. <a href="#" id="btPause" class="btn btn-default btn-sm">Pause</a>
  68. <a href="#" id="btResume" class="btn btn-default btn-sm">Resume</a>
  69. <a href="#" id="btElapsed" class="btn btn-default btn-sm">Elapsed</a>
  70. <a href="#" id="btInit" class="btn btn-default btn-sm">Init</a>
  71. <a href="#" id="btDestroy" class="btn btn-default btn-sm">Destroy</a>
  72. </div>
  73. <textarea rows="10" cols="30" id="docStatus" class="form-control"></textarea><br />
  74. </div>
  75. <div class="col-md-6">
  76. <h3>Element <small><span id="elTimeout"></span> second timeout</small></h3>
  77. <div class="btn-group">
  78. <a href="#" id="btReset" class="btn btn-default btn-sm">Reset</a>
  79. <a href="#" id="btLastActive" class="btn btn-default btn-sm">Last Active</a>
  80. <a href="#" id="btRemaining" class="btn btn-default btn-sm">Remaining</a>
  81. <a href="#" id="btState" class="btn btn-default btn-sm">State</a>
  82. </div>
  83. <textarea rows="10" cols="30" id="elStatus" class="form-control"></textarea><br />
  84. </div>
  85. </div>
  86. <h3>Dialogs</h3>
  87. <!-- Button trigger modal -->
  88. <button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
  89. Launch modal
  90. </button>
  91. <button id="alert" class="btn btn-primary btn-lg">
  92. Launch alert
  93. </button>
  94. <!-- Modal -->
  95. <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  96. <div class="modal-dialog">
  97. <div class="modal-content">
  98. <div class="modal-header">
  99. <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
  100. <h4 class="modal-title" id="myModalLabel">Modal title</h4>
  101. </div>
  102. <div class="modal-body">
  103. ...
  104. </div>
  105. <div class="modal-footer">
  106. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  107. </div>
  108. </div>
  109. </div>
  110. </div>
  111. </div>
  112. <script>
  113. /*
  114. scrollToBottom plugin, chainable
  115. */
  116. $.fn.scrollToBottom = function () {
  117. this.scrollTop(this[0].scrollHeight);
  118. return this;
  119. };
  120. /*
  121. click event for alert button
  122. */
  123. (function ($) {
  124. //Display alert
  125. $("#alert").click(function () { alert("Hello!"); return false; });
  126. })(jQuery);
  127. </script>
  128. <script type="text/javascript">
  129. /*
  130. Code for document idle timer
  131. */
  132. (function ($) {
  133. //Define default
  134. var
  135. docTimeout = 5000
  136. ;
  137. /*
  138. Handle raised idle/active events
  139. */
  140. $(document).on("idle.idleTimer", function (event, elem, obj) {
  141. $("#docStatus")
  142. .val(function (i, v) {
  143. return v + "Idle @ " + moment().format() + " \n";
  144. })
  145. .removeClass("alert-success")
  146. .addClass("alert-warning")
  147. .scrollToBottom();
  148. });
  149. $(document).on("active.idleTimer", function (event, elem, obj, e) {
  150. $('#docStatus')
  151. .val(function (i, v) {
  152. return v + "Active [" + e.type + "] [" + e.target.nodeName + "] @ " + moment().format() + " \n";
  153. })
  154. .addClass("alert-success")
  155. .removeClass("alert-warning")
  156. .scrollToBottom();
  157. });
  158. /*
  159. Handle button events
  160. */
  161. $("#btPause").click(function () {
  162. $(document).idleTimer("pause");
  163. $('#docStatus')
  164. .val(function (i, v) {
  165. return v + "Paused @ " + moment().format() + " \n";
  166. })
  167. .scrollToBottom();
  168. $(this).blur();
  169. return false;
  170. });
  171. $("#btResume").click(function () {
  172. $(document).idleTimer("resume");
  173. $('#docStatus')
  174. .val(function (i, v) {
  175. return v + "Resumed @ " + moment().format() + " \n";
  176. })
  177. .scrollToBottom();
  178. $(this).blur();
  179. return false;
  180. });
  181. $("#btElapsed").click(function () {
  182. $('#docStatus')
  183. .val(function (i, v) {
  184. return v + "Elapsed (since becoming active): " + $(document).idleTimer("getElapsedTime") + " \n";
  185. })
  186. .scrollToBottom();
  187. $(this).blur();
  188. return false;
  189. });
  190. $("#btDestroy").click(function () {
  191. $(document).idleTimer("destroy");
  192. $('#docStatus')
  193. .val(function (i, v) {
  194. return v + "Destroyed: @ " + moment().format() + " \n";
  195. })
  196. .removeClass("alert-success")
  197. .removeClass("alert-warning")
  198. .scrollToBottom();
  199. $(this).blur();
  200. return false;
  201. });
  202. $("#btInit").click(function () {
  203. // for demo purposes show init with just object
  204. $(document).idleTimer({ timeout: docTimeout });
  205. $('#docStatus')
  206. .val(function (i, v) {
  207. return v + "Init: @ " + moment().format() + " \n";
  208. })
  209. .scrollToBottom();
  210. //Apply classes for default state
  211. if ($(document).idleTimer("isIdle")) {
  212. $('#docStatus')
  213. .removeClass("alert-success")
  214. .addClass("alert-warning");
  215. } else {
  216. $('#docStatus')
  217. .addClass("alert-success")
  218. .removeClass("alert-warning");
  219. }
  220. $(this).blur();
  221. return false;
  222. });
  223. //Clear old statuses
  224. $('#docStatus').val('');
  225. //Start timeout, passing no options
  226. //Same as $.idleTimer(docTimeout, docOptions);
  227. $(document).idleTimer(docTimeout);
  228. //For demo purposes, style based on initial state
  229. if ($(document).idleTimer("isIdle")) {
  230. $("#docStatus")
  231. .val(function (i, v) {
  232. return v + "Initial Idle State @ " + moment().format() + " \n";
  233. })
  234. .removeClass("alert-success")
  235. .addClass("alert-warning")
  236. .scrollToBottom();
  237. } else {
  238. $('#docStatus')
  239. .val(function (i, v) {
  240. return v + "Initial Active State @ " + moment().format() + " \n";
  241. })
  242. .addClass("alert-success")
  243. .removeClass("alert-warning")
  244. .scrollToBottom();
  245. }
  246. //For demo purposes, display the actual timeout on the page
  247. $('#docTimeout').text(docTimeout / 1000);
  248. })(jQuery);
  249. </script>
  250. <script type="text/javascript">
  251. /*
  252. Code for element idle timer
  253. */
  254. (function ($) {
  255. //Define textarea settings
  256. var
  257. taTimeout = 3000
  258. ;
  259. /*
  260. Handle raised idle/active events
  261. */
  262. $('#elStatus').on("idle.idleTimer", function (event, elem, obj) {
  263. //If you dont stop propagation it will bubble up to document event handler
  264. event.stopPropagation();
  265. $('#elStatus')
  266. .val(function (i, v) {
  267. return v + "Idle @ " + moment().format() + " \n";
  268. })
  269. .removeClass("alert-success")
  270. .addClass("alert-warning")
  271. .scrollToBottom();
  272. });
  273. $('#elStatus').on("active.idleTimer", function (event) {
  274. //If you dont stop propagation it will bubble up to document event handler
  275. event.stopPropagation();
  276. $('#elStatus')
  277. .val(function (i, v) {
  278. return v + "Active @ " + moment().format() + " \n";
  279. })
  280. .addClass("alert-success")
  281. .removeClass("alert-warning")
  282. .scrollToBottom();
  283. });
  284. /*
  285. Handle button events
  286. */
  287. $("#btReset").click(function () {
  288. $('#elStatus')
  289. .idleTimer("reset")
  290. .val(function (i, v) {
  291. return v + "Reset @ " + moment().format() + " \n";
  292. })
  293. .scrollToBottom();
  294. //Apply classes for default state
  295. if ($("#elStatus").idleTimer("isIdle")) {
  296. $('#elStatus')
  297. .removeClass("alert-success")
  298. .addClass("alert-warning");
  299. } else {
  300. $('#elStatus')
  301. .addClass("alert-success")
  302. .removeClass("alert-warning");
  303. }
  304. $(this).blur();
  305. return false;
  306. });
  307. $("#btRemaining").click(function () {
  308. $('#elStatus')
  309. .val(function (i, v) {
  310. return v + "Remaining: " + $("#elStatus").idleTimer("getRemainingTime") + " \n";
  311. })
  312. .scrollToBottom();
  313. $(this).blur();
  314. return false;
  315. });
  316. $("#btLastActive").click(function () {
  317. $('#elStatus')
  318. .val(function (i, v) {
  319. return v + "LastActive: " + $("#elStatus").idleTimer("getLastActiveTime") + " \n";
  320. })
  321. .scrollToBottom();
  322. $(this).blur();
  323. return false;
  324. });
  325. $("#btState").click(function () {
  326. $('#elStatus')
  327. .val(function (i, v) {
  328. return v + "State: " + ($("#elStatus").idleTimer("isIdle")? "idle":"active") + " \n";
  329. })
  330. .scrollToBottom();
  331. $(this).blur();
  332. return false;
  333. });
  334. //Clear value if there was one cached & start time
  335. $('#elStatus').val('').idleTimer(taTimeout);
  336. //For demo purposes, show initial state
  337. if ($("#elStatus").idleTimer("isIdle")) {
  338. $("#elStatus")
  339. .val(function (i, v) {
  340. return v + "Initial Idle @ " + moment().format() + " \n";
  341. })
  342. .removeClass("alert-success")
  343. .addClass("alert-warning")
  344. .scrollToBottom();
  345. } else {
  346. $('#elStatus')
  347. .val(function (i, v) {
  348. return v + "Initial Active @ " + moment().format() + " \n";
  349. })
  350. .addClass("alert-success")
  351. .removeClass("alert-warning")
  352. .scrollToBottom();
  353. }
  354. // Display the actual timeout on the page
  355. $('#elTimeout').text(taTimeout / 1000);
  356. })(jQuery);
  357. </script>
  358. </body>
  359. </html>