Netbrain has submitted this change and it was merged.
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, 353 insertions(+), 186 deletions(-)
Approvals:
Netbrain: Verified; Looks good to me, approved
Siebrand: Looks good to me, but someone else must approve
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 d175c69..905f9b6 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..567cb80 100644
--- a/SideBarMenu.php
+++ b/SideBarMenu.php
@@ -4,69 +4,99 @@
die('Not an entry point.');
}
+if (!defined('ParamProcessor_VERSION')) {
+ die('SideBarMenu requires extension ParamProcessor');
+}
+
//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..f6cb1b4 100644
--- a/css/ext.sidebarmenu.css
+++ b/css/ext.sidebarmenu.css
@@ -48,7 +48,7 @@
.sidebar-menu-item-text-container {
position: relative;
- padding-right: 45px !important;
+ padding-right: 50px !important;
}
.sidebar-menu-minimized .sidebar-menu-item-text-container {
@@ -90,11 +90,19 @@
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;
}
.sidebar-menu-item-1 > .sidebar-menu-item-text-container >
.sidebar-menu-item-controls {
- right: 3px;
+ right: 5px;
top: 3px;
}
\ No newline at end of file
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 86%
rename from includes/MenuParser.php
rename to src/MenuParser.php
index b9d01ac..688194c 100644
--- a/includes/MenuParser.php
+++ b/src/MenuParser.php
@@ -1,4 +1,7 @@
<?php
+
+namespace SideBarMenu;
+
class MenuParser {
private $config;
@@ -58,6 +61,17 @@
$root->setExpanded(true);
$arrayData =
$this->parseDataIntoHierarchicalArray($data);
$this->addChildrenToMenuItemFromArrayData($root,
$arrayData);
+
+ if($this->config[SBM_MINIMIZED]){
+ //When minimized is true this here forces the
first menu element to be
+ //collapsed causing it to display correctly and
not having to add "-"
+ // explicitly in the input data
+ $children = $root->getChildren();
+ if(count($children) > 0){
+ $children[0]->setExpanded(false);
+ }
+ }
+
return $root;
}
return null;
@@ -75,7 +89,7 @@
$menuItem->setExpandAction($this->getExpandActionParameter($line));
return $menuItem;
} else {
- throw new InvalidArgumentException();
+ throw new \InvalidArgumentException();
}
}
@@ -99,7 +113,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: merged
Gerrit-Change-Id: Id2250c29ffc724f94391599ef39a5e046e4ac415
Gerrit-PatchSet: 5
Gerrit-Project: mediawiki/extensions/SideBarMenu
Gerrit-Branch: master
Gerrit-Owner: Netbrain <[email protected]>
Gerrit-Reviewer: MathiasLidal <[email protected]>
Gerrit-Reviewer: Netbrain <[email protected]>
Gerrit-Reviewer: Siebrand <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits