Menu: Order Einträge automatisch Ergänzen, damit Sortierung stabil ist.
authorSven Schöling <s.schoeling@linet-services.de>
Tue, 10 Oct 2017 10:31:52 +0000 (12:31 +0200)
committerSven Schöling <s.schoeling@linet-services.de>
Tue, 10 Oct 2017 12:23:05 +0000 (14:23 +0200)
SL/Menu.pm

index 800f000..0e92cc5 100644 (file)
@@ -119,6 +119,19 @@ sub build_tree {
     push @{ $by_parent{ $node->{parent} // '' } //= [] }, $node;
   }
 
+  # autovivify order in by_parent, so that numerical sorting for entries without order
+  # preserves their order and position with respect to entries with order.
+  for (values %by_parent) {
+    my $last_order = 0;
+    for my $node (@$_) {
+      if (defined $node->{order} && $node->{order} * 1) {
+        $last_order = $node->{order};
+      } else {
+        $node->{order} = ++$last_order;
+      }
+    }
+  }
+
   my $tree = { };
   $self->{by_id}{''} = $tree;