vendor/emmet.js
function pasteGradient(property, gradient, valueRange) {
		var rule = property.parent;
		var utils = require('utils');
		var alignVendor = require('preferences').get('css.alignVendor');
		
		// we may have aligned gradient definitions: find the smallest value
		// separator
		var sep = property.styleSeparator;
		var before = property.styleBefore;
		
		// first, remove all properties within CSS rule with the same name and
		// gradient definition
		_.each(rule.getAll(getPrefixedNames(property.name())), function(item) {
			if (item != property && /gradient/i.test(item.value())) {
				if (item.styleSeparator.length < sep.length) {
					sep = item.styleSeparator;
				}
				if (item.styleBefore.length < before.length) {
					before = item.styleBefore;
				}
				rule.remove(item);
			}
		});
		
		if (alignVendor) {
			// update prefix
			if (before != property.styleBefore) {
				var fullRange = property.fullRange();
				rule._updateSource(before, fullRange.start, fullRange.start + property.styleBefore.length);
				property.styleBefore = before;
			}
			
			// update separator value
			if (sep != property.styleSeparator) {
				rule._updateSource(sep, property.nameRange().end, property.valueRange().start);
				property.styleSeparator = sep;
			}
		}
		
		var value = property.value();
		if (!valueRange)
			valueRange = require('range').create(0, property.value());
		
		var val = function(v) {
			return utils.replaceSubstring(value, v, valueRange);
		};
		
		// put vanilla-clean gradient definition into current rule
		property.value(val(module.toString(gradient)) + '${2}');
		
		// create list of properties to insert
		var propsToInsert = getPropertiesForGradient(gradient, property.name());
		
		// align prefixed values
		if (alignVendor) {
			var values = _.pluck(propsToInsert, 'value');
			var names = _.pluck(propsToInsert, 'name');
			values.push(property.value());
			names.push(property.name());
			
			var valuePads = utils.getStringsPads(_.map(values, function(v) {
				return v.substring(0, v.indexOf('('));
			}));
			
			var namePads = utils.getStringsPads(names);
			property.name(_.last(namePads) + property.name());
			
			_.each(propsToInsert, function(prop, i) {
				prop.name = namePads[i] + prop.name;
				prop.value = valuePads[i] + prop.value;
			});
			
			property.value(_.last(valuePads) + property.value());
		}
		
		// put vendor-prefixed definitions before current rule
		_.each(propsToInsert, function(prop) {
			rule.add(prop.name, prop.value, rule.indexOf(property));
		});
	}
function pasteGradient(property, gradient, valueRange) {
		var rule = property.parent;
		var utils = require('utils');
		var alignVendor = require('preferences').get('css.alignVendor');
		
		// we may have aligned gradient definitions: find the smallest value
		// separator
		var sep = property.styleSeparator;
		var before = property.styleBefore;
		
		// first, remove all properties within CSS rule with the same name and
		// gradient definition
		_.each(rule.getAll(getPrefixedNames(property.name())), function(item) {
			if (item != property && /gradient/i.test(item.value())) {
				if (item.styleSeparator.length < sep.length) {
					sep = item.styleSeparator;
				}
				if (item.styleBefore.length < before.length) {
					before = item.styleBefore;
				}
				rule.remove(item);
			}
		});
		
		if (alignVendor) {
			// update prefix
			if (before != property.styleBefore) {
				var fullRange = property.fullRange();
				rule._updateSource(before, fullRange.start, fullRange.start + property.styleBefore.length);
				property.styleBefore = before;
			}
			
			// update separator value
			if (sep != property.styleSeparator) {
				rule._updateSource(sep, property.nameRange().end, property.valueRange().start);
				property.styleSeparator = sep;
			}
		}
		
		var value = property.value();
		if (!valueRange)
			valueRange = require('range').create(0, property.value());
		
		var val = function(v) {
			return utils.replaceSubstring(value, v, valueRange);
		};
		
		// put vanilla-clean gradient definition into current rule
		property.value(val(module.toString(gradient)) + '${2}');
		
		// create list of properties to insert
		var propsToInsert = getPropertiesForGradient(gradient, property.name());
		
		// align prefixed values
		if (alignVendor) {
			var values = _.pluck(propsToInsert, 'value');
			var names = _.pluck(propsToInsert, 'name');
			values.push(property.value());
			names.push(property.name());
			
			var valuePads = utils.getStringsPads(_.map(values, function(v) {
				return v.substring(0, v.indexOf('('));
			}));
			
			var namePads = utils.getStringsPads(names);
			property.name(_.last(namePads) + property.name());
			
			_.each(propsToInsert, function(prop, i) {
				prop.name = namePads[i] + prop.name;
				prop.value = valuePads[i] + prop.value;
			});
			
			property.value(_.last(valuePads) + property.value());
		}
		
		// put vendor-prefixed definitions before current rule
		_.each(propsToInsert, function(prop) {
			rule.add(prop.name, prop.value, rule.indexOf(property));
		});
	}
