2025-05-12 05:38:44 +09:00

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, '') + ';';
};