diff --git a/README.md b/README.md index 7d3f336..ac6410f 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,7 @@ This will give you access to - [Rectangle](#rectangle) - [Circle](#circle) - [Render](#render) +- [RenderJavascript](#renderJavascript) ### Map @@ -249,6 +250,12 @@ The `render` method allows all maps to be rendered to the page, this method can Mapper::render(); Mapper::render(0); +### RenderJavascript + +The `renderJavascript` method allows all required javascript to be rendered to the page, this method can be included in Views or added as controller passed parameter. + + Mapper::renderJavascript(); + ### License Googlmapper is open-sourced software licensed under the [MIT license](http://opensource.org/licenses/MIT) diff --git a/spec/Cornford/Googlmapper/MapperSpec.php b/spec/Cornford/Googlmapper/MapperSpec.php index 00ad4b9..4ef1e4d 100644 --- a/spec/Cornford/Googlmapper/MapperSpec.php +++ b/spec/Cornford/Googlmapper/MapperSpec.php @@ -270,4 +270,9 @@ public function it_can_create_a_streetview_map() $this->render()->shouldReturn(self::STRING); } + public function it_can_create_javascript_inclusions() + { + $this->map(self::INTEGER, self::INTEGER)->shouldReturn($this); + $this->renderJavascript()->shouldReturn(self::STRING); + } } diff --git a/src/Cornford/Googlmapper/Contracts/MappingInterface.php b/src/Cornford/Googlmapper/Contracts/MappingInterface.php index f7b8510..8b7ff12 100644 --- a/src/Cornford/Googlmapper/Contracts/MappingInterface.php +++ b/src/Cornford/Googlmapper/Contracts/MappingInterface.php @@ -18,6 +18,13 @@ interface MappingInterface { */ public function render($item = -1); + /** + * Renders and returns Google Map javascript code. + * + * @return string + */ + public function renderJavascript(); + /** * Locate a location and return a Location instance. * diff --git a/src/Cornford/Googlmapper/Mapper.php b/src/Cornford/Googlmapper/Mapper.php index d7d3161..3a2d518 100644 --- a/src/Cornford/Googlmapper/Mapper.php +++ b/src/Cornford/Googlmapper/Mapper.php @@ -33,6 +33,39 @@ public function render($item = -1) return; } + return $this->view->make('googlmapper::mapper') + ->withView($this->view) + ->withOptions($this->generateRenderOptions($item)) + ->withItems($item > -1 ? [$item => $this->getItem($item)] : $this->getItems()) + ->render(); + } + + /** + * Renders and returns Google Map javascript code. + * + * @return string + */ + public function renderJavascript() + { + if (!$this->isEnabled()) { + return; + } + + return $this->view->make('googlmapper::javascript') + ->withView($this->view) + ->withOptions($this->generateRenderOptions()) + ->render(); + } + + /** + * Generates the render options for Google Map. + * + * @param integer $item + * + * @return string + */ + protected function generateRenderOptions($item = -1) + { $options = $this->getOptions(); foreach (($item > -1 ? [$this->getItem($item)] : $this->getItems()) as $model) { @@ -43,10 +76,7 @@ public function render($item = -1) } } - return $this->view->make('googlmapper::mapper') - ->withView($this->view) - ->withOptions($options) - ->withItems($item > -1 ? [$item => $this->getItem($item)] : $this->getItems())->render(); + return $options; } /** diff --git a/src/views/javascript.blade.php b/src/views/javascript.blade.php new file mode 100644 index 0000000..1d69162 --- /dev/null +++ b/src/views/javascript.blade.php @@ -0,0 +1,13 @@ +@if (!$view->shared('javascript', false)) + + @if ($view->share('javascript', true)) @endif + + + + @if ($options['cluster']) + + + + @endif + +@endif \ No newline at end of file diff --git a/src/views/mapper.blade.php b/src/views/mapper.blade.php index c1a1040..133fb34 100644 --- a/src/views/mapper.blade.php +++ b/src/views/mapper.blade.php @@ -1,10 +1,4 @@ - - -@if ($options['cluster']) - - - -@endif +@include('javascript') @foreach ($items as $id => $item)