/** * {@inheritdoc} */ public function isEmpty() { if ($this->element->getValue()) { return false; } return true; }
/** * Detect valid formatting elements within a paragraph * * @param \Candybanana\HtmlToCarbonJson\Element * @return string */ protected function detectFormatting(Element $element) { if ($element->hasChildren()) { $formats = []; foreach ($element->getChildren() as $node) { if (!$node->isText() && in_array($node->getTagName(), $this->config['allowedFormattingTags'])) { $type = $this->config['formattingTags'][$node->getTagName()]; if (empty($node->getValue())) { continue; } list($from, $to) = $this->getTextPosition($element->getValue(), $node->getValue()); $format = ['type' => $type, 'from' => $from, 'to' => $to]; // if <a> tag, add attributes if ($type == 'a') { $format['attrs'] = ['href' => $node->getAttribute('href')]; } $formats[] = $format; } } return !empty($formats) ? $formats : null; } }
/** * Builds an object that will represent our JSON based on the sections we've extracted * * @param \Candybanana\HtmlToCarbonJson\Element * @return string */ protected function convertSection(Element $section) { $layouts = []; $layout = $prevComponentClass = null; foreach ($section->getChildren() as $sectionChild) { if (!($component = $this->matchWithComponent($sectionChild))) { // is there's a value in this element, throw error, otherwise ignore it if (!trim($sectionChild->getValue())) { continue; } // build the tag for easy debugging $tag = '<' . $sectionChild->getTagName(); foreach ($sectionChild->getAttributes() as $attribute) { $tag .= ' ' . $attribute->name . '="'; $tag .= $sectionChild->getAttribute($attribute->name) . '"'; } $tag .= '>'; dbg($section->getValue()); dbg($tag); dbg($sectionChild->getValue()); throw new Exceptions\InvalidStructureException("No component loaded to render '{$tag}' tags."); } // if empty, skip this child if ($component->isEmpty()) { continue; } $componentClass = get_class($component); // create a new layout if we're not in one, or the component requires a new one if ($component->requiresNewLayout() || $componentClass !== $prevComponentClass) { // save previous layout if ($layout) { $layouts[] = $layout->render(); } // create new $layout = new Layout($component->getLayout()); } $layout->addComponent($component->render($this)); $prevComponentClass = $componentClass; } // render the last layout if ($layout) { $layouts[] = $layout->render(); } // create final section json if (!empty($layouts)) { $section = ['name' => self::carbonId(), 'component' => 'Section', 'components' => $layouts]; return $section; } // Strip nodes named in remove_nodes // $tags_to_remove = explode(' ', $this->getConfig()->getOption('remove_nodes')); // if (in_array($tag, $tags_to_remove)) { // return false; // } }