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.
47 lines
1.0 KiB
47 lines
1.0 KiB
'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, |
|
};
|
|
|