# Extending Kirupa's XML-Based Menu

**URL:** https://forum.kirupa.com/t/extending-kirupas-xml-based-menu/225336
**Category:** Uncategorized
**Created:** [May 10, 2007, 7:52pm UTC](https://forum.kirupa.com/t/extending-kirupas-xml-based-menu/225336 "2007-05-10T19:52:31Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![albinus](https://avatars.discourse-cdn.com/v4/letter/a/c77e96/32.png) [@albinus](https://forum.kirupa.com/u/albinus)
#### Post date: [May 10, 2007, 7:52pm UTC](https://forum.kirupa.com/t/extending-kirupas-xml-based-menu/225336/1 "2007-05-10T19:52:31Z")

</div>

This is one of my first posts, so be kind! I’m slowly getting back into Flash after a hiatus (I was pretty good with Flash 5), and I’ve been adapting Kirupa’s XML-based menu tutorial to my company’s needs.

As users drill down to the 2nd and 3rd tier of menus, I need the script to load and display images (preferably with a preloader), the links of which would be provided in the accompanying XML document (I based our XML doc off of Kirupa’s example as well).

Any help that can be provided would be great! Here’s the modified Kirupa script:

// generates a list of menu items (effectively one menu)  
// given the inputted parameters. This makes the main menu  
// as well as any of the submenus  
GenerateMenu = function(container, name, x, y, depth, node\_xml) {  
// variable declarations  
var curr\_node;  
var curr\_item;  
var curr\_menu = container.createEmptyMovieClip(name, depth);

// for all items or XML nodes (items and menus)  
// within this node\_xml passed for this menu  
for (var i=0; i\<node\_xml.childNodes.length; i++) {  
// movieclip for each menu item  
curr\_item = curr\_menu.attachMovie(“menuitem”,“item”+i+"\_mc", i);  
curr\_item.\_x = x;  
curr\_item.\_y = y + i\*curr\_item.\_height;  
curr\_item.trackAsMenu = true;

// item properties assigned from XML  
curr\_node = node\_xml.childNodes\*;  
curr\_item.action = curr\_node.attributes.action;  
curr\_item.variables = curr\_node.attributes.variables;  
curr\_item.name.text = curr\_node.attributes.name;

// item submenu behavior for rollover event  
if (node\_xml.childNodes\*.nodeName == “menu”){  
// open a submenu  
curr\_item.node\_xml = curr\_node;  
curr\_item.onRollOver = curr\_item.onDragOver = function(){  
var x = this.\_x + this.\_width + 10;  
GenerateMenu(curr\_menu, “submenu\_mc”, x, y, 1000, this.node\_xml);  
//over state for items  
this.background.gotoAndPlay(‘openitem’);  
};  
}else{ // nodeName == “item”  
// close existing submenu  
curr\_item.onRollOver = curr\_item.onDragOver = function(){  
curr\_menu.submenu\_mc.removeMovieClip();  
// run movie to over state  
this.background.gotoAndPlay(‘openitem’);  
};  
}

curr\_item.onRollOut = curr\_item.onDragOut = function(){  
// run close menu anim  
this.background.gotoAndPlay(‘closeitem’);  
};

// any item, menu opening or not can have actions  
curr\_item.onRelease = function(){  
Actionsthis.action;  
CloseSubmenus();  
};  
} // end for loop  
};  
// create the main menu, this will be constantly visible  
CreateMainMenu = function(x, y, depth, menu\_xml){  
// generate a menu list  
GenerateMenu(this, “mainmenu\_mc”, x, y, depth, menu\_xml.firstChild);  
// close only submenus if visible durring a mouseup  
// this main menu (mainmenu\_mc) will remain  
mainmenu\_mc.onMouseUp = function(){  
if (mainmenu\_mc.submenu\_mc && !mainmenu\_mc.hitTest(\_root.\_xmouse, \_root.\_ymouse, true)){  
CloseSubmenus();  
}  
};  
};  
// closes all submenus by removing the submenu\_mc  
// in the main menu (if it exists)  
CloseSubmenus = function(){  
mainmenu\_mc.submenu\_mc.removeMovieClip();  
};  
// This actions object handles methods for actions  
// defined by the XML called when a menu item is pressed  
Actions = Object();  
Actions.gotoURL = function(urlVar){  
getURL(urlVar, “\_blank”);  
};  
Actions.message = function(msg){  
message\_txt.text = msg;  
};  
Actions.newMenu = function(menuxml){  
menu\_xml.load(menuxml);  
};  
// load XML, when done, run CreateMainMenu to interpret it  
menu\_xml = new XML();  
menu\_xml.ignoreWhite = true;  
menu\_xml.onLoad = function(ok){  
// create main menu after successful loading of XML  
if (ok){  
CreateMainMenu(10, 10, 0, this);  
message\_txt.text = “message area”;  
}else{  
message\_txt.text = “error: XML not successfully loaded”;  
}  
};  
// load first XML menu  
menu\_xml.load(“menucontent.xml”);
