https://www.mediawiki.org/wiki/Special:Code/MediaWiki/113256

Revision: 113256
Author:   netbrain
Date:     2012-03-07 17:32:09 +0000 (Wed, 07 Mar 2012)
Log Message:
-----------
added some constants instead of referencing same strings over and over again.

Modified Paths:
--------------
    trunk/extensions/SideBarMenu/SideBarMenu.hooks.php
    trunk/extensions/SideBarMenu/SideBarMenu.php
    trunk/extensions/SideBarMenu/includes/MenuItem.php
    trunk/extensions/SideBarMenu/includes/MenuParser.php
    trunk/extensions/SideBarMenu/js/ext.sidebarmenu.js
    trunk/extensions/SideBarMenu/test/MenuParserTest.php

Modified: trunk/extensions/SideBarMenu/SideBarMenu.hooks.php
===================================================================
--- trunk/extensions/SideBarMenu/SideBarMenu.hooks.php  2012-03-07 17:31:59 UTC 
(rev 113255)
+++ trunk/extensions/SideBarMenu/SideBarMenu.hooks.php  2012-03-07 17:32:09 UTC 
(rev 113256)
@@ -2,6 +2,8 @@
 
 class SideBarMenuHooks
 {
+
+
     public static function init(Parser &$parser){
         $parser->setHook('sidebarmenu','SideBarMenuHooks::renderFromTag');
         return true;
@@ -10,16 +12,20 @@
     public static function renderFromTag( $input, array $args, Parser $parser, 
PPFrame $frame ){
         $parser->getOutput()->addModules('ext.sidebarmenu.core');
 
+        //default settings
+        $config = self::getTagConfig($args);
+
         $output = '<div class="sidebar-menu-container">';
         try{
-            $output .= MenuParser::getMenuTree($input)->toHTML();
+            $menuParser = new MenuParser($config[SBM_EXPANDED]);
+            $output .= $menuParser->getMenuTree($input)->toHTML();
         }catch(Exception $x){
             wfDebug("An error occured during parsing of: '$input' caught 
exception: $x");
             return wfMsg('parser.input-error',$x->getMessage());
         }
         $output .= '</div>';
 
-        $jsOutput = self::getJSConfig($args);
+        $jsOutput = self::getJSConfig($config);
 
         return array( $jsOutput.$parser->recursiveTagParse($output,$frame), 
'noparse' => true, 'isHTML' => true );
     }
@@ -41,40 +47,45 @@
         return true;
     }
 
-    private static function minifyJavascript(&$js)
+    private static function minifyJavascript($js)
     {
         $js = preg_replace("/[\n\r]/", "", $js); //remove newlines
         $js = preg_replace("/[\s]{2,}/", " ", $js); //remove spaces
+
+        return $js;
     }
 
     private static function getAsJSEncodedString($s)
     {
-        return "'" . $s . "'";
+        return "'$s'";
     }
 
-    private static function getJSConfig(&$args){
-        global $wgSideBarMenuConfig;
-        //default settings
-        $defaults['controls.show'] = 
isset($wgSideBarMenuConfig['controls.show']) ? 
$wgSideBarMenuConfig['controls.show'] : wfMsg('controls.show');
-        $defaults['controls.hide'] = 
isset($wgSideBarMenuConfig['controls.hide']) ? 
$wgSideBarMenuConfig['controls.hide'] : wfMsg('controls.hide');
-        $defaults['js.animate'] = $wgSideBarMenuConfig['js.animate'];
-
+    private static function getJSConfig($config){
         //javascript config output
         $jsOutput = Html::inlineScript("
             var sidebarmenu = {
                 config: {
                     controls: {
-                        show: " . (array_key_exists('controls.show', $args) ? 
self::getAsJSEncodedString($args['controls.show']) : 
self::getAsJSEncodedString($defaults['controls.show'])) . ",
-                        hide: " . (array_key_exists('controls.hide', $args) ? 
self::getAsJSEncodedString($args['controls.hide']) : 
self::getAsJSEncodedString($defaults['controls.hide'])) . "
+                        show: " . 
self::getAsJSEncodedString($config[SBM_CONTROLS_SHOW]) . ",
+                        hide: " . 
self::getAsJSEncodedString($config[SBM_CONTROLS_HIDE]) . "
                     },
                     js: {
-                        animate: " . (array_key_exists('js.animate', $args) ? 
is_bool($args['js.animate']) ? 'true' : 'false' : $defaults['js.animate']) . "
+                        animate: " . (filter_var($config[SBM_JS_ANIMATE], 
FILTER_VALIDATE_BOOLEAN) ? 'true' : 'false') . "
                     }
                 }
             };
         ");
         //minify js to prevent <p> tags to be rendered
