| 'use strict'; |
| |
| var parseMeasurement = require('../parsers').parseMeasurement; |
| |
| /*jslint regexp: true*/ |
| var shape_regex = /^rect\((.*)\)$/i; |
| /*jslint regexp: false*/ |
| |
| 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 |
| }; |