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