-        self::minifyJavascript($jsOutput);
-        return $jsOutput;
+        return self::minifyJavascript($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(SBM_CONTROLS_SHOW));
+        $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(SBM_CONTROLS_HIDE));
+        $config[SBM_JS_ANIMATE] = array_key_exists(SBM_JS_ANIMATE, $args) ? 
$args[SBM_JS_ANIMATE] : $wgSideBarMenuConfig[SBM_JS_ANIMATE];
+        return $config;
+    }
 }

Modified: trunk/extensions/SideBarMenu/SideBarMenu.php
===================================================================
--- trunk/extensions/SideBarMenu/SideBarMenu.php        2012-03-07 17:31:59 UTC 
(rev 113255)
+++ trunk/extensions/SideBarMenu/SideBarMenu.php        2012-03-07 17:32:09 UTC 
(rev 113256)
@@ -4,6 +4,19 @@
     die('Not an entry point.');
 }
 
+//SideBarMenu constants
+const SBM_EXPANDED = 'parser.menuitem.expanded';
+const SBM_CONTROLS_SHOW = 'controls.show';
+const SBM_CONTROLS_HIDE = 'controls.hide';
+const SBM_JS_ANIMATE = 'js.animate';
+
+
+//default settings
+$wgSideBarMenuConfig[SBM_CONTROLS_SHOW] = null;
+$wgSideBarMenuConfig[SBM_CONTROLS_HIDE]= null;
+$wgSideBarMenuConfig[SBM_JS_ANIMATE] = true;
+$wgSideBarMenuConfig[SBM_EXPANDED] = true;
+
 $wgExtensionCredits['parserhook'][] = array(
     'path' => __FILE__,
     'name' => 'SideBarMenu',
@@ -54,9 +67,4 @@
     'group' => 'ext.sidebarmenu',
     'localBasePath' => dirname( __FILE__ ),
     'remoteExtPath' => 'SideBarMenu'
-);
-
-//default settings
-$wgSideBarMenuConfig['controls.show'] = null;
-$wgSideBarMenuConfig['controls.hide']= null;
-$wgSideBarMenuConfig['js.animate'] = true;
\ No newline at end of file
+);
\ No newline at end of file

Modified: trunk/extensions/SideBarMenu/includes/MenuItem.php
===================================================================
--- trunk/extensions/SideBarMenu/includes/MenuItem.php  2012-03-07 17:31:59 UTC 
(rev 113255)
+++ trunk/extensions/SideBarMenu/includes/MenuItem.php  2012-03-07 17:32:09 UTC 
(rev 113256)
@@ -2,7 +2,7 @@
 
 class MenuItem
 {
-    private $expanded;
+    private $expanded = false;
     private $children = array();
     private $parent = null;
     private $text;
@@ -10,7 +10,11 @@
 
     public function setExpanded($expanded)
     {
-        $this->expanded = $expanded;
+        if(is_null($expanded)){
+            throw new InvalidArgumentException();
+        }else{
+            $this->expanded = $expanded;
+        }
     }
 
     public function isExpanded()

Modified: trunk/extensions/SideBarMenu/includes/MenuParser.php
===================================================================
--- trunk/extensions/SideBarMenu/includes/MenuParser.php        2012-03-07 
17:31:59 UTC (rev 113255)
+++ trunk/extensions/SideBarMenu/includes/MenuParser.php        2012-03-07 
17:32:09 UTC (rev 113256)
@@ -1,65 +1,74 @@
 <?php
 class MenuParser {
 
-    public static function isValidInput($data)
+    private $expandedByDefault;
+
+    function __construct($expandedByDefault)
     {
+        $this->expandedByDefault = $expandedByDefault;
+    }
+
+
+    public function isValidInput($data)
+    {
         return !(is_null($data) || strlen($data) == 0);
     }
 
 
-    public static function getLevel($line)
+    public function getLevel($line)
     {
         return substr_count($line, '*');
     }
 
-    public static function getExpandedParameter($line)
+    public function getExpandedParameter($line)
     {
-        if (self::startsWith($line, '+')) {
+        if ($this->startsWith($line, '+')) {
             return true;
-        } else {
+        } else if($this->startsWith($line, '-')) {
             return false;
         }
+        return $this->expandedByDefault;
     }
 
-    public static function getTextParameter($line)
+    public function getTextParameter($line)
     {
         return preg_filter("/\+|\-?\**(.*)/", "$1", $line);
     }
 
 
-    public static function getMenuTree($data){
-        if(self::isValidInput($data)){
-            $data = self::cleanupData($data);
+    public function getMenuTree($data){
+        if($this->isValidInput($data)){
+            $data = $this->cleanupData($data);
             $root = new MenuItem();
             $root->setExpanded(true);
-            $arrayData = self::parseDataIntoHierarchicalArray($data);
-            self::addChildrenToMenuItemFromArrayData($root,$arrayData);
+            $arrayData = $this->parseDataIntoHierarchicalArray($data);
+            $this->addChildrenToMenuItemFromArrayData($root,$arrayData);
             return $root;
         }
     }
 
 
-    public static function getMenuItem($line)
+    public function getMenuItem($line)
     {
         $line = trim($line);
-        if(self::isValidInput($line)){
+        if($this->isValidInput($line)){
             $menuItem = new MenuItem();
-            $menuItem->setExpanded(self::getExpandedParameter($line));
-            $menuItem->setText(self::getTextParameter($line));
+            $menuItem->setExpanded($this->getExpandedParameter($line));
+            $menuItem->setText($this->getTextParameter($line));
             return $menuItem;
         }else{
             throw new InvalidArgumentException();
         }
     }
 
-    public static function parseDataIntoHierarchicalArray($data)
+    public function parseDataIntoHierarchicalArray($data)
     {
         $rootArray = array();
         $prevArray = &$rootArray;
         $prevLevel = 0;
         $levelArray[0] = &$rootArray;
         foreach(preg_split("/\n/",$data) as $line){
-            $level = self::getLevel($line);
+            $level = $this->getLevel($line);
             if($level == $prevLevel){
                 $levelArray[$level][] = $line;
             }else if($level-1 == $prevLevel){
@@ -79,15 +88,15 @@
         return $rootArray;
     }
 
-    public static function 
addChildrenToMenuItemFromArrayData(&$rootMenuItem,$arrayData)
+    public function 
addChildrenToMenuItemFromArrayData(&$rootMenuItem,$arrayData)
     {
         foreach ($arrayData as $key => $val) {
             if (is_string($key)) {
-                $menuItem = self::getMenuItem($key);
+                $menuItem = $this->getMenuItem($key);
                 $rootMenuItem->addChild($menuItem);
-                self::addChildrenToMenuItemFromArrayData($menuItem,$val);
+                $this->addChildrenToMenuItemFromArrayData($menuItem,$val);
             } else {
-                $menuItem = self::getMenuItem($val);
+                $menuItem = $this->getMenuItem($val);
                 $rootMenuItem->addChild($menuItem);
             }
         }

Modified: trunk/extensions/SideBarMenu/js/ext.sidebarmenu.js
===================================================================
--- trunk/extensions/SideBarMenu/js/ext.sidebarmenu.js  2012-03-07 17:31:59 UTC 
(rev 113255)
+++ trunk/extensions/SideBarMenu/js/ext.sidebarmenu.js  2012-03-07 17:32:09 UTC 
(rev 113256)
@@ -1,5 +1,5 @@
 $(document).ready(function(){
-    if(sidebarmenu != undefined){
+    if(typeof(sidebarmenu) !== 'undefined'){
         var showText = sidebarmenu.config.controls.show;
         var hideText = sidebarmenu.config.controls.hide;
         var useAnimations = sidebarmenu.config.js.animate;

Modified: trunk/extensions/SideBarMenu/test/MenuParserTest.php
===================================================================
--- trunk/extensions/SideBarMenu/test/MenuParserTest.php        2012-03-07 
17:31:59 UTC (rev 113255)
+++ trunk/extensions/SideBarMenu/test/MenuParserTest.php        2012-03-07 
17:32:09 UTC (rev 113256)
@@ -3,86 +3,95 @@
 class MenuParserTest extends MediaWikiTestCase
 {
 
+    private $menuParser;
+
+    protected function setUp()
+    {
+        $this->menuParser = new MenuParser(true);
+    }
+
     public function testValidInputWhenNull(){
-        $this->assertFalse(MenuParser::isValidInput(null));
+        $this->assertFalse($this->menuParser->isValidInput(null));
     }
 
     public function testValidInputWhenEmpty(){
-        $this->assertFalse(MenuParser::isValidInput(""));
+        $this->assertFalse($this->menuParser->isValidInput(""));
     }
 
     public function testValidInput(){
-        $this->assertTrue(MenuParser::isValidInput("+MenuItem"));
+        $this->assertTrue($this->menuParser->isValidInput("+MenuItem"));
     }
 
     public function testGetLevelWhenNull(){
-        $this->assertEquals(0,MenuParser::getLevel(null));
+        $this->assertEquals(0,$this->menuParser->getLevel(null));
     }
 
     public function testGetLevelWhenEmpty(){
-        $this->assertEquals(0,MenuParser::getLevel(""));
+        $this->assertEquals(0,$this->menuParser->getLevel(""));
     }
 
     public function testGetLevelWhenValidButNoStars(){
-        $this->assertEquals(0,MenuParser::getLevel(""));
+        $this->assertEquals(0,$this->menuParser->getLevel(""));
     }
 
     public function testGetLevelWithValid(){
-        $this->assertEquals(3,MenuParser::getLevel("***MenuItem"));
+        $this->assertEquals(3,$this->menuParser->getLevel("***MenuItem"));
     }
 
     public function testGetExpandedParameterWhenNoneSupplied(){
-        //default is false
-        $this->assertFalse(MenuParser::getExpandedParameter("MenuItem"));
+        $this->menuParser = new MenuParser(true);
+        $this->assertTrue($this->menuParser->getExpandedParameter("MenuItem"));
+        $this->menuParser = new MenuParser(false);
+        
$this->assertFalse($this->menuParser->getExpandedParameter("MenuItem"));
     }
 
     public function testGetExpandedParameterWhenNotExpanded(){
-        $this->assertFalse(MenuParser::getExpandedParameter("-MenuItem"));
+        
$this->assertFalse($this->menuParser->getExpandedParameter("-MenuItem"));
     }
 
     public function testGetExpandedParameterWhenExpanded(){
-        $this->assertTrue(MenuParser::getExpandedParameter("+MenuItem"));
+        
$this->assertTrue($this->menuParser->getExpandedParameter("+MenuItem"));
     }
 
     public function testGetTextParameter(){
-        
$this->assertEquals("MenuItem",MenuParser::getTextParameter("+***MenuItem"));
-        
$this->assertEquals("+MenuItem",MenuParser::getTextParameter("+***+MenuItem"));
-        
$this->assertEquals("MenuItem",MenuParser::getTextParameter("-MenuItem"));
-        
$this->assertEquals("MenuItem",MenuParser::getTextParameter("-*MenuItem"));
-        
$this->assertEquals("MenuItem",MenuParser::getTextParameter("MenuItem"));
-        
$this->assertEquals("+*MenuItem",MenuParser::getTextParameter("+***+*MenuItem"));
+        
$this->assertEquals("MenuItem",$this->menuParser->getTextParameter("+***MenuItem"));
+        
$this->assertEquals("+MenuItem",$this->menuParser->getTextParameter("+***+MenuItem"));
+        
$this->assertEquals("MenuItem",$this->menuParser->getTextParameter("-MenuItem"));
+        
$this->assertEquals("MenuItem",$this->menuParser->getTextParameter("-*MenuItem"));
+        
$this->assertEquals("MenuItem",$this->menuParser->getTextParameter("MenuItem"));
+        
$this->assertEquals("+*MenuItem",$this->menuParser->getTextParameter("+***+*MenuItem"));
     }
 
     public function testGetMenuItemWhenInputIsNull(){
         $this->setExpectedException('InvalidArgumentException');
-        $this->assertNull(MenuParser::getMenuItem(null));
+        $this->assertNull($this->menuParser->getMenuItem(null));
     }
 
     public function testGetMenuItemWhenInputIsEmpty(){
         $this->setExpectedException('InvalidArgumentException');
-        $this->assertNull(MenuParser::getMenuItem(""));
+        $this->assertNull($this->menuParser->getMenuItem(""));
     }
 
     public function testGetMenuItemWhenInputIsValid(){
         $data = "MenuItem";
-        $menuItem = MenuParser::getMenuItem($data);
+        $menuItem = $this->menuParser->getMenuItem($data);
         $this->assertNotNull($menuItem);
         $this->assertEquals($data,$menuItem->getText());
-        $this->assertFalse($menuItem->isExpanded()); //false is default
+        $this->assertTrue($menuItem->isExpanded());
     }
 
     public function testGetMenuItemWhenInputIsValidAndExpandIsSet(){
         $text = "MenuItem";
         $data = "+".$text;
-        $menuItem = MenuParser::getMenuItem($data);
+        $menuItem = $this->menuParser->getMenuItem($data);
         $this->assertNotNull($menuItem);
         $this->assertEquals($text,$menuItem->getText());
-        $this->assertTrue($menuItem->isExpanded()); //false is default
+        $this->assertTrue($menuItem->isExpanded());
     }
 
     public function testParseDataIntoHierarchicalArray(){
         $data = "MenuItem";
-        $array = MenuParser::parseDataIntoHierarchicalArray($data);
+        $array = $this->menuParser->parseDataIntoHierarchicalArray($data);
         $this->assertNotNull($array);
         $this->assertEquals($data,$array[0]);
     }
@@ -90,7 +99,7 @@
     public function testParseDataIntoHierarchicalArrayWithSubLevel(){
         $lines = array("MenuItem","*SubMenuItem");
         $data = join("\n",$lines);
-        $array = MenuParser::parseDataIntoHierarchicalArray($data);
+        $array = $this->menuParser->parseDataIntoHierarchicalArray($data);
         $this->assertNotNull($array);
         $this->assertArrayHasKey($lines[0],$array);
         $this->assertEquals(
@@ -105,7 +114,7 @@
     public function testParseDataIntoHierarchicalArrayWithSeveralSubLevels(){
         $lines = 
array("MenuItem","*SubMenuItem","*SubMenuItem2","**SubMenuItemOf2");
         $data = join("\n",$lines);
-        $array = MenuParser::parseDataIntoHierarchicalArray($data);
+        $array = $this->menuParser->parseDataIntoHierarchicalArray($data);
         $this->assertNotNull($array);
         $this->assertEquals(
             array(
@@ -122,7 +131,7 @@
     public function testParseDataIntoHierarchicalArrayWithSubLevelAndBack(){
         $lines = array("MenuItem","*SubMenuItem","MenuItem2");
         $data = join("\n",$lines);
-        $array = MenuParser::parseDataIntoHierarchicalArray($data);
+        $array = $this->menuParser->parseDataIntoHierarchicalArray($data);
         $this->assertNotNull($array);
         $this->assertEquals(
             array(
@@ -137,7 +146,7 @@
     public function 
testParseDataIntoHierarchicalArrayWithSubLevelAndBackSeveralLevels(){
         $lines = 
array("MenuItem","*SubMenuItem1","**SubMenuItem2","***SubMenuItem3","MenuItem2");
         $data = join("\n",$lines);
-        $array = MenuParser::parseDataIntoHierarchicalArray($data);
+        $array = $this->menuParser->parseDataIntoHierarchicalArray($data);
         $this->assertNotNull($array);
         $this->assertEquals(
             array(
@@ -155,12 +164,12 @@
 
 
     public function testGetMenuWithInvalidInput(){
-        $this->assertNull(MenuParser::getMenuTree(null));
-        $this->assertNull(MenuParser::getMenuTree(""));
+        $this->assertNull($this->menuParser->getMenuTree(null));
+        $this->assertNull($this->menuParser->getMenuTree(""));
     }
 
     public function testGetMenuWithValidInput(){
-        $menu = MenuParser::getMenuTree("MenuItem");
+        $menu = $this->menuParser->getMenuTree("MenuItem");
         $this->assertNotNull($menu);
         $this->assertTrue($menu->isRoot());
         $this->assertEquals(1,sizeof($menu->getChildren()));
@@ -180,7 +189,7 @@
             'MenuItem2',
             '*SubMenuItem1OfMenuItem2'
         );
-        $menu = MenuParser::getMenuTree(join("\n",$data));
+        $menu = $this->menuParser->getMenuTree(join("\n",$data));
         $this->assertNotNull($menu);
         $this->assertEquals(2,sizeof($menu->getChildren()));
 
@@ -193,7 +202,7 @@
             '',
             ''
         );
-        $menu = MenuParser::getMenuTree(join("\n",$data));
+        $menu = $this->menuParser->getMenuTree(join("\n",$data));
         $this->assertNotNull($menu);
         $this->assertEquals(1,sizeof($menu->getChildren()));
 


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

Reply via email to