function pasteGradient ( property , gradient , valueRange ) { var rule = property . parent ; var utils = require ( 'utils' ) ; var alignVendor = require ( 'preferences' ) . get ( 'css.alignVendor' ) ; // we may have aligned gradient definitions: find the smallest value // separator var sep = property . styleSeparator ; var before = property . styleBefore ; // first, remove all properties within CSS rule with the same name and // gradient definition _ . each ( rule . getAll ( getPrefixedNames ( property . name ( ) ) ) , function ( item ) { if ( item != property && / gradient / i . test ( item . value ( ) ) ) { if ( item . styleSeparator . length < sep . length ) { sep = item . styleSeparator ; } if ( item . styleBefore . length < before . length ) { before = item . styleBefore ; } rule . remove ( item ) ; } } ) ; if ( alignVendor ) { // update prefix if ( before != property . styleBefore ) { var fullRange = property . fullRange ( ) ; rule . _updateSource ( before , fullRange . start , fullRange . start + property . styleBefore . length ) ; property . styleBefore = before ; } // update separator value if ( sep != property . styleSeparator ) { rule . _updateSource ( sep , property . nameRange ( ) . end , property . valueRange ( ) . start ) ; property . styleSeparator = sep ; } } var value = property . value ( ) ; if ( ! valueRange ) valueRange = require ( 'range' ) . create ( 0 , property . value ( ) ) ; var val = function ( v ) { return utils . replaceSubstring ( value , v , valueRange ) ; } ; // put vanilla-clean gradient definition into current rule property . value ( val ( module . toString ( gradient ) ) + '${2}' ) ; // create list of properties to insert var propsToInsert = getPropertiesForGradient ( gradient , property . name ( ) ) ; // align prefixed values if ( alignVendor ) { var values = _ . pluck ( propsToInsert , 'value' ) ; var names = _ . pluck ( propsToInsert , 'name' ) ; values . push ( property . value ( ) ) ; names . push ( property . name ( ) ) ; var valuePads = utils . getStringsPads ( _ . map ( values , function ( v ) { return v . substring ( 0 , v . indexOf ( '(' ) ) ; } ) ) ; var namePads = utils . getStringsPads ( names ) ; property . name ( _ . last ( namePads ) + property . name ( ) ) ; _ . each ( propsToInsert , function ( prop , i ) { prop . name = namePads [ i ] + prop . name ; prop . value = valuePads [ i ] + prop . value ; } ) ; property . value ( _ . last ( valuePads ) + property . value ( ) ) ; } // put vendor-prefixed definitions before current rule _ . each ( propsToInsert , function ( prop ) { rule . add ( prop . name , prop . value , rule . indexOf ( property ) ) ; } ) ; }
Pastes gradient definition into CSS rule with correct vendor-prefixes
@param {EditElement} property Matched CSS property
@param {Object} gradient Parsed gradient
@param {Range} valueRange If passed, only this range within property
value will be replaced with gradient. Otherwise, full value will be
replaced
Pastes gradient definition into CSS rule with correct vendor - prefixes