<?php 
/** 
 * Implements qtag CSS. 
 * 
 * Automatically generated css data. 
 * 
 * @param Environment $env 
 *   The Environment. 
 * 
 * @param string $target 
 *   The qtag's target. 
 * 
 * @param array $attributes 
 *   The qtag's attributes. 
 * 
 * @return string 
 *   The rendered qtag. 
 */ 
function qtag_CSS($env, $target, $attributes) { 
  $page = $env->getData('page'); 
 
 
  // If target is specified, include the css file directly. 
  if (isset($target)) { 
    if (isset($attributes['module'])) { 
      $target = $env->getModule($attributes['module'])['path'] . '/' . $target; 
    } 
    $css = array($target); 
  } 
 
  else { 
    // If no target specified, assume loading of all page includes. 
    $css = $page->getData('css'); 
    $inline_css = $page->getData('css_inline'); 
  } 
 
  if (empty($attributes['external'])) { 
    $css_code = '<style>'; 
    // TODO: converting all inclusions into inline stylesheets. Faster, but is it good? 
    foreach ($css as $css_file) { 
      $css_code .= file_get_contents($css_file); 
    } 
 
    if (!empty($inline_css)) { 
      foreach ($inline_css as $inline_css_code) { 
        $css_code .= $inline_css_code . "\n"; 
      } 
    } 
    $css_code .= '</style>'; 
  } 
  else { 
    $css_code = '<link rel="stylesheet" href="' . $target . '" type="text/css" />'; 
  } 
  return $css_code; 
} 
 
/** 
 * Implements qtag JS. 
 * 
 * Automatically generated js data. 
 * 
 * @param Environment $env 
 *   The Environment. 
 * 
 * @param string $target 
 *   The qtag's target. 
 * 
 * @param array $attributes 
 *   The qtag's attributes. 
 * 
 * @return string 
 *   The rendered qtag. 
 */ 
function qtag_JS($env, $target, $attributes) { 
  $page = $env->getData('page'); 
 
  $js_code = ''; 
  $refresh =  isset($attributes['refresh']) ? ('?' . Doctor::timestamp($env)) : ''; 
 
  // If target is specified, include the css file directly. 
  if (isset($target)) { 
    if (isset($attributes['module'])) { 
      $target = $env->getModule($attributes['module'])['path'] . '/' . $target; 
    } 
    else { 
      $target = $env->dir['docroot'] . '/' . $target; 
    } 
    $js = array($target); 
  } 
  else { 
    // If no target specified, assume loading of all page includes. 
    $js = $page->getData('js'); 
  } 
 
  // TODO: converting all inclusions into inline stylesheets. Faster, but is it good? 
  foreach ($js as $js_file) { 
        $async = !empty($attributes['async']) ? ' async ' : ''; 
    // TODO: support per file async. 
        if (isset($attributes['inline'])) { 
            $js_code .= '<script>' . file_get_contents($js_file) . '</script>'; 
    } 
    else { 
      $js_code .= '<script src="' . $js_file . $refresh . '"></script>'; 
    } 
  } 
 
  return $js_code; 
} 
 
/** 
 * Implements qtag BODYCLASSES. 
 * 
 * Automatically generated header data. 
 * 
 * @param Environment $env 
 *   The Environment. 
 * 
 * @param string $target 
 *   The qtag's target. 
 * 
 * @param array $attributes 
 *   The qtag's attributes. 
 * 
 * @return string 
 *   The rendered qtag. 
 */ 
function qtag_BODYCLASSES($env, $target, $attributes) { 
  $page = $env->getData('page'); 
  $body_classes = $page->getData('body_classes'); 
  return implode(' ', $body_classes); 
} 
 
/** 
 * Implements qtag CONTEXT. 
 * 
 * Renders the current context. 
 * 
 * @param Environment $env 
 *   The Environment. 
 * 
 * @param string $target 
 *   The qtag's target. 
 * 
 * @param array $attributes 
 *   The qtag's attributes. 
 * 
 * @return string 
 *   The rendered qtag. 
 */ 
function qtag_CONTEXT($env, $target, $attributes) { 
  return $_REQUEST['context']; 
} 
 
 
/** 
 * Implements qtag EMPTY. 
 * 
 * Render an empty content (useful as ajax container). 
 * 
 * @param Environment $env 
 *   The Environment. 
 * 
 * @param string $target 
 *   The qtag's target. 
 * 
 * @param array $attributes 
 *   The qtag's attributes. 
 * 
 * @return string 
 *   The rendered qtag. 
 */ 
function qtag_EMPTY($env, $target, $attributes) { 
  $text = isset($attributes['text']) ? $attributes['text'] : ' '; 
  return $text; 
} 
 
/** 
 * Implements qtag Breadcrumb. 
 * 
 * Renders the full breadcrumb / lineage of the current node. 
 * 
 * @param Environment $env 
 *   The Environment. 
 * 
 * @param string $target 
 *   The qtag's target. 
 * 
 * @param array $attributes 
 *   The qtag's attributes. 
 * 
 * @return string 
 *   The rendered qtag. 
 */ 
function qtag_BREADCRUMB($env, $target, $attributes) { 
  $node = NodeFactory::current($env); 
 
  // Check if current node id home (main node). 
  if ($node->getName() == 'home'){ 
    // Do not show breadcrumb in homepage. 
    return ''; 
  } 
 
  $node_home = NodeFactory::load($env, 'home'); 
  // Builds the lineage of the node. 
  $node->buildLineage(); 
  // Starts with home node. 
  $breadcrumb = array('home' => $node_home) + $node->getLineage(); 
 
  if (empty($attributes['include_current'])) { 
    array_pop($breadcrumb); 
  } 
 
  // TODO: breadcrumb generation must be done in page.class. 
 
  $env->setData('breadcrumb', $breadcrumb); 
  $themed_bc = ''; 
  // Theme and renders the breadcrumb. 
  $themed_bc = '<ul class="breadcrumb">'; 
  if (count($breadcrumb) > 0 && $breadcrumb != '') { 
    foreach ($breadcrumb as $i => $node) { 
      // Add only published nodes without "breadcrumb_exclude". 
      if ($node->isPublished() && !$node->getAttributeJSON('breadcrumb_exclude')) { 
        $themed_bc .= '<li>[LINK:'. $node->getName() . ']</li>'; 
      } 
    } 
  } 
  $themed_bc .= '</ul>'; 
  return $themed_bc; 
} 
 
/** 
 * Implements qtag JSON. 
 * 
 * Encodes the target into json. 
 * 
 * @param Environment $env 
 *   The Environment. 
 * 
 * @param string $target 
 *   The qtag's target. 
 * 
 * @param array $attributes 
 *   The qtag's attributes. 
 * 
 * @return string 
 *   The rendered qtag. 
 */ 
function qtag_JSON($env, $target, $attributes) { 
  return json_encode($target); 
} 
 
 
 
 
 |