Author: ornicar2
Date: 2010-01-21 00:39:48 +0100 (Thu, 21 Jan 2010)
New Revision: 26958
Modified:
plugins/diemPlugin/trunk/dmCorePlugin/lib/view/html/link/dmLinkTag.php
plugins/diemPlugin/trunk/dmCorePlugin/plugins/dmMenuPlugin/lib/dmMenu.php
plugins/diemPlugin/trunk/dmCorePlugin/plugins/dmMenuPlugin/test/unit/dmMenuTest.php
plugins/diemPlugin/trunk/dmCorePlugin/test/unit/dmFrontLinkTagTest.php
plugins/diemPlugin/trunk/dmCorePlugin/test/unit/helper/dmUnitTestHelper.php
plugins/diemPlugin/trunk/dmFrontPlugin/lib/view/html/link/tag/dmFrontLinkTagPage.php
Log:
[Diem]
- added dmLinkTag current_class and parent_class options
- made dmMenu assign link current_class and link parent_class to li tag
- added unit tests for link and menu services
Modified: plugins/diemPlugin/trunk/dmCorePlugin/lib/view/html/link/dmLinkTag.php
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/lib/view/html/link/dmLinkTag.php
2010-01-20 23:29:35 UTC (rev 26957)
+++ plugins/diemPlugin/trunk/dmCorePlugin/lib/view/html/link/dmLinkTag.php
2010-01-20 23:39:48 UTC (rev 26958)
@@ -10,11 +10,31 @@
{
parent::initialize($options);
- $this->addAttributeToRemove('text');
+ $this->addAttributeToRemove(array('text', 'current_class', 'parent_class',
'current_span'));
+
$this->addEmptyAttributeToRemove(array('target', 'title'));
$this->addClass('link');
}
+
+ public function getDefaultOptions()
+ {
+ return array_merge(parent::getDefaultOptions(), array(
+ 'current_class' => 'dm_current',
+ 'parent_class' => 'dm_parent',
+ 'current_span' => false
+ ));
+ }
+
+ public function isCurrent()
+ {
+ return false;
+ }
+
+ public function isParent()
+ {
+ return false;
+ }
/*
* @return string baseHref the href without query string
@@ -99,6 +119,14 @@
return $this->setOption('params', array_merge($this->get('params',
array()), $params));
}
+ /*
+ * Whether to display current links with span tag
+ */
+ public function currentSpan($bool)
+ {
+ return $this->setOption('current_span', (bool) $bool);
+ }
+
public function render()
{
return '<a'.$this->getHtmlAttributes().'>'.$this->renderText().'</a>';
Modified:
plugins/diemPlugin/trunk/dmCorePlugin/plugins/dmMenuPlugin/lib/dmMenu.php
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/plugins/dmMenuPlugin/lib/dmMenu.php
2010-01-20 23:29:35 UTC (rev 26957)
+++ plugins/diemPlugin/trunk/dmCorePlugin/plugins/dmMenuPlugin/lib/dmMenu.php
2010-01-20 23:39:48 UTC (rev 26958)
@@ -352,6 +352,7 @@
{
$classes = array();
$id = $this->getOption('show_id') ?
dmString::slugify($this->getRoot()->getName().'-'.$this->getName()) : null;
+ $link = $this->getLink();
if ($this->isFirst())
{
@@ -365,6 +366,14 @@
{
$classes[] = $this->getOption('li_class');
}
+ if($link && $link->isCurrent())
+ {
+ $classes[] = $link->getOption('current_class');
+ }
+ elseif($link && $link->isParent())
+ {
+ $classes[] = $link->getOption('parent_class');
+ }
return '<li'.($id ? ' id="'.$id.'"' : '').(!empty($classes) ? '
class="'.implode(' ', $classes).'"' : '').'>';
}
Modified:
plugins/diemPlugin/trunk/dmCorePlugin/plugins/dmMenuPlugin/test/unit/dmMenuTest.php
===================================================================
---
plugins/diemPlugin/trunk/dmCorePlugin/plugins/dmMenuPlugin/test/unit/dmMenuTest.php
2010-01-20 23:29:35 UTC (rev 26957)
+++
plugins/diemPlugin/trunk/dmCorePlugin/plugins/dmMenuPlugin/test/unit/dmMenuTest.php
2010-01-20 23:39:48 UTC (rev 26958)
@@ -8,7 +8,7 @@
$helper = new dmUnitTestHelper();
$helper->boot('front');
-$t = new lime_test(44);
+$t = new lime_test(46);
dm::loadHelpers(array('Dm', 'I18N'));
@@ -159,4 +159,22 @@
$t->is($sitemap->getFirstChild()->renderLink(), (string)£link(), 'Sitemap
first child is Home');
-$t->like((string)$sitemap, '|^'.preg_quote('<ul><li class="first last"><a
class="link" href="', '|').'.*|', 'Sitemap html is valid');
\ No newline at end of file
+$t->like((string)$sitemap, '|^'.preg_quote('<ul><li class="first last"><a
class="link" href="', '|').'.*|', 'Sitemap html is valid');
+
+$t->comment('Test current page');
+
+$homePage = dmDb::table('DmPage')->getTree()->fetchRoot();
+
+$helper->getContext()->setPage($homePage);
+
+$menu = $helper->get('menu')->addChild('Home', '@homepage')->end();
+$html = £('ul', £('li.first.last.dm_current',
£link()->text($helper->get('i18n')->__('Home'))));
+
+$t->is($menu->render(), $html, 'Current li has the dm_current class');
+
+$helper->getContext()->setPage(dmDb::table('DmPage')->findOneByModuleAndAction('main',
'login'));
+
+$menu = $helper->get('menu')->addChild('Home', '@homepage')->end();
+$html = £('ul', £('li.first.last.dm_parent',
£link()->text($helper->get('i18n')->__('Home'))));
+
+$t->is($menu->render(), $html, 'Parent li has the dm_parent class');
\ No newline at end of file
Modified: plugins/diemPlugin/trunk/dmCorePlugin/test/unit/dmFrontLinkTagTest.php
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/test/unit/dmFrontLinkTagTest.php
2010-01-20 23:29:35 UTC (rev 26957)
+++ plugins/diemPlugin/trunk/dmCorePlugin/test/unit/dmFrontLinkTagTest.php
2010-01-20 23:39:48 UTC (rev 26958)
@@ -4,16 +4,7 @@
$helper = new dmUnitTestHelper();
$helper->boot('front');
-if(sfConfig::get('sf_app') == 'front' &&
class_exists('dmFrontPluginConfiguration', false))
-{
- $t = new lime_test();
-}
-else
-{
- $t = new lime_test(1);
- $t->pass('Works only on front app');
- return;
-}
+$t = new lime_test(35);
sfConfig::set('sf_no_script_name', false);
@@ -29,8 +20,7 @@
$t->diag('link current_span is false');
$home = dmDb::table('DmPage')->getTree()->fetchRoot();
-$currentPage = $home;
-$helper->get('context')->setPage($currentPage);
+$helper->get('context')->setPage($home);
$t->diag($home->name.' is the current page');
$testPage = dmDb::create('DmPage', array(
@@ -49,6 +39,8 @@
$t->like(£link()->render(), '|<a class="link dm_current|', '£link() has class
dm_current');
+$t->like(£link()->set('current_class', 'my_current')->render(), '|<a
class="link my_current|', '£link() has class my_current');
+
$t->is((string)£link($home), (string)£link(), '£link($home) is £link()');
$t->is((string)£link('@homepage'), (string)£link($home), '£link("@homepage")
is £link()');
@@ -91,8 +83,17 @@
$t->is((string)$helper->get('helper')->£link($testPage), $testPageLink, 'with
helper service, page link is '.$testPageLink);
$helper->get('context')->setPage($testPage);
+
$t->diag($testPage->name.' is the current page');
+$t->like(£link($testPage)->render(), '|<a class="link dm_current|',
'£link($testPage) has class dm_current');
+
+$t->like(£link($testPage)->set('current_class', 'my_current')->render(), '|<a
class="link my_current|', '£link($testPage) has class my_current');
+
+$t->like(£link()->render(), '|<a class="link dm_parent|', '£link() has class
dm_parent');
+
+$t->like(£link()->set('parent_class', 'my_parent')->render(), '|<a class="link
my_parent|', '£link() has class my_parent');
+
$testPageLink = sprintf('<a class="%s" href="%s">%s</a>', 'link dm_current',
$scriptName.'/'.$testPage->slug, $testPage->name);
$t->is((string)£link($testPage), $testPageLink, 'page link is '.$testPageLink);
Modified:
plugins/diemPlugin/trunk/dmCorePlugin/test/unit/helper/dmUnitTestHelper.php
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/test/unit/helper/dmUnitTestHelper.php
2010-01-20 23:29:35 UTC (rev 26957)
+++ plugins/diemPlugin/trunk/dmCorePlugin/test/unit/helper/dmUnitTestHelper.php
2010-01-20 23:39:48 UTC (rev 26958)
@@ -159,6 +159,11 @@
return $this->context->getServiceContainer();
}
+ public function getContext()
+ {
+ return $this->context;
+ }
+
public function getModule($moduleKey)
{
return $this->moduleManager->getModuleOrNull($moduleKey);
Modified:
plugins/diemPlugin/trunk/dmFrontPlugin/lib/view/html/link/tag/dmFrontLinkTagPage.php
===================================================================
---
plugins/diemPlugin/trunk/dmFrontPlugin/lib/view/html/link/tag/dmFrontLinkTagPage.php
2010-01-20 23:29:35 UTC (rev 26957)
+++
plugins/diemPlugin/trunk/dmFrontPlugin/lib/view/html/link/tag/dmFrontLinkTagPage.php
2010-01-20 23:39:48 UTC (rev 26958)
@@ -33,13 +33,18 @@
$this->title($this->page->_getI18n('title'));
}
- $this->addAttributeToRemove(array('current_span', 'use_page_title'));
+ $this->addAttributeToRemove(array('use_page_title'));
}
-
- public function currentSpan($bool)
+
+ public function isCurrent()
{
- return $this->setOption('current_span', (bool) $bool);
+ return $this->currentPage && $this->currentPage->get('id') ===
$this->page->get('id');
}
+
+ public function isParent()
+ {
+ return $this->currentPage &&
$this->currentPage->getNode()->isDescendantOf($this->page);
+ }
protected function getBaseHref()
{
@@ -99,23 +104,22 @@
$attributes['class'][] = 'dm_inactive';
$attributes['tag'] = 'span';
}
+
// current page
- elseif($this->currentPage)
+ if($this->isCurrent())
{
- if ($this->currentPage->get('id') === $this->page->get('id'))
- {
- $attributes['class'][] = 'dm_current';
+ $attributes['class'][] = $attributes['current_class'];
- if($attributes['current_span'])
- {
- $attributes['tag'] = 'span';
- }
- }
- elseif($this->currentPage->getNode()->isDescendantOf($this->page))
+ if($attributes['current_span'])
{
- $attributes['class'][] = 'dm_parent';
+ $attributes['tag'] = 'span';
}
}
+ // parent page
+ elseif($this->isParent())
+ {
+ $attributes['class'][] = $attributes['parent_class'];
+ }
}
return $attributes;
--
You received this message because you are subscribed to the Google Groups
"symfony SVN" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/symfony-svn?hl=en.