66 lines
1.4 KiB
JavaScript
66 lines
1.4 KiB
JavaScript
'use strict';
|
|
|
|
module.exports = exports = Property;
|
|
|
|
/**
|
|
* Module dependencies.
|
|
*/
|
|
|
|
var utils = require('./utils');
|
|
|
|
/**
|
|
* CSS property constructor.
|
|
*
|
|
* @param {String} property
|
|
* @param {String} value
|
|
* @param {Selector} selector the property originates from
|
|
* @param {Integer} priority 0 for normal properties, 2 for !important properties.
|
|
* @param {Array} additional array of integers representing more detailed priorities (sorting)
|
|
* @api public
|
|
*/
|
|
|
|
function Property(prop, value, selector, priority, additionalPriority) {
|
|
this.prop = prop;
|
|
this.value = value;
|
|
this.selector = selector;
|
|
this.priority = priority || 0;
|
|
this.additionalPriority = additionalPriority || [];
|
|
}
|
|
|
|
/**
|
|
* Compares with another Property based on Selector#specificity.
|
|
*
|
|
* @api public
|
|
*/
|
|
|
|
Property.prototype.compareFunc = function(property) {
|
|
var a = [];
|
|
a.push.apply(a, this.selector.specificity());
|
|
a.push.apply(a, this.additionalPriority);
|
|
a[0] += this.priority;
|
|
var b = [];
|
|
b.push.apply(b, property.selector.specificity());
|
|
b.push.apply(b, property.additionalPriority);
|
|
b[0] += property.priority;
|
|
return utils.compareFunc(a, b);
|
|
};
|
|
|
|
Property.prototype.compare = function(property) {
|
|
var winner = this.compareFunc(property);
|
|
if (winner === 1) {
|
|
return this;
|
|
}
|
|
return property;
|
|
};
|
|
|
|
|
|
/**
|
|
* Returns CSS property
|
|
*
|
|
* @api public
|
|
*/
|
|
|
|
Property.prototype.toString = function() {
|
|
return this.prop + ': ' + this.value.replace(/['"]+/g, '') + ';';
|
|
};
|