Netbrain has submitted this change and it was merged.

Change subject: minimized, css styling and made menu items behave as buttons 
with the @ prefix
......................................................................


minimized, css styling and made menu items behave as buttons with the @ prefix

* Changed css styling, to better cope with small menu widths.
* Added minimize parameter (true/false) which when enabled shows only
  a small square with the text [show] to open up the menu
* Added a new menu item text prefix @, which will make the text inserted
  displayed as a link and on click will show the menu's subtree
* added style attribute which behaves the same way as
  any html tag's style attribute.
example:
<sidebarmenu style="width: 100px;" minimized="true">
  MenuItem1
  +*SubMenuItem1
  -**@SubMenuItem1Of1
</sidebarmenu>

Change-Id: Ifae83a51e6a199b08480cb6ade6a94ac281345dc
---
M SideBarMenu.hooks.php
M SideBarMenu.php
M css/ext.sidebarmenu.css
M includes/MenuItem.php
M includes/MenuParser.php
M js/ext.sidebarmenu.js
M test/MenuItemTest.php
M test/MenuParserTest.php
8 files changed, 142 insertions(+), 56 deletions(-)

Approvals:
  Netbrain: Verified; Looks good to me, approved



diff --git a/SideBarMenu.hooks.php b/SideBarMenu.hooks.php
index 96784e5..3516b8e 100644
--- a/SideBarMenu.hooks.php
+++ b/SideBarMenu.hooks.php
@@ -13,16 +13,17 @@
                //default settings
                $config = self::getTagConfig($args);
 
-               $output = '<div 
class="sidebar-menu-container'.(is_null($config[SBM_CLASS])? '' : ' 
'.$config[SBM_CLASS]).'">';
+               $output = '<div 
class="sidebar-menu-container'.(is_null($config[SBM_CLASS])? '' : ' 
'.$config[SBM_CLASS]).'"'.(is_null($config[SBM_STYLE])? '' : ' 
style="'.$config[SBM_STYLE].'"').'>';
                try {
                        $menuParser = new MenuParser($config);
-                       $output .= 
$parser->recursiveTagParse($menuParser->getMenuTree($input)->toHTML(), $frame);
+                       $menuHTML = $menuParser->getMenuTree($input)->toHTML();
+                       $output .= $parser->recursiveTagParse($menuHTML, 
$frame);
                } catch (Exception $x) {
                        wfDebug("An error occured during parsing of: '$input' 
caught exception: $x");
-                       return wfMsg('sidebarmenu-parser-input-error', 
$x->getMessage());
+                       return wfMessage('sidebarmenu-parser-input-error', 
$x->getMessage())->text();
                }
                if ($config[SBM_EDIT_LINK]) {
-                       $output .= Linker::link($frame->getTitle(), 
wfMsg('sidebarmenu-edit'), array('title' => wfMsg('sidebarmenu-edit'), 'class' 
=> 'sidebar-menu-edit-link'), array('action' => 'edit'));
+                       $output .= Linker::link($frame->getTitle(), 
wfMessage('sidebarmenu-edit')->escaped(), array('title' => 
wfMessage('sidebarmenu-edit')->escaped(), 'class' => 'sidebar-menu-edit-link'), 
array('action' => 'edit'));
                }
                $output .= '</div>';
 
@@ -50,37 +51,25 @@
                return $js;
        }
 
-       private static function getAsJSEncodedString($s) {
-               return "'$s'";
-       }
-
        private static function getJSConfig($config) {
                //javascript config output
-               $jsOutput = Html::inlineScript("
-            var sidebarmenu = {
-                config: {
-                    controls: {
-                        show: " . 
self::getAsJSEncodedString($config[SBM_CONTROLS_SHOW]) . ",
-                        hide: " . 
self::getAsJSEncodedString($config[SBM_CONTROLS_HIDE]) . "
-                    },
-                    js: {
-                        animate: " . (filter_var($config[SBM_JS_ANIMATE], 
FILTER_VALIDATE_BOOLEAN) ? 'true' : 'false') . "
-                    }
-                }
-            };
-        ");
+               $jsOutput = 'var sidebarmenu = '.json_encode($config);
+               $jsOutput = Html::inlineScript($jsOutput);
                //minify js to prevent <p> tags to be rendered
