Changeset 26394


Ignore:
Timestamp:
06/19/10 17:01:23 (7 years ago)
Author:
flack
Message:

remove some duplication for improved readability, loosely refs #359

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/developers/flack/acltuning/fi.protie.navigation/main.php

    r26060 r26394  
    126126     */
    127127    var $show_only_current = false;
    128    
     128
    129129    /**
    130130     * Should the CSS class be in the link as well
    131      * 
     131     *
    132132     * @access public
    133133     * @var boolean
     
    465465            $item_counter++;
    466466
    467             $selected = '';
    468             $active = '';
    469 
    470             $first_last = '';
    471             $has_children = '';
    472             $component = '';
    473 
    474             if($item_counter == 1 && $item_counter == $item_count)
    475             {
    476                 $first_last = $this->css_first_last;
    477             }
    478             elseif($item_counter == 1)
    479             {
    480                 $first_last = $this->css_first;
    481             }
    482             elseif($item_counter == $item_count)
    483             {
    484                 $first_last = $this->css_last;
    485             }
    486 
    487467            $item = $this->_nap->get_node($child);
     468
     469
     470            $classes = $this->_get_css_classes($child, $item, $item_counter, $item_count);
     471
     472            $this->_display_element($item, $indent, $classes);
     473        }
     474        echo "{$indent}</ul>\n";
     475    }
     476
     477    /**
     478     * Traverse the child elements starting from the requested node id
     479     *
     480     * @access private
     481     */
     482    function _list_child_elements($id, $indent = '')
     483    {
     484
     485        // If only nodes are to be listed use the appropriate NAP call
     486        if (!$this->list_leaves)
     487        {
     488            $this->_list_child_nodes($id, $indent);
     489            return;
     490        }
     491
     492        $children = $this->_nap->list_child_elements($id);
     493
     494        // Stop traversing the path if there are no children
     495        if (   !$children
     496            || count($children) === 0)
     497        {
     498            return;
     499        }
     500
     501        // Add ID property to the first unordered list ever called
     502        $element_id = '';
     503        if ($this->root_object_id)
     504        {
     505            $element_id = " id=\"{$this->root_object_id}\"";
     506            $this->root_object_id = null;
     507        }
     508
     509        echo "{$indent}<ul class=\"{$this->css_list_style} node-{$id}\"{$element_id}>\n";
     510
     511        $item_count = count($children);
     512        $item_counter = 0;
     513
     514        // Draw each child element
     515        foreach ($children as $child)
     516        {
     517            $item_counter++;
     518
     519            if ($child[MIDCOM_NAV_TYPE] === 'node')
     520            {
     521                $item = $this->_nap->get_node($child[MIDCOM_NAV_ID]);
     522            }
     523            else
     524            {
     525                $item = $this->_nap->get_leaf($child[MIDCOM_NAV_ID]);
     526            }
     527            $classes = $this->_get_css_classes($child, $item, $item_counter, $item_count);
     528
     529            $this->_display_element($item, $indent, $classes);
     530        }
     531
     532        echo "{$indent}</ul>\n";
     533    }
     534
     535    private function _get_css_classes($child, $item, $item_counter, $item_count)
     536    {
     537        $classes = array();
     538
     539        if ($child[MIDCOM_NAV_TYPE] === 'node')
     540        {
     541            // If the listing of nodes is set to false, skip this item and proceed to the next
     542            if ($this->list_nodes === false)
     543            {
     544                continue;
     545            }
    488546
    489547            if (   $item[MIDCOM_NAV_ID] === $this->_nap->get_current_node()
     
    493551               )
    494552            {
    495                 $active = $this->css_active;
    496             }
    497 
    498             if ($this->has_children_to_class)
    499             {
    500                 $children = $this->_nap->list_nodes($child[MIDCOM_NAV_ID]);
    501                 if(count($children)>0)
    502                 {
    503                     $has_children = $this->css_has_children;
    504                 }
     553                $classes[] = $this->css_active;
    505554            }
    506555
    507556            if (in_array($item[MIDCOM_NAV_ID], $this->node_path, true))
    508557            {
    509                 $selected = $this->css_selected;
     558                $classes[] = $this->css_selected;
    510559            }
    511560
    512561            if ($this->component_name_to_class)
    513562            {
    514                 $component = str_replace('.', '_', $item[MIDCOM_NAV_COMPONENT]);
    515             }
    516 
    517             $this->_display_element($item, $indent, $active, $selected, $component, $first_last, $has_children);
    518         }
    519         echo "{$indent}</ul>\n";
    520     }
    521 
    522     /**
    523      * Traverse the child elements starting from the requested node id
    524      *
    525      * @access private
    526      */
    527     function _list_child_elements($id, $indent = '')
    528     {
    529 
    530         // If only nodes are to be listed use the appropriate NAP call
    531         if (!$this->list_leaves)
    532         {
    533             $this->_list_child_nodes($id, $indent);
    534             return;
    535         }
    536 
    537         $children = $this->_nap->list_child_elements($id);
    538 
    539         // Stop traversing the path if there are no children
    540         if (   !$children
    541             || count($children) === 0)
    542         {
    543             return;
    544         }
    545 
    546         // Add ID property to the first unordered list ever called
    547         $element_id = '';
    548         if ($this->root_object_id)
    549         {
    550             $element_id = " id=\"{$this->root_object_id}\"";
    551             $this->root_object_id = null;
    552         }
    553 
    554         echo "{$indent}<ul class=\"{$this->css_list_style} node-{$id}\"{$element_id}>\n";
    555 
    556         $item_count = count($children);
    557         $item_counter = 0;
    558 
    559         // Draw each child element
    560         foreach ($children as $child)
    561         {
    562             $item_counter++;
    563 
    564             $selected = '';
    565             $active = '';
    566             $component = '';
    567             $first_last = '';
    568             $has_children = '';
    569 
    570             if($item_counter == 1 && $item_counter == $item_count)
    571             {
    572                 $first_last = $this->css_first_last;
    573             }
    574             elseif($item_counter == 1)
    575             {
    576                 $first_last = $this->css_first;
    577             }
    578             elseif($item_counter == $item_count)
    579             {
    580                 $first_last = $this->css_last;
    581             }
    582 
    583             if($this->has_children_to_class)
    584             {
    585                 $children = $this->_nap->list_child_elements($child[MIDCOM_NAV_ID]);
    586                 if(is_array($children) && count($children)>0)
    587                 {
    588                     $has_children = $this->css_has_children;
    589                 }
    590             }
    591 
    592             if ($child[MIDCOM_NAV_TYPE] === 'node')
    593             {
    594                 // If the listing of nodes is set to false, skip this item and proceed to the next
    595                 if ($this->list_nodes === false)
    596                 {
    597                     continue;
    598                 }
    599 
    600                 $item = $this->_nap->get_node($child[MIDCOM_NAV_ID]);
    601 
    602                 if (   $item[MIDCOM_NAV_ID] === $this->_nap->get_current_node()
    603                     && (   !$this->_nap->get_current_leaf()
    604                         || !$this->_nap->get_leaf($this->_nap->get_current_leaf())
    605                        )
    606                    )
    607                 {
    608                     $active = $this->css_active;
    609                 }
    610 
    611                 if (in_array($item[MIDCOM_NAV_ID], $this->node_path, true))
    612                 {
    613                     $selected = $this->css_selected;
    614                 }
    615 
    616                 if ($this->component_name_to_class)
    617                 {
    618                     $component = str_replace('.', '_', $item[MIDCOM_NAV_COMPONENT]);
    619                 }
    620             }
    621             else
    622             {
    623                 $item = $this->_nap->get_leaf($child[MIDCOM_NAV_ID]);
    624 
    625                 // Place the corresponding css class for the currently active leaf)
    626                 if ($item[MIDCOM_NAV_ID] === $this->_nap->get_current_leaf())
    627                 {
    628                     $active = $this->css_active;
    629                     $selected = $this->css_selected;
    630                 }
    631             }
    632 
    633             $this->_display_element($item, $indent, $active, $selected, $component, $first_last, $has_children);
    634         }
    635 
    636         echo "{$indent}</ul>\n";
    637     }
    638 
    639     function _display_element($item, $indent, $active, $selected, $component, $first_last, $has_children)
    640     {
    641         $css_class = $selected;
    642 
    643         // Check if the class is active
    644         if ($active !== '')
    645         {
    646             $css_class .= ' '.$active;
    647         }
    648 
    649         // Check if the component name is supposed to be drawn
    650         if ($component !== '')
    651         {
    652             $css_class .= ' '.$component;
     563                $classes[] = str_replace('.', '_', $item[MIDCOM_NAV_COMPONENT]);
     564            }
     565        }
     566        else
     567        {
     568            // Place the corresponding css class for the currently active leaf)
     569            if ($item[MIDCOM_NAV_ID] === $this->_nap->get_current_leaf())
     570            {
     571                $classes[] = $this->css_active;
     572                $classes[] = $this->css_selected;
     573            }
    653574        }
    654575
     
    656577        if ($this->url_name_to_class)
    657578        {
    658             $css_class .= str_replace('/', '', " {$item[MIDCOM_NAV_URL]}");
    659         }
    660 
    661          // Check if the first or last is supposed to be drawn
    662         if (   $this->first_and_last_to_class
    663             && $first_last !== '')
    664         {
    665             $css_class .= ' ' . $first_last;
    666         }
    667 
    668          // Check if the has children is supposed to be drawn
    669         if (   $this->has_children_to_class
    670             && $has_children !== '')
    671         {
    672             $css_class .= ' ' . $has_children;
     579            $classes[] = str_replace('/', '', $item[MIDCOM_NAV_URL]);
     580        }
     581
     582        if ($this->first_and_last_to_class)
     583        {
     584            if ($item_count == 1)
     585            {
     586                $classes[] = $this->css_first_last;
     587            }
     588            else if($item_counter == 1)
     589            {
     590                $classes[] = $this->css_first;
     591            }
     592            else if($item_counter == $item_count)
     593            {
     594                $classes[] = $this->css_last;
     595            }
     596        }
     597
     598        if ($this->has_children_to_class)
     599        {
     600            if (!$this->list_leaves)
     601            {
     602                $children = $this->_nap->list_nodes($child[MIDCOM_NAV_ID]);
     603            }
     604            else
     605            {
     606                $children = $this->_nap->list_child_elements($child[MIDCOM_NAV_ID]);
     607            }
     608            if (is_array($children) && count($children) > 0)
     609            {
     610                $classes[] = $this->css_has_children;
     611            }
    673612        }
    674613
     
    677616            && $css_status_class = $_MIDCOM->metadata->get_object_classes($item[MIDCOM_NAV_OBJECT]))
    678617        {
    679             $css_class .= ' ' . $css_status_class;
    680         }
    681 
    682         $css_class = trim($css_class);
     618            $classes[] = $css_status_class;
     619        }
     620
     621        return implode(' ', $classes);
     622
     623    }
     624
     625    function _display_element($item, $indent, $css_classes)
     626    {
    683627
    684628        // Finalize the class naming
    685         if ($css_class !== '')
    686         {
    687             $class = " class=\"{$css_class}\"";
     629        if ($css_classes !== '')
     630        {
     631            $class = " class=\"{$css_classes}\"";
    688632        }
    689633        else
     
    693637
    694638        $get_params = $this->_get_parameter_string();
    695        
     639
    696640        if ($this->class_to_link)
    697641        {
     
    706650        echo "{$indent}        <a href=\"{$item[MIDCOM_NAV_FULLURL]}{$get_params}\"{$link_class}>{$item[MIDCOM_NAV_NAME]}</a>\n";
    707651        // If either of the follow nodes switches is on, follow all the nodes
     652
    708653        if (   $item[MIDCOM_NAV_TYPE] === 'node'
    709654            && !$this->show_only_current
Note: See TracChangeset for help on using the changeset viewer.