/** * Appends the javascript features configuration string * * @param Gadget $gadget * @param unknown_type $hasForcedLibs * @return string */ private function appendJsConfig(Shindig_Gadget $gadget, $hasForcedLibs) { $container = $this->context->getContainer(); $containerConfig = $this->context->getContainerConfig(); //TODO some day we should parse the forcedLibs too, and include their config selectivly as well for now we just include everything if forced libs is set. if ($hasForcedLibs) { $gadgetConfig = $containerConfig->getConfig($container, 'gadgets.features'); } else { $gadgetConfig = array(); $featureConfig = $containerConfig->getConfig($container, 'gadgets.features'); foreach ($gadget->getJsLibraries() as $library) { $feature = $library->getFeatureName(); if (!isset($gadgetConfig[$feature]) && !empty($featureConfig[$feature])) { $gadgetConfig[$feature] = $featureConfig[$feature]; } } } // Add gadgets.util support. This is calculated dynamically based on request inputs. // See java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java for reference. $requires = array(); foreach ($gadget->features as $feature) { $requires[$feature] = new EmptyClass(); } $gadgetConfig['core.util'] = $requires; if (isset($gadgetConfig['osml'])) { unset($gadgetConfig['osml']); } if (!isset($gadgetConfig['osapi.services']) || count($gadgetConfig['osapi.services']) == 1) { // this should really be set in config/container.js, but if not, we build a complete default set so at least most of it works out-of-the-box $gadgetConfig['osapi.services'] = array('gadgets.rpc' => array('container.listMethods'), 'http://%host%/social/rpc' => array("messages.update", "albums.update", "activities.delete", "activities.update", "activities.supportedFields", "albums.get", "activities.get", "mediaitems.update", "messages.get", "appdata.get", "system.listMethods", "people.supportedFields", "messages.create", "mediaitems.delete", "mediaitems.create", "people.get", "people.create", "albums.delete", "messages.delete", "appdata.update", "activities.create", "mediaitems.get", "albums.create", "appdata.delete", "people.update", "appdata.create"), 'http://%host%/gadgets/api/rpc' => array('cache.invalidate')); } return "gadgets.config.init(" . json_encode($gadgetConfig) . ");\n"; }