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)