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

Revision: 113253
Author:   netbrain
Date:     2012-03-07 17:31:39 +0000 (Wed, 07 Mar 2012)
Log Message:
-----------
added a default visual style to extension.
added javascript logic.
moved hooks into a separate file

Modified Paths:
--------------
    trunk/extensions/SideBarMenu/SideBarMenu.php
    trunk/extensions/SideBarMenu/includes/MenuItem.php

Added Paths:
-----------
    trunk/extensions/SideBarMenu/SideBarMenu.hooks.php
    trunk/extensions/SideBarMenu/css/
    trunk/extensions/SideBarMenu/css/ext.sidebarmenu.css
    trunk/extensions/SideBarMenu/js/
    trunk/extensions/SideBarMenu/js/ext.sidebarmenu.js

Added: trunk/extensions/SideBarMenu/SideBarMenu.hooks.php
===================================================================
--- trunk/extensions/SideBarMenu/SideBarMenu.hooks.php                          
(rev 0)
+++ trunk/extensions/SideBarMenu/SideBarMenu.hooks.php  2012-03-07 17:31:39 UTC 
(rev 113253)
@@ -0,0 +1,48 @@
+<?php
+
+class SideBarMenuHooks
+{
+
+    public static function init(&$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');
+        try{
+            $menuHTML = '<div class="sidebar-menu-container">';
+            $menuHTML .= MenuParser::getMenuTree($input)->toHTML();
+            $menuHTML .= '</div>';
+            return $parser->recursiveTagParse($menuHTML,$frame);
+        }catch(Exception $x){
+            wfDebug("An error occured during parsing of: '$input' caught 
exception: $x");
+            return "FATAL ERROR: Could not parse the following 
input:</br><pre>$input</pre>";
+        }
+    }
+
+    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;
+    }
+
+    public static function registerMagicWords(&$magicWords, $langCode){
+        $magicWords['sidebarmenu'] = array(0,'sidebarmenu');
+        return true;
+    }
+
+    public static function javascriptConfigVars(&$vars){
+        global $wgSideBarMenuConfigShowHTML,$wgSideBarMenuConfigHideHTML;
+        $vars['wgSideBarMenuConfigShowHTML'] = $wgSideBarMenuConfigShowHTML;
+        $vars['wgSideBarMenuConfigHideHTML'] = $wgSideBarMenuConfigHideHTML;
+        return true;
+    }
+
+}

Modified: trunk/extensions/SideBarMenu/SideBarMenu.php
===================================================================
--- trunk/extensions/SideBarMenu/SideBarMenu.php        2012-03-07 17:31:29 UTC 
(rev 113252)
+++ trunk/extensions/SideBarMenu/SideBarMenu.php        2012-03-07 17:31:39 UTC 
(rev 113253)
@@ -15,49 +15,42 @@
 
 
 // Specify the function that will initialize the parser function.
-$wgHooks['ParserFirstCallInit'][] = 'init';
+$wgHooks['ParserFirstCallInit'][] = 'SideBarMenuHooks::init';
 
 // Specify the function that will register the magic words for the parser 
function.
-$wgHooks['LanguageGetMagic'][] = 'registerMagicWords';
+$wgHooks['LanguageGetMagic'][] = 'SideBarMenuHooks::registerMagicWords';
 
+// Javascript variables
+$wgHooks['ResourceLoaderGetConfigVars'][] = 
'SideBarMenuHooks::javascriptConfigVars';
+
 // Sepcify phpunit tests
-$wgHooks['UnitTestsList'][] = 'registerUnitTests';
+$wgHooks['UnitTestsList'][] = 'SideBarMenuHooks::registerUnitTests';
 
-//Autoload
+//Autoload hooks
+$wgAutoloadClasses['SideBarMenuHooks'] = dirname( __FILE__ ) . 
'/SideBarMenu.hooks.php';
+
+//Autoload classes
 $wgMyExtensionIncludes = dirname(__FILE__) . '/includes';
 ## Special page class
 $wgAutoloadClasses['MenuParser'] = $wgMyExtensionIncludes . '/MenuParser.php';
 $wgAutoloadClasses['MenuItem'] = $wgMyExtensionIncludes . '/MenuItem.php';
 
