bat/tests/syntax-tests/highlighted/Stylus/gradients.styl

91 lines
12 KiB
Stylus
Raw Normal View History

2021-05-30 10:07:25 +02:00
@import 'config'
/*
 * Implicit color stop position.
 */
pos-in-stops(i, stops)
 len = length(stops)
 if len - 1 == i
 100%
 else if i
 unit(i / len * 100, '%')
 else
 0
/*
 * Normalize color stops:
 *
 * - (color pos) -> (pos color)
 * - (color) -> (implied-pos color)
 *
 */
normalize-stops(stops)
 stops = clone(stops)
 for stop, i in stops
 if length(stop) == 1
 color = stop[0]
 stop[0] = pos-in-stops(i, stops)
 stop[1] = color
 else if typeof(stop[1]) == 'unit'
 pos = stop[1]
 stop[1] = stop[0]
 stop[0] = pos
 stops
/*
 * Join color stops with the given translation function.
 */
join-stops(stops, translate)
 str = ''
 len = length(stops)
 for stop, i in stops
 str += ', ' if i
 pos = stop[0]
 color = stop[1]
 str += translate(color, pos)
 unquote(str)
/*
 * Standard color stop.
 */
std-stop(color, pos)
 '%s %s' % (color pos)
/*
 * Create a linear gradient with the given start position
 * and variable number of color stops.
 *
 * Examples:
 *
 * background: linear-gradient(top, red, green, blue)
 * background: linear-gradient(bottom, red, green 50%, blue)
 * background: linear-gradient(bottom, red, 50% green, blue)
 * background: linear-gradient(bottom, red, 50% green, 90% white, blue)
 *
 */
linear-gradient(start, stops...)
 error('color stops required') unless length(stops)
 unquote('linear-gradient(' + join(', ',arguments) + ')')
/*
 * Create a linear gradient image with the given start position
 * and variable number of color stops.
 */
linear-gradient-image(start, stops...)
 error('node-canvas is required for linear-gradient-image()') unless has-canvas
 stops = stops[0] if length(stops) == 1
 error('gradient image size required') unless start[0] is a 'unit'
 size = start[0]
 start = start[1] or 'top'
 grad = create-gradient-image(size, start)
 stops = normalize-stops(stops)
 add-color-stop(grad, stop[0], stop[1]) for stop in stops
 'url(%s)' % gradient-data-uri(grad)