[Pkg-javascript-commits] [node-cssstyle] 17/39: good basis for implicit and shorthand properties. background and border ones done

Wolfgang Borgert debacle at moszumanska.debian.org
Sat Sep 20 19:37:32 UTC 2014


This is an automated email from the git hooks/post-receive script.

debacle pushed a commit to branch master
in repository node-cssstyle.

commit 6677caee2de2699ce948059bcb2c8f56c3a066ca
Author: Chad Walker <chad at chad-cat-lore-eddie.com>
Date:   Sat Feb 9 20:30:24 2013 -0800

    good basis for implicit and shorthand properties. background and border ones done
---
 lib/parsers.js                      | 142 +++++++++++++++++++++++++++++++++++-
 lib/properties/background.js        |  61 +++-------------
 lib/properties/border.js            |  22 ++++--
 lib/properties/borderBottom.js      |  19 +++++
 lib/properties/borderBottomColor.js |   6 +-
 lib/properties/borderBottomStyle.js |   6 +-
 lib/properties/borderBottomWidth.js |   6 +-
 lib/properties/borderCollapse.js    |  15 +++-
 lib/properties/borderColor.js       |  11 ++-
 lib/properties/borderLeft.js        |  19 +++++
 lib/properties/borderLeftColor.js   |   6 +-
 lib/properties/borderLeftStyle.js   |   6 +-
 lib/properties/borderLeftWidth.js   |   6 +-
 lib/properties/borderRight.js       |  19 +++++
 lib/properties/borderRightColor.js  |   6 +-
 lib/properties/borderRightStyle.js  |   6 +-
 lib/properties/borderRightWidth.js  |   6 +-
 lib/properties/borderSpacing.js     |  29 +++++++-
 lib/properties/borderStyle.js       |  13 +++-
 lib/properties/borderTop.js         |  19 +++++
 lib/properties/borderTopColor.js    |   6 +-
 lib/properties/borderTopStyle.js    |   6 +-
 lib/properties/borderTopWidth.js    |   6 +-
 lib/properties/borderWidth.js       |  15 +++-
 24 files changed, 371 insertions(+), 85 deletions(-)

diff --git a/lib/parsers.js b/lib/parsers.js
index 97cfc94..3707270 100644
--- a/lib/parsers.js
+++ b/lib/parsers.js
@@ -321,4 +321,144 @@ exports.parseAngle = function parseAngle(val) {
         flt -= 360;
     }
     return flt + 'deg';
