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.


Reply via email to