UNPKG

stylobate

Version:

Framework for writing really abstract CSS in Stylus

152 lines (122 loc) 4.58 kB
$process-grid-cols_cache = {} process-grid-cols($where) // Look at the cache if ('' + $where) in $process-grid-cols_cache return $process-grid-cols_cache['' + $where] // Otherwise do all those things $initial_gutter = utilus_get($where, 'gutter') $result = 'total_count' 0, 'cols_widths' (), 'total_units' ('px' 0px) ('em' 0em) ('rem' 0rem) ('%' 0), 'gutter' (clone($initial_gutter)), 'shrinkers' (), 'cols_indexes' (false), 'even_gaps' true $got_count = utilus_get($where, 'count', 0) $actual_count = 0 $without_units = 0 for $item in $where $item_col = utilus_get($item, '-col') if $item_col $actual_count = $actual_count + 1 // Save the indexes for the cols push($result[5][1], ($item_col[0] (length($result[5][1]) - 1))) // Populate the columns $items_unit = utilus_get_unit($item_col) if $items_unit $index = utilus_get(('px' 1) ('em' 2) ('rem' 3) ('%' 4), unit($items_unit)) push($result[1][1], $items_unit) $result[2][$index][1] = $result[2][$index][1] + unit($items_unit,'') else push($result[1][1], -1) $without_units = $without_units + 1 // Get the gaps $item_gap = utilus_get($item, 'gap') if $item_gap or (!$item_gap and type($item_gap) != 'boolean') // Set the previous gap if there is a gap $result[3][1][length($result[5][1]) - 1] = $item_gap if $item_gap != $initial_gutter $result[6][1] = false else if $items_unit // Set the next gap at each column $result[3][1][length($result[5][1]) + 1] = clone($initial_gutter) // If total count is more than cols described, fill the cols with the rest if $got_count > $actual_count for $item in 1..($got_count - $actual_count) push($result[1][1], -1) $without_units = $without_units + 1 // Calculate unset percents if $without_units $width = ((100 - $result[2][4][1]) / $without_units) for $item, $index in $result[1][1] if $item == -1 $result[1][1][$index] = unit($width,'%') $result[2][4][1] = $result[2][4][1] + $width // Set the proper total count $result[0][1] = length($result[1][1]) // Calculate shrinkers (total sums of units > 0 including gutters) for $unit in utilus_get($result, 'total_units') if not unit($unit[1]) in ('' '%') $current_unit_width = $unit[1] for $gap in $result[3][1] if unit($gap) == unit($unit[1]) $current_unit_width = round($current_unit_width + $gap, 9) if $current_unit_width > 0 push($result[4][1], $current_unit_width) $process-grid-cols_cache['' + $where] = $result return $result get_column($where, $name_or_index) $name = '' $index = 0 if type($name_or_index) == 'string' $name = $name_or_index $index = utilus_get($where[5][1], $name) else $index = $name_or_index $name = $where[5][1][$index + 1][0] $result = 'name' $name, 'index' $index, 'width' $where[1][1][$index], 'left_gap' $where[3][1][$index], 'right_gap' utilus_or($where[3][1][$index + 1], 0) return $result kind-grid() kind-grid_(arguments) kind-grid_() kind-grid_gutter(arguments) kind-grid_nowrap(arguments) kind-grid_gutter($this) $columns = process-grid-cols($this.arguments) if $columns[6][1] margin-left: -1*$gutter = utilus_get($columns, 'gutter') unless utilus_get($this.arguments, '-content') padding-right: utilus_get($columns, 'shrinkers')[0] kind-grid_nowrap($this) if retrieve($this.arguments, nowrap ellipsis) white-space: nowrap kind-grid-col($this) $columns = process-grid-cols($this.parent.arguments) $column = get_column($columns, utilus_get_string($this.arguments)) width: $column[2][1] if absolute in $this.arguments position: absolute else kind(block inline) unless utilus_get($this.parent.arguments, '-content') $gap = $column[3][1] if $gap margin-left: $gap if utilus_get($this.arguments, 'nowrap') unless utilus_get($this.parent.arguments, 'nowrap') white-space: nowrap else if utilus_get($this.parent.arguments, 'ellipsis') white-space: nowrap unless utilus_get($this.parent.arguments, 'nowrap') overflow: hidden text-overflow: ellipsis else white-space: normal kind-grid-content($this) $gutter = utilus_get($this.parent.arguments, 'gutter') if $gutter margin-left: $gutter