/**
  * Construct.
  *
  * @param callable $encoderFactory The encoder factory.
  */
 public function __construct($encoderFactory = null)
 {
     if ($encoderFactory) {
         $this->setEncoderFactory($encoderFactory);
     } else {
         $this->encoderFactory = function (Output $output) {
             $encoder = new ChainEncoder();
             $encoder->register(new MultipleObjectsEncoder())->register(new JavascriptEncoder($output));
             return $encoder;
         };
     }
 }
Example #2
0
/*
 * The local event dispatcher is used for the leaflet javascript encoding system.
 */
$container['leaflet.definition.builder.event-dispatcher'] = $container->share(function ($container) {
    /** @var Boot $boot */
    $boot = $container['leaflet.boot'];
    $dispatcher = new EventDispatcher();
    return $boot->initializeEventDispatcher($dispatcher);
});
/*
 * The javascript encoder factory being used for building the map javascript.
 */
$container['leaflet.definition.builder.encoder-factory'] = function ($container) {
    $dispatcher = $container['leaflet.definition.builder.event-dispatcher'];
    return function (Output $output) use($dispatcher) {
        $encoder = new ChainEncoder();
        $encoder->register(new MultipleObjectsEncoder())->register(new EventDispatchingEncoder($dispatcher))->register(new JavascriptEncoder($output, JSON_UNESCAPED_SLASHES));
        return $encoder;
    };
};
/*
 * The leaflet builder transforms the definition to javascript.
 */
$container['leaflet.definition.builder'] = $container->share(function ($container) {
    /** @var Boot $boot */
    $boot = $container['leaflet.boot'];
    $dispatcher = $container['leaflet.definition.builder.event-dispatcher'];
    $factory = $container['leaflet.definition.builder.encoder-factory'];
    $builder = new Builder($factory);
    $leaflet = new Leaflet($builder, $dispatcher, array(), JSON_UNESCAPED_SLASHES ^ Flags::BUILD_STACK);
    return $boot->initializeLeafletBuilder($leaflet);