/** * Encode OmnivoreLayers so that the internal used contao.loadLayer method is used. * * @param EncodeValueEvent $event The subscribed event. * * @return void * @throws EncodeValueFailed If encoding failed. */ public function loadLayer(EncodeValueEvent $event) { $value = $event->getValue(); $encoder = $event->getEncoder(); $template = 'L.contao.load(%s, %s, %s, %s, map);'; if ($value instanceof OmnivoreLayer) { $url = $value->getUrl(); if ($url instanceof RequestUrl) { $url = $url->getHash(); } elseif (strpos($url, '/') !== false) { // Slash found, not a Contao leaflet hash, do not replace encoding. return; } if ($value->getCustomLayer()) { $ref = $encoder->encodeReference($value->getCustomLayer()); } else { $template = $encoder->encodeReference($value) . ' = ' . $template; $ref = 'null'; } $event->addLine(sprintf($template, $encoder->encodeValue($url), $encoder->encodeValue(strtolower(str_replace('Omnivore.', '', $value->getType()))), $encoder->encodeArray($value->getOptions(), JSON_FORCE_OBJECT), $ref)); foreach ($value->getMethodCalls() as $call) { $event->addLine($call->encode($encoder, Flags::CLOSE_STATEMENT)); } } }
/** * Handle compile event. * * @param EncodeValueEvent $event The subscribed event. * * @return void */ public function handleEncode(EncodeValueEvent $event) { $definition = $event->getValue(); if (!$definition instanceof Definition) { return; } $type = $definition->getType(); $method = 'encode' . $this->convertTypeToMethod($type); if (method_exists($this, $method)) { $buffer = $this->{$method}($definition, $event->getEncoder(), $event->getJsonFlags()); if ($buffer) { $event->addLine($buffer); $this->handleMethodCalls($definition, $event->getEncoder(), $event); } $event->setSuccessful(); } }