| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313 | 
							- /**
 
-  * @file
 
-  * JavaScript for autologout.
 
-  */
 
- (function ($, Drupal) {
 
-   'use strict';
 
-   /**
 
-    * Attaches the batch behavior for autologout.
 
-    *
 
-    * @type {Drupal~behavior}
 
-    */
 
-   Drupal.behaviors.autologout = {
 
-     attach: function (context, settings) {
 
-       if (context !== document) {
 
-         return;
 
-       }
 
-       var paddingTimer;
 
-       var theDialog;
 
-       var t;
 
-       var localSettings;
 
-       // Activity is a boolean used to detect a user has
 
-       // interacted with the page.
 
-       var activity;
 
-       // Timer to keep track of activity resets.
 
-       var activityResetTimer;
 
-       // Prevent settings being overridden by ajax callbacks by cloning it.
 
-       localSettings = jQuery.extend(true, {}, settings.autologout);
 
-       // Add timer element to prevent detach of all behaviours.
 
-       var timerMarkup = $('<div id="timer"></div>').hide();
 
-       $('body').append(timerMarkup);
 
-       if (localSettings.refresh_only) {
 
-         // On pages where user shouldn't be logged out, don't set the timer.
 
-         t = setTimeout(keepAlive, localSettings.timeout);
 
-       }
 
-       else {
 
-         // Set no activity to start with.
 
-         activity = false;
 
-         // Bind formUpdated events to preventAutoLogout event.
 
-         $('body').bind('formUpdated', function (event) {
 
-           $(event.target).trigger('preventAutologout');
 
-         });
 
-         // Bind formUpdated events to preventAutoLogout event.
 
-         $('body').bind('mousemove', function (event) {
 
-           $(event.target).trigger('preventAutologout');
 
-         });
 
-         // Support for CKEditor.
 
-         if (typeof CKEDITOR !== 'undefined') {
 
-           CKEDITOR.on('instanceCreated', function (e) {
 
-             e.editor.on('contentDom', function () {
 
-               e.editor.document.on('keyup', function (event) {
 
-                 // Keyup event in ckeditor should prevent autologout.
 
-                 $(e.editor.element.$).trigger('preventAutologout');
 
-               });
 
-             });
 
-           });
 
-         }
 
-         $('body').bind('preventAutologout', function (event) {
 
-           // When the preventAutologout event fires, we set activity to true.
 
-           activity = true;
 
-           // Clear timer if one exists.
 
-           clearTimeout(activityResetTimer);
 
-           // Set a timer that goes off and resets this activity indicator after
 
-           // a minute, otherwise sessions never timeout.
 
-           activityResetTimer = setTimeout(function () {
 
-             activity = false;
 
-           }, 60000);
 
-         });
 
-         // On pages where the user should be logged out, set the timer to popup
 
-         // and log them out.
 
-         t = setTimeout(init, localSettings.timeout);
 
-       }
 
-       function init() {
 
-         var noDialog = settings.autologout.no_dialog;
 
-         if (activity) {
 
-           // The user has been active on the page.
 
-           activity = false;
 
-           refresh();
 
-         }
 
-         else {
 
-           // The user has not been active, ask them if they want to stay logged
 
-           // in and start the logout timer.
 
-           paddingTimer = setTimeout(confirmLogout, localSettings.timeout_padding);
 
-           // While the countdown timer is going, lookup the remaining time. If
 
-           // there is more time remaining (i.e. a user is navigating in another
 
-           // tab), then reset the timer for opening the dialog.
 
-           Drupal.Ajax['autologout.getTimeLeft'].autologoutGetTimeLeft(function (time) {
 
-             if (time > 0) {
 
-               clearTimeout(paddingTimer);
 
-               t = setTimeout(init, time);
 
-             }
 
-             else {
 
-               // Logout user right away without displaying a confirmation dialog.
 
-               if (noDialog) {
 
-                 logout();
 
-                 return;
 
-               }
 
-               theDialog = dialog();
 
-             }
 
-           });
 
-         }
 
-       }
 
-       function dialog() {
 
-         var buttons = {};
 
-         buttons[Drupal.t('Yes')] = function () {
 
-           $(this).dialog("destroy");
 
-           clearTimeout(paddingTimer);
 
-           refresh();
 
-         };
 
-         buttons[Drupal.t('No')] = function () {
 
-           $(this).dialog("destroy");
 
-           logout();
 
-         };
 
-         return $('<div id="autologout-confirm">' + localSettings.message + '</div>').dialog({
 
-           modal: true,
 
-           closeOnEscape: false,
 
-           width: "auto",
 
-           dialogClass: 'autologout-dialog',
 
-           title: localSettings.title,
 
-           buttons: buttons,
 
-           close: function (event, ui) {
 
-             logout();
 
-           }
 
-         });
 
-       }
 
-       // A user could have used the reset button on the tab/window they're
 
-       // actively using, so we need to double check before actually logging out.
 
-       function confirmLogout() {
 
-         $(theDialog).dialog('destroy');
 
-         Drupal.Ajax['autologout.getTimeLeft'].autologoutGetTimeLeft(function (time) {
 
-           if (time > 0) {
 
-             t = setTimeout(init, time);
 
-           }
 
-           else {
 
-             logout();
 
-           }
 
-         });
 
-       }
 
-       function logout() {
 
-         if (localSettings.use_alt_logout_method) {
 
-           window.location = drupalSettings.path.baseUrl + "autologout_ahah_logout";
 
-         }
 
-         else {
 
-           $.ajax({
 
-             url: drupalSettings.path.baseUrl + "autologout_ahah_logout",
 
-             type: "POST",
 
-             beforeSend: function (xhr) {
 
-               xhr.setRequestHeader('X-Requested-With', {
 
-                 toString: function (){
 
-                   return '';
 
-                 }
 
-               });
 
-             },
 
-             success: function () {
 
-               window.location = localSettings.redirect_url;
 
-             },
 
-             error: function (XMLHttpRequest, textStatus) {
 
-               if (XMLHttpRequest.status === 403 || XMLHttpRequest.status === 404) {
 
-                 window.location = localSettings.redirect_url;
 
-               }
 
-             }
 
-           });
 
-         }
 
-       }
 
-       /**
 
-        * Get the remaining time.
 
-        *
 
-        * Use the Drupal ajax library to handle get time remaining events
 
-        * because if using the JS Timer, the return will update it.
 
-        *
 
-        * @param function callback(time)
 
-        *   The function to run when ajax is successful. The time parameter
 
-        *   is the time remaining for the current user in ms.
 
-        */
 
-       Drupal.Ajax.prototype.autologoutGetTimeLeft = function (callback) {
 
-         var ajax = this;
 
-         if (ajax.ajaxing) {
 
-           return false;
 
-         }
 
-         ajax.options.success = function (response, status) {
 
-           if (typeof response == 'string') {
 
-             response = $.parseJSON(response);
 
-           }
 
-           if (typeof response[0].command === 'string' && response[0].command === 'alert') {
 
-             // In the event of an error, we can assume user has been logged out.
 
-             window.location = localSettings.redirect_url;
 
-           }
 
-           callback(response[1].settings.time);
 
-           response[0].data = '<div id="timer" style="display: none;">' + response[0].data + '</div>';
 
-           // Let Drupal.ajax handle the JSON response.
 
-           return ajax.success(response, status);
 
-         };
 
-         try {
 
-           $.ajax(ajax.options);
 
-         }
 
-         catch (e) {
 
-           ajax.ajaxing = false;
 
-         }
 
-       };
 
-       Drupal.Ajax['autologout.getTimeLeft'] = Drupal.ajax({
 
-         base: null,
 
-         element: document.body,
 
-         url: drupalSettings.path.baseUrl + 'autologout_ajax_get_time_left',
 
-         event: 'autologout.getTimeLeft',
 
-         error: function (XMLHttpRequest, textStatus) {
 
-           // Disable error reporting to the screen.
 
-         }
 
-       });
 
-       /**
 
-        * Handle refresh event.
 
-        *
 
-        * Use the Drupal ajax library to handle refresh events because if using
 
-        * the JS Timer, the return will update it.
 
-        *
 
-        * @param function timerFunction
 
-        *   The function to tell the timer to run after its been restarted.
 
-        */
 
-       Drupal.Ajax.prototype.autologoutRefresh = function (timerfunction) {
 
-         var ajax = this;
 
-         if (ajax.ajaxing) {
 
-           return false;
 
-         }
 
-         ajax.options.success = function (response, status) {
 
-           if (typeof response === 'string') {
 
-             response = $.parseJSON(response);
 
-           }
 
-           if (typeof response[0].command === 'string' && response[0].command === 'alert') {
 
-             // In the event of an error, we can assume the user has been logged out.
 
-             window.location = localSettings.redirect_url;
 
-           }
 
-           t = setTimeout(timerfunction, localSettings.timeout);
 
-           activity = false;
 
-           // Wrap response data in timer markup to prevent detach of all behaviors.
 
-           response[0].data = '<div id="timer" style="display: none;">' + response[0].data + '</div>';
 
-           // Let Drupal.ajax handle the JSON response.
 
-           return ajax.success(response, status);
 
-         };
 
-         try {
 
-           $.ajax(ajax.options);
 
-         }
 
-         catch (e) {
 
-           ajax.ajaxing = false;
 
-         }
 
-       };
 
-       Drupal.Ajax['autologout.refresh'] = Drupal.ajax({
 
-         base: null,
 
-         element: document.body,
 
-         url: drupalSettings.path.baseUrl + 'autologout_ahah_set_last',
 
-         event: 'autologout.refresh',
 
-         error: function (XMLHttpRequest, textStatus) {
 
-           // Disable error reporting to the screen.
 
-         }
 
-       });
 
-       function keepAlive() {
 
-         Drupal.Ajax['autologout.refresh'].autologoutRefresh(keepAlive);
 
-       }
 
-       function refresh() {
 
-         Drupal.Ajax['autologout.refresh'].autologoutRefresh(init);
 
-       }
 
-       // Check if the page was loaded via a back button click.
 
-       var $dirty_bit = $('#autologout-cache-check-bit');
 
-       if ($dirty_bit.length !== 0) {
 
-         if ($dirty_bit.val() === '1') {
 
-           // Page was loaded via back button click, we should refresh the timer.
 
-           refresh();
 
-         }
 
-         $dirty_bit.val('1');
 
-       }
 
-     }
 
-   };
 
- })(jQuery, Drupal);
 
 
  |