You are here

function _semantic_panels_get_html in Semantic Panels 7

Same name and namespace in other branches
  1. 7.2 semantic_panels.module \_semantic_panels_get_html()

Render an element as HTML.

1 call to _semantic_panels_get_html()
template_preprocess_semantic_panels_pane in plugins/styles/semantic_panels.inc
Preprocess variables for semantic-panels-pane.tpl.php.

File

./semantic_panels.module, line 98
Semantic Panels.

Code

function _semantic_panels_get_html($element_key, $element_data, $pane_semantic_settings) {
  $element_settings = $pane_semantic_settings[$element_key];
  $element_output = render($element_data['content']);
  if (!empty($element_settings['type']) && !empty($element_data['default_type'])) {
    $element_settings['type'] = _semantic_panels_get_type($element_settings['type'], $element_data['default_type']);
  }
  if (isset($element_settings['link_enabled']) && $element_settings['link_enabled'] && $element_settings['link']['path']) {
    $token_replace_data = _semantic_panels_context_to_token_replace_data($element_data['context']);
    $token_content = token_replace($element_settings['link']['path'], $token_replace_data);
    if (!empty($pane_semantic_settings['keyword_substitution'])) {
      if (!empty($element_settings['link']['attributes_array'])) {
        foreach ($element_settings['link']['attributes_array'] as $key => $value) {
          $element_settings['link']['attributes_array'][$key] = ctools_context_keyword_substitute($value, array(), $element_data['context']);
        }
      }
      $element_settings['link']['class'] = ctools_context_keyword_substitute($element_settings['link']['class'], array(), $element_data['context']);
      $token_content = ctools_context_keyword_substitute($token_content, array(), $element_data['context']);
    }

    // If token outputs a link (like the Link field) lets parse out the url.
    if (preg_match('/<a.*\\s+href="(?<url>[^"]*)"[>]*>/i', $token_content, $matches)) {
      $url = $matches['url'];
    }
    else {
      $url = $token_content;
    }

    // Remove tokens that have note been replaced with data.
    $url = preg_replace('/\\[[^[]+\\]/', '', $url);
    if ($url != '' && ($options = drupal_parse_url($url))) {
      $options += array(
        'html' => TRUE,
        'attributes' => array(
          'class' => explode(' ', $element_settings['link']['class']),
        ) + $element_settings['link']['attributes_array'],
      );
      $element_output = l($element_output, $options['path'], $options);
    }
  }
  if (!empty($element_settings['type'])) {
    $class = '';
    if ($pane_semantic_settings['add_default_classes']) {
      $class = $element_data['default_classes'];
    }
    if ($element_settings['class_enable'] && $element_settings['class']) {
      if ($class) {
        $class .= ' ';
      }
      $class .= $element_settings['class'];
    }
    $pre = '<' . $element_settings['type'];
    if ($class) {
      if (!empty($pane_semantic_settings['keyword_substitution'])) {
        $class = ctools_context_keyword_substitute($class, array(), $element_data['context']);
      }
      $pre .= ' class="' . $class . '"';
    }
    if (!empty($element_settings['attributes_array'])) {
      if (!empty($pane_semantic_settings['keyword_substitution'])) {
        foreach ($element_settings['attributes_array'] as $key => $value) {
          $element_settings['attributes_array'][$key] = ctools_context_keyword_substitute($value, array(), $element_data['context']);
        }
      }
      $pre .= ' ' . drupal_attributes($element_settings['attributes_array']);
    }
    $pre .= '>';
    $suf = '</' . $element_settings['type'] . '>';
    return $pre . $element_output . $suf;
  }
  return $element_output;
}