in Allura/allura/public/nf/js/navbar.es6.js [301:371]
buildMenu: function(items, isSubMenu = false) {
var _this = this;
var [tools, anchoredTools, endTools] = [[], [], []];
var subMenu;
var childOptionsOpen;
var _handle;
var toolList;
var isAnchored;
for (let item of items) {
if (item.children) {
subMenu = this.buildMenu(item.children, true);
} else {
subMenu = null;
}
_handle = isSubMenu ? "draggable-handle-sub" : 'draggable-handle';
if (item.mount_point === 'admin') {
// force admin to end, just like 'Project.sitemap()' does
toolList = endTools;
isAnchored = true;
} else if (item.is_anchored) {
toolList = anchoredTools;
isAnchored = true;
} else {
toolList = tools;
isAnchored = false;
}
let coreItem = (<NavBarItem
{..._this.props}
mount_point={item.mount_point}
name={item.name}
handleType={_handle}
isGrouper={item.children && item.children.length > 0}
url={item.url}
key={'tb-item-' + _.uniqueId()}
is_anchored={isAnchored}
options={item.admin_options}
/>);
if (subMenu) {
childOptionsOpen = _.contains(_.pluck(item.children, 'mount_point'),
this.props.currentOptionMenu.tool);
toolList.push(<NavBarItemWithSubMenu
key={_.uniqueId()}
tool={coreItem}
subMenu={subMenu}
childOptionsOpen={childOptionsOpen}
/>);
} else {
toolList.push(coreItem);
}
}
return (
<div className='react-drag'>
{anchoredTools}
<ReactReorderable
key={'reorder-' + _.uniqueId()}
handle={"." + _handle}
mode={isSubMenu ? 'list' : 'grid'}
onDragStart={_this.props.onToolDragStart}
onDrop={_this.props.onToolReorder}>
{tools}
</ReactReorderable>
{endTools}
{!isSubMenu && <div id="add-tool-container" className="unlocked-container">
<ToggleAddNewTool installableTools={this.props.installableTools}/>
</div>}
</div>
);
},