Comparing version 0.12.2 to 0.13.0
{ | ||
"name": "rework", | ||
"version": "0.12.2", | ||
"version": "0.13.0", | ||
"description": "CSS manipulations built on CSSOM", | ||
@@ -5,0 +5,0 @@ "keywords": ["css", "manipulation", "preprocess", "transform"], |
0.13.0 / 2013-02-26 | ||
================== | ||
* refactor url() with visitor | ||
* refactor references() with visitor | ||
* refactor prefixValue() with visitor | ||
* refactor mixin with visitor | ||
* refactor ease plugin with visitor | ||
* refactor colors plugin with visitor | ||
* add visit.declarations() helper | ||
0.12.2 / 2013-02-12 | ||
@@ -3,0 +14,0 @@ ================== |
@@ -6,3 +6,4 @@ | ||
var parse = require('color-parser'); | ||
var parse = require('color-parser') | ||
, visit = require('../visit'); | ||
@@ -26,6 +27,3 @@ /** | ||
return function(style, rework){ | ||
style.rules.forEach(function(rule){ | ||
if (!rule.declarations) return; | ||
substitute(rule.declarations); | ||
}); | ||
visit.declarations(style, substitute); | ||
} | ||
@@ -75,2 +73,2 @@ }; | ||
} | ||
} | ||
} |
/** | ||
* Module dependencies. | ||
*/ | ||
var visit = require('../visit'); | ||
/** | ||
* Easing functions. | ||
@@ -41,13 +47,13 @@ */ | ||
* Provide additional easing functions: | ||
* | ||
* | ||
* #logo { | ||
* transition: all 500ms ease-out-back; | ||
* } | ||
* | ||
* | ||
* yields: | ||
* | ||
* | ||
* #logo { | ||
* transition: all 500ms cubic-bezier(0.175, 0.885, 0.320, 1.275) | ||
* } | ||
* | ||
* | ||
*/ | ||
@@ -57,6 +63,3 @@ | ||
return function(style, rework){ | ||
style.rules.forEach(function(rule){ | ||
if (!rule.declarations) return; | ||
substitute(rule.declarations); | ||
}); | ||
visit.declarations(style, substitute); | ||
} | ||
@@ -83,2 +86,2 @@ }; | ||
} | ||
} | ||
} |
@@ -6,3 +6,4 @@ | ||
var utils = require('../utils'); | ||
var utils = require('../utils') | ||
, visit = require('../visit'); | ||
@@ -16,3 +17,5 @@ /** | ||
return function(style, rework){ | ||
rules(style.rules, mixins); | ||
visit.declarations(style, function(declarations){ | ||
mixin(declarations, mixins); | ||
}); | ||
} | ||
@@ -22,17 +25,2 @@ }; | ||
/** | ||
* Visit `rules`. | ||
* | ||
* @param {Array} rules | ||
* @param {Object} mixins | ||
* @api private | ||
*/ | ||
function rules(arr, mixins) { | ||
arr.forEach(function(rule){ | ||
if (rule.rules) rules(rule.rules, mixins); | ||
if (rule.declarations) visit(rule.declarations, mixins); | ||
}); | ||
} | ||
/** | ||
* Visit declarations and apply mixins. | ||
@@ -45,3 +33,3 @@ * | ||
function visit(declarations, mixins) { | ||
function mixin(declarations, mixins) { | ||
for (var i = 0; i < declarations.length; ++i) { | ||
@@ -48,0 +36,0 @@ var decl = declarations[i]; |
/** | ||
* Module dependencies. | ||
*/ | ||
var visit = require('../visit'); | ||
/** | ||
* Prefix `value`. | ||
@@ -23,8 +29,5 @@ * | ||
style.rules.forEach(function(rule){ | ||
if (!rule.declarations) return; | ||
var decl; | ||
for (var i = 0; i < rule.declarations.length; ++i) { | ||
decl = rule.declarations[i]; | ||
visit.declarations(style, function(declarations){ | ||
for (var i = 0; i < declarations.length; ++i) { | ||
var decl = declarations[i]; | ||
if (!~decl.value.indexOf(value)) continue; | ||
@@ -37,3 +40,3 @@ | ||
if (~decl.value.indexOf('-' + value)) continue; | ||
// vendor prefixed props | ||
@@ -45,3 +48,3 @@ vendors.forEach(function(vendor){ | ||
rule.declarations.splice(i++, 0, { | ||
declarations.splice(i++, 0, { | ||
property: prop, | ||
@@ -54,2 +57,2 @@ value: decl.value.replace(value, vendor + value) | ||
} | ||
}; | ||
}; |
/** | ||
* Module dependencies. | ||
*/ | ||
var visit = require('../visit'); | ||
/** | ||
* Prefix `prop`. | ||
@@ -24,53 +30,32 @@ * | ||
return function visit(style, rework){ | ||
return function(style, rework){ | ||
vendors = vendors || rework.prefixes; | ||
visit.declarations(style, function(declarations, node){ | ||
var only = node.vendor; | ||
var isKeyframes = !! node.keyframes; | ||
style.rules.forEach(function(rule){ | ||
if (rule.rules) return visit(rule, rework); | ||
if (rule.keyframes) return prefixKeyframes(props, vendors, rule); | ||
if (rule.declarations) prefix(props, vendors, rule.declarations); | ||
}); | ||
} | ||
}; | ||
for (var i = 0; i < props.length; ++i) { | ||
var prop = props[i]; | ||
/** | ||
* Prefix values within keyframes. | ||
* | ||
* @api private | ||
*/ | ||
for (var j = 0, len = declarations.length; j < len; ++j) { | ||
var decl = declarations[j]; | ||
if (prop != decl.property) continue; | ||
function prefixKeyframes(props, vendors, rule) { | ||
rule.keyframes.forEach(function(keyframe){ | ||
if (!rule.vendor) return; | ||
prefix(props, vendors, keyframe.declarations, rule.vendor); | ||
}); | ||
} | ||
// vendor prefixed props | ||
for (var k = 0; k < vendors.length; ++k) { | ||
if (!only && isKeyframes) continue; | ||
if (only && only != vendors[k]) continue; | ||
declarations.push({ | ||
property: vendors[k] + decl.property, | ||
value: decl.value | ||
}); | ||
} | ||
/** | ||
* Prefix declarations. | ||
* | ||
* @api private | ||
*/ | ||
function prefix(props, vendors, declarations, only) { | ||
for (var i = 0; i < props.length; ++i) { | ||
var prop = props[i]; | ||
for (var j = 0, len = declarations.length; j < len; ++j) { | ||
var decl = declarations[j]; | ||
if (prop != decl.property) continue; | ||
// vendor prefixed props | ||
vendors.forEach(function(vendor){ | ||
if (only && only != vendor) return; | ||
declarations.push({ | ||
property: vendor + decl.property, | ||
value: decl.value | ||
}); | ||
}); | ||
// original prop | ||
declarations.push(decl); | ||
declarations.splice(j, 1); | ||
} | ||
// original prop | ||
declarations.push(decl); | ||
declarations.splice(j, 1); | ||
} | ||
} | ||
}); | ||
} | ||
} | ||
}; |
/** | ||
* Module dependencies. | ||
*/ | ||
var visit = require('../visit'); | ||
/** | ||
* Provide property reference support. | ||
@@ -23,6 +29,3 @@ * | ||
return function(style, rework){ | ||
style.rules.forEach(function(rule){ | ||
if (!rule.declarations) return; | ||
substitute(rule.declarations); | ||
}); | ||
visit.declarations(style, substitute); | ||
} | ||
@@ -29,0 +32,0 @@ }; |
@@ -6,17 +6,18 @@ | ||
var utils = require('../utils'); | ||
var utils = require('../utils') | ||
, visit = require('../visit'); | ||
/** | ||
* Map `url()` calls. | ||
* | ||
* | ||
* body { | ||
* background: url(/images/bg.png); | ||
* } | ||
* | ||
* | ||
* yields: | ||
* | ||
* | ||
* body { | ||
* background: url(http://example.com/images/bg.png); | ||
* } | ||
* | ||
* | ||
*/ | ||
@@ -26,36 +27,12 @@ | ||
return function(style, rework){ | ||
rules(style.rules, fn); | ||
visit.declarations(style, function(declarations){ | ||
declarations.forEach(function(decl, i){ | ||
if (!~decl.value.indexOf('url(')) return; | ||
decl.value = decl.value.replace(/url\(([^)]+)\)/g, function(_, url){ | ||
url = utils.stripQuotes(url); | ||
return 'url("' + fn(url) + '")'; | ||
}); | ||
}); | ||
}); | ||
} | ||
}; | ||
/** | ||
* Visit `rules`. | ||
* | ||
* @param {Array} rules | ||
* @param {Function} fn | ||
* @api private | ||
*/ | ||
function rules(arr, fn) { | ||
arr.forEach(function(rule){ | ||
if (rule.rules) rules(rule.rules, fn); | ||
if (rule.declarations) url(rule, fn); | ||
}); | ||
} | ||
/** | ||
* Map url(). | ||
* | ||
* @api private | ||
*/ | ||
function url(rule, fn) { | ||
rule.declarations = rule.declarations.map(function(decl, i){ | ||
if (!~decl.value.indexOf('url(')) return decl; | ||
decl.value = decl.value.replace(/url\(([^)]+)\)/g, function(_, url){ | ||
url = utils.stripQuotes(url); | ||
return 'url("' + fn(url) + '")'; | ||
}); | ||
return decl; | ||
}); | ||
} |
/** | ||
* Module dependencies. | ||
*/ | ||
var visit = require('../visit'); | ||
/** | ||
* Add variable support. | ||
* | ||
* | ||
* | ||
* :root { | ||
* var-header-color: #06c; | ||
* } | ||
* | ||
* h1 { | ||
* background-color: var(header-color); | ||
* } | ||
* | ||
* yields: | ||
* | ||
* | ||
* | ||
* h1 { | ||
* background-color: #06c; | ||
* } | ||
* | ||
*/ | ||
@@ -23,7 +39,5 @@ | ||
return function vars(style){ | ||
// map variables | ||
style.rules.forEach(function(rule){ | ||
if (rule.rules) vars(rule); | ||
if (!rule.declarations) return; | ||
rule.declarations.forEach(function(decl, i){ | ||
visit.declarations(style, function(declarations, node){ | ||
// map vars | ||
declarations.forEach(function(decl){ | ||
if (0 != decl.property.indexOf('var-')) return; | ||
@@ -33,8 +47,5 @@ var name = decl.property.replace('var-', ''); | ||
}); | ||
}); | ||
// substitute values | ||
style.rules.forEach(function(rule){ | ||
if (!rule.declarations) return; | ||
rule.declarations.forEach(function(decl, i){ | ||
// substitute values | ||
declarations.forEach(function(decl){ | ||
if (!decl.value.match(/\bvar\(/)) return; | ||
@@ -45,2 +56,2 @@ decl.value = replace(decl.value); | ||
} | ||
}; | ||
}; |
@@ -6,3 +6,4 @@ | ||
var css = require('css'); | ||
var css = require('css') | ||
, visit = require('./visit'); | ||
@@ -16,2 +17,8 @@ /** | ||
/** | ||
* Expose `visit` helpers. | ||
*/ | ||
exports.visit = visit; | ||
/** | ||
* Initialize a new stylesheet `Rework` with `str`. | ||
@@ -18,0 +25,0 @@ * |
{ | ||
"name": "rework", | ||
"version": "0.12.2", | ||
"version": "0.13.0", | ||
"description": "CSS manipulations built on CSSOM", | ||
@@ -5,0 +5,0 @@ "keywords": ["css", "manipulation", "preprocess", "transform"], |
43148
27
932