From 8e5c23e04ff278fa6addec308add60db65ff5ba1 Mon Sep 17 00:00:00 2001 From: Sam Hemelryk Date: Wed, 5 Jan 2011 13:27:59 +0800 Subject: [PATCH] blocks-navigation MDL-25596 Fixed up redundant AJAX calls when navigation was limited by config --- blocks/navigation/block_navigation.php | 8 +++++++- blocks/navigation/renderer.php | 14 +++++++++---- .../navigation/yui/navigation/navigation.js | 20 +++++++++++++++++++ 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/blocks/navigation/block_navigation.php b/blocks/navigation/block_navigation.php index c7321f70587..c51efa8965f 100644 --- a/blocks/navigation/block_navigation.php +++ b/blocks/navigation/block_navigation.php @@ -107,7 +107,13 @@ class block_navigation extends block_base { if (!empty($CFG->navcourselimit)) { $limit = $CFG->navcourselimit; } - $arguments = array('id'=>$this->instance->id, 'instance'=>$this->instance->id, 'candock'=>$this->instance_can_be_docked(), 'courselimit'=>$limit); + $arguments = array( + 'id' => $this->instance->id, + 'instance' => $this->instance->id, + 'candock' => $this->instance_can_be_docked(), + 'courselimit' => $limit, + 'expansionlimit' => $this->config->expansionlimit + ); $this->page->requires->yui_module(array('core_dock', 'moodle-block_navigation-navigation'), 'M.block_navigation.init_add_tree', array($arguments)); } diff --git a/blocks/navigation/renderer.php b/blocks/navigation/renderer.php index 6ef43a40df6..d59f87c06a1 100644 --- a/blocks/navigation/renderer.php +++ b/blocks/navigation/renderer.php @@ -21,13 +21,16 @@ class block_navigation_renderer extends plugin_renderer_base { // array of nested li elements $lis = array(); foreach ($items as $item) { - if (!$item->display) { + if (!$item->display && !$item->contains_active_node()) { continue; } $content = $item->get_content(); $title = $item->get_title(); - $isbranch = ($item->type !== $expansionlimit && ($item->children->count() > 0 || ($item->nodetype == navigation_node::NODETYPE_BRANCH && $item->children->count()==0 && (isloggedin() || $item->type <= navigation_node::TYPE_CATEGORY)))); - $hasicon = ((!$isbranch || $item->type == navigation_node::TYPE_ACTIVITY)&& $item->icon instanceof renderable); + + $isexpandable = (empty($expansionlimit) || ($item->type > navigation_node::TYPE_ACTIVITY || $item->type < $expansionlimit) || ($item->contains_active_node() && $item->children->count() > 0)); + $isbranch = $isexpandable && ($item->children->count() > 0 || ($item->has_children() && (isloggedin() || $item->type <= navigation_node::TYPE_CATEGORY))); + + $hasicon = ((!$isbranch || $item->type == navigation_node::TYPE_ACTIVITY )&& $item->icon instanceof renderable); if ($hasicon) { $icon = $this->output->render($item->icon); @@ -91,7 +94,10 @@ class block_navigation_renderer extends plugin_renderer_base { if (!empty($item->id)) { $divattr['id'] = $item->id; } - $content = html_writer::tag('p', $content, $divattr) . $this->navigation_node($item->children, array(), $expansionlimit, $options, $depth+1); + $content = html_writer::tag('p', $content, $divattr); + if ($isexpandable) { + $content .= $this->navigation_node($item->children, array(), $expansionlimit, $options, $depth+1); + } if (!empty($item->preceedwithhr) && $item->preceedwithhr===true) { $content = html_writer::empty_tag('hr') . $content; } diff --git a/blocks/navigation/yui/navigation/navigation.js b/blocks/navigation/yui/navigation/navigation.js index d35d8d7b564..f2522d89a30 100644 --- a/blocks/navigation/yui/navigation/navigation.js +++ b/blocks/navigation/yui/navigation/navigation.js @@ -1,5 +1,11 @@ YUI.add('moodle-block_navigation-navigation', function(Y){ +var EXPANSIONLIMIT_EVERYTHING = 0, + EXPANSIONLIMIT_COURSE = 20, + EXPANSIONLIMIT_SECTION = 30, + EXPANSIONLIMIT_ACTIVITY = 40; + + /** * Navigation tree class. * @@ -119,6 +125,12 @@ Y.extend(TREE, Y.Base, TREE.prototype, { accordian : { validator : Y.Lang.isBool, value : false + }, + expansionlimit : { + value : 0, + setter : function(val) { + return parseInt(val); + } } } }); @@ -161,7 +173,15 @@ BRANCH.prototype = { this.set(i, config.overrides[i]); } } + // Get the node for this branch this.node = Y.one('#', this.get('id')); + // Now check whether the branch is not expandable because of the expansionlimit + var expansionlimit = this.get('tree').get('expansionlimit'); + var type = this.get('type'); + if (expansionlimit != EXPANSIONLIMIT_EVERYTHING && type >= expansionlimit && type <= EXPANSIONLIMIT_ACTIVITY) { + this.set('expandable', false); + this.set('haschildren', false); + } }, /** * Draws the branch within the tree. -- 2.43.0