whole_func_string: 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));
  		});
  	}
func_code_string: 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));
  		});
  	}
func_documentation_string: 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