-               return self::minifyJavascript($jsOutput);
+               $jsOutput = self::minifyJavascript($jsOutput);
+               return $jsOutput;
        }
 
        private static function getTagConfig($args) {
                global $wgSideBarMenuConfig;
                $config[SBM_EXPANDED] = array_key_exists(SBM_EXPANDED, $args) ? 
filter_var($args[SBM_EXPANDED], FILTER_VALIDATE_BOOLEAN) : 
$wgSideBarMenuConfig[SBM_EXPANDED];
-               $config[SBM_CONTROLS_SHOW] = 
array_key_exists(SBM_CONTROLS_SHOW, $args) ? $args[SBM_CONTROLS_SHOW] : 
(isset($wgSideBarMenuConfig[SBM_CONTROLS_SHOW]) ? 
$wgSideBarMenuConfig[SBM_CONTROLS_SHOW] : '[' . wfMsg('showtoc') . ']');
-               $config[SBM_CONTROLS_HIDE] = 
array_key_exists(SBM_CONTROLS_HIDE, $args) ? $args[SBM_CONTROLS_HIDE] : 
(isset($wgSideBarMenuConfig[SBM_CONTROLS_HIDE]) ? 
$wgSideBarMenuConfig[SBM_CONTROLS_HIDE] : '[' . wfMsg('hidetoc') . ']');
-               $config[SBM_JS_ANIMATE] = array_key_exists(SBM_JS_ANIMATE, 
$args) ? $args[SBM_JS_ANIMATE] : $wgSideBarMenuConfig[SBM_JS_ANIMATE];
+               $config[SBM_CONTROLS_SHOW] = 
array_key_exists(SBM_CONTROLS_SHOW, $args) ? $args[SBM_CONTROLS_SHOW] : 
(isset($wgSideBarMenuConfig[SBM_CONTROLS_SHOW]) ? 
$wgSideBarMenuConfig[SBM_CONTROLS_SHOW] : '[' . wfMessage('showtoc')->escaped() 
. ']');
+               $config[SBM_CONTROLS_HIDE] = 
array_key_exists(SBM_CONTROLS_HIDE, $args) ? $args[SBM_CONTROLS_HIDE] : 
(isset($wgSideBarMenuConfig[SBM_CONTROLS_HIDE]) ? 
$wgSideBarMenuConfig[SBM_CONTROLS_HIDE] : '[' . wfMessage('hidetoc')->escaped() 
. ']');
+               $config[SBM_JS_ANIMATE] =  array_key_exists(SBM_JS_ANIMATE, 
$args) ? filter_var($args[SBM_JS_ANIMATE], FILTER_VALIDATE_BOOLEAN) : 
$wgSideBarMenuConfig[SBM_JS_ANIMATE];
                $config[SBM_EDIT_LINK] = array_key_exists(SBM_EDIT_LINK, $args) 
? filter_var($args[SBM_EDIT_LINK], FILTER_VALIDATE_BOOLEAN) : 
$wgSideBarMenuConfig[SBM_EDIT_LINK];
                $config[SBM_CLASS] =  array_key_exists(SBM_CLASS, $args) ? 
$args[SBM_CLASS] : null;
+               $config[SBM_STYLE] =  array_key_exists(SBM_STYLE, $args) ? 
$args[SBM_STYLE] : null;
+               $config[SBM_MINIMIZED] = array_key_exists(SBM_MINIMIZED, $args) 
? filter_var($args[SBM_MINIMIZED], FILTER_VALIDATE_BOOLEAN) : 
$wgSideBarMenuConfig[SBM_MINIMIZED];
                return $config;
        }
 }
