Skip to content

Commit c3268ca

Browse files
committed
Add initial RequireJS support
See barryvdh/laravel-debugbar#423
1 parent e6109df commit c3268ca

File tree

1 file changed

+42
-6
lines changed

1 file changed

+42
-6
lines changed

src/DebugBar/JavascriptRenderer.php

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ class JavascriptRenderer
6060

6161
protected $enableJqueryNoConflict = true;
6262

63+
protected $useRequireJs = false;
64+
6365
protected $initialization;
6466

6567
protected $controls = array();
@@ -143,6 +145,9 @@ public function setOptions(array $options)
143145
if (array_key_exists('enable_jquery_noconflict', $options)) {
144146
$this->setEnableJqueryNoConflict($options['enable_jquery_noconflict']);
145147
}
148+
if (array_key_exists('use_requirejs', $options)) {
149+
$this->setUseRequireJs($options['use_requirejs']);
150+
}
146151
if (array_key_exists('controls', $options)) {
147152
foreach ($options['controls'] as $name => $control) {
148153
$this->addControl($name, $control);
@@ -352,6 +357,28 @@ public function isJqueryNoConflictEnabled()
352357
return $this->enableJqueryNoConflict;
353358
}
354359

360+
/**
361+
* Sets whether to use RequireJS or not
362+
*
363+
* @param boolean $enabled
364+
* @return $this
365+
*/
366+
public function setUseRequireJs($enabled = true)
367+
{
368+
$this->useRequireJs = $enabled;
369+
return $this;
370+
}
371+
372+
/**
373+
* Checks if RequireJS is used
374+
*
375+
* @return boolean
376+
*/
377+
public function isRequireJsUsed()
378+
{
379+
return $this->useRequireJs;
380+
}
381+
355382
/**
356383
* Adds a control to initialize
357384
*
@@ -710,21 +737,25 @@ public function dumpCssAssets($targetFilename = null)
710737
*/
711738
public function dumpJsAssets($targetFilename = null)
712739
{
713-
$this->dumpAssets($this->getAssets('js'), $targetFilename);
740+
$this->dumpAssets($this->getAssets('js'), $targetFilename, $this->useRequireJs);
714741
}
715742

716743
/**
717744
* Write assets to standard output or in a file
718745
*
719746
* @param array $files
720747
* @param string $targetFilename
748+
* @param bool $useRequireJs
721749
*/
722-
protected function dumpAssets($files, $targetFilename = null)
750+
protected function dumpAssets($files, $targetFilename = null, $useRequireJs = false)
723751
{
724752
$content = '';
725753
foreach ($files as $file) {
726754
$content .= file_get_contents($file) . "\n";
727755
}
756+
if ($useRequireJs) {
757+
$content = "define('debugbar', ['jquery'], function($){\r\n" . $content . "\r\n return PhpDebugBar; \r\n});";
758+
}
728759
if ($targetFilename !== null) {
729760
file_put_contents($targetFilename, $content);
730761
} else {
@@ -752,7 +783,7 @@ public function renderHead()
752783
$html .= sprintf('<script type="text/javascript" src="%s"></script>' . "\n", $file);
753784
}
754785

755-
if ($this->enableJqueryNoConflict) {
786+
if ($this->enableJqueryNoConflict && !$this->useRequireJs) {
756787
$html .= '<script type="text/javascript">jQuery.noConflict(true);</script>' . "\n";
757788
}
758789

@@ -820,7 +851,7 @@ public function replaceTagInBuffer($here = true, $initialize = true, $renderStac
820851
* AJAX request should not render the initialization code.
821852
*
822853
* @param boolean $initialize Whether or not to render the debug bar initialization code
823-
* @param bool $renderStackedData Whether or not to render the stacked data
854+
* @param boolean $renderStackedData Whether or not to render the stacked data
824855
* @return string
825856
*/
826857
public function render($initialize = true, $renderStackedData = true)
@@ -840,7 +871,12 @@ public function render($initialize = true, $renderStackedData = true)
840871
$suffix = !$initialize ? '(ajax)' : null;
841872
$js .= $this->getAddDatasetCode($this->debugBar->getCurrentRequestId(), $this->debugBar->getData(), $suffix);
842873

843-
return "<script type=\"text/javascript\">\n$js\n</script>\n";
874+
if ($this->useRequireJs){
875+
return "<script type=\"text/javascript\">\nrequire(['debugbar'], function(PhpDebugBar){ $js });\n</script>\n";
876+
} else {
877+
return "<script type=\"text/javascript\">\n$js\n</script>\n";
878+
}
879+
844880
}
845881

846882
/**
@@ -950,7 +986,7 @@ protected function getJsControlsDefinitionCode($varname)
950986
*
951987
* @param string $requestId
952988
* @param array $data
953-
* @param null $suffix
989+
* @param mixed $suffix
954990
* @return string
955991
*/
956992
protected function getAddDatasetCode($requestId, $data, $suffix = null)

0 commit comments

Comments
 (0)