-};
\ No newline at end of file
+};
+
+// utility to translate from border-width to borderWidth
+var dashedToCamelCase = function (dashed) {
+    var i;
+    var camel = '';
+    var nextCap = false;
+    for (i = 0; i < dashed.length; i++) {
+        if (dashed[i] !== '-') {
+            camel += nextCap ? dashed[i].toUpperCase() : dashed[i];
+            nextCap = false;
+        } else {
+            nextCap = true;
+        }
+    }
+    return camel;
+};
+
+/*
+ * this either returns undefined meaning that it isn't valid
+ * or returns an object where the keys are dashed short
+ * hand properties and the values are the values to set
+ * on them
+ */
+exports.shorthandParser = function parse(v, shorthand_for) {
+    if (v.toLowerCase() === 'inherit') {
+        return {};
+    }
+    var parts = v.split(/\s+/);
+    var valid = true;
+    var obj = {};
+    parts.forEach(function (part) {
+        var part_valid = false;
+        Object.keys(shorthand_for).forEach(function (property) {
+            if (shorthand_for[property].isValid(part)) {
+                part_valid = true;
+                obj[property] = part;
+            }
+        });
+        valid = valid && part_valid;
+    });
+    if (!valid) {
+        return undefined;
+    }
+    return obj;
+};
+
+exports.shorthandSetter = function (property, shorthand_for) {
+    return function (v) {
+        var obj = exports.shorthandParser(v, shorthand_for);
+        if (obj === undefined) {
+            return;
+        }
+        Object.keys(obj).forEach(function (subprop) {
+            // in case subprop is an implicit property, this will clear
+            // *its* subpropertiesX
+            var camel = dashedToCamelCase(subprop);
+            this[camel] = obj[subprop];
+            this.removeProperty(subprop);
+            this._values[subprop] = obj[subprop];
+        }, this);
+        Object.keys(shorthand_for).forEach(function (subprop) {
+            if (!obj.hasOwnProperty(subprop)) {
+                this.removeProperty(subprop);
+                delete this._values[subprop];
+            }
+        }, this);
+        this.setProperty(property, v);
+    };
+};
+
+exports.shorthandGetter = function (property, shorthand_for) {
+    return function () {
+        if (this._values[property] !== undefined) {
+            return this.getPropertyValue(property);
+        }
+        return Object.keys(shorthand_for).map(function (subprop) {
+            return this.getPropertyValue(subprop);
+        }, this).filter(function (value) {
+            return value !== '';
+        }).join(' ');
+    };
+};
+
+// isValid(){1,4} | inherit
+// if one, it applies to all
+// if two, the first applies to the top and bottom, and the second to left and right
+// if three, the first applies to the top, the second to left and right, the third bottom
+// if four, top, right, bottom, left
+exports.implicitSetter = function (property_before, property_after, isValid) {
+    property_after = property_after || '';
+    if (property_after !== '') {
+        property_after = '-' + property_after;
+    }
+    return function (v) {
+        if (v.toLowerCase() === 'inherit') {
+            return this.setProperty(property_before + property_after, v);
+        }
+        var parts = v.split(/\s+/);
+        if (parts.length < 1 || parts.length > 4) {
+            return undefined;
+        }
+
+        if (!parts.every(isValid)) {
+            return undefined;
+        }
+
+        this.setProperty(property_before + property_after, v);
+
+        this.removeProperty(property_before + '-top' + property_after);
+        this.removeProperty(property_before + '-right' + property_after);
+        this.removeProperty(property_before + '-bottom' + property_after);
+        this.removeProperty(property_before + '-left' + property_after);
+        switch (parts.length) {
+        case 1:
+            this._values[property_before + '-top' + property_after] = parts[0];
+            this._values[property_before + '-right' + property_after] = parts[0];
+            this._values[property_before + '-bottom' + property_after] = parts[0];
+            this._values[property_before + '-left' + property_after] = parts[0];
+            return v;
+        case 2:
+            this._values[property_before + '-top' + property_after] = parts[0];
+            this._values[property_before + '-right' + property_after] = parts[1];
+            this._values[property_before + '-bottom' + property_after] = parts[0];
+            this._values[property_before + '-left' + property_after] = parts[1];
+            return v;
+        case 3:
+            this._values[property_before + '-top' + property_after] = parts[0];
+            this._values[property_before + '-right' + property_after] = parts[1];
+            this._values[property_before + '-bottom' + property_after] = parts[2];
+            this._values[property_before + '-left' + property_after] = parts[1];
+            return v;
+        case 4:
+            this._values[property_before + '-top' + property_after] = parts[0];
+            this._values[property_before + '-right' + property_after] = parts[1];
+            this._values[property_before + '-bottom' + property_after] = parts[2];
+            this._values[property_before + '-left' + property_after] = parts[3];
+            return v;
+        }
+    };
+};
diff --git a/lib/properties/background.js b/lib/properties/background.js
index 4961825..fe5592a 100644
--- a/lib/properties/background.js
+++ b/lib/properties/background.js
@@ -1,62 +1,23 @@
 'use strict';
 
