/**
  * Renders the js container extra.
  *
  * @param \Ivory\GoogleMap\Map $map The map.
  *
  * @return string The JS output.
  */
 public function renderJsContainerExtra(Map $map)
 {
     $output = array();
     foreach ($map->getInfoWindows() as $infoWindow) {
         if ($infoWindow->isOpen()) {
             $output[] = $this->infoWindowHelper->renderOpen($infoWindow, $map);
         }
     }
     foreach ($map->getMarkers() as $marker) {
         if ($marker->hasInfoWindow() && $marker->getInfoWindow()->isOpen()) {
             $output[] = $this->infoWindowHelper->renderOpen($marker->getInfoWindow(), $map, $marker);
         }
     }
     foreach ($this->computeBounds($map) as $bound) {
         if ($bound->hasExtends()) {
             $output[] = $this->boundHelper->renderExtends($bound);
         }
     }
     if ($map->isAutoZoom()) {
         $output[] = $this->renderMapBound($map);
     } else {
         $output[] = $this->renderMapCenter($map);
     }
     return implode('', $output);
 }
 public function testRenderOpenWithMarker()
 {
     $map = $this->getMock('Ivory\\GoogleMap\\Map');
     $map->expects($this->once())->method('getJavascriptVariable')->will($this->returnValue('map'));
     $infoWindow = new InfoWindow();
     $infoWindow->setJavascriptVariable('infoWindow');
     $infoWindow->setPosition(1.1, 2.1, true);
     $infoWindow->setContent('content');
     $infoWindow->setOpen(true);
     $infoWindow->setOptions(array('option1' => 'value1', 'option2' => 'value2'));
     $marker = $this->getMock('Ivory\\GoogleMap\\Overlays\\Marker');
     $marker->expects($this->once())->method('getJavascriptVariable')->will($this->returnValue('marker'));
     $this->assertSame('infoWindow.open(map, marker);' . PHP_EOL, $this->infoWindowHelper->renderOpen($infoWindow, $map, $marker));
 }
    /**
     * Registers the info window event (auto open).
     *
     * @param \Ivory\GoogleMap\Overlays\Marker $marker The marker.
     * @param \Ivory\GoogleMap\Map             $map    The map.
     */
    protected function registerInfoWindowEvent(Marker $marker, Map $map)
    {
        $closableInfoWindows = sprintf('%s.closable_info_windows', $this->getJsContainerName($map));
        $handle = <<<EOF
function () {
    for (var info_window in {$closableInfoWindows}) {
        {$closableInfoWindows}[info_window].close();
    }
    {$this->infoWindowHelper->renderOpen($marker->getInfoWindow(), $map, $marker)}
}
EOF;
        $event = new Event();
        $event->setJavascriptVariable(sprintf('%s_%s', $marker->getJavascriptVariable(), 'info_window_event'));
        $event->setInstance($marker->getJavascriptVariable());
        $event->setEventName($marker->getInfoWindow()->getOpenEvent());
        $event->setHandle($handle);
        $map->getEventManager()->addEvent($event);
    }