diff --git a/SideBarMenu.php b/SideBarMenu.php
index e2ee578..31f74dd 100644
--- a/SideBarMenu.php
+++ b/SideBarMenu.php
@@ -11,7 +11,8 @@
 const SBM_JS_ANIMATE = 'js.animate';
 const SBM_EDIT_LINK = 'editlink';
 const SBM_CLASS = 'class';
-
+const SBM_STYLE = 'style';
+const SBM_MINIMIZED = 'minimized';
 
 //default settings
 $wgSideBarMenuConfig[SBM_CONTROLS_SHOW] = null;
@@ -19,6 +20,8 @@
 $wgSideBarMenuConfig[SBM_JS_ANIMATE] = true;
 $wgSideBarMenuConfig[SBM_EXPANDED] = true;
 $wgSideBarMenuConfig[SBM_EDIT_LINK] = true;
+$wgSideBarMenuConfig[SBM_MINIMIZED] = false;
+
 
 $wgExtensionCredits['parserhook'][] = array(
        'path' => __FILE__,
diff --git a/css/ext.sidebarmenu.css b/css/ext.sidebarmenu.css
index b769977..85e3018 100644
--- a/css/ext.sidebarmenu.css
+++ b/css/ext.sidebarmenu.css
@@ -1,10 +1,8 @@
 /* default SideBarMenu extension styling */
 
 .sidebar-menu-container {
-    padding: 5px;
     float: left;
     clear: left;
-    margin: 5px;
 }
 
 .sidebar-menu-item-collapsed  .sidebar-menu {
@@ -50,10 +48,17 @@
 
 .sidebar-menu-item-text-container {
     position: relative;
+    padding-right: 45px !important;
+}
+
+.sidebar-menu-minimized .sidebar-menu-item-text-container {
+    padding-right: 0px !important;
 }
 
 .sidebar-menu-item-controls {
-    float: right;
+    position: absolute;
+    right: 0px;
+    top: 0px;
     color: #0645AD;
     cursor: pointer;
     min-width: 45px;
@@ -67,8 +72,29 @@
     font-size: smaller;
 }
 
+.sidebar-menu-item-text {
+    overflow:hidden;
+    width: 100%;
+}
+
 .sidebar-menu-item-text-1,.sidebar-menu-item-text-2 {
     font-weight: bold;
 }
 
 
+.sidebar-menu-minimized {
+    width: 45px !important;
+}
+
+.sidebar-menu-minimized .sidebar-menu-item-text {
+    visibility: hidden;
+}
+
+.sidebar-menu-item-last .sidebar-menu-item-text-container {
+    padding-right: 0px !important;
+}
+
+.sidebar-menu-item-1 > .sidebar-menu-item-text-container > 
.sidebar-menu-item-controls {
+    right: 3px;
+    top: 3px;
+}
\ No newline at end of file
diff --git a/includes/MenuItem.php b/includes/MenuItem.php
index cabd2d9..c441525 100644
--- a/includes/MenuItem.php
+++ b/includes/MenuItem.php
@@ -8,6 +8,7 @@
        private $customCSSStyle;
        private $customCSSClasses;
        private $config;
+       private $expandAction = false;
 
        function __construct($config) {
                $this->config = $config;
@@ -17,7 +18,7 @@
                if (is_null($expanded) || $expanded === true || $expanded === 
false) {
                        $this->expanded = $expanded;
                } else {
-                       throw new 
InvalidArgumentException(wfMsg('sidebarmenu-parser-menuitem-expanded-invalid'));
+                       throw new 
InvalidArgumentException(wfMessage('sidebarmenu-parser-menuitem-expanded-invalid')->text());
                }
        }
 
@@ -31,6 +32,14 @@
                }else{
                        return $this->config[SBM_EXPANDED];
                }
+       }
+
+       public function setExpandAction($expandAction) {
+               $this->expandAction = $expandAction;
+       }
+
+       public function isExpandAction() {
+               return $this->expandAction;
        }
 
        public function setText($link) {
@@ -87,6 +96,11 @@
                        $itemClasses[] = 'sidebar-menu-item';
                        $itemClasses[] = 'sidebar-menu-item-' . 
$this->getLevel();
 
+                       if(!$this->hasChildren()){
+                               //to distinguish if this is the last item in 
the menu tree (eg. a leaf)
+                               $itemClasses[] = 'sidebar-menu-item-last';
+                       }
+
                        if ($this->hasChildren()) {
                                if($this->isExpandedSpecified()){
                                        $itemClasses[] = $this->isExpanded() ? 
'sidebar-menu-item-expanded' : 'sidebar-menu-item-collapsed';
@@ -101,6 +115,9 @@
 
                        $textClasses[] = 'sidebar-menu-item-text';
                        $textClasses[] = 'sidebar-menu-item-text-' . 
$this->getLevel();
+                       if($this->isExpandAction()){
+                               $textClasses[] = 
'sidebar-menu-item-expand-action';
+                       }
 
                        $output .= "<li class=\"" . join(' ', $itemClasses) . 
"\"" . ($this->hasCustomCSSStyle() ? " style=\"{$this->getCustomCSSStyle()}\"" 
: '') . ">";
                        $output .= "<div 
class=\"sidebar-menu-item-text-container\">";
diff --git a/includes/MenuParser.php b/includes/MenuParser.php
index e86127c..b9d01ac 100644
--- a/includes/MenuParser.php
+++ b/includes/MenuParser.php
@@ -31,7 +31,7 @@
                if (preg_match("/\[\[.*\]\]/", $line) == 1) {
                        return preg_filter("/\+|\-?\**(\[\[.*\]\])\|?.*/", 
"$1", $line);
                } else {
-                       return preg_filter("/\+|\-?\**([^\|]*)\|?.*/", "$1", 
$line);
+                       return preg_filter("/\+|\-?\**\@?([^\|]*)\|?.*/", "$1", 
$line);
                }
        }
 
@@ -41,6 +41,13 @@
 
        public function getClassParameter($line) {
                return preg_filter("/.*?\|class=(.*)\|?/", "$1", $line);
+       }
+
+       public function getExpandActionParameter($line){
+               if (preg_match("/\+|\-?\**\@.*/", $line) == 1) {
+                       return true;
+               }
+               return false;
        }
 
 
@@ -65,6 +72,7 @@
                        $menuItem->setText($this->getTextParameter($line));
                        
$menuItem->setCustomCSSStyle($this->getStyleParameter($line));
                        
$menuItem->setCustomCSSClasses($this->getClassParameter($line));
+                       
$menuItem->setExpandAction($this->getExpandActionParameter($line));
                        return $menuItem;
                } else {
                        throw new InvalidArgumentException();
@@ -91,7 +99,7 @@
                                                $levelArray[$level][] = $line;
                                        } else {
                                                //syntax error
-                                               throw new 
InvalidArgumentException(wfMsg('sidebarmenu-parser-syntax-error', $line));
+                                               throw new 
InvalidArgumentException(wfMessage('sidebarmenu-parser-syntax-error', 
$line)->text());
                                        }
                                }
                        }