-var parsers = require('../parsers');
+var shorthandParser = require('../parsers').shorthandParser;
+var shorthandSetter = require('../parsers').shorthandSetter;
+var shorthandGetter = require('../parsers').shorthandGetter;
 
 var shorthand_for = {
-    backgroundColor: 'background-color',
-    backgroundImage: 'background-image',
-    backgroundRepeat: 'background-repeat',
-    backgroundAttachment: 'background-attachment',
-    backgroundPosition: 'background-position'
-};
-
-/*
- * this either returns undefined meaning that it isn't valid
- * or returns an object where the keys are dashed short
- * hand properties and the values are the values to set
- * on them
- */
-var parse = function parse(v) {
-    if (v.toLowerCase() === 'inherit') {
-        return {};
-    }
-    var parts = v.split(/\s+/);
-    var valid = true;
-    var obj = {};
-    parts.forEach(function (part) {
-        var part_valid = false;
-        Object.keys(shorthand_for).forEach(function (property) {
-            if (require('./' + property).isValid(part)) {
-                part_valid = true;
-                obj[shorthand_for[property]] = part;
-            }
-        });
-        valid = valid && part_valid;
-    });
-    if (!valid) {
-        return undefined;
-    }
-    return obj;
+    'background-color': require('./backgroundColor'),
+    'background-image': require('./backgroundImage'),
+    'background-repeat': require('./backgroundRepeat'),
+    'background-attachment': require('./backgroundAttachment'),
+    'background-position': require('./backgroundPosition')
 };
 
 module.exports.isValid = function isValid(v) {
-    return parse(v) !== undefined;
+    return shorthandParser(v, shorthand_for) !== undefined;
 };
 
 module.exports.definition = {
-    set: function (v) {
-        var parsed = parse(v);
-        if (parsed === undefined) {
-            return;
-        }
-        this.setProperty('background', v);
-        // these don't get set
-        Object.keys(parsed).forEach(function (property) {
-            this._values[property] = parsed[property];
-        }, this);
-    },
-    get: function () {
-        return this.getPropertyValue('background');
-    },
+    set: shorthandSetter('background', shorthand_for),
+    get: shorthandGetter('background', shorthand_for),
     enumerable: true
 };
diff --git a/lib/properties/border.js b/lib/properties/border.js
index 9cce130..6466e9c 100644
--- a/lib/properties/border.js
+++ b/lib/properties/border.js
@@ -1,11 +1,21 @@
 'use strict';
 
+var shorthandParser = require('../parsers').shorthandParser;
+var shorthandSetter = require('../parsers').shorthandSetter;
+var shorthandGetter = require('../parsers').shorthandGetter;
+
+var shorthand_for = {
+    'border-width': require('./borderWidth'),
+    'border-style': require('./borderStyle'),
+    'border-color': require('./borderColor')
+};
+
+var isValid = module.exports.isValid = function isValid(v) {
+    return shorthandParser(v, shorthand_for) !== undefined;
+};
+
 module.exports.definition = {
-    set: function (v) {
-        this.setProperty('border', v);
-    },
-    get: function () {
-        return this.getPropertyValue('border');
-    },
+    set: shorthandSetter('border', shorthand_for),
+    get: shorthandGetter('border', shorthand_for),
     enumerable: true
 };
diff --git a/lib/properties/borderBottom.js b/lib/properties/borderBottom.js
index 2e6bed6..54cff74 100644
--- a/lib/properties/borderBottom.js
+++ b/lib/properties/borderBottom.js
@@ -1,7 +1,26 @@
 'use strict';
 
