48 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| var parseMeasurement = require('../parsers').parseMeasurement;
 | |
| 
 | |
| var shape_regex = /^rect\((.*)\)$/i;
 | |
| 
 | |
| var parse = function(val) {
 | |
|   if (val === '' || val === null) {
 | |
|     return val;
 | |
|   }
 | |
|   if (typeof val !== 'string') {
 | |
|     return undefined;
 | |
|   }
 | |
|   val = val.toLowerCase();
 | |
|   if (val === 'auto' || val === 'inherit') {
 | |
|     return val;
 | |
|   }
 | |
|   var matches = val.match(shape_regex);
 | |
|   if (!matches) {
 | |
|     return undefined;
 | |
|   }
 | |
|   var parts = matches[1].split(/\s*,\s*/);
 | |
|   if (parts.length !== 4) {
 | |
|     return undefined;
 | |
|   }
 | |
|   var valid = parts.every(function(part, index) {
 | |
|     var measurement = parseMeasurement(part);
 | |
|     parts[index] = measurement;
 | |
|     return measurement !== undefined;
 | |
|   });
 | |
|   if (!valid) {
 | |
|     return undefined;
 | |
|   }
 | |
|   parts = parts.join(', ');
 | |
|   return val.replace(matches[1], parts);
 | |
| };
 | |
| 
 | |
| module.exports.definition = {
 | |
|   set: function(v) {
 | |
|     this._setProperty('clip', parse(v));
 | |
|   },
 | |
|   get: function() {
 | |
|     return this.getPropertyValue('clip');
 | |
|   },
 | |
|   enumerable: true,
 | |
|   configurable: true,
 | |
| };
 |