Netbrain has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/90174


Change subject: Tagged v0.1, did various cleanup and started on v 0.2
......................................................................

Tagged v0.1, did various cleanup and started on v 0.2

Change-Id: Id2250c29ffc724f94391599ef39a5e046e4ac415
---
D SideBarMenu.hooks.php
M SideBarMenu.i18n.php
M SideBarMenu.php
A SideBarMenu.settings.php
M css/ext.sidebarmenu.css
M js/ext.sidebarmenu.js
A src/Hooks.php
R src/MenuItem.php
R src/MenuParser.php
M test/MenuItemTest.php
M test/MenuParserTest.php
11 files changed, 336 insertions(+), 184 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/SideBarMenu 
refs/changes/74/90174/1

diff --git a/SideBarMenu.hooks.php b/SideBarMenu.hooks.php
deleted file mode 100644
index a5441c6..0000000
--- a/SideBarMenu.hooks.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-
-class SideBarMenuHooks {
-
-       public static function init(Parser &$parser) {
-               $parser->setHook('sidebarmenu', 
'SideBarMenuHooks::renderFromTag');
-               return true;
-       }
-
-       public static function renderFromTag($input, array $args, Parser 
$parser, PPFrame $frame) {
-               $parser->getOutput()->addModules('ext.sidebarmenu.core');
-               $input = $parser->recursiveTagParse($input,$frame);
-
-               //default settings
-               $config = self::getTagConfig($args);
-
-               $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 .= $menuParser->getMenuTree($input)->toHTML();
-               } catch (Exception $x) {
-                       wfDebug("An error occured during parsing of: '$input' 
caught exception: $x");
-                       return wfMessage('sidebarmenu-parser-input-error', 
$x->getMessage())->text();
-               }
-               if ($config[SBM_EDIT_LINK]) {
-                       $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>';
-
-               $jsOutput = self::getJSConfig($config);
-
-               return array($jsOutput . $output, 'noparse' => true, 'isHTML' 
=> true);
-       }
-
-       public static function registerUnitTests(&$files) {
-               $testDir = dirname(__FILE__) . '/test/';
-               $testFiles = scandir($testDir);
-               foreach ($testFiles as $testFile) {
-                       $absoluteFile = $testDir . $testFile;
-                       if (is_file($absoluteFile)) {
-                               $files[] = $absoluteFile;
-                       }
-               }
-               return true;
-       }
-
-       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 getJSConfig($config) {
-               //javascript config output
-               $jsOutput = 'var sidebarmenu = '.json_encode($config);
-               $jsOutput = Html::inlineScript($jsOutput);
-               //minify js to prevent <p> tags to be rendered
-               $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] : '[' . 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.i18n.php b/SideBarMenu.i18n.php
index cbe921a..24f8f6c 100644
--- a/SideBarMenu.i18n.php
+++ b/SideBarMenu.i18n.php
@@ -35,6 +35,15 @@
        'sidebarmenu-js-init-error' => 'General error message.',
        'sidebarmenu-edit' => 'Action link. The text of the link which points 
to the edit page wherever the sidebarmenu is declared.',
        'sidebarmenu-parser-menuitem-expanded-null' => 'The value of the 
expanded property of a menuitem',
+       'sidebarmenu-parser-config-error' => 'Config parameters passed to the 
extension is incorrect (wrong parameter key or value)',
+       'sidebarmenu-param-expanded' => 'Parameter which causes all menu items 
to be expanded by default unless explicit set',
+       'sidebarmenu-param-show' => 'Parameter which sets the show text that is 
visible when a menu item is hidden',
+       'sidebarmenu-param-hide' => 'Parameter which sets the hide text that is 
visible when a menu item is shown',
+       'sidebarmenu-param-animate' => 'Parameter which toggles whether the 
sidebar menu should have animation or not when showing/hiding menu elements',
+       'sidebarmenu-param-editlink' => 'Parameter which toggles whether an 
edit link should be visible under the sidebar menu',
+       'sidebarmenu-param-class' => 'Parameter which sets the html attribute 
"class" on the sidebar menu container',
+       'sidebarmenu-param-style' => 'Parameter which sets the html attribute 
"style" on the sidebar menu container',
+       'sidebarmenu-param-minimized' => 'Parameter which toggles whether the 
sidebar menu should be minimized or not',
 );
 
 /** Asturian (asturianu)
diff --git a/SideBarMenu.php b/SideBarMenu.php
index 31f74dd..0984467 100644
--- a/SideBarMenu.php
+++ b/SideBarMenu.php
@@ -5,68 +5,94 @@
 }
 
 //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';
+const SBM_EXPANDED = 'expanded';
+const SBM_CONTROLS_SHOW = 'show';
+const SBM_CONTROLS_HIDE = 'hide';
+const SBM_JS_ANIMATE = '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;
-$wgSideBarMenuConfig[SBM_CONTROLS_HIDE] = null;
-$wgSideBarMenuConfig[SBM_JS_ANIMATE] = true;
-$wgSideBarMenuConfig[SBM_EXPANDED] = true;
-$wgSideBarMenuConfig[SBM_EDIT_LINK] = true;
-$wgSideBarMenuConfig[SBM_MINIMIZED] = false;
-
-
-$wgExtensionCredits['parserhook'][] = array(
-       'path' => __FILE__,
-       'name' => 'SideBarMenu',
-       'version' => 0.1,
-       'author' => 'Kim Eik',
-       'url' => 'https://www.mediawiki.org/wiki/Extension:SideBarMenu',
-       'descriptionmsg' => 'sidebarmenu-desc'
+$wgSideBarMenuConstants = array(
+       SBM_EXPANDED,
+       SBM_CONTROLS_SHOW,
+       SBM_CONTROLS_HIDE,
+       SBM_JS_ANIMATE,
+       SBM_EDIT_LINK,
+       SBM_CLASS,
+       SBM_STYLE,
+       SBM_MINIMIZED,
 );
 
+spl_autoload_register( function ( $className ) {
+       $className = ltrim( $className, '\\' );
+       $fileName = '';
+       $namespace = '';
 
-// Specify the function that will initialize the parser function.
-$wgHooks['ParserFirstCallInit'][] = 'SideBarMenuHooks::init';
+       if ( $lastNsPos = strripos( $className, '\\') ) {
+               $namespace = substr( $className, 0, $lastNsPos );
+               $className = substr( $className, $lastNsPos + 1 );
+               $fileName  = str_replace( '\\', '/', $namespace ) . '/';
+       }
 
-// Sepcify phpunit tests
-$wgHooks['UnitTestsList'][] = 'SideBarMenuHooks::registerUnitTests';
+       $fileName .= str_replace( '_', '/', $className ) . '.php';
 
-//Autoload hooks
-$wgAutoloadClasses['SideBarMenuHooks'] = dirname(__FILE__) . 
'/SideBarMenu.hooks.php';
+       $namespaceSegments = explode( '\\', $namespace );
 
-//Autoload classes
-$wgMyExtensionIncludes = dirname(__FILE__) . '/includes';
-## Special page class
-$wgAutoloadClasses['MenuParser'] = $wgMyExtensionIncludes . '/MenuParser.php';
-$wgAutoloadClasses['MenuItem'] = $wgMyExtensionIncludes . '/MenuItem.php';
+       if ( $namespaceSegments[0] === 'SideBarMenu' ) {
+               $fileName = substr($fileName,strlen($namespaceSegments[0]));
+               if ( count( $namespaceSegments ) === 1 || $namespaceSegments[1] 
!== 'Tests' ) {
+                       require_once (__DIR__ . '/src/' . $fileName);
+               }
+       }
+} );
 
-//i18n
-$wgExtensionMessagesFiles['SideBarMenu'] = dirname(__FILE__) . 
'/SideBarMenu.i18n.php';
+call_user_func( function() {
+       global $wgExtensionCredits, $wgExtensionMessagesFiles, 
$wgExtensionFunctions, $wgResourceModules;
 
-//Resources
-$wgResourceModules['ext.sidebarmenu.core'] = array(
-       'scripts' => array(
-               'js/ext.sidebarmenu.js'
-       ),
-       'styles' => array(
-               'css/ext.sidebarmenu.css'
-       ),
-       'dependencies' => array(
-               'jquery.ui.core',
-               'jquery.effects.core',
-       ),
-       'messages' => array(
-               'sidebarmenu-js-init-error'
-       ),
-       'group' => 'ext.sidebarmenu',
-       'localBasePath' => dirname(__FILE__),
-       'remoteExtPath' => 'SideBarMenu'
-);
+       $wgExtensionCredits['parserhook'][] = array(
+               'path' => __FILE__,
+               'name' => 'SideBarMenu',
+               'version' => '0.2',
+               'author' => 'Kim Eik',
+               'url' => 'https://www.mediawiki.org/wiki/Extension:SideBarMenu',
+               'descriptionmsg' => 'sidebarmenu-desc'
+       );
+
+       //i18n
+       $wgExtensionMessagesFiles['SideBarMenu'] = dirname(__FILE__) . 
'/SideBarMenu.i18n.php';
+
+       //Resources
+       $wgResourceModules['ext.sidebarmenu.core'] = array(
+               'scripts' => array(
+                       'js/ext.sidebarmenu.js'
+               ),
+               'styles' => array(
+                       'css/ext.sidebarmenu.css'
+               ),
+               'dependencies' => array(
+                       'jquery.ui.core',
+                       'jquery.effects.core',
+               ),
+               'messages' => array(
+                       'sidebarmenu-js-init-error'
+               ),
+               'group' => 'ext.sidebarmenu',
+               'localBasePath' => dirname(__FILE__),
+               'remoteExtPath' => 'SideBarMenu'
+       );
+
+       $wgExtensionFunctions[] = function() {
+               global $wgHooks;
+
+               // Specify the function that will initialize the parser 
function.
+               $wgHooks['ParserFirstCallInit'][] = 'SideBarMenu\Hooks::init';
+
+               // Sepcify phpunit tests
+               $wgHooks['UnitTestsList'][]     = 
'SideBarMenu\Hooks::registerUnitTests';
+       };
+
+} );
+
+require_once(__DIR__.'/SideBarMenu.settings.php');
\ No newline at end of file
diff --git a/SideBarMenu.settings.php b/SideBarMenu.settings.php
new file mode 100644
index 0000000..8c62122
--- /dev/null
+++ b/SideBarMenu.settings.php
@@ -0,0 +1,8 @@
+<?php
+
+$wgSideBarMenuConfig[SBM_CONTROLS_SHOW] = null;
+$wgSideBarMenuConfig[SBM_CONTROLS_HIDE] = null;
+$wgSideBarMenuConfig[SBM_JS_ANIMATE] = true;
+$wgSideBarMenuConfig[SBM_EXPANDED] = true;
+$wgSideBarMenuConfig[SBM_EDIT_LINK] = true;
+$wgSideBarMenuConfig[SBM_MINIMIZED] = false;
\ No newline at end of file
diff --git a/css/ext.sidebarmenu.css b/css/ext.sidebarmenu.css
index 85e3018..773de16 100644
--- a/css/ext.sidebarmenu.css
+++ b/css/ext.sidebarmenu.css
@@ -90,6 +90,14 @@
     visibility: hidden;
 }
 
+.sidebar-menu-minimized .sidebar-menu {
+    display: none;
+}
+
+.sidebar-menu-minimized .sidebar-menu-0 {
+    display: block;
+}
+
 .sidebar-menu-item-last .sidebar-menu-item-text-container {
     padding-right: 0px !important;
 }
diff --git a/js/ext.sidebarmenu.js b/js/ext.sidebarmenu.js
index 85fff0e..c604cba 100644
--- a/js/ext.sidebarmenu.js
+++ b/js/ext.sidebarmenu.js
@@ -1,70 +1,82 @@
-$(document).ready(function () {
+(function($,mw){
 
     //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_EXPANDED = 'expanded';
+    var SBM_CONTROLS_SHOW = 'show';
+    var SBM_CONTROLS_HIDE = 'hide';
+    var SBM_JS_ANIMATE = '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[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');
-        }
+    $(document).ready(function () {
+        if (typeof(sidebarmenu) !== 'undefined') {
+            for (var id in sidebarmenu){
+                var container = $('#'+id);
+                var config = sidebarmenu[id];
+                var showText = config[SBM_CONTROLS_SHOW];
+                var hideText = config[SBM_CONTROLS_HIDE];
+                var useAnimations = config[SBM_JS_ANIMATE];
+                var minimized = config[SBM_MINIMIZED];
 
-        function initControls() {
-            
$('.sidebar-menu-item-collapsed').children('.sidebar-menu-item-text-container').children('.sidebar-menu-item-controls').append(showText);
-            
$('.sidebar-menu-item-expanded').children('.sidebar-menu-item-text-container').children('.sidebar-menu-item-controls').append(hideText);
-        }
+                if(minimized){
+                    container.addClass('sidebar-menu-minimized');
+                    container.find('.sidebar-menu-0 
.sidebar-menu-item').first()
+                        .removeClass('sidebar-menu-item-expanded')
+                        .addClass('sidebar-menu-item-collapsed');
+                }
 
-        /*Open submenu of current page if current page is present as a link in 
sidebarmenu*/
-        var selfLink = $('.sidebar-menu-item').find('.selflink')[0]
-        if(selfLink !== undefined ){
-            
$(selfLink).parents('.sidebar-menu-item-collapsed').removeClass('sidebar-menu-item-collapsed').addClass('sidebar-menu-item-expanded');
-        }
+                function initControls() {
+                    
container.find('.sidebar-menu-item-collapsed').children('.sidebar-menu-item-text-container').children('.sidebar-menu-item-controls').append(showText);
+                    
container.find('.sidebar-menu-item-expanded').children('.sidebar-menu-item-text-container').children('.sidebar-menu-item-controls').append(hideText);
+                }
 
-        //initialize controls
-        initControls();
+                /*Open submenu of current page if current page is present as a 
link in sidebarmenu*/
+                var selfLink = 
container.find('.sidebar-menu-item').find('.selflink')[0]
+                if(selfLink !== undefined ){
+                    
$(selfLink).parents('.sidebar-menu-item-collapsed').removeClass('sidebar-menu-item-collapsed').addClass('sidebar-menu-item-expanded');
+                }
 
-        //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');
-            }
+                //initialize controls
+                initControls();
 
