[viewId,] ] protected array $renderedCSS; protected HTML $html; public function __construct(HTML $html) { $this->html = $html; $this->renderedCSS = []; } /** * @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(View $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->renderedCSS)) { $this->renderedCSS[$pageId] = []; } if (! in_array($view->getSource(), $this->renderedCSS[$pageId])) { $this->renderedCSS[$pageId][] = $view->getSource(); $isEnqueuedAssetsOnPage = false; } if (! $isEnqueuedAssetsOnPage) { $cssCode = str_replace(["\t", "\n", "\r"], '', $view->cssCode); $cssCode = trim($cssCode); // no escaping, it's a CSS code, so e.g '.a > .b' shouldn't be escaped $viewMarkup .= $cssCode ? "" : ''; } return $viewMarkup; } }