$
var args = context.param(0, {});
var pageId = args["pageId"];
var maxDepth = parseInt(args["maxDepth"]) || 0;
var ulClass = args["ulClass"] || "";
var liClass = args["liClass"] || "";
var activeClass = args["activeClass"] || "active";
var showHiddenPages = args["showHiddenPages"] || false;
var startLevel = args["startLevel"] || 0;
var idContainsActive = args["idContainsActive"] || [];
var wrapper = args["wrapper"] || ["",""];
var showDescription = args["showDescription"] || false;
var openClass = args["openClass"] || "";
var ulAttribs = "";
if ( ulClass ){
ulAttribs = ' class="' + ulClass + '"';
}
var p = isNull(pageId) ? page : project.getPage(pageId);
// This shows parentpages starting with Level "StartLevel" and not only sub-pages of the current page.
// Typically used by submenues called from within default.html with the startLevel-Parameter
// e.g. in Contemporay Resp., Smart Resp and Textile Resp.
if ( !isNull(p) && startLevel !== 0 && p.level >= startLevel ){
while ( !isNull(p) && p.level >= startLevel && p.level > 1 ) {
p = project.getPage(p.parentPageId);
}
startLevel = 0; // prevents calling this block over and over again below, where we call the partial recursively
}
var childPages = isNull(p) ? page.projectFolder.pages : p.pages;
if ( childPages.count<=0 || !hasVisibleChildPages(p.id) && !showHiddenPages || maxDepth !== 0 && p.level > maxDepth-1 ){
return;
}
$>
<$= wrapper[0] $>
>
<$
for ( var i = 0; i < childPages.count; ++i ) {
var childPage = childPages.item(i);
var activeLinkClass = "";
var containsActiveClass = "";
if ( childPage.active && (childPage.visible || showHiddenPages) ) {
var liClassAddition = "";
var cssClass = "";
if ( hasVisibleChildPages(childPage.id) ){
cssClass += "haschilds ";
if ( liClass === "dropdown" ) {
liClassAddition = "-submenu" ;
}
}
cssClass += liClass+liClassAddition;
if ( childPage.id === page.id && activeClass !== "" ){
cssClass += " " + activeClass;
activeLinkClass = 'class="' + activeClass + '" ';
}
else if ( hasActiveChildPage(childPage.id) ){
cssClass += " " + activeClass + " " + openClass;
}
if ( childPage.id in oc(idContainsActive) ){
containsActiveClass = " hasactive";
}
cssClass = cssClass.replace(/^\s+|\s+$/gm,''); // like trim()
var liAttribs = "";
if ( cssClass || containsActiveClass ){
liAttribs = ' class = "' + cssClass + containsActiveClass + '"';
}
$>
- >
<$= system.partial("zppagelink-expanded.html", childPage.id) $>><$= childPage.name.replace(/& /g,'& ') $>
<$ if ( showDescription && childPage.description !== "" ) { $>
<$= childPage.description $>
<$ } $>
<$= system.partial("submenu.html", { "pageId":childPage.id, "maxDepth":maxDepth, "ulClass":ulClass, "liClass":liClass, "activeClass":activeClass, "showHiddenPages":showHiddenPages, "startLevel":startLevel, "idContainsActive":idContainsActive, "wrapper":wrapper, "showDescription":showDescription, "openClass":openClass} ) $>
<$
}
}
$>
<$= wrapper[1] $>
<$
function hasVisibleChildPages(pageId) {
var p = project.getPage(pageId);
if ( !isNull(p) ) {
var cps = p.pages;
for ( var i = 0; i < cps.count; ++i ) {
var cp = cps.item(i);
if ( cp.visible && cp.active ){
return true;
}
}
}
return false;
}
function hasActiveChildPage(pageId) {
var p = project.getPage(pageId);
var childPages = p.pages;
for ( var i = 0; i < childPages.count; ++i ) {
var childPage = childPages.item(i);
if ( childPage.id === page.id || hasActiveChildPage(childPage.id) ){
return true;
}
}
return false;
}
// from http://snook.ca/archives/javascript/testing_for_a_v
// can convert an array to an object, so we can use the JS "in" operator to search the array
function oc(a)
{
var o = {};
for( var i=0; i