summaryrefslogtreecommitdiff
path: root/src/library/grid.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/library/grid.rs')
-rw-r--r--src/library/grid.rs89
1 files changed, 0 insertions, 89 deletions
diff --git a/src/library/grid.rs b/src/library/grid.rs
deleted file mode 100644
index c2e76514..00000000
--- a/src/library/grid.rs
+++ /dev/null
@@ -1,89 +0,0 @@
-use crate::layout::{GridNode, TrackSizing};
-
-use super::*;
-
-/// `grid`: Arrange children into a grid.
-///
-/// # Positional parameters
-/// - Children: variadic, of type `template`.
-///
-/// # Named parameters
-/// - Column sizing: `columns`, of type `tracks`.
-/// - Row sizing: `rows`, of type `tracks`.
-/// - Gutter: `gutter`, shorthand for equal gutter everywhere, of type `length`.
-/// - Gutter for rows: `gutter-rows`, of type `tracks`.
-/// - Gutter for columns: `gutter-columns`, of type `tracks`.
-/// - Column direction: `column-dir`, of type `direction`.
-/// - Row direction: `row-dir`, of type `direction`.
-///
-/// # Return value
-/// A template that arranges its children along the specified grid cells.
-///
-/// # Relevant types and constants
-/// - Type `tracks`
-/// - coerces from `array` of `track-sizing`
-/// - Type `track-sizing`
-/// - `auto`
-// - coerces from `length`
-// - coerces from `relative`
-// - coerces from `linear`
-// - coerces from `fractional`
-/// - Type `direction`
-/// - `ltr`
-/// - `rtl`
-/// - `ttb`
-/// - `btt`
-pub fn grid(ctx: &mut EvalContext, args: &mut FuncArgs) -> Value {
- let columns = args.named::<Tracks>(ctx, "columns").unwrap_or_default();
- let rows = args.named::<Tracks>(ctx, "rows").unwrap_or_default();
- let gutter = args
- .named::<Linear>(ctx, "gutter")
- .map(|v| vec![TrackSizing::Linear(v)])
- .unwrap_or_default();
- let gutter_columns = args.named::<Tracks>(ctx, "gutter-columns");
- let gutter_rows = args.named::<Tracks>(ctx, "gutter-rows");
- let column_dir = args.named(ctx, "column-dir");
- let row_dir = args.named(ctx, "row-dir");
- let children = args.all::<TemplateValue>(ctx);
-
- Value::template("grid", move |ctx| {
- let children = children
- .iter()
- .map(|child| ctx.exec_template_stack(child).into())
- .collect();
-
- let cross_dir = column_dir.unwrap_or(ctx.state.lang.dir);
- let main_dir = row_dir.unwrap_or(cross_dir.axis().other().dir(true));
-
- ctx.push_into_stack(GridNode {
- dirs: Gen::new(cross_dir, main_dir),
- tracks: Gen::new(columns.clone(), rows.clone()),
- gutter: Gen::new(
- gutter_columns.as_ref().unwrap_or(&gutter).clone(),
- gutter_rows.as_ref().unwrap_or(&gutter).clone(),
- ),
- children,
- })
- })
-}
-
-/// Defines size of rows and columns in a grid.
-type Tracks = Vec<TrackSizing>;
-
-castable! {
- Tracks: "array of `auto`s, linears, and fractionals",
- Value::Int(count) => vec![TrackSizing::Auto; count.max(0) as usize],
- Value::Array(values) => values
- .into_iter()
- .filter_map(|v| v.cast().ok())
- .collect(),
-}
-
-castable! {
- TrackSizing: "`auto`, linear, or fractional",
- Value::Auto => TrackSizing::Auto,
- Value::Length(v) => TrackSizing::Linear(v.into()),
- Value::Relative(v) => TrackSizing::Linear(v.into()),
- Value::Linear(v) => TrackSizing::Linear(v),
- Value::Fractional(v) => TrackSizing::Fractional(v),
-}