js/watch.js

Summary

Maintainability
A
3 hrs
Test Coverage
// Generated by CoffeeScript 1.7.1
gon._timers = {};

gon.watch = function(name, possibleOptions, possibleCallback, possibleErrorCallback) {
  var callback, errorCallback, key, options, performAjax, timer, value, _base, _ref;
  if (typeof $ === "undefined" || $ === null) {
    return;
  }
  if (typeof possibleOptions === 'object') {
    options = {};
    _ref = gon.watchedVariables[name];
    for (key in _ref) {
      value = _ref[key];
      options[key] = value;
    }
    for (key in possibleOptions) {
      value = possibleOptions[key];
      options[key] = value;
    }
    callback = possibleCallback;
    errorCallback = possibleErrorCallback;
  } else {
    options = gon.watchedVariables[name];
    callback = possibleOptions;
    errorCallback = possibleCallback;
  }
  performAjax = function() {
    var xhr;
    xhr = $.ajax({
      type: options.type || 'GET',
      url: options.url,
      data: {
        _method: options.method,
        gon_return_variable: true,
        gon_watched_variable: name
      }
    });
    if (errorCallback) {
      return xhr.done(callback).fail(errorCallback);
    } else {
      return xhr.done(callback);
    }
  };
  if (options.interval) {
    timer = setInterval(performAjax, options.interval);
    if ((_base = gon._timers)[name] == null) {
      _base[name] = [];
    }
    return gon._timers[name].push({
      timer: timer,
      fn: callback
    });
  } else {
    return performAjax();
  }
};

gon.unwatch = function(name, fn) {
  var _i, index, _len, _ref, timer;
  _ref = gon._timers[name];
  for (index = _i = 0, _len = _ref.length; _i < _len; index = ++_i) {
    timer = _ref[index];
    if (!(timer.fn === fn)) {
      continue;
    }
    clearInterval(timer.timer);
    gon._timers[name].splice(index, 1);
    return;
  }
};

gon.unwatchAll = function() {
  var _i, _len, _ref, timer, timers, variable;
  _ref = gon._timers;
  for (variable in _ref) {
    timers = _ref[variable];
    for (_i = 0, _len = timers.length; _i < _len; _i++) {
      timer = timers[_i];
      clearInterval(timer.timer);
    }
  }
  return gon._timers = {};
};