Skip to content
Browse files

MDL-38887 block nav: reshifter module

  • Loading branch information...
1 parent ca0b1f5 commit 77b0357faf670c603800df9176f6c5715d2f6f3d @stronk7 stronk7 committed
View
4 ...i/build/moodle-block_navigation-navigation/moodle-block_navigation-navigation-coverage.js
@@ -26,7 +26,7 @@ _yuitest_coverage["build/moodle-block_navigation-navigation/moodle-block_navigat
path: "build/moodle-block_navigation-navigation/moodle-block_navigation-navigation.js",
code: []
};
-_yuitest_coverage["build/moodle-block_navigation-navigation/moodle-block_navigation-navigation.js"].code=["YUI.add('moodle-block_navigation-navigation', function (Y, NAME) {","","/**"," * A 'actionkey' Event to help with Y.delegate()."," * The event consists of the left arrow, right arrow, enter and space keys."," * More keys can be mapped to action meanings."," * actions: collapse , expand, toggle, enter."," *"," * This event is delegated to branches in the navigation tree."," * The on() method to subscribe allows specifying the desired trigger actions as JSON."," *"," * Todo: This could be centralised, a similar Event is defined in blocks/dock.js"," */","Y.Event.define(\"actionkey\", {"," // Webkit and IE repeat keydown when you hold down arrow keys."," // Opera links keypress to page scroll; others keydown."," // Firefox prevents page scroll via preventDefault() on either"," // keydown or keypress."," _event: (Y.UA.webkit || Y.UA.ie) ? 'keydown' : 'keypress',",""," _keys: {"," //arrows"," '37': 'collapse',"," '39': 'expand',"," //(@todo: lrt/rtl/M.core_dock.cfg.orientation decision to assign arrow to meanings)"," '32': 'toggle',"," '13': 'enter'"," },",""," _keyHandler: function (e, notifier, args) {"," var actObj;"," if (!args.actions) {"," actObj = {collapse:true, expand:true, toggle:true, enter:true};"," } else {"," actObj = args.actions;"," }"," if (this._keys[e.keyCode] && actObj[this._keys[e.keyCode]]) {"," e.action = this._keys[e.keyCode];"," notifier.fire(e);"," }"," },",""," on: function (node, sub, notifier) {"," // subscribe to _event and ask keyHandler to handle with given args[0] (the desired actions)."," if (sub.args === null) {"," //no actions given"," sub._detacher = node.on(this._event, this._keyHandler,this, notifier, {actions:false});"," } else {"," sub._detacher = node.on(this._event, this._keyHandler,this, notifier, sub.args[0]);"," }"," },",""," detach: function (node, sub) {"," //detach our _detacher handle of the subscription made in on()"," sub._detacher.detach();"," },",""," delegate: function (node, sub, notifier, filter) {"," // subscribe to _event and ask keyHandler to handle with given args[0] (the desired actions)."," if (sub.args === null) {"," //no actions given"," sub._delegateDetacher = node.delegate(this._event, this._keyHandler,filter, this, notifier, {actions:false});"," } else {"," sub._delegateDetacher = node.delegate(this._event, this._keyHandler,filter, this, notifier, sub.args[0]);"," }"," },",""," detachDelegate: function (node, sub) {"," sub._delegateDetacher.detach();"," }","});","","var EXPANSIONLIMIT_EVERYTHING = 0,"," //EXPANSIONLIMIT_COURSE = 20,"," //EXPANSIONLIMIT_SECTION = 30,"," EXPANSIONLIMIT_ACTIVITY = 40;","","/**"," * Mappings for the different types of nodes coming from the navigation."," * Copied from lib/navigationlib.php navigation_node constants."," * @type object"," */","var NODETYPE = {"," /** @type int Root node = 0 */"," ROOTNODE : 0,"," /** @type int System context = 1 */"," SYSTEM : 1,"," /** @type int Course category = 10 */"," CATEGORY : 10,"," /** @type int MYCATEGORY = 11 */"," MYCATEGORY : 11,"," /** @type int Course = 20 */"," COURSE : 20,"," /** @type int Course section = 30 */"," SECTION : 30,"," /** @type int Activity (course module) = 40 */"," ACTIVITY : 40,"," /** @type int Resource (course module = 50 */"," RESOURCE : 50,"," /** @type int Custom node (could be anything) = 60 */"," CUSTOM : 60,"," /** @type int Setting = 70 */"," SETTING : 70,"," /** @type int User context = 80 */"," USER : 80,"," /** @type int Container = 90 */"," CONTAINER : 90","};","","/**"," * Navigation tree class."," *"," * This class establishes the tree initially, creating expandable branches as"," * required, and delegating the expand/collapse event."," */","var TREE = function() {"," TREE.superclass.constructor.apply(this, arguments);","};","TREE.prototype = {"," /**"," * The tree's ID, normally its block instance id."," */"," id : null,"," /**"," * An array of initialised branches."," */"," branches : [],"," /**"," * Initialise the tree object when its first created."," */"," initializer : function(config) {"," this.id = config.id;",""," var node = Y.one('#inst'+config.id);",""," // Can't find the block instance within the page"," if (node === null) {"," return;"," }",""," // Delegate event to toggle expansion"," Y.delegate('click', this.toggleExpansion, node.one('.block_tree'), '.tree_item.branch', this);"," Y.delegate('actionkey', this.toggleExpansion, node.one('.block_tree'), '.tree_item.branch', this);",""," // Gather the expandable branches ready for initialisation."," var expansions = [];"," if (config.expansions) {"," expansions = config.expansions;"," } else if (window['navtreeexpansions'+config.id]) {"," expansions = window['navtreeexpansions'+config.id];"," }"," // Establish each expandable branch as a tree branch."," for (var i in expansions) {"," var branch = new BRANCH({"," tree:this,"," branchobj:expansions[i],"," overrides : {"," expandable : true,"," children : [],"," haschildren : true"," }"," }).wire();"," M.block_navigation.expandablebranchcount++;"," this.branches[branch.get('id')] = branch;"," }"," if (M.block_navigation.expandablebranchcount > 0) {"," // Delegate some events to handle AJAX loading."," Y.delegate('click', this.fire_branch_action, node.one('.block_tree'), '.tree_item.branch[data-expandable]', this);"," Y.delegate('actionkey', this.fire_branch_action, node.one('.block_tree'), '.tree_item.branch[data-expandable]', this);"," }",""," // Call the generic blocks init method to add all the generic stuff"," if (this.get('candock')) {"," this.initialise_block(Y, node);"," }"," },"," /**"," * Fire actions for a branch when an event occurs."," */"," fire_branch_action : function(event) {"," var id = event.currentTarget.getAttribute('id');"," var branch = this.branches[id];"," branch.ajaxLoad(event);"," },"," /**"," * This is a callback function responsible for expanding and collapsing the"," * branches of the tree. It is delegated to rather than multiple event handles."," */"," toggleExpansion : function(e) {"," // First check if they managed to click on the li iteslf, then find the closest"," // LI ancestor and use that",""," if (e.target.test('a') && (e.keyCode === 0 || e.keyCode === 13)) {"," // A link has been clicked (or keypress is 'enter') don't fire any more events just do the default."," e.stopPropagation();"," return;"," }",""," // Makes sure we can get to the LI containing the branch."," var target = e.target;"," if (!target.test('li')) {"," target = target.ancestor('li');"," }"," if (!target) {"," return;"," }",""," // Toggle expand/collapse providing its not a root level branch."," if (!target.hasClass('depth_1')) {"," if (e.type === 'actionkey') {"," switch (e.action) {"," case 'expand' :"," target.removeClass('collapsed');"," target.set('aria-expanded', true);"," break;"," case 'collapse' :"," target.addClass('collapsed');"," target.set('aria-expanded', false);"," break;"," default :"," target.toggleClass('collapsed');"," target.set('aria-expanded', !target.hasClass('collapsed'));"," }"," e.halt();"," } else {"," target.toggleClass('collapsed');"," target.set('aria-expanded', !target.hasClass('collapsed'));"," }"," }",""," // If the accordian feature has been enabled collapse all siblings."," if (this.get('accordian')) {"," target.siblings('li').each(function(){"," if (this.get('id') !== target.get('id') && !this.hasClass('collapsed')) {"," this.addClass('collapsed');"," this.set('aria-expanded', false);"," }"," });"," }",""," // If this block can dock tell the dock to resize if required and check"," // the width on the dock panel in case it is presently in use."," if (this.get('candock')) {"," M.core_dock.resize();"," var panel = M.core_dock.getPanel();"," if (panel.visible) {"," panel.correctWidth();"," }"," }"," }","};","// The tree extends the YUI base foundation.","Y.extend(TREE, Y.Base, TREE.prototype, {"," NAME : 'navigation-tree',"," ATTRS : {"," instance : {"," value : null"," },"," candock : {"," validator : Y.Lang.isBool,"," value : false"," },"," accordian : {"," validator : Y.Lang.isBool,"," value : false"," },"," expansionlimit : {"," value : 0,"," setter : function(val) {"," return parseInt(val, 10);"," }"," }"," }","});","if (M.core_dock && M.core_dock.genericblock) {"," Y.augment(TREE, M.core_dock.genericblock);","}","","/**"," * The tree branch class."," * This class is used to manage a tree branch, in particular its ability to load"," * its contents by AJAX."," */","BRANCH = function() {"," BRANCH.superclass.constructor.apply(this, arguments);","};","BRANCH.prototype = {"," /**"," * The node for this branch (p)"," */"," node : null,"," /**"," * Initialises the branch when it is first created."," */"," initializer : function(config) {"," var i,"," children;"," if (config.branchobj !== null) {"," // Construct from the provided xml"," for (i in config.branchobj) {"," this.set(i, config.branchobj[i]);"," }"," children = this.get('children');"," this.set('haschildren', (children.length > 0));"," }"," if (config.overrides !== null) {"," // Construct from the provided xml"," for (i in config.overrides) {"," 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."," *"," * This function creates a DOM structure for the branch and then injects"," * it into the navigation tree at the correct point."," */"," draw : function(element) {",""," var isbranch = (this.get('expandable') || this.get('haschildren'));"," var branchli = Y.Node.create('<li></li>');"," var link = this.get('link');"," var branchp = Y.Node.create('<p class=\"tree_item\"></p>').setAttribute('id', this.get('id'));"," if (!link) {"," //add tab focus if not link (so still one focus per menu node)."," // it was suggested to have 2 foci. one for the node and one for the link in MDL-27428."," branchp.setAttribute('tabindex', '0');"," }"," if (isbranch) {"," branchli.addClass('collapsed').addClass('contains_branch');"," branchli.set('aria-expanded', false);"," branchp.addClass('branch');"," }",""," // Prepare the icon, should be an object representing a pix_icon"," var branchicon = false;"," var icon = this.get('icon');"," if (icon && (!isbranch || this.get('type') == NODETYPE.ACTIVITY)) {"," branchicon = Y.Node.create('<img alt=\"\" />');"," branchicon.setAttribute('src', M.util.image_url(icon.pix, icon.component));"," branchli.addClass('item_with_icon');"," if (icon.alt) {"," branchicon.setAttribute('alt', icon.alt);"," }"," if (icon.title) {"," branchicon.setAttribute('title', icon.title);"," }"," if (icon.classes) {"," for (var i in icon.classes) {"," branchicon.addClass(icon.classes[i]);"," }"," }"," }",""," if (!link) {"," var branchspan = Y.Node.create('<span></span>');"," if (branchicon) {"," branchspan.appendChild(branchicon);"," }"," branchspan.append(this.get('name'));"," if (this.get('hidden')) {"," branchspan.addClass('dimmed_text');"," }"," branchp.appendChild(branchspan);"," } else {"," var branchlink = Y.Node.create('<a title=\"'+this.get('title')+'\" href=\"'+link+'\"></a>');"," if (branchicon) {"," branchlink.appendChild(branchicon);"," }"," branchlink.append(this.get('name'));"," if (this.get('hidden')) {"," branchlink.addClass('dimmed');"," }"," branchp.appendChild(branchlink);"," }",""," branchli.appendChild(branchp);"," element.appendChild(branchli);"," this.node = branchp;"," return this;"," },"," /**"," * Attaches required events to the branch structure."," */"," wire : function() {"," this.node = this.node || Y.one('#'+this.get('id'));"," if (!this.node) {"," return false;"," }"," if (this.get('expandable')) {"," this.node.setAttribute('data-expandable', '1');"," this.node.setAttribute('data-loaded', '0');"," }"," return this;"," },"," /**"," * Gets the UL element that children for this branch should be inserted into."," */"," getChildrenUL : function() {"," var ul = this.node.next('ul');"," if (!ul) {"," ul = Y.Node.create('<ul></ul>');"," this.node.ancestor().append(ul);"," }"," return ul;"," },"," /**"," * Load the content of the branch via AJAX."," *"," * This function calls ajaxProcessResponse with the result of the AJAX"," * request made here."," */"," ajaxLoad : function(e) {"," if (e.type === 'actionkey' && e.action !== 'enter') {"," e.halt();"," } else {"," e.stopPropagation();"," }"," if (e.type === 'actionkey' && e.action === 'enter' && e.target.test('A')) {"," // No ajaxLoad for enter."," this.node.setAttribute('data-expandable', '0');"," this.node.setAttribute('data-loaded', '1');"," return true;"," }",""," if (this.node.hasClass('loadingbranch')) {"," // Already loading. Just skip."," return true;"," }",""," if (this.node.getAttribute('data-loaded') === '1') {"," // We've already loaded this stuff."," return true;"," }"," this.node.addClass('loadingbranch');",""," var params = {"," elementid : this.get('id'),"," id : this.get('key'),"," type : this.get('type'),"," sesskey : M.cfg.sesskey,"," instance : this.get('tree').get('instance')"," };",""," Y.io(M.cfg.wwwroot+'/lib/ajax/getnavbranch.php', {"," method:'POST',"," data: build_querystring(params),"," on: {"," complete: this.ajaxProcessResponse"," },"," context:this"," });"," return true;"," },"," /**"," * Processes an AJAX request to load the content of this branch through"," * AJAX."," */"," ajaxProcessResponse : function(tid, outcome) {"," this.node.removeClass('loadingbranch');"," this.node.setAttribute('data-loaded', '1');"," try {"," var object = Y.JSON.parse(outcome.responseText);"," if (object.children && object.children.length > 0) {"," var coursecount = 0;"," for (var i in object.children) {"," if (typeof(object.children[i])==='object') {"," if (object.children[i].type == NODETYPE.COURSE) {"," coursecount++;"," }"," this.addChild(object.children[i]);"," }"," }"," if ((this.get('type') == NODETYPE.CATEGORY || this.get('type') == NODETYPE.ROOTNODE || this.get('type') == NODETYPE.MYCATEGORY)"," && coursecount >= M.block_navigation.courselimit) {"," this.addViewAllCoursesChild(this);"," }"," return true;"," }"," } catch (ex) {"," // If we got here then there was an error parsing the result"," }"," // The branch is empty so class it accordingly"," this.node.replaceClass('branch', 'emptybranch');"," return true;"," },"," /**"," * Turns the branch object passed to the method into a proper branch object"," * and then adds it as a child of this branch."," */"," addChild : function(branchobj) {"," // Make the new branch into an object"," var branch = new BRANCH({tree:this.get('tree'), branchobj:branchobj});"," if (branch.draw(this.getChildrenUL())) {"," this.get('tree').branches[branch.get('id')] = branch;"," branch.wire();"," var count = 0, i, children = branch.get('children');"," for (i in children) {"," // Add each branch to the tree"," if (children[i].type == NODETYPE.COURSE) {"," count++;"," }"," if (typeof(children[i]) === 'object') {"," branch.addChild(children[i]);"," }"," }"," if ((branch.get('type') == NODETYPE.CATEGORY || branch.get('type') == NODETYPE.MYCATEGORY)"," && count >= M.block_navigation.courselimit) {"," this.addViewAllCoursesChild(branch);"," }"," }"," return true;"," },",""," /**"," * Add a link to view all courses in a category"," */"," addViewAllCoursesChild: function(branch) {"," var url = null;"," if (branch.get('type') == NODETYPE.ROOTNODE) {"," if (branch.get('key') === 'mycourses') {"," url = M.cfg.wwwroot + '/my';"," } else {"," url = M.cfg.wwwroot + '/course/index.php';"," }"," } else {"," url = M.cfg.wwwroot+'/course/category.php?id=' + branch.get('key');"," }"," branch.addChild({"," name : M.str.moodle.viewallcourses,"," title : M.str.moodle.viewallcourses,"," link : url,"," haschildren : false,"," icon : {'pix':\"i/navigationitem\",'component':'moodle'}"," });"," }","};","Y.extend(BRANCH, Y.Base, BRANCH.prototype, {"," NAME : 'navigation-branch',"," ATTRS : {"," tree : {"," validator : Y.Lang.isObject"," },"," name : {"," value : '',"," validator : Y.Lang.isString,"," setter : function(val) {"," return val.replace(/\\n/g, '<br />');"," }"," },"," title : {"," value : '',"," validator : Y.Lang.isString"," },"," id : {"," value : '',"," validator : Y.Lang.isString,"," getter : function(val) {"," if (val === '') {"," val = 'expandable_branch_'+M.block_navigation.expandablebranchcount;"," M.block_navigation.expandablebranchcount++;"," }"," return val;"," }"," },"," key : {"," value : null"," },"," type : {"," value : null"," },"," link : {"," value : false"," },"," icon : {"," value : false,"," validator : Y.Lang.isObject"," },"," expandable : {"," value : false,"," validator : Y.Lang.isBool"," },"," hidden : {"," value : false,"," validator : Y.Lang.isBool"," },"," haschildren : {"," value : false,"," validator : Y.Lang.isBool"," },"," children : {"," value : [],"," validator : Y.Lang.isArray"," }"," }","});","","/**"," * This namespace will contain all of the contents of the navigation blocks"," * global navigation and settings."," * @namespace"," */","M.block_navigation = M.block_navigation || {"," /** The number of expandable branches in existence */"," expandablebranchcount:1,"," courselimit : 20,"," instance : null,"," /**"," * Add new instance of navigation tree to tree collection"," */"," init_add_tree:function(properties) {"," if (properties.courselimit) {"," this.courselimit = properties.courselimit;"," }"," if (M.core_dock) {"," M.core_dock.init(Y);"," }"," new TREE(properties);"," }","};","","","}, '@VERSION@', {"," \"requires\": ["," \"base\","," \"core_dock\","," \"io-base\","," \"node\","," \"dom\","," \"event-custom\","," \"event-delegate\","," \"json-parse\""," ]","});"];
+_yuitest_coverage["build/moodle-block_navigation-navigation/moodle-block_navigation-navigation.js"].code=["YUI.add('moodle-block_navigation-navigation', function (Y, NAME) {","","/**"," * A 'actionkey' Event to help with Y.delegate()."," * The event consists of the left arrow, right arrow, enter and space keys."," * More keys can be mapped to action meanings."," * actions: collapse , expand, toggle, enter."," *"," * This event is delegated to branches in the navigation tree."," * The on() method to subscribe allows specifying the desired trigger actions as JSON."," *"," * Todo: This could be centralised, a similar Event is defined in blocks/dock.js"," */","Y.Event.define(\"actionkey\", {"," // Webkit and IE repeat keydown when you hold down arrow keys."," // Opera links keypress to page scroll; others keydown."," // Firefox prevents page scroll via preventDefault() on either"," // keydown or keypress."," _event: (Y.UA.webkit || Y.UA.ie) ? 'keydown' : 'keypress',",""," _keys: {"," //arrows"," '37': 'collapse',"," '39': 'expand',"," //(@todo: lrt/rtl/M.core_dock.cfg.orientation decision to assign arrow to meanings)"," '32': 'toggle',"," '13': 'enter'"," },",""," _keyHandler: function (e, notifier, args) {"," var actObj;"," if (!args.actions) {"," actObj = {collapse:true, expand:true, toggle:true, enter:true};"," } else {"," actObj = args.actions;"," }"," if (this._keys[e.keyCode] && actObj[this._keys[e.keyCode]]) {"," e.action = this._keys[e.keyCode];"," notifier.fire(e);"," }"," },",""," on: function (node, sub, notifier) {"," // subscribe to _event and ask keyHandler to handle with given args[0] (the desired actions)."," if (sub.args === null) {"," //no actions given"," sub._detacher = node.on(this._event, this._keyHandler,this, notifier, {actions:false});"," } else {"," sub._detacher = node.on(this._event, this._keyHandler,this, notifier, sub.args[0]);"," }"," },",""," detach: function (node, sub) {"," //detach our _detacher handle of the subscription made in on()"," sub._detacher.detach();"," },",""," delegate: function (node, sub, notifier, filter) {"," // subscribe to _event and ask keyHandler to handle with given args[0] (the desired actions)."," if (sub.args === null) {"," //no actions given"," sub._delegateDetacher = node.delegate(this._event, this._keyHandler,filter, this, notifier, {actions:false});"," } else {"," sub._delegateDetacher = node.delegate(this._event, this._keyHandler,filter, this, notifier, sub.args[0]);"," }"," },",""," detachDelegate: function (node, sub) {"," sub._delegateDetacher.detach();"," }","});","","var EXPANSIONLIMIT_EVERYTHING = 0,"," //EXPANSIONLIMIT_COURSE = 20,"," //EXPANSIONLIMIT_SECTION = 30,"," EXPANSIONLIMIT_ACTIVITY = 40;","","/**"," * Mappings for the different types of nodes coming from the navigation."," * Copied from lib/navigationlib.php navigation_node constants."," * @type object"," */","var NODETYPE = {"," /** @type int Root node = 0 */"," ROOTNODE : 0,"," /** @type int System context = 1 */"," SYSTEM : 1,"," /** @type int Course category = 10 */"," CATEGORY : 10,"," /** @type int MYCATEGORY = 11 */"," MYCATEGORY : 11,"," /** @type int Course = 20 */"," COURSE : 20,"," /** @type int Course section = 30 */"," SECTION : 30,"," /** @type int Activity (course module) = 40 */"," ACTIVITY : 40,"," /** @type int Resource (course module = 50 */"," RESOURCE : 50,"," /** @type int Custom node (could be anything) = 60 */"," CUSTOM : 60,"," /** @type int Setting = 70 */"," SETTING : 70,"," /** @type int User context = 80 */"," USER : 80,"," /** @type int Container = 90 */"," CONTAINER : 90","};","","/**"," * Navigation tree class."," *"," * This class establishes the tree initially, creating expandable branches as"," * required, and delegating the expand/collapse event."," */","var TREE = function() {"," TREE.superclass.constructor.apply(this, arguments);","};","TREE.prototype = {"," /**"," * The tree's ID, normally its block instance id."," */"," id : null,"," /**"," * An array of initialised branches."," */"," branches : [],"," /**"," * Initialise the tree object when its first created."," */"," initializer : function(config) {"," this.id = config.id;",""," var node = Y.one('#inst'+config.id);",""," // Can't find the block instance within the page"," if (node === null) {"," return;"," }",""," // Delegate event to toggle expansion"," Y.delegate('click', this.toggleExpansion, node.one('.block_tree'), '.tree_item.branch', this);"," Y.delegate('actionkey', this.toggleExpansion, node.one('.block_tree'), '.tree_item.branch', this);",""," // Gather the expandable branches ready for initialisation."," var expansions = [];"," if (config.expansions) {"," expansions = config.expansions;"," } else if (window['navtreeexpansions'+config.id]) {"," expansions = window['navtreeexpansions'+config.id];"," }"," // Establish each expandable branch as a tree branch."," for (var i in expansions) {"," var branch = new BRANCH({"," tree:this,"," branchobj:expansions[i],"," overrides : {"," expandable : true,"," children : [],"," haschildren : true"," }"," }).wire();"," M.block_navigation.expandablebranchcount++;"," this.branches[branch.get('id')] = branch;"," }"," if (M.block_navigation.expandablebranchcount > 0) {"," // Delegate some events to handle AJAX loading."," Y.delegate('click', this.fire_branch_action, node.one('.block_tree'), '.tree_item.branch[data-expandable]', this);"," Y.delegate('actionkey', this.fire_branch_action, node.one('.block_tree'), '.tree_item.branch[data-expandable]', this);"," }",""," // Call the generic blocks init method to add all the generic stuff"," if (this.get('candock')) {"," this.initialise_block(Y, node);"," }"," },"," /**"," * Fire actions for a branch when an event occurs."," */"," fire_branch_action : function(event) {"," var id = event.currentTarget.getAttribute('id');"," var branch = this.branches[id];"," branch.ajaxLoad(event);"," },"," /**"," * This is a callback function responsible for expanding and collapsing the"," * branches of the tree. It is delegated to rather than multiple event handles."," */"," toggleExpansion : function(e) {"," // First check if they managed to click on the li iteslf, then find the closest"," // LI ancestor and use that",""," if (e.target.test('a') && (e.keyCode === 0 || e.keyCode === 13)) {"," // A link has been clicked (or keypress is 'enter') don't fire any more events just do the default."," e.stopPropagation();"," return;"," }",""," // Makes sure we can get to the LI containing the branch."," var target = e.target;"," if (!target.test('li')) {"," target = target.ancestor('li');"," }"," if (!target) {"," return;"," }",""," // Toggle expand/collapse providing its not a root level branch."," if (!target.hasClass('depth_1')) {"," if (e.type === 'actionkey') {"," switch (e.action) {"," case 'expand' :"," target.removeClass('collapsed');"," target.set('aria-expanded', true);"," break;"," case 'collapse' :"," target.addClass('collapsed');"," target.set('aria-expanded', false);"," break;"," default :"," target.toggleClass('collapsed');"," target.set('aria-expanded', !target.hasClass('collapsed'));"," }"," e.halt();"," } else {"," target.toggleClass('collapsed');"," target.set('aria-expanded', !target.hasClass('collapsed'));"," }"," }",""," // If the accordian feature has been enabled collapse all siblings."," if (this.get('accordian')) {"," target.siblings('li').each(function(){"," if (this.get('id') !== target.get('id') && !this.hasClass('collapsed')) {"," this.addClass('collapsed');"," this.set('aria-expanded', false);"," }"," });"," }",""," // If this block can dock tell the dock to resize if required and check"," // the width on the dock panel in case it is presently in use."," if (this.get('candock')) {"," M.core_dock.resize();"," var panel = M.core_dock.getPanel();"," if (panel.visible) {"," panel.correctWidth();"," }"," }"," }","};","// The tree extends the YUI base foundation.","Y.extend(TREE, Y.Base, TREE.prototype, {"," NAME : 'navigation-tree',"," ATTRS : {"," instance : {"," value : null"," },"," candock : {"," validator : Y.Lang.isBool,"," value : false"," },"," accordian : {"," validator : Y.Lang.isBool,"," value : false"," },"," expansionlimit : {"," value : 0,"," setter : function(val) {"," return parseInt(val, 10);"," }"," }"," }","});","if (M.core_dock && M.core_dock.genericblock) {"," Y.augment(TREE, M.core_dock.genericblock);","}","","/**"," * The tree branch class."," * This class is used to manage a tree branch, in particular its ability to load"," * its contents by AJAX."," */","BRANCH = function() {"," BRANCH.superclass.constructor.apply(this, arguments);","};","BRANCH.prototype = {"," /**"," * The node for this branch (p)"," */"," node : null,"," /**"," * Initialises the branch when it is first created."," */"," initializer : function(config) {"," var i,"," children;"," if (config.branchobj !== null) {"," // Construct from the provided xml"," for (i in config.branchobj) {"," this.set(i, config.branchobj[i]);"," }"," children = this.get('children');"," this.set('haschildren', (children.length > 0));"," }"," if (config.overrides !== null) {"," // Construct from the provided xml"," for (i in config.overrides) {"," 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."," *"," * This function creates a DOM structure for the branch and then injects"," * it into the navigation tree at the correct point."," */"," draw : function(element) {",""," var isbranch = (this.get('expandable') || this.get('haschildren'));"," var branchli = Y.Node.create('<li></li>');"," var link = this.get('link');"," var branchp = Y.Node.create('<p class=\"tree_item\"></p>').setAttribute('id', this.get('id'));"," if (!link) {"," //add tab focus if not link (so still one focus per menu node)."," // it was suggested to have 2 foci. one for the node and one for the link in MDL-27428."," branchp.setAttribute('tabindex', '0');"," }"," if (isbranch) {"," branchli.addClass('collapsed').addClass('contains_branch');"," branchli.set('aria-expanded', false);"," branchp.addClass('branch');"," }",""," // Prepare the icon, should be an object representing a pix_icon"," var branchicon = false;"," var icon = this.get('icon');"," if (icon && (!isbranch || this.get('type') == NODETYPE.ACTIVITY)) {"," branchicon = Y.Node.create('<img alt=\"\" />');"," branchicon.setAttribute('src', M.util.image_url(icon.pix, icon.component));"," branchli.addClass('item_with_icon');"," if (icon.alt) {"," branchicon.setAttribute('alt', icon.alt);"," }"," if (icon.title) {"," branchicon.setAttribute('title', icon.title);"," }"," if (icon.classes) {"," for (var i in icon.classes) {"," branchicon.addClass(icon.classes[i]);"," }"," }"," }",""," if (!link) {"," var branchspan = Y.Node.create('<span></span>');"," if (branchicon) {"," branchspan.appendChild(branchicon);"," }"," branchspan.append(this.get('name'));"," if (this.get('hidden')) {"," branchspan.addClass('dimmed_text');"," }"," branchp.appendChild(branchspan);"," } else {"," var branchlink = Y.Node.create('<a title=\"'+this.get('title')+'\" href=\"'+link+'\"></a>');"," if (branchicon) {"," branchlink.appendChild(branchicon);"," }"," branchlink.append(this.get('name'));"," if (this.get('hidden')) {"," branchlink.addClass('dimmed');"," }"," branchp.appendChild(branchlink);"," }",""," branchli.appendChild(branchp);"," element.appendChild(branchli);"," this.node = branchp;"," return this;"," },"," /**"," * Attaches required events to the branch structure."," */"," wire : function() {"," this.node = this.node || Y.one('#'+this.get('id'));"," if (!this.node) {"," return false;"," }"," if (this.get('expandable')) {"," this.node.setAttribute('data-expandable', '1');"," this.node.setAttribute('data-loaded', '0');"," }"," return this;"," },"," /**"," * Gets the UL element that children for this branch should be inserted into."," */"," getChildrenUL : function() {"," var ul = this.node.next('ul');"," if (!ul) {"," ul = Y.Node.create('<ul></ul>');"," this.node.ancestor().append(ul);"," }"," return ul;"," },"," /**"," * Load the content of the branch via AJAX."," *"," * This function calls ajaxProcessResponse with the result of the AJAX"," * request made here."," */"," ajaxLoad : function(e) {"," if (e.type === 'actionkey' && e.action !== 'enter') {"," e.halt();"," } else {"," e.stopPropagation();"," }"," if (e.type === 'actionkey' && e.action === 'enter' && e.target.test('A')) {"," // No ajaxLoad for enter."," this.node.setAttribute('data-expandable', '0');"," this.node.setAttribute('data-loaded', '1');"," return true;"," }",""," if (this.node.hasClass('loadingbranch')) {"," // Already loading. Just skip."," return true;"," }",""," if (this.node.getAttribute('data-loaded') === '1') {"," // We've already loaded this stuff."," return true;"," }"," this.node.addClass('loadingbranch');",""," var params = {"," elementid : this.get('id'),"," id : this.get('key'),"," type : this.get('type'),"," sesskey : M.cfg.sesskey,"," instance : this.get('tree').get('instance')"," };",""," Y.io(M.cfg.wwwroot+'/lib/ajax/getnavbranch.php', {"," method:'POST',"," data: build_querystring(params),"," on: {"," complete: this.ajaxProcessResponse"," },"," context:this"," });"," return true;"," },"," /**"," * Processes an AJAX request to load the content of this branch through"," * AJAX."," */"," ajaxProcessResponse : function(tid, outcome) {"," this.node.removeClass('loadingbranch');"," this.node.setAttribute('data-loaded', '1');"," try {"," var object = Y.JSON.parse(outcome.responseText);"," if (object.children && object.children.length > 0) {"," var coursecount = 0;"," for (var i in object.children) {"," if (typeof(object.children[i])==='object') {"," if (object.children[i].type == NODETYPE.COURSE) {"," coursecount++;"," }"," this.addChild(object.children[i]);"," }"," }"," if ((this.get('type') == NODETYPE.CATEGORY || this.get('type') == NODETYPE.ROOTNODE || this.get('type') == NODETYPE.MYCATEGORY)"," && coursecount >= M.block_navigation.courselimit) {"," this.addViewAllCoursesChild(this);"," }"," return true;"," }"," } catch (ex) {"," // If we got here then there was an error parsing the result"," }"," // The branch is empty so class it accordingly"," this.node.replaceClass('branch', 'emptybranch');"," return true;"," },"," /**"," * Turns the branch object passed to the method into a proper branch object"," * and then adds it as a child of this branch."," */"," addChild : function(branchobj) {"," // Make the new branch into an object"," var branch = new BRANCH({tree:this.get('tree'), branchobj:branchobj});"," if (branch.draw(this.getChildrenUL())) {"," this.get('tree').branches[branch.get('id')] = branch;"," branch.wire();"," var count = 0, i, children = branch.get('children');"," for (i in children) {"," // Add each branch to the tree"," if (children[i].type == NODETYPE.COURSE) {"," count++;"," }"," if (typeof(children[i]) === 'object') {"," branch.addChild(children[i]);"," }"," }"," if ((branch.get('type') == NODETYPE.CATEGORY || branch.get('type') == NODETYPE.MYCATEGORY)"," && count >= M.block_navigation.courselimit) {"," this.addViewAllCoursesChild(branch);"," }"," }"," return true;"," },",""," /**"," * Add a link to view all courses in a category"," */"," addViewAllCoursesChild: function(branch) {"," var url = null;"," if (branch.get('type') == NODETYPE.ROOTNODE) {"," if (branch.get('key') === 'mycourses') {"," url = M.cfg.wwwroot + '/my';"," } else {"," url = M.cfg.wwwroot + '/course/index.php';"," }"," } else {"," url = M.cfg.wwwroot+'/course/index.php?categoryid=' + branch.get('key');"," }"," branch.addChild({"," name : M.str.moodle.viewallcourses,"," title : M.str.moodle.viewallcourses,"," link : url,"," haschildren : false,"," icon : {'pix':\"i/navigationitem\",'component':'moodle'}"," });"," }","};","Y.extend(BRANCH, Y.Base, BRANCH.prototype, {"," NAME : 'navigation-branch',"," ATTRS : {"," tree : {"," validator : Y.Lang.isObject"," },"," name : {"," value : '',"," validator : Y.Lang.isString,"," setter : function(val) {"," return val.replace(/\\n/g, '<br />');"," }"," },"," title : {"," value : '',"," validator : Y.Lang.isString"," },"," id : {"," value : '',"," validator : Y.Lang.isString,"," getter : function(val) {"," if (val === '') {"," val = 'expandable_branch_'+M.block_navigation.expandablebranchcount;"," M.block_navigation.expandablebranchcount++;"," }"," return val;"," }"," },"," key : {"," value : null"," },"," type : {"," value : null"," },"," link : {"," value : false"," },"," icon : {"," value : false,"," validator : Y.Lang.isObject"," },"," expandable : {"," value : false,"," validator : Y.Lang.isBool"," },"," hidden : {"," value : false,"," validator : Y.Lang.isBool"," },"," haschildren : {"," value : false,"," validator : Y.Lang.isBool"," },"," children : {"," value : [],"," validator : Y.Lang.isArray"," }"," }","});","","/**"," * This namespace will contain all of the contents of the navigation blocks"," * global navigation and settings."," * @namespace"," */","M.block_navigation = M.block_navigation || {"," /** The number of expandable branches in existence */"," expandablebranchcount:1,"," courselimit : 20,"," instance : null,"," /**"," * Add new instance of navigation tree to tree collection"," */"," init_add_tree:function(properties) {"," if (properties.courselimit) {"," this.courselimit = properties.courselimit;"," }"," if (M.core_dock) {"," M.core_dock.init(Y);"," }"," new TREE(properties);"," }","};","","","}, '@VERSION@', {"," \"requires\": ["," \"base\","," \"core_dock\","," \"io-base\","," \"node\","," \"dom\","," \"event-custom\","," \"event-delegate\","," \"json-parse\""," ]","});"];
_yuitest_coverage["build/moodle-block_navigation-navigation/moodle-block_navigation-navigation.js"].lines = {"1":0,"14":0,"31":0,"32":0,"33":0,"35":0,"37":0,"38":0,"39":0,"45":0,"47":0,"49":0,"55":0,"60":0,"62":0,"64":0,"69":0,"73":0,"83":0,"116":0,"117":0,"119":0,"132":0,"134":0,"137":0,"138":0,"142":0,"143":0,"146":0,"147":0,"148":0,"149":0,"150":0,"153":0,"154":0,"163":0,"164":0,"166":0,"168":0,"169":0,"173":0,"174":0,"181":0,"182":0,"183":0,"193":0,"195":0,"196":0,"200":0,"201":0,"202":0,"204":0,"205":0,"209":0,"210":0,"211":0,"213":0,"214":0,"215":0,"217":0,"218":0,"219":0,"221":0,"222":0,"224":0,"226":0,"227":0,"232":0,"233":0,"234":0,"235":0,"236":0,"243":0,"244":0,"245":0,"246":0,"247":0,"253":0,"270":0,"275":0,"276":0,"284":0,"285":0,"287":0,"296":0,"298":0,"300":0,"301":0,"303":0,"304":0,"306":0,"308":0,"309":0,"313":0,"315":0,"316":0,"317":0,"318":0,"319":0,"330":0,"331":0,"332":0,"333":0,"334":0,"337":0,"339":0,"340":0,"341":0,"342":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"355":0,"356":0,"358":0,"359":0,"360":0,"365":0,"366":0,"367":0,"368":0,"370":0,"371":0,"372":0,"374":0,"376":0,"377":0,"378":0,"380":0,"381":0,"382":0,"384":0,"387":0,"388":0,"389":0,"390":0,"396":0,"397":0,"398":0,"400":0,"401":0,"402":0,"404":0,"410":0,"411":0,"412":0,"413":0,"415":0,"424":0,"425":0,"427":0,"429":0,"431":0,"432":0,"433":0,"436":0,"438":0,"441":0,"443":0,"445":0,"447":0,"455":0,"463":0,"470":0,"471":0,"472":0,"473":0,"474":0,"475":0,"476":0,"477":0,"478":0,"479":0,"481":0,"484":0,"486":0,"488":0,"494":0,"495":0,"503":0,"504":0,"505":0,"506":0,"507":0,"508":0,"510":0,"511":0,"513":0,"514":0,"517":0,"519":0,"522":0,"529":0,"530":0,"531":0,"532":0,"534":0,"537":0,"539":0,"548":0,"558":0,"569":0,"570":0,"571":0,"573":0,"613":0,"622":0,"623":0,"625":0,"626":0,"628":0};
_yuitest_coverage["build/moodle-block_navigation-navigation/moodle-block_navigation-navigation.js"].functions = {"_keyHandler:30":0,"on:43":0,"detach:53":0,"delegate:58":0,"detachDelegate:68":0,"TREE:116":0,"initializer:131":0,"fire_branch_action:180":0,"(anonymous 2):233":0,"toggleExpansion:189":0,"setter:269":0,"BRANCH:284":0,"initializer:295":0,"draw:328":0,"wire:395":0,"getChildrenUL:409":0,"ajaxLoad:423":0,"ajaxProcessResponse:469":0,"addChild:501":0,"addViewAllCoursesChild:528":0,"setter:557":0,"getter:568":0,"init_add_tree:621":0,"(anonymous 1):1":0};
_yuitest_coverage["build/moodle-block_navigation-navigation/moodle-block_navigation-navigation.js"].coveredLines = 216;
@@ -791,7 +791,7 @@ url = M.cfg.wwwroot + '/course/index.php';
}
} else {
_yuitest_coverline("build/moodle-block_navigation-navigation/moodle-block_navigation-navigation.js", 537);
-url = M.cfg.wwwroot+'/course/category.php?id=' + branch.get('key');
+url = M.cfg.wwwroot+'/course/index.php?categoryid=' + branch.get('key');
}
_yuitest_coverline("build/moodle-block_navigation-navigation/moodle-block_navigation-navigation.js", 539);
branch.addChild({
View
2 .../yui/build/moodle-block_navigation-navigation/moodle-block_navigation-navigation-debug.js
@@ -534,7 +534,7 @@ BRANCH.prototype = {
url = M.cfg.wwwroot + '/course/index.php';
}
} else {
- url = M.cfg.wwwroot+'/course/category.php?id=' + branch.get('key');
+ url = M.cfg.wwwroot+'/course/index.php?categoryid=' + branch.get('key');
}
branch.addChild({
name : M.str.moodle.viewallcourses,
View
2 ...on/yui/build/moodle-block_navigation-navigation/moodle-block_navigation-navigation-min.js
@@ -1,2 +1,2 @@
YUI.add("moodle-block_navigation-navigation",function(e,t){e.Event.define("actionkey",{_event:e.UA.webkit||e.UA.ie?"keydown":"keypress",_keys:{37:"collapse",39:"expand",32:"toggle",13:"enter"},_keyHandler:function(e,t,n){var r;n.actions?r=n.actions:r={collapse:!0,expand:!0,toggle:!0,enter:!0},this._keys[e.keyCode]&&r[this._keys[e.keyCode]]&&(e.action=this._keys[e.keyCode],t.fire(e))},on:function(e,t,n){t.args===null?t._detacher=e.on(this._event,this._keyHandler,this,n,{actions:!1}):t._detacher=e.on(this._event,this._keyHandler,this,n,t.args[0])},detach:function(e,t){t._detacher.detach()},delegate:function(e,t,n,r){t.args===null?t._delegateDetacher=e.delegate(this._event,this._keyHandler,r,this,n,{actions:!1}):t._delegateDetacher=e.delegate(this._event,this._keyHandler,r,this,n,t.args[0])},detachDelegate:function(e,t){t._delegateDetacher.detach()}});var n=0,r=40,i={ROOTNODE:0,SYSTEM:1,CATEGORY:10,MYCATEGORY:11,COURSE:20,SECTION:30,ACTIVITY:40,RESOURCE:50,CUSTOM:60,SETTING:70,USER:80,CONTAINER:90},s=function(){s.superclass.constructor.apply(this,arguments)};s.prototype={id:null,branches:[],initializer:function(t){this.id=t.id;var n=e.one("#inst"+t.id);if(n===null)return;e.delegate("click",this.toggleExpansion,n.one(".block_tree"),".tree_item.branch",this),e.delegate("actionkey",this.toggleExpansion,n.one(".block_tree"),".tree_item.branch",this);var r=[];t.expansions?r=t.expansions:window["navtreeexpansions"+t.id]&&(r=window["navtreeexpansions"+t.id]);for(var i in r){var s=(new BRANCH({tree:this,branchobj:r[i],overrides:{expandable:!0,children:[],haschildren:!0}})).wire();M.block_navigation.expandablebranchcount++,this.branches[s.get("id")]=s}M.block_navigation.expandablebranchcount>0&&(e.delegate("click",this.fire_branch_action,n.one(".block_tree"),".tree_item.branch[data-expandable]",this),e.delegate("actionkey",this.fire_branch_action,n.one(".block_tree"),".tree_item.branch[data-expandable]",this)),this.get("candock")&&this.initialise_block(e,n)},fire_branch_action:function(e){var t=e.currentTarget.getAttribute("id"),n=this.branches[t];n.ajaxLoad(e)},toggleExpansion:function(e){if(!(!e.target.test("a")||e.keyCode!==0&&e.keyCode!==13)){e.stopPropagation();return}var t=e.target;t.test("li")||(t=t.ancestor("li"));if(!t)return;if(!t.hasClass("depth_1"))if(e.type==="actionkey"){switch(e.action){case"expand":t.removeClass("collapsed"),t.set("aria-expanded",!0);break;case"collapse":t.addClass("collapsed"),t.set("aria-expanded",!1);break;default:t.toggleClass("collapsed"),t.set("aria-expanded",!t.hasClass("collapsed"))}e.halt()}else t.toggleClass("collapsed"),t.set("aria-expanded",!t.hasClass("collapsed"));this.get("accordian")&&t.siblings("li").each(function(){this.get("id")!==t.get("id")&&!this.hasClass("collapsed")&&(this.addClass("collapsed"),this.set("aria-expanded",!1))});if(this.get("candock")){M.core_dock.resize();var n=M.core_dock.getPanel();n.visible&&n.correctWidth()}}},e.extend(s,e.Base,s.prototype,{NAME:"navigation-tree",ATTRS:{instance:{value:null},candock:{validator:e.Lang.isBool,value:!1},accordian:{validator:e.Lang.isBool,value:!1},expansionlimit:{value:0,setter:function(e){return parseInt(e,10)}}}}),M.core_dock&&M.core_dock.genericblock&&e.augment(s,M.core_dock.genericblock),BRANCH=function(){BRANCH.superclass.constructor.apply(this,arguments)},BRANCH.prototype={node:null,initializer:function(t){var i,s;if(t.branchobj!==null){for(i in t.branchobj)this.set(i,t.branchobj[i]);s=this.get("children"),this.set("haschildren",s.length>0)}if(t.overrides!==null)for(i in t.overrides)this.set(i,t.overrides[i]);this.node=e.one("#",this.get("id"));var o=this.get("tree").get("expansionlimit"),u=this.get("type");o!==n&&u>=o&&u<=r&&(this.set("expandable",!1),this.set("haschildren",!1))},draw:function(t){var n=this.get("expandable")||this.get("haschildren"),r=e.Node.create("<li></li>"),s=this.get("link"),o=e.Node.create('<p class="tree_item"></p>').setAttribute("id",this.get("id"));s||o.setAttribute("tabindex","0"),n&&(r.addClass("collapsed").addClass("contains_branch"),r.set("aria-expanded",!1),o.addClass("branch"));var u=!1,a=this.get("icon");if(a&&(!n||this.get("type")==i.ACTIVITY)){u=e.Node.create('<img alt="" />'),u.setAttribute("src",M.util.image_url(a.pix,a.component)),r.addClass("item_with_icon"),a.alt&&u.setAttribute("alt",a.alt),a.title&&u.setAttribute("title",a.title);if(a.classes)for(var f in a.classes)u.addClass(a.classes[f])}if(!s){var l=e.Node.create("<span></span>");u&&l.appendChild(u),l.append(this.get("name")),this.get("hidden")&&l.addClass("dimmed_text"),o.appendChild(l)}else{var c=e.Node.create('<a title="'+this.get("title")+'" href="'+s+'"></a>');u&&c.appendChild(u),c.append(this.get("name")),this.get("hidden")&&c.addClass("dimmed"),o.appendChild(c)}return r.appendChild(o),t.appendChild(r),this.node=o,this},wire:function(){return this.node=this.node||e.one("#"+this.get("id")),this.node?(this.get("expandable")&&(this.node.setAttribute("data-expandable","1"),this.node.setAttribute("data-loaded","0")),this):!1},getChildrenUL:function(){var t=this.node.next("ul");return t||(t=e.Node.create("<ul></ul>"),this.node.ancestor().append(t)),t},ajaxLoad:function(t){t.type==="actionkey"&&t.action!=="enter"?t.halt():t.stopPropagation();if(t.type==="actionkey"&&t.action==="enter"&&t.target.test("A"))return this.node.setAttribute("data-expandable","0"),this.node.setAttribute("data-loaded","1"),!0;if(this.node.hasClass("loadingbranch"))return!0;if(this.node.getAttribute("data-loaded")==="1")return!0;this.node.addClass("loadingbranch");var n={elementid:this.get("id"),id:this.get("key"),type:this.get("type"),sesskey:M.cfg.sesskey,instance:this.get("tree").get("instance")};return e.io(M.cfg.wwwroot+"/lib/ajax/getnavbranch.php",{method:"POST",data:build_querystring(n),on:{complete:this.ajaxProcessResponse},context:this}),!0},ajaxProcessResponse:function(t,n){this.node.removeClass("loadingbranch"),this.node.setAttribute("data-loaded","1");try{var r=e.JSON.parse(n.responseText);if(r.children&&r.children
-.length>0){var s=0;for(var o in r.children)typeof r.children[o]=="object"&&(r.children[o].type==i.COURSE&&s++,this.addChild(r.children[o]));return(this.get("type")==i.CATEGORY||this.get("type")==i.ROOTNODE||this.get("type")==i.MYCATEGORY)&&s>=M.block_navigation.courselimit&&this.addViewAllCoursesChild(this),!0}}catch(u){}return this.node.replaceClass("branch","emptybranch"),!0},addChild:function(e){var t=new BRANCH({tree:this.get("tree"),branchobj:e});if(t.draw(this.getChildrenUL())){this.get("tree").branches[t.get("id")]=t,t.wire();var n=0,r,s=t.get("children");for(r in s)s[r].type==i.COURSE&&n++,typeof s[r]=="object"&&t.addChild(s[r]);(t.get("type")==i.CATEGORY||t.get("type")==i.MYCATEGORY)&&n>=M.block_navigation.courselimit&&this.addViewAllCoursesChild(t)}return!0},addViewAllCoursesChild:function(e){var t=null;e.get("type")==i.ROOTNODE?e.get("key")==="mycourses"?t=M.cfg.wwwroot+"/my":t=M.cfg.wwwroot+"/course/index.php":t=M.cfg.wwwroot+"/course/category.php?id="+e.get("key"),e.addChild({name:M.str.moodle.viewallcourses,title:M.str.moodle.viewallcourses,link:t,haschildren:!1,icon:{pix:"i/navigationitem",component:"moodle"}})}},e.extend(BRANCH,e.Base,BRANCH.prototype,{NAME:"navigation-branch",ATTRS:{tree:{validator:e.Lang.isObject},name:{value:"",validator:e.Lang.isString,setter:function(e){return e.replace(/\n/g,"<br />")}},title:{value:"",validator:e.Lang.isString},id:{value:"",validator:e.Lang.isString,getter:function(e){return e===""&&(e="expandable_branch_"+M.block_navigation.expandablebranchcount,M.block_navigation.expandablebranchcount++),e}},key:{value:null},type:{value:null},link:{value:!1},icon:{value:!1,validator:e.Lang.isObject},expandable:{value:!1,validator:e.Lang.isBool},hidden:{value:!1,validator:e.Lang.isBool},haschildren:{value:!1,validator:e.Lang.isBool},children:{value:[],validator:e.Lang.isArray}}}),M.block_navigation=M.block_navigation||{expandablebranchcount:1,courselimit:20,instance:null,init_add_tree:function(t){t.courselimit&&(this.courselimit=t.courselimit),M.core_dock&&M.core_dock.init(e),new s(t)}}},"@VERSION@",{requires:["base","core_dock","io-base","node","dom","event-custom","event-delegate","json-parse"]});
+.length>0){var s=0;for(var o in r.children)typeof r.children[o]=="object"&&(r.children[o].type==i.COURSE&&s++,this.addChild(r.children[o]));return(this.get("type")==i.CATEGORY||this.get("type")==i.ROOTNODE||this.get("type")==i.MYCATEGORY)&&s>=M.block_navigation.courselimit&&this.addViewAllCoursesChild(this),!0}}catch(u){}return this.node.replaceClass("branch","emptybranch"),!0},addChild:function(e){var t=new BRANCH({tree:this.get("tree"),branchobj:e});if(t.draw(this.getChildrenUL())){this.get("tree").branches[t.get("id")]=t,t.wire();var n=0,r,s=t.get("children");for(r in s)s[r].type==i.COURSE&&n++,typeof s[r]=="object"&&t.addChild(s[r]);(t.get("type")==i.CATEGORY||t.get("type")==i.MYCATEGORY)&&n>=M.block_navigation.courselimit&&this.addViewAllCoursesChild(t)}return!0},addViewAllCoursesChild:function(e){var t=null;e.get("type")==i.ROOTNODE?e.get("key")==="mycourses"?t=M.cfg.wwwroot+"/my":t=M.cfg.wwwroot+"/course/index.php":t=M.cfg.wwwroot+"/course/index.php?categoryid="+e.get("key"),e.addChild({name:M.str.moodle.viewallcourses,title:M.str.moodle.viewallcourses,link:t,haschildren:!1,icon:{pix:"i/navigationitem",component:"moodle"}})}},e.extend(BRANCH,e.Base,BRANCH.prototype,{NAME:"navigation-branch",ATTRS:{tree:{validator:e.Lang.isObject},name:{value:"",validator:e.Lang.isString,setter:function(e){return e.replace(/\n/g,"<br />")}},title:{value:"",validator:e.Lang.isString},id:{value:"",validator:e.Lang.isString,getter:function(e){return e===""&&(e="expandable_branch_"+M.block_navigation.expandablebranchcount,M.block_navigation.expandablebranchcount++),e}},key:{value:null},type:{value:null},link:{value:!1},icon:{value:!1,validator:e.Lang.isObject},expandable:{value:!1,validator:e.Lang.isBool},hidden:{value:!1,validator:e.Lang.isBool},haschildren:{value:!1,validator:e.Lang.isBool},children:{value:[],validator:e.Lang.isArray}}}),M.block_navigation=M.block_navigation||{expandablebranchcount:1,courselimit:20,instance:null,init_add_tree:function(t){t.courselimit&&(this.courselimit=t.courselimit),M.core_dock&&M.core_dock.init(e),new s(t)}}},"@VERSION@",{requires:["base","core_dock","io-base","node","dom","event-custom","event-delegate","json-parse"]});
View
2 ...gation/yui/build/moodle-block_navigation-navigation/moodle-block_navigation-navigation.js
@@ -534,7 +534,7 @@ BRANCH.prototype = {
url = M.cfg.wwwroot + '/course/index.php';
}
} else {
- url = M.cfg.wwwroot+'/course/category.php?id=' + branch.get('key');
+ url = M.cfg.wwwroot+'/course/index.php?categoryid=' + branch.get('key');
}
branch.addChild({
name : M.str.moodle.viewallcourses,

0 comments on commit 77b0357

Please sign in to comment.
Something went wrong with that request. Please try again.