/** * 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; }; } }
/* * 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);