You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							54 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							54 lines
						
					
					
						
							1.4 KiB
						
					
					
				'use strict'; | 
						|
module.exports = { | 
						|
  wrap: wrapRange, | 
						|
  limit: limitRange, | 
						|
  validate: validateRange, | 
						|
  test: testRange, | 
						|
  curry: curry, | 
						|
  name: name | 
						|
}; | 
						|
 | 
						|
function wrapRange(min, max, value) { | 
						|
  var maxLessMin = max - min; | 
						|
  return ((value - min) % maxLessMin + maxLessMin) % maxLessMin + min; | 
						|
} | 
						|
 | 
						|
function limitRange(min, max, value) { | 
						|
  return Math.max(min, Math.min(max, value)); | 
						|
} | 
						|
 | 
						|
function validateRange(min, max, value, minExclusive, maxExclusive) { | 
						|
  if (!testRange(min, max, value, minExclusive, maxExclusive)) { | 
						|
    throw new Error(value + ' is outside of range [' + min + ',' + max + ')'); | 
						|
  } | 
						|
  return value; | 
						|
} | 
						|
 | 
						|
function testRange(min, max, value, minExclusive, maxExclusive) { | 
						|
  return !( | 
						|
       value < min || | 
						|
       value > max || | 
						|
       (maxExclusive && (value === max)) || | 
						|
       (minExclusive && (value === min)) | 
						|
  ); | 
						|
} | 
						|
 | 
						|
function name(min, max, minExcl, maxExcl) { | 
						|
  return (minExcl ? '(' : '[') + min + ',' + max + (maxExcl ? ')' : ']'); | 
						|
} | 
						|
 | 
						|
function curry(min, max, minExclusive, maxExclusive) { | 
						|
  var boundNameFn = name.bind(null, min, max, minExclusive, maxExclusive); | 
						|
  return { | 
						|
    wrap: wrapRange.bind(null, min, max), | 
						|
    limit: limitRange.bind(null, min, max), | 
						|
    validate: function(value) { | 
						|
      return validateRange(min, max, value, minExclusive, maxExclusive); | 
						|
    }, | 
						|
    test: function(value) { | 
						|
      return testRange(min, max, value, minExclusive, maxExclusive); | 
						|
    }, | 
						|
    toString: boundNameFn, | 
						|
    name: boundNameFn | 
						|
  }; | 
						|
}
 | 
						|
 |