Werdna has uploaded a new change for review.

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

Change subject: Add subitem argument filter.
......................................................................

Add subitem argument filter.

Allows for correct preprocessing of parameters to subitems, such as dependent 
menus and popups

Change-Id: I26fc9cced9bebe87e43fc156995495c46e6c5b5f
---
M autoload.php
M includes/argument-filters/ArgumentFilter.php
A includes/argument-filters/SubitemFilter.php
M includes/container.php
4 files changed, 49 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/OOUIPlayground 
refs/changes/08/192808/1

diff --git a/autoload.php b/autoload.php
index de16af4..a1d165c 100644
--- a/autoload.php
+++ b/autoload.php
@@ -25,6 +25,8 @@
        'OOUIPlayground\\OOUIStatic' => __DIR__ . 
'/includes/OOUILightNCandy.php',
        'OOUIPlayground\\ParserHooks' => __DIR__ . '/includes/ParserHooks.php',
        'OOUIPlayground\\PreCodeRenderer' => __DIR__ . 
'/includes/CodeRenderer.php',
+       'OOUIPlayground\\RecursiveArgumentFilter' => __DIR__ . 
'/includes/argument-filters/ArgumentFilter.php',
+       'OOUIPlayground\\SubitemFilter' => __DIR__ . 
'/includes/argument-filters/SubitemFilter.php',
        'OOUIPlayground\\WidgetDocumenter' => __DIR__ . 
'/includes/WidgetDocumenter.php',
        'OOUIPlayground\\WidgetFactory' => __DIR__ . 
'/includes/WidgetFactory.php',
        'OOUIPlayground\\WidgetInfo' => __DIR__ . '/includes/WidgetInfo.php',
diff --git a/includes/argument-filters/ArgumentFilter.php 
b/includes/argument-filters/ArgumentFilter.php
index 3dc144f..0965ec4 100644
--- a/includes/argument-filters/ArgumentFilter.php
+++ b/includes/argument-filters/ArgumentFilter.php
@@ -5,7 +5,15 @@
        function filter( WidgetInfo $widget, array &$args );
 }
 
-class ArgumentFilterGroup implements ArgumentFilterInterface {
+abstract class RecursiveArgumentFilter implements ArgumentFilterInterface {
+       protected $parentArgumentFilter = false;
+
+       public function setParentFilter( ArgumentFilterInterface $parent ) {
+               $this->parentArgumentFilter = $parent;
+       }
+}
+
+class ArgumentFilterGroup extends RecursiveArgumentFilter {
        /** @var array[ArgumentFilterInterface] */
        protected $filters;
 
@@ -24,5 +32,9 @@
 
        public function addFilter( ArgumentFilterInterface $filter ) {
                $this->filters[] = $filter;
+
+               if ( $filter instanceof RecursiveArgumentFilter ) {
+                       $filter->setParentFilter( $this->parentArgumentFilter 
?: $this );
+               }
        }
 }
diff --git a/includes/argument-filters/SubitemFilter.php 
b/includes/argument-filters/SubitemFilter.php
new file mode 100644
index 0000000..ae9c72d
--- /dev/null
+++ b/includes/argument-filters/SubitemFilter.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace OOUIPlayground;
+
+class SubitemFilter extends RecursiveArgumentFilter {
+       /** @var array The names of config variables that may hold subitems */
+       protected $subitemNames;
+
+       public function __construct( array $subitemNames ) {
+               $this->subitemNames = $subitemNames;
+       }
+
+       public function filter( WidgetInfo $widget, array &$args ) {
+               foreach( $this->subitemNames as $name => $widgetInfo ) {
+                       if ( isset( $args[$name] ) && is_array( $args[$name] ) 
) {
+                               $this->filterSubitem( $widgetInfo, $args[$name] 
);
+                       }
+               }
+       }
+
+       protected function filterSubitem( WidgetInfo $widget, array &$config ) {
+               if ( $this->parentArgumentFilter ) {
+                       $this->parentArgumentFilter->filter( $widget, $config );
+               }
+       }
+}
diff --git a/includes/container.php b/includes/container.php
index 02a6858..fba605b 100644
--- a/includes/container.php
+++ b/includes/container.php
@@ -238,6 +238,14 @@
        $factory->addFilter( new GroupElementFilter( $factory ) );
        $factory->addFilter( new DeferredGroupElementFilter( $factory ), true );
 
+       $subitemFilterConfig =
+               array(
+                       'menu' => $c['widgetRepository']->getInfo( 'menuselect' 
),
+                       'popup' => $c['widgetRepository']->getInfo( 'popup' ),
+               );
+       $factory->addFilter( new SubitemFilter( $subitemFilterConfig ), true );
+       $factory->addFilter( new SubitemFilter( $subitemFilterConfig ), false );
+
        return $factory;
 };
 

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I26fc9cced9bebe87e43fc156995495c46e6c5b5f
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/OOUIPlayground
Gerrit-Branch: master
Gerrit-Owner: Werdna <[email protected]>

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

Reply via email to