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.
		
		
		
		
			
				
					55 lines
				
				1.4 KiB
			
		
		
			
		
	
	
					55 lines
				
				1.4 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								'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
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								}
							 |