You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bat/tests/syntax-tests/highlighted/Stylus/gradients.styl

91 lines
12 KiB
Stylus

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

@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)