[ Index ]

PHP Cross Reference of Drupal 6 (gatewave)

title

Body

[close]

/misc/ -> progress.js (source)

   1  // $Id: progress.js,v 1.20 2008/01/04 11:53:21 goba Exp $
   2  
   3  /**
   4   * A progressbar object. Initialized with the given id. Must be inserted into
   5   * the DOM afterwards through progressBar.element.
   6   *
   7   * method is the function which will perform the HTTP request to get the
   8   * progress bar state. Either "GET" or "POST".
   9   *
  10   * e.g. pb = new progressBar('myProgressBar');
  11   *      some_element.appendChild(pb.element);
  12   */
  13  Drupal.progressBar = function (id, updateCallback, method, errorCallback) {
  14    var pb = this;
  15    this.id = id;
  16    this.method = method || "GET";
  17    this.updateCallback = updateCallback;
  18    this.errorCallback = errorCallback;
  19  
  20    this.element = document.createElement('div');
  21    this.element.id = id;
  22    this.element.className = 'progress';
  23    $(this.element).html('<div class="bar"><div class="filled"></div></div>'+
  24                         '<div class="percentage"></div>'+
  25                         '<div class="message">&nbsp;</div>');
  26  };
  27  
  28  /**
  29   * Set the percentage and status message for the progressbar.
  30   */
  31  Drupal.progressBar.prototype.setProgress = function (percentage, message) {
  32    if (percentage >= 0 && percentage <= 100) {
  33      $('div.filled', this.element).css('width', percentage +'%');
  34      $('div.percentage', this.element).html(percentage +'%');
  35    }
  36    $('div.message', this.element).html(message);
  37    if (this.updateCallback) {
  38      this.updateCallback(percentage, message, this);
  39    }
  40  };
  41  
  42  /**
  43   * Start monitoring progress via Ajax.
  44   */
  45  Drupal.progressBar.prototype.startMonitoring = function (uri, delay) {
  46    this.delay = delay;
  47    this.uri = uri;
  48    this.sendPing();
  49  };
  50  
  51  /**
  52   * Stop monitoring progress via Ajax.
  53   */
  54  Drupal.progressBar.prototype.stopMonitoring = function () {
  55    clearTimeout(this.timer);
  56    // This allows monitoring to be stopped from within the callback
  57    this.uri = null;
  58  };
  59  
  60  /**
  61   * Request progress data from server.
  62   */
  63  Drupal.progressBar.prototype.sendPing = function () {
  64    if (this.timer) {
  65      clearTimeout(this.timer);
  66    }
  67    if (this.uri) {
  68      var pb = this;
  69      // When doing a post request, you need non-null data. Otherwise a
  70      // HTTP 411 or HTTP 406 (with Apache mod_security) error may result.
  71      $.ajax({
  72        type: this.method,
  73        url: this.uri,
  74        data: '',
  75        dataType: 'json',
  76        success: function (progress) {
  77          // Display errors
  78          if (progress.status == 0) {
  79            pb.displayError(progress.data);
  80            return;
  81          }
  82          // Update display
  83          pb.setProgress(progress.percentage, progress.message);
  84          // Schedule next timer
  85          pb.timer = setTimeout(function() { pb.sendPing(); }, pb.delay);
  86        },
  87        error: function (xmlhttp) {
  88          pb.displayError(Drupal.ahahError(xmlhttp, pb.uri));
  89        }
  90      });
  91    }
  92  };
  93  
  94  /**
  95   * Display errors on the page.
  96   */
  97  Drupal.progressBar.prototype.displayError = function (string) {
  98    var error = document.createElement('div');
  99    error.className = 'error';
 100    error.innerHTML = string;
 101  
 102    $(this.element).before(error).hide();
 103  
 104    if (this.errorCallback) {
 105      this.errorCallback(this);
 106    }
 107  };


Generated: Thu Mar 24 11:18:33 2011 Cross-referenced by PHPXref 0.7