+//Resources
+$wgResourceModules['ext.sidebarmenu.core'] = array(
+    'scripts' => array(
+        'js/ext.sidebarmenu.js'
+    ),
+    'styles' => array(
+        'css/ext.sidebarmenu.css'
+    ),
+    'dependencies' => array (
+        'jquery.ui.core'
+    ),
+    'group' => 'ext.sidebarmenu',
+    'localBasePath' => dirname( __FILE__ ),
+    'remoteExtPath' => 'SideBarMenu'
+);
 
-function init(&$parser){
-    $parser->setHook('sidebarmenu','renderFromTag');
-    return true;
-}
-
-function registerMagicWords(&$magicWords, $langCode){
-    $magicWords['sidebarmenu'] = array(0,'sidebarmenu');
-    return true;
-}
-
-function renderFromTag( $input, array $args, Parser $parser, PPFrame $frame ){
-    try{
-        $menuHTML = MenuParser::getMenuTree($input)->toHTML();
-        return $parser->recursiveTagParse($menuHTML,$frame);
-    }catch(Exception $x){
-        wfDebug("An error occured during parsing of: '$input' caught 
exception: $x");
-        return "FATAL ERROR: Could not parse the following 
input:</br><pre>$input</pre>";
-    }
-}
-
-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;
-}
+//default settings
+$wgSideBarMenuConfigShowHTML = '[show]';
+$wgSideBarMenuConfigHideHTML = '[hide]';
\ No newline at end of file

Added: trunk/extensions/SideBarMenu/css/ext.sidebarmenu.css
===================================================================
--- trunk/extensions/SideBarMenu/css/ext.sidebarmenu.css                        
        (rev 0)
+++ trunk/extensions/SideBarMenu/css/ext.sidebarmenu.css        2012-03-07 
17:31:39 UTC (rev 113253)
@@ -0,0 +1,53 @@
+/* default SideBarMenu extension styling */
+
+.sidebar-menu-container{
+    padding: 5px;
+    float: left;
+    clear: left;
+}
+
+.sidebar-menu-item-collapsed  .sidebar-menu{
+    display: none;
+}
+
+.sidebar-menu-0,.sidebar-menu-1{
+    margin: 0px !important;
+    padding: 0px !important;
+    list-style: none;
+}
+
+
+.sidebar-menu-item-1{
+    margin: 10px 0px;
+    background-color: #f2f2f2;
+}
+
+.sidebar-menu-item-1 > .sidebar-menu-item-text-container{
+    border: 1px solid #aaa;
+    border-bottom: 0px;
+    padding: 3px;
+}
+
+.sidebar-menu-item-2{
+    background-color: #f9f9f9;
+    border: 1px solid #aaa;
+    border-bottom: 0px;
+    padding: 3px !important;
+    margin-bottom: 0px !important;
+}
+
+.sidebar-menu-item-text-container{
+    position: relative;
+}
+
+.sidebar-menu-item-controls{
+    float: right;
+    margin-left: 5px;
+    color: #0645AD;
+    cursor: pointer;
+}
+
+.sidebar-menu-item-1{
+    border-bottom: 1px solid #aaa;
+}
+


Property changes on: trunk/extensions/SideBarMenu/css/ext.sidebarmenu.css
___________________________________________________________________
Added: svn:eol-style
   + native *.eot = svn:mime-type=application/vnd.ms-fontobject *.gif = 
