/**
  * 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));
         }
     }
 }
Example #2
0
 /**
  * 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();
     }
 }