[Jifty-commit] r6609 - in jifty/trunk: lib/Jifty/Web

Jifty commits jifty-commit at lists.jifty.org
Tue Mar 17 10:58:41 EDT 2009


Author: alexmv
Date: Tue Mar 17 10:58:33 2009
New Revision: 6609

Modified:
   jifty/trunk/   (props changed)
   jifty/trunk/lib/Jifty/Web/Menu.pm

Log:
 r43248 at kohr-ah:  chmrr | 2009-03-17 10:30:59 -0400
 Cache ordering of children, and url value, more aggressively; also remove unnecessary _parent accessor


Modified: jifty/trunk/lib/Jifty/Web/Menu.pm
==============================================================================
--- jifty/trunk/lib/Jifty/Web/Menu.pm	(original)
+++ jifty/trunk/lib/Jifty/Web/Menu.pm	Tue Mar 17 10:58:33 2009
@@ -9,7 +9,7 @@
 use Scalar::Util qw(weaken);
 
 __PACKAGE__->mk_accessors(qw(
-    label _parent sort_order link target escape_label class render_children_inline
+    label sort_order link target escape_label class render_children_inline
 ));
 
 =head1 NAME
@@ -60,11 +60,11 @@
 sub parent {
     my $self = shift;
     if (@_) {
-        $self->_parent(@_);
-        weaken $self->{_parent};
+        $self->{parent} = shift;
+        weaken $self->{parent};
     }
 
-    return $self->_parent;
+    return $self->{parent};
 }
 
 
@@ -110,13 +110,12 @@
 
 sub url {
     my $self = shift;
-    $self->{url} = shift if @_;
-
-    $self->{url} = URI->new_abs($self->{url}, $self->parent->url . "/")->as_string
-      if defined $self->{url} and $self->parent and $self->parent->url;
-
-    $self->{url} =~ s!///!/! if $self->{url};
-
+    if (@_) {
+        $self->{url} = shift;
+        $self->{url} = URI->new_abs($self->{url}, $self->parent->url . "/")->as_string
+            if defined $self->{url} and $self->parent and $self->parent->url;
+        $self->{url} =~ s!///!/! if $self->{url};
+    }
     return $self->{url};
 }
 
@@ -154,6 +153,9 @@
     my $proto = ref $self || $self;
 
     if (@_) {
+        # Clear children ordering cache
+        delete $self->{children_list};
+
         $self->{children}{$key} = $proto->new({parent => $self,
                                                sort_order => ($self->{children}{$key}{sort_order}
                                                           || scalar values %{$self->{children}}),
@@ -161,7 +163,6 @@
                                                escape_label => 1,
                                                @_
                                              });
-        Scalar::Util::weaken($self->{children}{$key}{parent});
         
         # Figure out the URL
         my $child = $self->{children}{$key};
@@ -213,6 +214,7 @@
 sub delete {
     my $self = shift;
     my $key = shift;
+    delete $self->{children_list};
     delete $self->{children}{$key};
 }
 
@@ -225,8 +227,14 @@
 
 sub children {
     my $self = shift;
-    my @kids = values %{$self->{children} || {}};
-    @kids = sort {$a->sort_order <=> $b->sort_order} @kids;
+    my @kids;
+    if ($self->{children_list}) {
+        @kids = @{$self->{children_list}};
+    } else {
+        @kids = values %{$self->{children} || {}};
+        @kids = sort {$a->{sort_order} <=> $b->{sort_order}} @kids;
+        $self->{children_list} = \@kids;
+    }
     return wantarray ? @kids : \@kids;
 }
 


More information about the Jifty-commit mailing list