svn:mime-type=image/gif *.ico = svn:mime-type=image/vnd.microsoft.icon *.inc = 
svn:eol-style=native *.info = svn:eol-style=native 
*.install=svn:eol-style=native *.java = svn:eol-style=native *.jpeg = 
svn:mime-type=image/jpeg *.jpg = svn:mime-type=image/jpeg *.js = 
svn:eol-style=native *.jsp = svn:eol-style=native *.module = 
svn:eol-style=native *.php5 = svn:eol-style=native *.php = svn:eol-style=native 
*.pl = svn:eol-style=native *.pm = svn:eol-style=native *.png = 
svn:mime-type=image/png *.py = svn:eol-style=native *.sh = svn:eol-style=native 
*.sql = svn:eol-style=native *.svg = svn:mime-type=image/svg+xml *.tpl = 
svn:eol-style=native *.ttf = svn:mime-type=application/x-font-ttf *.txt = 
svn:eol-style=native *.woff = svn:mime-type=application/x-woff *.xcf = 
svn:mime-type=image/x-xcf Makefile = svn:eol-style=native SConscript = 
svn:eol-style=native SConstruct = svn:eol-style=native USERINFO = 
svn:eol-style=native

Modified: trunk/extensions/SideBarMenu/includes/MenuItem.php
===================================================================
--- trunk/extensions/SideBarMenu/includes/MenuItem.php  2012-03-07 17:31:29 UTC 
(rev 113252)
+++ trunk/extensions/SideBarMenu/includes/MenuItem.php  2012-03-07 17:31:39 UTC 
(rev 113253)
@@ -7,6 +7,7 @@
     private $parent = null;
     private $text;
 
+
     public function setExpanded($expanded)
     {
         $this->expanded = $expanded;
@@ -76,7 +77,25 @@
         if($this->isRoot()){
             $output .= $this->childrenToHTML();
         }else{
-            $output .= "<li class=\"sidebar-menu-item 
sidebar-menu-item-".$this->getLevel().' '.($this->isExpanded() ? 
'sidebar-menu-item-expanded' : 'sidebar-menu-item-collapsed')."\"><div 
class=\"sidebar-menu-item-text 
sidebar-menu-item-text-".$this->getLevel()."\">".$this->getText()."</div>";
+            $itemClasses[] = 'sidebar-menu-item';
+            $itemClasses[] = 'sidebar-menu-item-'.$this->getLevel();
+
+            if($this->hasChildren()){
+                $itemClasses[] = $this->isExpanded() ? 
'sidebar-menu-item-expanded' : 'sidebar-menu-item-collapsed';
+            }
+
+            $textClasses[] = 'sidebar-menu-item-text';
+            $textClasses[] = 'sidebar-menu-item-text-'.$this->getLevel();
+
+            $output .= "<li class=\"".join(' ',$itemClasses)."\">";
+            $output .= "<div class=\"sidebar-menu-item-text-container\">";
+            $output .= "<span class=\"".join(' 
',$textClasses)."\">".$this->getText()."</span>";
+
+            if($this->hasChildren()){
+                $output .= "<span 
class=\"sidebar-menu-item-controls\"></span>";
+            }
+
+            $output .= "</div>";
             $output .= $this->childrenToHTML();
             $output .= "</li>";
         }
@@ -87,7 +106,10 @@
     private function childrenToHTML()
     {
         if($this->hasChildren()){
-            $output = "<ul class=\"sidebar-menu 
sidebar-menu-".$this->getLevel()."\">";
+            $menuClasses[] = 'sidebar-menu';
+            $menuClasses[] = 'sidebar-menu-'.$this->getLevel();
+
+            $output = "<ul class=\"".join(' ',$menuClasses)."\">";
             foreach ($this->getChildren() as $child) {
                 $output .= $child->toHTML();
             }

Added: trunk/extensions/SideBarMenu/js/ext.sidebarmenu.js
===================================================================
--- trunk/extensions/SideBarMenu/js/ext.sidebarmenu.js                          
(rev 0)
+++ trunk/extensions/SideBarMenu/js/ext.sidebarmenu.js  2012-03-07 17:31:39 UTC 
(rev 113253)
@@ -0,0 +1,6 @@
+$(document).ready(function(){
+    
$('.sidebar-menu-item-controls').append(mw.config.get('wgSideBarMenuConfigShowHTML'));
+    $('.sidebar-menu-item-controls').click(function(){
+        
$(this).parents('.sidebar-menu-item:first').toggleClass('sidebar-menu-item-collapsed',1500);
+    });
+});
\ No newline at end of file


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

Reply via email to