-            var controls = $(this).is('.sidebar-menu-item-controls') ? $(this) 
: $(this).next();
-            var currentText = controls.text();
+                //initialize click actions
+                
container.find('.sidebar-menu-item-controls,.sidebar-menu-item-expand-action').click(function
 () {
+                    if(minimized && $(this)[0] == 
$('.sidebar-menu-item-controls:first')[0]){
+                        container.toggleClass('sidebar-menu-minimized');
+                    }
 
-            if (currentText == showText) {
-                controls.text(hideText);
-            } else if (currentText == hideText) {
-                controls.text(showText);
-            }
+                    var controls = $(this).is('.sidebar-menu-item-controls') ? 
$(this) : $(this).next();
+                    var currentText = controls.text();
 
-            if (useAnimations) {
-                //A little "ugly" hack to prevent some gui glitches.
-                
$(this).parents('.sidebar-menu-item:first').toggleClass('sidebar-menu-item-collapsed
 sidebar-menu-item-expanded', 250).children('.sidebar-menu').show(0, function 
() {
-                    var _this = $(this);
-                    setTimeout(function () {
-                        _this.css('display', '')
-                    }, 250);
+                    if (currentText == showText) {
+                        controls.text(hideText);
+                    } else if (currentText == hideText) {
+                        controls.text(showText);
+                    }
+
+                    if (useAnimations) {
+                        //A little "ugly" hack to prevent some gui glitches.
+                        
$(this).parents('.sidebar-menu-item:first').toggleClass('sidebar-menu-item-collapsed
 sidebar-menu-item-expanded', 250).children('.sidebar-menu').show(0, function 
() {
+                            var _this = $(this);
+                            setTimeout(function () {
+                                _this.css('display', '')
+                            }, 250);
+                        });
+                    } else {
+                        
$(this).parents('.sidebar-menu-item:first').toggleClass('sidebar-menu-item-collapsed
 sidebar-menu-item-expanded');
+                    }
                 });
-            } else {
-                
$(this).parents('.sidebar-menu-item:first').toggleClass('sidebar-menu-item-collapsed
 sidebar-menu-item-expanded');
-            }
-        });
 
-        //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
+                //must do this in javascript as serverside solution would 
replace this <a href> link with escaped html characters
+                
container.find('.sidebar-menu-item-expand-action').each(function(){
+                    $(this).html('<a href="#" onclick="return 
false;">'+$(this).html()+'</a>');
+                })
+            }
+
+            container.show();
+            }
+    });
+})($,mw)
diff --git a/src/Hooks.php b/src/Hooks.php
new file mode 100644
index 0000000..ddb731d
--- /dev/null
+++ b/src/Hooks.php
@@ -0,0 +1,149 @@
+<?php
+
+namespace SideBarMenu;
+use ParamProcessor\Processor;
+
+class Hooks {
+
+       public static function init(\Parser &$parser) {
+               $parser->setHook('sidebarmenu', 
'SideBarMenu\Hooks::renderFromTag');
+               return true;
+       }
+
+       public static function renderFromTag($input, array $args, \Parser 
$parser, \PPFrame $frame) {
+               $parser->getOutput()->addModules('ext.sidebarmenu.core');
+               $input = $parser->recursiveTagParse($input,$frame);
+
+               //default settings
+               $parameters = self::getTagConfig($args);
+               $config = array();
+               if(count($parameters->getErrors()) > 0){
+                       $errors = 
wfMessage('sidebarmenu-parser-config-error')."\n";
+                       foreach($parameters->getErrors() as $error){
+                               $errors .= '* '.$error->getMessage()."\n";
+                       }
+                       return $errors;
+               }else{
+                       foreach($parameters->getParameters() as $param){
+                               $config[$param->getName()] = $param->getValue();
+                       }
+               }
+
+               $id = uniqid('sidebar-menu-id-');
+               $output = '<div id="'.$id.'" 
class="sidebar-menu-container'.(is_null($config[SBM_CLASS])? '' : ' 
'.$config[SBM_CLASS]).'" style="display:none;'.(is_null($config[SBM_STYLE])? '' 
: $config[SBM_STYLE]).'">';
+               try {
+                       $menuParser = new MenuParser($config);
+                       $output .= $menuParser->getMenuTree($input)->toHTML();
+               } catch (\Exception $x) {
+                       wfDebug("An error occured during parsing of: '$input' 
caught exception: $x");
+                       return wfMessage('sidebarmenu-parser-input-error', 
$x->getMessage())->text();
+               }
+               if ($config[SBM_EDIT_LINK]) {
+                       $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>';
+
+               $jsOutput = self::getJSConfig($config,$id);
+
+               return array($jsOutput . $output, 'noparse' => true, 'isHTML' 
=> true);
+       }
+
+       public static function registerUnitTests(&$files) {
+               $testDir = dirname(__FILE__) . '/test/';
+               $testFiles = scandir($testDir);
+               foreach ($testFiles as $testFile) {
+                       $absoluteFile = $testDir . $testFile;
+                       if (is_file($absoluteFile)) {
+                               $files[] = $absoluteFile;
+                       }
+               }
+               return true;
+       }
+
+       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 getJSConfig($config,$id) {
+               //javascript config output
+               $jsonConfig = json_encode($config);
+               $jsOutput = <<<EOT
+                       (function(json,id){
+                               if(window.sidebarmenu === undefined){
+                                       window.sidebarmenu = {};
+                               }
+                               window.sidebarmenu[id] = json;
+                       })($jsonConfig,'$id');
+EOT;
+
+
+               $jsOutput = \Html::inlineScript($jsOutput);
+               //minify js to prevent <p> tags to be rendered
+               $jsOutput = self::minifyJavascript($jsOutput);
+               return $jsOutput;
+       }
+
+       private static function getTagConfig($args) {
+               global $wgSideBarMenuConfig;
+
+               $parameterDefs = array(
+                       array(
+                               'name' => 'expanded',
+                               'default' => $wgSideBarMenuConfig[SBM_EXPANDED],
+                               'type' => 'boolean',
+                               'message' => 'sidebarmenu-param-expanded',
+                               'aliases' => array('parser.menuitem.expanded'),
+                       ),
+                       array(
+                               'name' => 'show',
+                               'default' => 
is_null($wgSideBarMenuConfig[SBM_CONTROLS_SHOW]) ? 
'['.wfMessage('showtoc')->escaped().']' : 
$wgSideBarMenuConfig[SBM_CONTROLS_SHOW],
+                               'message' => 'sidebarmenu-param-show',
+                               'aliases' => array('controls.show'),
+                       ),
+                       array(
+                               'name' => 'hide',
+                               'default' => 
is_null($wgSideBarMenuConfig[SBM_CONTROLS_HIDE]) ? 
'['.wfMessage('hidetoc')->escaped().']' : 
$wgSideBarMenuConfig[SBM_CONTROLS_HIDE],
+                               'message' => 'sidebarmenu-param-hide',
+                               'aliases' => array('controls.hide'),
+                       ),
+                       array(
+                               'name' => 'animate',
+                               'default' => 
$wgSideBarMenuConfig[SBM_JS_ANIMATE],
+                               'type' => 'boolean',
+                               'message' => 'sidebarmenu-param-animate',
+                               'aliases' => array('js.animate'),
+                       ),
+                       array(
+                               'name' => 'editlink',
+                               'default' => 
$wgSideBarMenuConfig[SBM_EDIT_LINK],
+                               'type' => 'boolean',
+                               'message' => 'sidebarmenu-param-editlink',
+                       ),
+                       array(
+                               'name' => 'class',
+                               'default' => '',
+                               'message' => 'sidebarmenu-param-class',
+                       ),
+                       array(
+                               'name' => 'style',
+                               'default' => '',
+                               'message' => 'sidebarmenu-param-style',
+                       ),
+                       array(
+                               'name' => 'minimized',
+                               'default' => 
$wgSideBarMenuConfig[SBM_MINIMIZED],
+                               'type' => 'boolean',
+                               'message' => 'sidebarmenu-param-minimized',
+                       ),
+               );
+
+               $processor = Processor::newDefault();
+               $processor->setParameters($args,$parameterDefs);
+               $processedParams = $processor->processParameters();
+
+               return $processedParams;
+       }
+}
diff --git a/includes/MenuItem.php b/src/MenuItem.php
similarity index 98%
rename from includes/MenuItem.php
rename to src/MenuItem.php
index c441525..8df4c66 100644
--- a/includes/MenuItem.php
+++ b/src/MenuItem.php
@@ -1,5 +1,7 @@
 <?php
 
+namespace SideBarMenu;
+
 class MenuItem {
        private $expanded = null;
        private $children = array();
diff --git a/includes/MenuParser.php b/src/MenuParser.php
similarity index 94%
rename from includes/MenuParser.php
rename to src/MenuParser.php
index b9d01ac..58a477a 100644
--- a/includes/MenuParser.php
+++ b/src/MenuParser.php
@@ -1,4 +1,7 @@
 <?php
+
+namespace SideBarMenu;
+
 class MenuParser {
 
        private $config;
@@ -75,7 +78,7 @@
                        
$menuItem->setExpandAction($this->getExpandActionParameter($line));
                        return $menuItem;
                } else {
-                       throw new InvalidArgumentException();
+                       throw new \InvalidArgumentException();
                }
        }
 
@@ -99,7 +102,7 @@
                                                $levelArray[$level][] = $line;
                                        } else {
                                                //syntax error
-                                               throw new 
InvalidArgumentException(wfMessage('sidebarmenu-parser-syntax-error', 
$line)->text());
+                                               throw new 
\InvalidArgumentException(wfMessage('sidebarmenu-parser-syntax-error', 
$line)->text());
                                        }
                                }
                        }
