Skip to content

Commit 6dcc737

Browse files
committed
MC-15981: Page Builder Render
1 parent 121dbd8 commit 6dcc737

File tree

18 files changed

+629
-139
lines changed

18 files changed

+629
-139
lines changed

app/code/Magento/PageBuilder/Block/Adminhtml/Stage/Render.php

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,59 @@
99
namespace Magento\PageBuilder\Block\Adminhtml\Stage;
1010

1111
use Magento\Framework\View\Element\Template;
12+
use Magento\RequireJs\Model\FileManager;
1213

1314
/**
1415
* Class Render
1516
*/
1617
class Render extends Template
1718
{
19+
private $fileManager;
1820

19-
}
21+
/**
22+
* @param Template\Context $context
23+
* @param FileManager $fileManager
24+
* @param array $data
25+
*/
26+
public function __construct(
27+
Template\Context $context,
28+
FileManager $fileManager,
29+
array $data = []
30+
) {
31+
parent::__construct($context, $data);
32+
$this->fileManager = $fileManager;
33+
}
34+
35+
/**
36+
* @return string
37+
* @throws \Magento\Framework\Exception\LocalizedException
38+
*/
39+
public function getLocalStoragePolyfillIUrl() : string
40+
{
41+
$asset = $this->_assetRepo->createAsset('mage/polyfill.js');
42+
return $asset->getUrl();
43+
}
44+
45+
/**
46+
* Generate the URL to RequireJS
47+
*
48+
* @return string
49+
* @throws \Magento\Framework\Exception\LocalizedException
50+
*/
51+
public function getRequireJsUrl() : string
52+
{
53+
$asset = $this->_assetRepo->createAsset('requirejs/require.js');
54+
return $asset->getUrl();
55+
}
56+
57+
/**
58+
* Retrieve the URL to the RequireJS Config file
59+
*
60+
* @return string
61+
*/
62+
public function getRequireJsConfigUrl() : string
63+
{
64+
$requireJsConfig = $this->fileManager->createRequireJsConfigAsset();
65+
return $requireJsConfig->getUrl();
66+
}
67+
}

app/code/Magento/PageBuilder/Controller/Adminhtml/Stage/Render.php

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,15 @@
77

88
namespace Magento\PageBuilder\Controller\Adminhtml\Stage;
99

10-
class Render extends \Magento\Backend\App\Action
10+
use Magento\Framework\App\Action\HttpGetActionInterface;
11+
use Magento\RequireJs\Block\Html\Head\Config;
12+
13+
/**
14+
* Class Render
15+
*
16+
* Iframe to render Page Builder stage in isolation
17+
*/
18+
class Render extends \Magento\Backend\App\Action implements HttpGetActionInterface
1119
{
1220
/**
1321
* Preview transactional email action
@@ -16,7 +24,19 @@ class Render extends \Magento\Backend\App\Action
1624
*/
1725
public function execute()
1826
{
19-
$this->_view->loadLayout();
20-
$this->_view->renderLayout();
27+
$layout = $this->_view->getLayout();
28+
$requireJs = $layout->createBlock(
29+
\Magento\Backend\Block\Page\RequireJs::class,
30+
'require.js'
31+
);
32+
$requireJs->setTemplate('Magento_Backend::page/js/require_js.phtml');
33+
/* @var \Magento\PageBuilder\Block\Adminhtml\Stage\Render $renderBlock */
34+
$renderBlock = $layout->createBlock(
35+
\Magento\PageBuilder\Block\Adminhtml\Stage\Render::class,
36+
'stage_render'
37+
);
38+
$renderBlock->setTemplate('Magento_PageBuilder::stage/render.phtml');
39+
$this->getResponse()->setBody($requireJs->toHtml() . $renderBlock->toHtml());
40+
$this->getResponse()->sendResponse();
2141
}
2242
}

app/code/Magento/PageBuilder/view/adminhtml/layout/pagebuilder_stage_render.xml

Lines changed: 0 additions & 19 deletions
This file was deleted.

app/code/Magento/PageBuilder/view/adminhtml/templates/stage/render.phtml

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,46 @@
66

77
/** @var \Magento\PageBuilder\Block\Adminhtml\Stage\Render $block */
88
?>
9-
Page Builder Render Frame
9+
<script type="text/javascript">
10+
// Shim localStorage as it won't work correctly in our sandboxed iframe
11+
Object.defineProperty(
12+
window,
13+
'localStorage',
14+
{
15+
get: function () {
16+
return {
17+
_data: {},
18+
setItem: function (id, val) {
19+
return this._data[id] = String(val);
20+
},
21+
getItem: function (id) {
22+
return this._data.hasOwnProperty(id) ? this._data[id] : undefined;
23+
},
24+
removeItem: function (id) {
25+
return delete this._data[id];
26+
},
27+
clear: function () {
28+
return this._data = {};
29+
}
30+
};
31+
}
32+
}
33+
);
34+
</script>
35+
<script type="text/javascript" src="<?= $block->escapeUrl($block->getRequireJsUrl()); ?>"></script>
36+
<script type="text/javascript" src="<?= $block->escapeUrl($block->getRequireJsConfigUrl()); ?>"></script>
37+
<script type="text/javascript">
38+
require.config({
39+
'map': {
40+
'*': {
41+
'text': 'Magento_PageBuilder/js/render/requirejs/text',
42+
}
43+
},
44+
})
45+
</script>
1046
<script type="text/javascript">
1147
require(['Magento_PageBuilder/js/render/frame'], function (listen) {
1248
listen('<?= $block->escapeUrl($block->getBaseUrl()); ?>');
1349
});
14-
</script>
50+
</script>
51+
Page Builder Render Frame

app/code/Magento/PageBuilder/view/adminhtml/web/js/content-type/observable-updater.js

Lines changed: 18 additions & 18 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/js/master-format/render.js

Lines changed: 42 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/js/master-format/render/serialize.js

Lines changed: 8 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)