encre_css/plugins/grid/grid_row/
mod.rs1#![doc = include_str!("README.md")]
2#![doc(alias = "grid")]
3use crate::prelude::build_plugin::*;
4
5#[derive(Debug)]
6pub(crate) struct PluginDefinition;
7
8impl Plugin for PluginDefinition {
9 fn can_handle(&self, context: ContextCanHandle) -> bool {
10 match context.modifier {
11 Modifier::Builtin { value, .. } => {
12 *value == "auto"
13 || value
14 .strip_prefix("span-")
15 .is_some_and(|v| v == "full" || v.parse::<usize>().is_ok())
16 || value
17 .strip_prefix("start-")
18 .is_some_and(|v| v == "auto" || v.parse::<usize>().is_ok())
19 || value
20 .strip_prefix("end-")
21 .is_some_and(|v| v == "auto" || v.parse::<usize>().is_ok())
22 }
23 Modifier::Arbitrary { value, .. } => is_matching_all(value),
24 }
25 }
26
27 fn handle(&self, context: &mut ContextHandle) {
28 match context.modifier {
29 Modifier::Builtin { value, .. } => {
30 if *value == "auto" {
31 return context.buffer.line("grid-row: auto;");
32 }
33
34 if let Some(value) = value.strip_prefix("span-") {
35 if value == "full" {
36 return context.buffer.line("grid-row: 1 / -1;");
37 }
38 context
39 .buffer
40 .line(format_args!("grid-row: span {value} / span {value};"));
41 } else if let Some(value) = value.strip_prefix("start-") {
42 if value == "auto" {
43 return context.buffer.line("grid-row-start: auto;");
44 }
45 context
46 .buffer
47 .line(format_args!("grid-row-start: {value};"));
48 } else if let Some(value) = value.strip_prefix("end-") {
49 if value == "auto" {
50 return context.buffer.line("grid-row-end: auto;");
51 }
52 context.buffer.line(format_args!("grid-row-end: {value};"));
53 }
54 }
55 Modifier::Arbitrary { value, .. } => {
56 context.buffer.line(format_args!("grid-row: {value};"));
57 }
58 }
59 }
60}