[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/lib/yui/src/checknet/js/ -> checknet.js (source)

   1  // This file is part of Moodle - http://moodle.org/
   2  //
   3  // Moodle is free software: you can redistribute it and/or modify
   4  // it under the terms of the GNU General Public License as published by
   5  // the Free Software Foundation, either version 3 of the License, or
   6  // (at your option) any later version.
   7  //
   8  // Moodle is distributed in the hope that it will be useful,
   9  // but WITHOUT ANY WARRANTY; without even the implied warranty of
  10  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11  // GNU General Public License for more details.
  12  //
  13  // You should have received a copy of the GNU General Public License
  14  // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
  15  
  16  /**
  17   * A utility to check whether the connection to the Moodle server is still
  18   * active.
  19   *
  20   * @module     moodle-core-checknet
  21   * @package    core
  22   * @copyright  2014 Andrew Nicols <andrew@nicols.co.uk>
  23   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  24   * @main       moodle-core-checknet
  25   */
  26  
  27  /**
  28   * @namespace M.core
  29   * @class checknet
  30   */
  31  
  32  function CheckNet() {
  33      CheckNet.superclass.constructor.apply(this, arguments);
  34  }
  35  
  36  Y.extend(CheckNet, Y.Base, {
  37      /**
  38       * A link to the warning dialogue.
  39       *
  40       * @property _alertDialogue
  41       * @type M.core.dialogue
  42       * @private
  43       * @default null
  44       */
  45      _alertDialogue: null,
  46  
  47      /**
  48       * Setup the checking mechanism.
  49       *
  50       * @method initializer
  51       */
  52      initializer: function() {
  53          // Perform our first check.
  54          this._scheduleCheck();
  55      },
  56  
  57      /**
  58       * Schedule a check of the checknet file.
  59       *
  60       * @method _scheduleCheck
  61       * @chainable
  62       * @private
  63       */
  64      _scheduleCheck: function() {
  65          // Schedule the next check after five seconds.
  66          Y.later(this.get('frequency'), this, this._performCheck);
  67  
  68          return this;
  69      },
  70  
  71      /**
  72       * Perform an immediate check of the checknet file.
  73       *
  74       * @method _performCheck
  75       * @private
  76       */
  77      _performCheck: function() {
  78          Y.io(this.get('uri'), {
  79              data: {
  80                  // Add the session key.
  81                  sesskey: M.cfg.sesskey,
  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                              Y.log("A cached copy of the checknet status file was returned so it's reliablity cannot be guaranteed",
 108                                  'warn',
 109                                  'moodle-mod_scorm-checknet');
 110                          } else {
 111                              if (this._alertDialogue === null || this._alertDialogue.get('destroyed')) {
 112                                  // Only create a new dialogue if it isn't already displayed.
 113                                  this._alertDialogue = new M.core.alert({
 114                                      message: M.util.get_string.apply(this, this.get('message'))
 115                                  });
 116                              } else {
 117                                  this._alertDialogue.show();
 118                              }
 119                          }
 120                      }
 121  
 122                      // Start the next check.
 123                      this._scheduleCheck();
 124                  }
 125              }
 126          });
 127      }
 128  }, {
 129      NAME: 'checkNet',
 130      ATTRS: {
 131          /**
 132           * The file to check access against.
 133           *
 134           * @attribute uri
 135           * @type String
 136           * @default M.cfg.wwwroot + '/lib/yui/build/moodle-core-checknet/assets/checknet.txt'
 137           */
 138          uri: {
 139              value: M.cfg.wwwroot + '/lib/yui/build/moodle-core-checknet/assets/checknet.txt'
 140          },
 141  
 142          /**
 143           * The timeout (in milliseconds) before the checker should give up and display a warning.
 144           *
 145           * @attribute timeout
 146           * @type Number
 147           * @value 4000
 148           */
 149          timeout: {
 150              value: 4000
 151          },
 152  
 153          /**
 154           * The frequency (in milliseconds) that checks should be run.
 155           * A new check is not begun until the previous check has completed.
 156           *
 157           * @attribute frequency
 158           * @writeOnce
 159           * @type Number
 160           * @value 10000
 161           */
 162          frequency: {
 163              value: 10000
 164          },
 165  
 166          /**
 167           * The message which should be displayed upon a test failure.
 168           *
 169           * The array values are passed directly to M.util.get_string() and arguments should match accordingly.
 170           *
 171           * @attribute message
 172           * @type Array
 173           * @value [
 174           *  'networkdropped',
 175           *  'moodle'
 176           * ]
 177           */
 178          message: {
 179              value: [
 180                  'networkdropped',
 181                  'moodle'
 182              ]
 183          }
 184      }
 185  });
 186  
 187  M.core = M.core || {};
 188  M.core.checknet = M.core.checknet || {};
 189  M.core.checknet.init = function(config) {
 190      return new CheckNet(config);
 191  };


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1