@@ -122,11 +130,5 @@
                return trim($data, "\n ");
        }
 
-       private static function removeLineBreaksFromStartOfString($data) {
-               while (self::startsWith($data, "\n")) {
-                       $data = substr($data, 1);
-               }
-               return $data;
-       }
 
 }
diff --git a/js/ext.sidebarmenu.js b/js/ext.sidebarmenu.js
index 522919e..85fff0e 100644
--- a/js/ext.sidebarmenu.js
+++ b/js/ext.sidebarmenu.js
@@ -1,8 +1,24 @@
 $(document).ready(function () {
+
+    //IE doesn't support const, use var instead :(
+    var SBM_EXPANDED = 'parser.menuitem.expanded';
+    var SBM_CONTROLS_SHOW = 'controls.show';
+    var SBM_CONTROLS_HIDE = 'controls.hide';
+    var SBM_JS_ANIMATE = 'js.animate';
+    var SBM_EDIT_LINK = 'editlink';
+    var SBM_CLASS = 'class';
+    var SBM_STYLE = 'style';
+    var SBM_MINIMIZED = 'minimized';
+
     if (typeof(sidebarmenu) !== 'undefined') {
-        var showText = sidebarmenu.config.controls.show;
-        var hideText = sidebarmenu.config.controls.hide;
-        var useAnimations = sidebarmenu.config.js.animate;
+        var showText = sidebarmenu[SBM_CONTROLS_SHOW];
+        var hideText = sidebarmenu[SBM_CONTROLS_HIDE];
+        var useAnimations = sidebarmenu[SBM_JS_ANIMATE];
+        var minimized = sidebarmenu[SBM_MINIMIZED];
+
+        if(minimized){
+            $('.sidebar-menu-container').addClass('sidebar-menu-minimized');
+        }
 
         function initControls() {
             
$('.sidebar-menu-item-collapsed').children('.sidebar-menu-item-text-container').children('.sidebar-menu-item-controls').append(showText);
@@ -17,13 +33,20 @@
 
         //initialize controls
         initControls();
-        $('.sidebar-menu-item-controls').click(function () {
-            var currentText = $(this).text();
+
+        //initialize click actions
+        
$('.sidebar-menu-item-controls,.sidebar-menu-item-expand-action').click(function
 () {
+            if(minimized && $(this)[0] == 
$('.sidebar-menu-item-controls:first')[0]){
+                
$('.sidebar-menu-container').toggleClass('sidebar-menu-minimized');
+            }
+
+            var controls = $(this).is('.sidebar-menu-item-controls') ? $(this) 
: $(this).next();
+            var currentText = controls.text();
 
             if (currentText == showText) {
-                $(this).text(hideText);
+                controls.text(hideText);
             } else if (currentText == hideText) {
-                $(this).text(showText);
+                controls.text(showText);
             }
 
             if (useAnimations) {
@@ -39,7 +62,9 @@
             }
         });
 
-    } else {
-        $('.sidebar-menu-container').prepend(mw.msg('sidebar-js-init-error'));
+        //must do this in javascript as serverside solution would replace this 
<a href> link with escaped html characters
+        $('.sidebar-menu-item-expand-action').each(function(){
+            $(this).html('<a href="#" onclick="return 
false;">'+$(this).html()+'</a>');
+        })
     }
 });
\ No newline at end of file
diff --git a/test/MenuItemTest.php b/test/MenuItemTest.php
index 3d92083..656537d 100644
--- a/test/MenuItemTest.php
+++ b/test/MenuItemTest.php
@@ -1,10 +1,13 @@
 <?php
-
+/**
+ * @group SideBarMenu
+ */
 class MenuItemTest extends MediaWikiTestCase {
        private $menuItem;
        private $config;
 
        protected function setUp() {
+               parent::setUp();
                $this->config = array(SBM_EXPANDED => false);
                $this->menuItem = new MenuItem($this->config);
        }
@@ -69,7 +72,7 @@
                $menuItemChild->setText("MenuItem1");
                $this->menuItem->addChild($menuItemChild);
                $html = $this->menuItem->toHTML();
-               $this->assertEquals('<ul class="sidebar-menu 
sidebar-menu-0"><li class="sidebar-menu-item sidebar-menu-item-1"><div 
class="sidebar-menu-item-text-container"><span class="sidebar-menu-item-text 
sidebar-menu-item-text-1">MenuItem1</span></div></li></ul>', $html);
+               $this->assertEquals('<ul class="sidebar-menu 
sidebar-menu-0"><li class="sidebar-menu-item sidebar-menu-item-1 
sidebar-menu-item-last"><div class="sidebar-menu-item-text-container"><span 
class="sidebar-menu-item-text 
sidebar-menu-item-text-1">MenuItem1</span></div></li></ul>', $html);
        }
 
        public function testToHTMLOnSeveralMenuItems() {
@@ -82,7 +85,7 @@
                $this->menuItem->addChild($menuItemChild2);
 
                $html = $this->menuItem->toHTML();
-               $this->assertEquals('<ul class="sidebar-menu 
sidebar-menu-0"><li class="sidebar-menu-item sidebar-menu-item-1"><div 
class="sidebar-menu-item-text-container"><span class="sidebar-menu-item-text 
sidebar-menu-item-text-1">MenuItem1</span></div></li><li 
class="sidebar-menu-item sidebar-menu-item-1"><div 
class="sidebar-menu-item-text-container"><span class="sidebar-menu-item-text 
sidebar-menu-item-text-1">MenuItem2</span></div></li></ul>', $html);
+               $this->assertEquals('<ul class="sidebar-menu 
sidebar-menu-0"><li class="sidebar-menu-item sidebar-menu-item-1 
sidebar-menu-item-last"><div class="sidebar-menu-item-text-container"><span 
class="sidebar-menu-item-text 
sidebar-menu-item-text-1">MenuItem1</span></div></li><li 
class="sidebar-menu-item sidebar-menu-item-1 sidebar-menu-item-last"><div 
class="sidebar-menu-item-text-container"><span class="sidebar-menu-item-text 
sidebar-menu-item-text-1">MenuItem2</span></div></li></ul>', $html);
        }
 
        public function testToHTMLOnSeveralMenuItemsWithSublevels() {
@@ -99,7 +102,7 @@
                $subLevel1->setParent($menuItemChild2);
 
                $html = $this->menuItem->toHTML();
-               $this->assertEquals('<ul class="sidebar-menu 
sidebar-menu-0"><li class="sidebar-menu-item sidebar-menu-item-1"><div 
class="sidebar-menu-item-text-container"><span class="sidebar-menu-item-text 
sidebar-menu-item-text-1">MenuItem1</span></div></li><li 
class="sidebar-menu-item sidebar-menu-item-1 sidebar-menu-item-collapsed"><div 
class="sidebar-menu-item-text-container"><span class="sidebar-menu-item-text 
sidebar-menu-item-text-1">MenuItem2</span></div><ul class="sidebar-menu 
sidebar-menu-1"><li class="sidebar-menu-item sidebar-menu-item-2"><div 
class="sidebar-menu-item-text-container"><span class="sidebar-menu-item-text 
sidebar-menu-item-text-2">SubMenuItem1</span></div></li></ul></li></ul>', 
$html);
+               $this->assertEquals('<ul class="sidebar-menu 
sidebar-menu-0"><li class="sidebar-menu-item sidebar-menu-item-1 
sidebar-menu-item-last"><div class="sidebar-menu-item-text-container"><span 
class="sidebar-menu-item-text 
sidebar-menu-item-text-1">MenuItem1</span></div></li><li 
class="sidebar-menu-item sidebar-menu-item-1 sidebar-menu-item-collapsed"><div 
class="sidebar-menu-item-text-container"><span class="sidebar-menu-item-text 
sidebar-menu-item-text-1">MenuItem2</span></div><ul class="sidebar-menu 
sidebar-menu-1"><li class="sidebar-menu-item sidebar-menu-item-2 
sidebar-menu-item-last"><div class="sidebar-menu-item-text-container"><span 
class="sidebar-menu-item-text 
sidebar-menu-item-text-2">SubMenuItem1</span></div></li></ul></li></ul>', 
$html);
        }
 
        public function 
testToHTMLOnSeveralMenuItemsWithSublevelsWhereExpandedIsTrue() {
@@ -114,7 +117,7 @@
                $subLevel1->setParent($menuItemChild);
 
                $html = $this->menuItem->toHTML();
-               $this->assertEquals('<ul class="sidebar-menu 
sidebar-menu-0"><li class="sidebar-menu-item sidebar-menu-item-1 
sidebar-menu-item-expanded"><div class="sidebar-menu-item-text-container"><span 
class="sidebar-menu-item-text sidebar-menu-item-text-1">MenuItem</span><span 
class="sidebar-menu-item-controls"></span></div><ul class="sidebar-menu 
sidebar-menu-1"><li class="sidebar-menu-item sidebar-menu-item-2"><div 
class="sidebar-menu-item-text-container"><span class="sidebar-menu-item-text 
sidebar-menu-item-text-2">SubMenuItem1</span></div></li></ul></li></ul>', 
$html);
+               $this->assertEquals('<ul class="sidebar-menu 
sidebar-menu-0"><li class="sidebar-menu-item sidebar-menu-item-1 
sidebar-menu-item-expanded"><div class="sidebar-menu-item-text-container"><span 
class="sidebar-menu-item-text sidebar-menu-item-text-1">MenuItem</span><span 
class="sidebar-menu-item-controls"></span></div><ul class="sidebar-menu 
sidebar-menu-1"><li class="sidebar-menu-item sidebar-menu-item-2 
sidebar-menu-item-last"><div class="sidebar-menu-item-text-container"><span 
class="sidebar-menu-item-text 
sidebar-menu-item-text-2">SubMenuItem1</span></div></li></ul></li></ul>', 
$html);
        }
 
        public function 
testToHTMLOnSeveralMenuItemsWithSublevelsWhereExpandedIsFalse() {
@@ -129,7 +132,7 @@
                $subLevel1->setParent($menuItemChild);
 
                $html = $this->menuItem->toHTML();
-               $this->assertEquals('<ul class="sidebar-menu 
sidebar-menu-0"><li class="sidebar-menu-item sidebar-menu-item-1 
sidebar-menu-item-collapsed"><div 
class="sidebar-menu-item-text-container"><span class="sidebar-menu-item-text 
sidebar-menu-item-text-1">MenuItem</span><span 
class="sidebar-menu-item-controls"></span></div><ul class="sidebar-menu 
sidebar-menu-1"><li class="sidebar-menu-item sidebar-menu-item-2"><div 
class="sidebar-menu-item-text-container"><span class="sidebar-menu-item-text 
sidebar-menu-item-text-2">SubMenuItem1</span></div></li></ul></li></ul>', 
$html);
+               $this->assertEquals('<ul class="sidebar-menu 
sidebar-menu-0"><li class="sidebar-menu-item sidebar-menu-item-1 
sidebar-menu-item-collapsed"><div 
class="sidebar-menu-item-text-container"><span class="sidebar-menu-item-text 
sidebar-menu-item-text-1">MenuItem</span><span 
class="sidebar-menu-item-controls"></span></div><ul class="sidebar-menu 
sidebar-menu-1"><li class="sidebar-menu-item sidebar-menu-item-2 
sidebar-menu-item-last"><div class="sidebar-menu-item-text-container"><span 
class="sidebar-menu-item-text 
sidebar-menu-item-text-2">SubMenuItem1</span></div></li></ul></li></ul>', 
$html);
        }
 
 
@@ -139,7 +142,7 @@
                $menuItemChild->setCustomCSSStyle('color: red;');
                $this->menuItem->addChild($menuItemChild);
                $html = $this->menuItem->toHTML();
-               $this->assertEquals('<ul class="sidebar-menu 
sidebar-menu-0"><li class="sidebar-menu-item sidebar-menu-item-1" style="color: 
red;"><div class="sidebar-menu-item-text-container"><span 
class="sidebar-menu-item-text 
sidebar-menu-item-text-1">MenuItem1</span></div></li></ul>', $html);
+               $this->assertEquals('<ul class="sidebar-menu 
sidebar-menu-0"><li class="sidebar-menu-item sidebar-menu-item-1 
sidebar-menu-item-last" style="color: red;"><div 
class="sidebar-menu-item-text-container"><span class="sidebar-menu-item-text 
sidebar-menu-item-text-1">MenuItem1</span></div></li></ul>', $html);
        }
 
        public function testToHTMLOnMenuItemWithCustomClasses() {
@@ -148,6 +151,15 @@
                $menuItemChild->setCustomCSSClasses('testclass1 testclass2');
                $this->menuItem->addChild($menuItemChild);
                $html = $this->menuItem->toHTML();
-               $this->assertEquals('<ul class="sidebar-menu 
sidebar-menu-0"><li class="sidebar-menu-item sidebar-menu-item-1 testclass1 
testclass2"><div class="sidebar-menu-item-text-container"><span 
class="sidebar-menu-item-text 
sidebar-menu-item-text-1">MenuItem1</span></div></li></ul>', $html);
+               $this->assertEquals('<ul class="sidebar-menu 
sidebar-menu-0"><li class="sidebar-menu-item sidebar-menu-item-1 
sidebar-menu-item-last testclass1 testclass2"><div 
class="sidebar-menu-item-text-container"><span class="sidebar-menu-item-text 
sidebar-menu-item-text-1">MenuItem1</span></div></li></ul>', $html);
+       }
+
+       public function testToHTMLMenuItemWithExpandAction() {
+               $menuItemChild = new MenuItem($this->config);
+               $menuItemChild->setText("MenuItem1");
+               $menuItemChild->setExpandAction(true);
+               $this->menuItem->addChild($menuItemChild);
+               $html = $this->menuItem->toHTML();
+               $this->assertEquals('<ul class="sidebar-menu 
sidebar-menu-0"><li class="sidebar-menu-item sidebar-menu-item-1 
sidebar-menu-item-last"><div class="sidebar-menu-item-text-container"><span 
class="sidebar-menu-item-text sidebar-menu-item-text-1 
sidebar-menu-item-expand-action">MenuItem1</span></div></li></ul>', $html);
        }
 }
diff --git a/test/MenuParserTest.php b/test/MenuParserTest.php
index 826244b..0cf5566 100644
--- a/test/MenuParserTest.php
+++ b/test/MenuParserTest.php
@@ -1,11 +1,14 @@
 <?php
-
+/**
+ *  @group SideBarMenu
+ */
 class MenuParserTest extends MediaWikiTestCase {
 
        private $menuParser;
        private $config;
 
        protected function setUp() {
+               parent::setUp();
                $this->config = array(SBM_EXPANDED => true);
                $this->menuParser = new MenuParser($this->config);
        }
@@ -230,4 +233,13 @@
                $this->assertEquals("somecssclass anothercssclass", 
$children[0]->getCustomCSSClasses());
        }
 
+       public function testMenuItemTextExpandsSubtreeOnClick() {
+               $data = array(
+                       '@MenuItem1',
+               );
+               $children = $this->menuParser->getMenuTree(join("\n", 
$data))->getChildren();
+               $this->assertEquals("MenuItem1", $children[0]->getText());
+               $this->assertTrue($children[0]->isExpandAction());
+       }
+
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/46216
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ifae83a51e6a199b08480cb6ade6a94ac281345dc
Gerrit-PatchSet: 7
Gerrit-Project: mediawiki/extensions/SideBarMenu
Gerrit-Branch: master
Gerrit-Owner: Netbrain <[email protected]>
Gerrit-Reviewer: MathiasLidal <[email protected]>
Gerrit-Reviewer: Netbrain <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to