+var shorthandParser = require('../parsers').shorthandParser;
+
+var shorthand_for = {
+    borderBottomWidth: require('./borderBottomWidth'),
+    borderBottomStyle: require('./borderBottomStyle'),
+    borderBottomColor: require('./borderBottomColor')
+};
+
+var isValid = module.exports.isValid = function isValid(v) {
+    return shorthandParser(v, shorthand_for) !== undefined;
+};
+
 module.exports.definition = {
     set: function (v) {
+        var obj = shorthandParser(v, shorthand_for);
+        if (obj === undefined) {
+            return;
+        }
+        Object.keys(obj).forEach(function (property) {
+            this._values[property] = obj[property];
+        }, this);
         this.setProperty('border-bottom', v);
     },
     get: function () {
diff --git a/lib/properties/borderBottomColor.js b/lib/properties/borderBottomColor.js
index 4a87177..a3ec3f6 100644
--- a/lib/properties/borderBottomColor.js
+++ b/lib/properties/borderBottomColor.js
@@ -1,10 +1,12 @@
 'use strict';
 
-var parseColor = require('../parsers').parseColor;
+var isValid = module.exports.isValid = require('./borderColor').isValid;
 
 module.exports.definition = {
     set: function (v) {
-        this.setProperty('border-bottom-color', parseColor(v));
+        if (isValid(v)) {
+            this.setProperty('border-bottom-color', v);
+        }
     },
     get: function () {
         return this.getPropertyValue('border-bottom-color');
diff --git a/lib/properties/borderBottomStyle.js b/lib/properties/borderBottomStyle.js
index 9adf71c..0087fec 100644
--- a/lib/properties/borderBottomStyle.js
+++ b/lib/properties/borderBottomStyle.js
@@ -1,8 +1,12 @@
 'use strict';
 
+var isValid = module.exports.isValid = require('./borderStyle').isValid;
+
 module.exports.definition = {
     set: function (v) {
-        this.setProperty('border-bottom-style', v);
+        if (isValid(v)) {
+            this.setProperty('border-bottom-style', v);
+        }
     },
     get: function () {
         return this.getPropertyValue('border-bottom-style');
diff --git a/lib/properties/borderBottomWidth.js b/lib/properties/borderBottomWidth.js
index 435f71b..e82443a 100644
--- a/lib/properties/borderBottomWidth.js
+++ b/lib/properties/borderBottomWidth.js
@@ -1,8 +1,12 @@
 'use strict';
 
+var isValid = module.exports.isValid = require('./borderWidth').isValid;
+
 module.exports.definition = {
     set: function (v) {
-        this.setProperty('border-bottom-width', v);
+        if (isValid(v)) {
+            this.setProperty('border-bottom-width', v);
+        }
     },
     get: function () {
         return this.getPropertyValue('border-bottom-width');
diff --git a/lib/properties/borderCollapse.js b/lib/properties/borderCollapse.js
index 205e174..33af8ba 100644
--- a/lib/properties/borderCollapse.js
+++ b/lib/properties/borderCollapse.js
@@ -1,8 +1,21 @@
 'use strict';
 
+var parsers = require('../parsers');
+
+var parse = function parse(v) {
+    if (parsers.valueType(v) === parsers.TYPES.KEYWORD && (v.toLowerCase() === 'collapse' || v.toLowerCase() === 'separate' || v.toLowerCase() === 'inherit')) {
+        return v;
+    }
+    return undefined;
+};
+
+module.exports.isValid = function isValid(v) {
+    return parse(v) !== undefined;
+};
+
 module.exports.definition = {
     set: function (v) {
-        this.setProperty('border-collapse', v);
+        this.setProperty('border-collapse', parse(v));
     },
     get: function () {
         return this.getPropertyValue('border-collapse');
diff --git a/lib/properties/borderColor.js b/lib/properties/borderColor.js
index 9fff30c..9448178 100644
--- a/lib/properties/borderColor.js
+++ b/lib/properties/borderColor.js
@@ -1,11 +1,14 @@
 'use strict';
 
-var parseColor = require('../parsers').parseColor;
+var parsers = require('../parsers');
+var implicitSetter = require('../parsers').implicitSetter;
+
+var isValid = module.exports.isValid = function parse(v) {
+    return (v.toLowerCase() === 'transparent' || parsers.valueType(v) === parsers.TYPES.COLOR);
+};
 
 module.exports.definition = {
-    set: function (v) {
-        this.setProperty('border-color', parseColor(v));
-    },
+    set: implicitSetter('border', 'color', isValid),
     get: function () {
         return this.getPropertyValue('border-color');
     },
diff --git a/lib/properties/borderLeft.js b/lib/properties/borderLeft.js
index de79cea..47687db 100644
--- a/lib/properties/borderLeft.js
+++ b/lib/properties/borderLeft.js
@@ -1,7 +1,26 @@
 'use strict';
 
+var shorthandParser = require('../parsers').shorthandParser;
+
+var shorthand_for = {
+    borderLeftWidth: require('./borderLeftWidth'),
+    borderLeftStyle: require('./borderLeftStyle'),
+    borderLeftColor: require('./borderLeftColor')
+};
+
+var isValid = module.exports.isValid = function isValid(v) {
+    return shorthandParser(v, shorthand_for) !== undefined;
+};
+
 module.exports.definition = {
     set: function (v) {
+        var obj = shorthandParser(v, shorthand_for);
+        if (obj === undefined) {
+            return;
+        }
+        Object.keys(obj).forEach(function (property) {
+            this._values[property] = obj[property];
+        }, this);
         this.setProperty('border-left', v);
     },
     get: function () {
diff --git a/lib/properties/borderLeftColor.js b/lib/properties/borderLeftColor.js
index 0ae6014..7002ee9 100644
--- a/lib/properties/borderLeftColor.js
+++ b/lib/properties/borderLeftColor.js
@@ -1,10 +1,12 @@
 'use strict';
 
-var parseColor = require('../parsers').parseColor;
+var isValid = module.exports.isValid = require('./borderColor').isValid;
 
 module.exports.definition = {
     set: function (v) {
-        this.setProperty('border-left-color', parseColor(v));
+        if (isValid(v)) {
+            this.setProperty('border-left-color', v);
+        }
     },
     get: function () {
         return this.getPropertyValue('border-left-color');
diff --git a/lib/properties/borderLeftStyle.js b/lib/properties/borderLeftStyle.js
index a6d26b9..a6eb666 100644
--- a/lib/properties/borderLeftStyle.js
+++ b/lib/properties/borderLeftStyle.js
@@ -1,8 +1,12 @@
 'use strict';
 
+var isValid = module.exports.isValid = require('./borderStyle').isValid;
+
 module.exports.definition = {
     set: function (v) {
-        this.setProperty('border-left-style', v);
+        if (isValid(v)) {
+            this.setProperty('border-left-style', v);
+        }
     },
     get: function () {
         return this.getPropertyValue('border-left-style');
diff --git a/lib/properties/borderLeftWidth.js b/lib/properties/borderLeftWidth.js
index 910f26a..a7027a0 100644
--- a/lib/properties/borderLeftWidth.js
+++ b/lib/properties/borderLeftWidth.js
@@ -1,8 +1,12 @@
 'use strict';
 
+var isValid = module.exports.isValid = require('./borderWidth').isValid;
+
 module.exports.definition = {
     set: function (v) {
-        this.setProperty('border-left-width', v);
+        if (isValid(v)) {
+            this.setProperty('border-left-width', v);
+        }
     },
     get: function () {
         return this.getPropertyValue('border-left-width');
diff --git a/lib/properties/borderRight.js b/lib/properties/borderRight.js
index 167d7fc..e919035 100644
--- a/lib/properties/borderRight.js
+++ b/lib/properties/borderRight.js
@@ -1,7 +1,26 @@
 'use strict';
 
+var shorthandParser = require('../parsers').shorthandParser;
+
+var shorthand_for = {
+    borderRightWidth: require('./borderRightWidth'),
+    borderRightStyle: require('./borderRightStyle'),
+    borderRightColor: require('./borderRightColor')
+};
+
+var isValid = module.exports.isValid = function isValid(v) {
+    return shorthandParser(v, shorthand_for) !== undefined;
+};
+
 module.exports.definition = {
     set: function (v) {
+        var obj = shorthandParser(v, shorthand_for);
+        if (obj === undefined) {
+            return;
+        }
+        Object.keys(obj).forEach(function (property) {
+            this._values[property] = obj[property];
+        }, this);
         this.setProperty('border-right', v);
     },
     get: function () {
diff --git a/lib/properties/borderRightColor.js b/lib/properties/borderRightColor.js
index e7bdebb..343fee1 100644
--- a/lib/properties/borderRightColor.js
+++ b/lib/properties/borderRightColor.js
@@ -1,10 +1,12 @@
 'use strict';
 
-var parseColor = require('../parsers').parseColor;
+var isValid = module.exports.isValid = require('./borderColor').isValid;
 
 module.exports.definition = {
     set: function (v) {
-        this.setProperty('border-right-color', parseColor(v));
+        if (isValid(v)) {
+            this.setProperty('border-right-color', v);
+        }
     },
     get: function () {
         return this.getPropertyValue('border-right-color');
diff --git a/lib/properties/borderRightStyle.js b/lib/properties/borderRightStyle.js
index 2c1f6dc..e417adb 100644
--- a/lib/properties/borderRightStyle.js
+++ b/lib/properties/borderRightStyle.js
@@ -1,8 +1,12 @@
 'use strict';
 
+var isValid = module.exports.isValid = require('./borderStyle').isValid;
+
 module.exports.definition = {
     set: function (v) {
-        this.setProperty('border-right-style', v);
+        if (isValid(v)) {
+            this.setProperty('border-right-style', v);
+        }
     },
     get: function () {
         return this.getPropertyValue('border-right-style');
diff --git a/lib/properties/borderRightWidth.js b/lib/properties/borderRightWidth.js
index f48a1d6..6fbfe5d 100644
--- a/lib/properties/borderRightWidth.js
+++ b/lib/properties/borderRightWidth.js
@@ -1,8 +1,12 @@
 'use strict';
 
+var isValid = module.exports.isValid = require('./borderWidth').isValid;
+
 module.exports.definition = {
     set: function (v) {
-        this.setProperty('border-right-width', v);
+        if (isValid(v)) {
+            this.setProperty('border-right-width', v);
+        }
     },
     get: function () {
         return this.getPropertyValue('border-right-width');
diff --git a/lib/properties/borderSpacing.js b/lib/properties/borderSpacing.js
index 292e690..e5e582a 100644
--- a/lib/properties/borderSpacing.js
+++ b/lib/properties/borderSpacing.js
@@ -1,8 +1,35 @@
 'use strict';
 
+var parsers = require('../parsers');
+
+// <length> <length>? | inherit
+// if one, it applies to both horizontal and verical spacing
+// if two, the first applies to the horizontal and the second applies to vertical spacing
+
+var parse = function parse(v) {
+    if (v.toLowerCase() === 'inherit') {
+        return v;
+    }
+    var parts = v.split(/\s+/);
+    if (parts.length !== 1 && parts.length !== 2) {
+        return undefined;
+    }
+    parts.forEach(function (part) {
+        if (parsers.valueType(part) !== parsers.TYPES.LENGTH) {
+            return undefined;
+        }
+    });
+
+    return v;
+};
+
+module.exports.isValid = function isValid(v) {
+    return parse(v) !== undefined;
+};
+
 module.exports.definition = {
     set: function (v) {
-        this.setProperty('border-spacing', v);
+        this.setProperty('border-spacing', parse(v));
     },
     get: function () {
         return this.getPropertyValue('border-spacing');
diff --git a/lib/properties/borderStyle.js b/lib/properties/borderStyle.js
index b46ef6c..955cdbd 100644
--- a/lib/properties/borderStyle.js
+++ b/lib/properties/borderStyle.js
@@ -1,9 +1,16 @@
 'use strict';
 
+var implicitSetter = require('../parsers').implicitSetter;
+
+// the valid border-styles:
+var styles = ['none', 'hidden', 'dotted', 'dashed', 'solid', 'double', 'groove', 'ridge', 'inset', 'outset'];
+
+var isValid = module.exports.isValid = function parse(v) {
+    return styles.indexOf(v) !== -1;
+};
+
 module.exports.definition = {
-    set: function (v) {
-        this.setProperty('border-style', v);
-    },
+    set: implicitSetter('border', 'style', isValid),
     get: function () {
         return this.getPropertyValue('border-style');
     },
diff --git a/lib/properties/borderTop.js b/lib/properties/borderTop.js
index 91fe6d6..2e25d13 100644
--- a/lib/properties/borderTop.js
+++ b/lib/properties/borderTop.js
@@ -1,7 +1,26 @@
 'use strict';
 
+var shorthandParser = require('../parsers').shorthandParser;
+
+var shorthand_for = {
+    borderTopWidth: require('./borderTopWidth'),
+    borderTopStyle: require('./borderTopStyle'),
+    borderTopColor: require('./borderTopColor')
+};
+
+var isValid = module.exports.isValid = function isValid(v) {
+    return shorthandParser(v, shorthand_for) !== undefined;
+};
+
 module.exports.definition = {
     set: function (v) {
+        var obj = shorthandParser(v, shorthand_for);
+        if (obj === undefined) {
+            return;
+        }
+        Object.keys(obj).forEach(function (property) {
+            this._values[property] = obj[property];
+        }, this);
         this.setProperty('border-top', v);
     },
     get: function () {
diff --git a/lib/properties/borderTopColor.js b/lib/properties/borderTopColor.js
index 649d771..0dad0ae 100644
--- a/lib/properties/borderTopColor.js
+++ b/lib/properties/borderTopColor.js
@@ -1,10 +1,12 @@
 'use strict';
 
-var parseColor = require('../parsers').parseColor;
+var isValid = module.exports.isValid = require('./borderColor').isValid;
 
 module.exports.definition = {
     set: function (v) {
-        this.setProperty('border-top-color', parseColor(v));
+        if (isValid(v)) {
+            this.setProperty('border-top-color', v);
+        }
     },
     get: function () {
         return this.getPropertyValue('border-top-color');
diff --git a/lib/properties/borderTopStyle.js b/lib/properties/borderTopStyle.js
index f02a363..316145d 100644
--- a/lib/properties/borderTopStyle.js
+++ b/lib/properties/borderTopStyle.js
@@ -1,8 +1,12 @@
 'use strict';
 
+var isValid = module.exports.isValid = require('./borderStyle').isValid;
+
 module.exports.definition = {
     set: function (v) {
-        this.setProperty('border-top-style', v);
+        if (isValid(v)) {
+            this.setProperty('border-top-style', v);
+        }
     },
     get: function () {
         return this.getPropertyValue('border-top-style');
diff --git a/lib/properties/borderTopWidth.js b/lib/properties/borderTopWidth.js
index e1dfd9e..659f61e 100644
--- a/lib/properties/borderTopWidth.js
+++ b/lib/properties/borderTopWidth.js
@@ -1,8 +1,12 @@
 'use strict';
 
+var isValid = module.exports.isValid = require('./borderWidth').isValid;
+
 module.exports.definition = {
     set: function (v) {
-        this.setProperty('border-top-width', v);
+        if (isValid(v)) {
+            this.setProperty('border-top-width', v);
+        }
     },
     get: function () {
         return this.getPropertyValue('border-top-width');
diff --git a/lib/properties/borderWidth.js b/lib/properties/borderWidth.js
index fade76f..2fbbd75 100644
--- a/lib/properties/borderWidth.js
+++ b/lib/properties/borderWidth.js
@@ -1,9 +1,18 @@
 'use strict';
 
+var parsers = require('../parsers');
+var parsers = require('../parsers');
+var implicitSetter = require('../parsers').implicitSetter;
+
+// the valid border-widths:
+var widths = ['thin', 'medium', 'thick'];
+
+var isValid = module.exports.isValid = function parse(v) {
+    return (widths.indexOf(v.toLowerCase()) !== -1) || parsers.parseLength(v);
+};
+
 module.exports.definition = {
-    set: function (v) {
-        this.setProperty('border-width', v);
-    },
+    set: implicitSetter('border', 'width', isValid),
     get: function () {
         return this.getPropertyValue('border-width');
     },

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-cssstyle.git



More information about the Pkg-javascript-commits mailing list