1
0
mirror of https://github.com/e107inc/e107.git synced 2025-07-31 03:40:37 +02:00

Fixes a bug in drop-down navigation containing HTML.

This commit is contained in:
Cameron
2021-01-17 20:30:05 -08:00
parent 299c3717a7
commit bf17a010f5
3 changed files with 45 additions and 5 deletions

View File

@@ -15,6 +15,7 @@ require_once(__DIR__.'/navigation_shortcodes_legacy.php');
public $active;
public $depth = 0;
public $navClass;
private $activeSubFound = false;
/**
* As set by {NAVIGATION: class=xxxx}
@@ -286,17 +287,17 @@ require_once(__DIR__.'/navigation_shortcodes_legacy.php');
if(is_string($this->var['link_sub'])) // html override option.
{
// e107::getDebug()->log($this->var);
return $this->var['link_sub'];
}
$this->depth++;
// Assume it's an array.
$startTemplate = !empty($this->var['link_sub'][0]['link_sub']) && isset($this->template['submenu_lowerstart']) ? $this->template['submenu_lowerstart'] : $this->template['submenu_start'];
$endTemplate = !empty($this->var['link_sub'][0]['link_sub']) && isset($this->template['submenu_lowerstart']) ? $this->template['submenu_lowerend'] : $this->template['submenu_end'];
$startTemplate = is_array($this->var['link_sub']) && !empty($this->var['link_sub'][0]['link_sub']) && isset($this->template['submenu_lowerstart']) ? $this->template['submenu_lowerstart'] : $this->template['submenu_start'];
$endTemplate = is_array($this->var['link_sub']) && !empty($this->var['link_sub'][0]['link_sub']) && isset($this->template['submenu_lowerstart']) ? $this->template['submenu_lowerend'] : $this->template['submenu_end'];

View File

@@ -1660,7 +1660,7 @@ i.e-cat_users-32{ background-position: -555px 0; width: 32px; height: 32px; }
$active = ($this->isActive($_data, $this->activeMainFound)) ? "_active" : "";
$sc->setDepth(0);
$sc->setVars($_data); // isActive is allowed to alter data
$itemTmpl = is_array($_data['link_sub']) && count($_data['link_sub']) > 0 ? $template['item_submenu'.$active] : $template['item'.$active];
$itemTmpl = !empty($_data['link_sub']) ? $template['item_submenu'.$active] : $template['item'.$active];
$ret .= e107::getParser()->parseTemplate($itemTmpl, true, $sc);
$sc->active = ($active) ? true : false;
if($sc->active)

View File

@@ -316,7 +316,7 @@ class e_parse_shortcodeTest extends \Codeception\Test\Unit
'link_parent' => '0',
'link_open' => '0',
'link_class' => '0',
'link_function' => 'news::last_ten',
'link_function' => 'page::bookNav',
'link_sefurl' => 'index',
'link_owner' => 'news'
);
@@ -325,6 +325,45 @@ class e_parse_shortcodeTest extends \Codeception\Test\Unit
$this->processShortcodeMethods($sc);
// Test sub links with deep level array.
$template = e107::getCoreTemplate('navigation', 'main');
$sc->template = $template;
$outArray = array();
$data = array($vars);
$ret = e107::getNav()->compile($data, $outArray);
$sc->setVars($ret[0]);
$actual = e107::getParser()->parseTemplate('{LINK_SUB}', true, $sc);
$this->assertStringContainsString('<a href="https://localhost/e107/page.php?bk=1">General</a>', $actual);
$this->assertStringContainsString('<li role="menuitem" class="dropdown-submenu lower">', $actual);
$this->assertStringContainsString('<li role="menuitem" class="link-depth-3">', $actual);
// test sublink with HTML.
$vars['link_function'] = 'theme::sc_bootstrap_megamenu_example';
$outArray = array();
$data = array($vars);
$ret = e107::getNav()->compile($data, $outArray);
// HTML in {LINK_SUB}
$sc->setVars($ret[0]);
$actual = e107::getParser()->parseTemplate('{LINK_SUB}', false, $sc);
$this->assertStringContainsString('<div class="dropdown-menu">', $actual);
// HTML in {NAV_LINK_SUB}
$actual = e107::getParser()->parseTemplate('{NAV_LINK_SUB}', false, $sc);
$this->assertStringContainsString('<div class="dropdown-menu">', $actual);
// test HTML with core template using e107::getNav()->render();
$result = e107::getNav()->render($ret, $template);
$this->assertStringContainsString('<li class="nav-item dropdown theme-sc-bootstrap-megamenu-example">', $result);
$this->assertStringContainsString('<div class="dropdown-menu"><div class="container mega-menu-example">', $result);
}