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