diff --git a/test/MenuItemTest.php b/test/MenuItemTest.php
index 656537d..0295a4d 100644
--- a/test/MenuItemTest.php
+++ b/test/MenuItemTest.php
@@ -2,7 +2,12 @@
 /**
  * @group SideBarMenu
  */
-class MenuItemTest extends MediaWikiTestCase {
+
+namespace SideBarMenu\Tests;
+
+use SideBarMenu\MenuItem;
+
+class MenuItemTest extends \MediaWikiTestCase {
        private $menuItem;
        private $config;
 
diff --git a/test/MenuParserTest.php b/test/MenuParserTest.php
index 0cf5566..200ff7f 100644
--- a/test/MenuParserTest.php
+++ b/test/MenuParserTest.php
@@ -2,7 +2,12 @@
 /**
  *  @group SideBarMenu
  */
-class MenuParserTest extends MediaWikiTestCase {
+
+namespace SideBarMenu\Tests;
+
+use SideBarMenu\MenuParser;
+
+class MenuParserTest extends \MediaWikiTestCase {
 
        private $menuParser;
        private $config;

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id2250c29ffc724f94391599ef39a5e046e4ac415
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/SideBarMenu
Gerrit-Branch: master
Gerrit-Owner: Netbrain <[email protected]>

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

Reply via email to