encre_css/plugins/grid/grid_row/
mod.rs

1#![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}