Set row indentation based on depth

This commit is contained in:
cryptogopher 2025-01-08 13:55:40 +01:00
parent 0d8e7c6c0e
commit fa7918f0e3
2 changed files with 6 additions and 3 deletions

View File

@ -379,7 +379,8 @@ table.items td {
} }
/* For <a> to fill <td> completely, we use an ::after pseudoelement. */ /* For <a> to fill <td> completely, we use an ::after pseudoelement. */
table.items td.link { table.items td.link {
padding: 0 0 0 1em; padding: 0;
padding-inline-start: calc(1em + var(--depth) * 0.8em);
position: relative; position: relative;
} }
table.items td.link a { table.items td.link a {

View File

@ -19,11 +19,13 @@ class Quantity < ApplicationRecord
[ [
Arel::SelectManager.new.project( Arel::SelectManager.new.project(
numbered[Arel.star], numbered[Arel.star],
numbered.cast(numbered[:child_number], 'BINARY').as('path') numbered.cast(numbered[:child_number], 'BINARY').as('path'),
Arel::Nodes.build_quoted(0).as('depth')
).from(numbered).where(numbered[:parent_id].eq(nil)), ).from(numbered).where(numbered[:parent_id].eq(nil)),
Arel::SelectManager.new.project( Arel::SelectManager.new.project(
numbered[Arel.star], numbered[Arel.star],
cte[:path].concat(numbered[:child_number]) cte[:path].concat(numbered[:child_number]),
cte[:depth] + 1
).from(numbered).join(cte).on(numbered[:parent_id].eq(cte[:id])) ).from(numbered).join(cte).on(numbered[:parent_id].eq(cte[:id]))
] ]
).select(cte[Arel.star]).from(cte).order(cte[:path]) ).select(cte[Arel.star]).from(cte).order(cte[:path])