dataVendors = $dataVendors; } protected function generateCssCode( string $fieldSelector, FieldData $fieldData, ViewData $viewData ): string { return ''; } protected function generateJsCode( string $varName, FieldData $fieldData, ViewData $viewData ): string { return ''; } protected function getItemSelector( ViewData $viewData, FieldData $fieldData, bool $isFull, bool $isWithMagicSelector, string $target = 'field' ): string { if ($this->isLabelOutOfRow()) { $target = ''; } $itemSelector = $viewData->getItemSelector( $fieldData, $target, false, !$isFull ); // short version isn't available when common classes are used // e.g. ".acf-view__name .acf-view__field" required full if (!$isFull && !$viewData->isWithCommonClasses) { $itemSelector = explode(' ', $itemSelector); $itemSelector = $itemSelector[count($itemSelector) - 1]; } if ($isWithMagicSelector) { $bemPrefix = '.' . $viewData->getBemName() . '__'; $itemSelector = '#view__' . substr($itemSelector, strlen($bemPrefix)); } return $itemSelector; } /** * @return array{css:array,js:array} */ public function generateCode(CptData $cptData): array { $code = [ 'css' => [], 'js' => [], ]; if (!($cptData instanceof ViewData)) { return $code; } list($targetFields, $targetSubFields) = $this->dataVendors->getFieldsByFrontAsset(static::NAME, $cptData); foreach ($targetFields as $field) { $jsFieldSelector = $this->getItemSelector($cptData, $field, false, false); $cssFieldSelector = $this->getItemSelector($cptData, $field, false, true); $varName = $field->getTwigFieldId(); $jsCode = $this->generateJsCode($varName, $field, $cptData); $cssCode = $this->generateCssCode($cssFieldSelector, $field, $cptData); if ('' !== $jsCode) { $code['js'][$varName] = $this->getJsCodePiece($varName, $jsCode, $jsFieldSelector, false); } if ('' !== $cssCode) { $code['css'][$varName] = $this->getCodePiece($varName, $cssCode); } } foreach ($targetSubFields as $field) { $jsFieldSelector = $this->getItemSelector($cptData, $field, false, false); $cssFieldSelector = $this->getItemSelector($cptData, $field, false, true); $jsCode = $this->generateJsCode('item', $field, $cptData); $cssCode = $this->generateCssCode($cssFieldSelector, $field, $cptData); $varName = $field->getTwigFieldId(); if ('' !== $jsCode) { $code['js'][$varName] = $this->getJsCodePiece($varName, $jsCode, $jsFieldSelector, true); } if ('' !== $cssCode) { $code['css'][$varName] = $this->getCodePiece($varName, $cssCode); } } return $code; } public function getRowWrapperClass(string $rowType): string { return ''; } public function getRowWrapperTag(FieldData $fieldData, string $rowType): string { return ''; } public function getFieldWrapperTag(FieldData $fieldData, string $rowType): string { return ''; } /** * @return array */ public function getFieldWrapperAttrs(FieldData $fieldData, string $fieldId): array { return []; } /** * @return HtmlWrapper[] */ public function getFieldOuters(ViewData $viewData, FieldData $fieldData, string $fieldId, string $rowType): array { return []; } /** * @return HtmlWrapper[] */ public function getItemOuters(ViewData $viewData, FieldData $fieldData, string $fieldId, string $itemId): array { return []; } public function getInnerAttributes(FieldData $fieldData, string $fieldId): string { return ''; } public function isLabelOutOfRow(): bool { return false; } public function isWebComponentRequired(CptData $cptData): bool { if (!($cptData instanceof ViewData) || !$this->isWithWebComponent) { return false; } list($targetFields, $targetSubFields) = $this->dataVendors->getFieldsByFrontAsset(static::NAME, $cptData); return [] !== $targetFields || [] !== $targetSubFields; } }