[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/lib/yui/build/moodle-core-checknet/ -> moodle-core-checknet.js (source)

   1  YUI.add('moodle-core-checknet', function (Y, NAME) {
   2  
   3  // This file is part of Moodle - http://moodle.org/
   4  //
   5  // Moodle is free software: you can redistribute it and/or modify
   6  // it under the terms of the GNU General Public License as published by
   7  // the Free Software Foundation, either version 3 of the License, or
   8  // (at your option) any later version.
   9  //
  10  // Moodle is distributed in the hope that it will be useful,
  11  // but WITHOUT ANY WARRANTY; without even the implied warranty of
  12  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13  // GNU General Public License for more details.
  14  //
  15  // You should have received a copy of the GNU General Public License
  16  // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
  17  
  18  /**
  19   * A utility to check whether the connection to the Moodle server is still
  20   * active.
  21   *
  22   * @module     moodle-core-checknet
  23   * @package    core
  24   * @copyright  2014 Andrew Nicols <[email protected]>
  25   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  26   * @main       moodle-core-checknet
  27   */
  28  
  29  /**
  30   * @namespace M.core
  31   * @class checknet
  32   */
  33  
  34  function CheckNet() {
  35      CheckNet.superclass.constructor.apply(this, arguments);
  36  }
  37  
  38  Y.extend(CheckNet, Y.Base, {
  39      /**
  40       * A link to the warning dialogue.
  41       *
  42       * @property _alertDialogue
  43       * @type M.core.dialogue
  44       * @private
  45       * @default null
  46       */
  47      _alertDialogue: null,
  48  
  49      /**
  50       * Setup the checking mechanism.
  51       *
  52       * @method initializer
  53       */
  54      initializer: function() {
  55          // Perform our first check.
  56          this._scheduleCheck();
  57      },
  58  
  59      /**
  60       * Schedule a check of the checknet file.
  61       *
  62       * @method _scheduleCheck
  63       * @chainable
  64       * @private
  65       */
  66      _scheduleCheck: function() {
  67          // Schedule the next check after five seconds.
  68          Y.later(this.get('frequency'), this, this._performCheck);
  69  
  70          return this;
  71      },
  72  
  73      /**
  74       * Perform an immediate check of the checknet file.
  75       *
  76       * @method _performCheck
  77       * @private
  78       */
  79      _performCheck: function() {
  80          Y.io(this.get('uri'), {
  81              data: {
  82                  // Add a query string to prevent older versions of IE from using the cache.
  83                  time: new Date().getTime()
  84              },
  85              timeout: this.get('timeout'),
  86              headers: {
  87                  'Cache-Control': 'no-cache',
  88                  'Expires': '-1'
  89              },
  90              context: this,
  91              on: {
  92                  complete: function(tid, response) {
  93                      // Check for failure conditions.
  94                      // We check for a valid status here because if the user is moving away from the page at the time we
  95                      // run this callback we do not want to display the error.
  96                      if (response && typeof response.status !== "undefined") {
  97                          var code = parseInt(response.status, 10);
  98  
  99                          if (code === 200) {
 100                              // This is a valid attempt - clear any existing warning dialogue and destroy it.
 101                              if (this._alertDialogue) {
 102                                  this._alertDialogue.destroy();
 103                                  this._alertDialogue = null;
 104                              }
 105                          } else if (code >= 300 && code <= 399) {
 106                              // This is a cached status - warn developers, but otherwise ignore.
 107                          } else {
 108                              if (this._alertDialogue === null || this._alertDialogue.get('destroyed')) {
 109                                  // Only create a new dialogue if it isn't already displayed.
 110                                  this._alertDialogue = new M.core.alert({
 111                                      message: M.util.get_string.apply(this, this.get('message'))
 112                                  });
 113                              } else {
 114                                  this._alertDialogue.show();
 115                              }
 116                          }
 117                      }
 118  
 119                      // Start the next check.
 120                      this._scheduleCheck();
 121                  }
 122              }
 123          });
 124      }
 125  }, {
 126      NAME: 'checkNet',
 127      ATTRS: {
 128          /**
 129           * The file to check access against.
 130           *
 131           * @attribute uri
 132           * @type String
 133           * @default M.cfg.wwwroot + '/lib/yui/build/moodle-core-checknet/assets/checknet.txt'
 134           */
 135          uri: {
 136              value: M.cfg.wwwroot + '/lib/yui/build/moodle-core-checknet/assets/checknet.txt'
 137          },
 138  
 139          /**
 140           * The timeout (in milliseconds) before the checker should give up and display a warning.
 141           *
 142           * @attribute timeout
 143           * @type Number
 144           * @value 2000
 145           */
 146          timeout: {
 147              value: 2000
 148          },
 149  
 150          /**
 151           * The frequency (in milliseconds) that checks should be run.
 152           * A new check is not begun until the previous check has completed.
 153           *
 154           * @attribute frequency
 155           * @writeOnce
 156           * @type Number
 157           * @value 5000
 158           */
 159          frequency: {
 160              value: 5000
 161          },
 162  
 163          /**
 164           * The message which should be displayed upon a test failure.
 165           *
 166           * The array values are passed directly to M.util.get_string() and arguments should match accordingly.
 167           *
 168           * @attribute message
 169           * @type Array
 170           * @value [
 171           *  'networkdropped',
 172           *  'moodle'
 173           * ]
 174           */
 175          message: {
 176              value: [
 177                  'networkdropped',
 178                  'moodle'
 179              ]
 180          }
 181      }
 182  });
 183  
 184  M.core = M.core || {};
 185  M.core.checknet = M.core.checknet || {};
 186  M.core.checknet.init = function(config) {
 187      return new CheckNet(config);
 188  };
 189  
 190  
 191  }, '@VERSION@', {"requires": ["base-base", "moodle-core-notification-alert", "io-base"]});


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1