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