[viewId,] ]
protected array $renderedAssets;
protected HTML $html;
public function __construct(HTML $html)
{
$this->html = $html;
$this->renderedAssets = [];
}
/**
* @param FieldMeta $fieldMeta
* @param Item $item
*
* @return string
*/
protected function getRowMarkup(FieldMeta $fieldMeta, $item): string
{
$fieldId = $item->field->id;
return sprintf("\r\n\t\r\n", esc_html($fieldId)) .
$this->html->viewRow(
'row',
"\t",
$item->field->id,
$item->field->label,
'$' . $item->field->id . '$',
false
) .
sprintf("\t\r\n", esc_html($fieldId));
}
public function getMarkup(AcfViewData $view, int $pageId, string $viewMarkup = ''): string
{
if (! $viewMarkup) {
$fieldsMeta = $view->getFieldsMeta();
// e.g. already filled for cache/tests
if (! $fieldsMeta) {
$view->setFieldsMeta();
$fieldsMeta = $view->getFieldsMeta();
}
$content = '';
foreach ($view->items as $item) {
$content .= $this->getRowMarkup($fieldsMeta[$item->field->getAcfFieldId()], $item);
}
$viewMarkup = $this->html->view($view->getSource(), $view->cssClasses, $content);
}
if (! $pageId) {
return $viewMarkup;
}
// only once per page
$isEnqueuedAssetsOnPage = true;
if (! key_exists($pageId, $this->renderedAssets)) {
$this->renderedAssets[$pageId] = [];
}
if (! in_array($view->getSource(), $this->renderedAssets[$pageId])) {
$this->renderedAssets[$pageId][] = $view->getSource();
$isEnqueuedAssetsOnPage = false;
}
if (! $isEnqueuedAssetsOnPage) {
$cssCode = str_replace(["\t", "\n", "\r"], '', $view->cssCode);
$cssCode = trim($cssCode);
$jsCode = str_replace(["\t", "\n", "\r"], '', $view->jsCode);
$jsCode = trim($jsCode);
// no escaping, it's a CSS code, so e.g '.a > .b' shouldn't be escaped
$viewMarkup .= $cssCode ?
"" :
'';
$viewMarkup .= $jsCode ?
"" :
'';
}
return $viewMarkup;
}
}