JsLibraryFeature = new JsLibraryFeature($gadgetLibraries, $containerLibraries); } public function create() { return $this->JsLibraryFeature; } public function getLibraries($context) { return $context == 'GADGET' ? $this->JsLibraryFeature->gadgetLibraries : $this->JsLibraryFeature->containerLibraries; } } class JsLibraryFeature extends GadgetFeature { public $containerLibraries = array(); public $gadgetLibraries = array(); public function __construct($gadgetLibraries, $containerLibraries) { // we have a single constructor for both a single and multiple libraries, so handle it in code instead if ($gadgetLibraries != null && is_array($gadgetLibraries)) { $this->gadgetLibraries = array_merge($this->gadgetLibraries, $gadgetLibraries); } elseif ($gadgetLibraries != null && $gadgetLibraries instanceof JsLibrary) { $this->gadgetLibraries[] = $gadgetLibraries; } if ($containerLibraries != null && is_array($containerLibraries)) { $this->containerLibraries = array_merge($this->containerLibraries, $containerLibraries); } elseif ($containerLibraries != null && $containerLibraries instanceof JsLibrary) { $this->containerLibraries[] = $containerLibraries; } } public function prepare($gadget, $context, $params) { // do nothing } public function process($gadget, $context, $params) { $libraries = array(); $libraries = $context->getRenderingContext() == 'GADGET' ? $this->gadgetLibraries : $this->containerLibraries; foreach ($libraries as $library) { $gadget->addJsLibrary($library); } } }