Fix and simplify dynamic dictionaries load in ajax pages

This commit is contained in:
Molkobain
2021-07-01 09:48:00 +02:00
parent 9048d09bf6
commit e46743af2a
3 changed files with 33 additions and 101 deletions

View File

@@ -20,8 +20,6 @@ class AjaxPage extends WebPage implements iTabbedPage
*/
protected $m_oTabs;
private $m_sMenu; // If set, then the menu will be updated
/** @var string Scripts to load entries of dictionary */
protected $s_dict_scripts;
const DEFAULT_PAGE_TEMPLATE_REL_PATH = 'pages/backoffice/ajaxpage/layout';
/** @var string */
@@ -161,22 +159,10 @@ class AjaxPage extends WebPage implements iTabbedPage
header($s_header);
}
// Prepare internal parts (js files, css files, js snippets, css snippets, ...)
// - Generate necessary dict. files
// Dict entries for JS
if ($this->bAddJSDict) {
if ((count($this->a_dict_entries) > 0) || (count($this->a_dict_entries_prefixes) > 0)) {
if (class_exists('Dict')) {
// The dictionary may not be available for example during the setup...
// Create a specific dictionary file and load it as a JS script
$sSignature = $this->get_dict_signature();
$sJSFileName = utils::GetCachePath().$sSignature.'.js';
if (!file_exists($sJSFileName) && is_writable(utils::GetCachePath())) {
file_put_contents($sJSFileName, $this->get_dict_file_content());
}
// Load the dictionary as the first javascript file, so that other JS file benefit from the translations
$this->s_dict_scripts = utils::GetAbsoluteUrlAppRoot().'pages/ajax.document.php?operation=dict&s='.$sSignature;
}
}
$this->output_dict_entries();
}
ConsoleBlockRenderer::AddCssJsToPage($this, $this->oContentLayout);
@@ -200,7 +186,6 @@ class AjaxPage extends WebPage implements iTabbedPage
'aCssInline' => $this->a_styles,
'aJsFiles' => $this->a_linked_scripts,
'aJsInlineLive' => $this->a_scripts,
'sDictScript' => $this->s_dict_scripts,
'aJsInlineOnDomReady' => $this->GetReadyScripts(),
'aJsInlineOnInit' => $this->a_init_scripts,
'bEscapeContent' => ($this->sContentType == 'text/html') && ($this->sContentDisposition == 'inline'),

View File

@@ -702,7 +702,18 @@ class WebPage implements Page
{
$aEntries = array_merge($aEntries, Dict::ExportEntries($sPrefix));
}
$sJSFile = 'var aDictEntries = '.json_encode($aEntries);
$sEntriesAsJson = json_encode($aEntries);
$sJSFile = <<<JS
// Create variable so it can be used by the Dict class on initialization
var aDictEntries = {$sEntriesAsJson};
// Check if Dict._entries already exists in order to complete, this is for async calls only.
// Note: We should not overload the WebPage::get_dict_file_content() in AjaxPage to put the part below as the same dict file can be consumed either by a regular page or an async page.
if (typeof Dict._entries != "undefined") {
$.extend(Dict._entries, aDictEntries);
}
JS;
return $sJSFile;
}
@@ -1087,15 +1098,16 @@ class WebPage implements Page
header($sHeader);
}
// Compute and add dict entries for JS
if ($this->bAddJSDict) {
$this->output_dict_entries();
}
$s_captured_output = $this->ob_get_clean_safe();
$aData = [];
// Prepare internal parts (js files, css files, js snippets, css snippets, ...)
// - Generate necessary dict. files
if ($this->bAddJSDict) {
$this->output_dict_entries();
}
$aData['oLayout'] = $this->oContentLayout;
$aData['aDeferredBlocks'] = $this->GetDeferredBlocks($this->oContentLayout);