51 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
module.exports = function targetEnvironments() {
 | 
						|
  var _targets = Object.create(null);
 | 
						|
  var _activeCount = 0;
 | 
						|
 | 
						|
  var checkAllowed = function(target) {
 | 
						|
    if (!(target in _targets)) {
 | 
						|
      throw new Error('Error accessing target "' + target + '". It is not in the list of allowed targets: ' + Object.keys(_targets));
 | 
						|
    }
 | 
						|
  };
 | 
						|
 | 
						|
  var updateActiveCount = function() {
 | 
						|
    _activeCount = 0;
 | 
						|
    for(target in _targets) {
 | 
						|
      if (_targets[target]) _activeCount++;
 | 
						|
    }
 | 
						|
  };
 | 
						|
 | 
						|
  return {
 | 
						|
    addAllowed: function(target, isActive) {
 | 
						|
      _targets[target] = !!isActive;
 | 
						|
      updateActiveCount();
 | 
						|
    },
 | 
						|
    removeAllowed: function(target) {
 | 
						|
      delete _targets[target];
 | 
						|
      updateActiveCount();
 | 
						|
    },
 | 
						|
    activate: function(target) {
 | 
						|
      checkAllowed(target);
 | 
						|
      _targets[target] = true;
 | 
						|
      updateActiveCount();
 | 
						|
    },
 | 
						|
    deactivate: function(target) {
 | 
						|
      checkAllowed(target);
 | 
						|
      _targets[target] = false;
 | 
						|
      updateActiveCount();
 | 
						|
    },
 | 
						|
    isActive: function(target) {
 | 
						|
      checkAllowed(target);
 | 
						|
      return _targets[target];
 | 
						|
    },
 | 
						|
    hasActive: function() {
 | 
						|
      return _activeCount > 0;
 | 
						|
    },
 | 
						|
    someActive: function(targets) {
 | 
						|
      for(var i=0,ii=targets.length; i<ii; i++) {
 | 
						|
        if (this.isActive(targets[i])) return true;
 | 
						|
      }
 | 
						|
      return false;
 | 
						|
    }
 | 
						|
  };
 | 
						|
}; |