Source code for file /pattemplate/patTemplate/Dump/Html.php
Documentation is available at Html.php
* Dumps templates as HTML
* $Id: Html.php 356 2005-01-04 19:30:59Z schst $
// Check to ensure this file is within the rest of the framework
* Dumps templates as HTML
* @todo move this into patTemplate_Dump_Dhtml and keep it free from javascript
'headerFills' =>
'E1E7EB',
'subHeaderFills' =>
'F0F2F4',
'linkNormal' =>
'8CA0B4',
echo
' <style type="text/css">';
echo
' font-family: Arial, Tahoma, sans-serif;';
echo
' font-size: 12px;';
echo
' TABLE.patTemplate{';
echo
' border-collapse:collapse;';
echo
' color:#'.
$this->colors['linkNormal'].
';';
echo
' A.patTemplate:hover{';
echo
' color:#'.
$this->colors['linkHover'].
';';
echo
' font-size: 18px;';
echo
' font-style:italic;';
echo
' background-color: #'.
$this->colors['headerFills'].
';';
echo
' margin-bottom: 15px;';
echo
' border-bottom: 1px dashed #'.
$this->colors['borders'].
';';
echo
' border-top: 1px dashed #'.
$this->colors['borders'].
';';
echo
' font-size: 14px;';
echo
' H3.patTemplate,H3.patTemplateSub{';
echo
' background-color: #'.
$this->colors['headerFills'].
';';
echo
' border-bottom: 1px dashed #'.
$this->colors['borders'].
';';
echo
' border-top: 1px dashed #'.
$this->colors['borders'].
';';
echo
' font-size: 12px;';
echo
' font-weight: bold;';
echo
' H3.patTemplateSub{';
echo
' background-color: #'.
$this->colors['subHeaderFills'].
';';
echo
' border:1px dashed #'.
$this->colors['borders'].
';';
echo
' font-weight:normal;';
echo
' margin-bottom:3px;';
echo
' #patTemplateContent{';
echo
' background-color:#ffffff;';
echo
' border:dashed 1px #'.
$this->colors['borders'].
';';
echo
' .patTemplateSection{';
echo
' margin-bottom:20px;';
echo
' .patTemplateSubSection{';
echo
' margin-bottom:3px;';
echo
' .patTemplateData{';
echo
' .patTemplatePropBorder{';
echo
' white-space:nowrap;';
echo
' font-weight:bold;';
echo
' border:solid 1px #C8D3DA;';
echo
' .patTemplateProp{';
echo
' white-space:nowrap;';
echo
' font-weight:bold;';
echo
' .patTemplateSign{';
echo
' font-family:monospace;';
echo
' .patTemplateClick{';
echo
' .patTemplateCol{';
echo
' margin-bottom:8px;';
echo
' font-weight:bold;';
echo
' .patTemplateTblCol{';
echo
' padding-right:15px;';
echo
' border-right:dashed 1px #'.
$this->colors['borders'].
';';
echo
' .patTemplateTmplContent{';
echo
' border-top:dashed 1px #'.
$this->colors['borders'].
';';
echo
' .patTemplateSource{';
echo
' font-family:monospace;';
echo
' background-color:#'.
$this->colors['source'].
';';
echo
' margin-bottom:8px;';
echo
' .patTemplateVar{';
echo
' font-weight:bold;';
echo
' .patTemplateVarBorder{';
echo
' font-weight:bold;';
echo
' border:solid 1px #C8D3DA;';
echo
' .patTemplateVal{';
echo
' .patTemplateValBorder{';
echo
' border:solid 1px #C8D3DA;';
echo
' .patTemplateTmpl {';
echo
' font-weight:bold;';
echo
' <script language="JavaScript1.2" type="text/javascript">';
echo
' var tmpls = new Array();';
echo
' function patTemplateToggle( tmplName )';
echo
' var el = document.getElementById( \'tmpl-\' + tmplName );';
echo
' if( el.style.display == \'block\' )';
echo
' patTemplateCollapse( tmplName );';
echo
' patTemplateExpand( tmplName );';
echo
' function jump( tmplName )';
echo
' tmplName = tmplName.toLowerCase();';
echo
' patTemplateExpand( tmplName );';
echo
' document.location = \'#\' + tmplName';
echo
' function patTemplateExpandAll()';
echo
' for( var i = 0; i < tmpls.length; i++ )';
echo
' patTemplateExpand( tmpls[i] );';
echo
' function patTemplateCollapseAll()';
echo
' for( var i = 0; i < tmpls.length; i++ )';
echo
' patTemplateCollapse( tmpls[i] );';
echo
' function patTemplateExpand( tmplName )';
echo
' var el1 = document.getElementById( \'tmpl-\' + tmplName );';
echo
' var el2 = document.getElementById( \'tmpl-\' + tmplName + \'-sign\' );';
echo
' el1.style.display = \'block\';';
echo
' el2.innerHTML = \'[-]\';';
echo
' function patTemplateCollapse( tmplName )';
echo
' var el1 = document.getElementById( \'tmpl-\' + tmplName );';
echo
' var el2 = document.getElementById( \'tmpl-\' + tmplName + \'-sign\' );';
echo
' el1.style.display = \'none\';';
echo
' el2.innerHTML = \'[+]\';';
echo
' function patTemplateAddTmpl( tmplName )';
echo
' tmpls.push( tmplName );';
echo
' <div id="patTemplateContent">';
echo
' <h1 class="patTemplate">patTemplate Dump</h1>';
* dump the global variables
* @param array array containing all global variables
echo
'<div class="patTemplateSection"><h2 class="patTemplate">Global template variables ('.
count( $globals ).
')</h2>';
echo
'<div class="patTemplateSubSection" style="padding:5px;">';
echo
' <table border="0" cellpadding="0" cellpadding="0" class="patTemplate">';
foreach( $globals as $key =>
$value )
$this->_displayLine( $key, $value );
echo
'<div class="patTemplateSection"><h2 class="patTemplate">Templates ('.
count( $templates ).
') <span style="font-size:12px;font-weight:normal;"><a href="javascript:patTemplateExpandAll();" class="patTemplate">Expand all</a> | <a href="javascript:patTemplateCollapseAll();" class="patTemplate">Collapse all</a></span></h2>';
echo
'<div class="patTemplateData">Dumping selected templates...</div>';
foreach( $templates as $name =>
$tmpl )
if( !isset
( $vars[$name] ) )
$vars[$name] =
$this->_flattenVars( $vars[$name] );
echo
'<div class="patTemplateSubSection">';
echo
' <h3 class="patTemplate" onclick="patTemplateToggle(\''.
$name.
'\');" style="cursor:pointer;"><span id="tmpl-'.
$name.
'-sign" class="patTemplateSign">[+]</span> Template <a name="'.
$name.
'">"'.
$name.
'"</a></h3>';
echo
' <div class="patTemplateData" id="tmpl-'.
$name.
'">';
echo
' <script language="JavaScript1.2" type="text/javascript">';
echo
' patTemplateAddTmpl( \''.
$name.
'\' );';
echo
' <table cellpadding="0" cellspacing="0" border="0">';
echo
' <tr valign="top">';
echo
' <td style="width:200px;" class="patTemplateTblCol">';
$this->_displayAttributes( $tmpl, $name );
echo
' <td class="patTemplateTblCol" style="width:130px;">';
echo
' <td class="patTemplateTblCol" style="width:130px;">';
echo
' <div class="patTemplateCol">Dependencies</div>';
if( !empty( $tmpl['dependencies'] ) )
foreach( $tmpl['dependencies'] as $dependency )
array_push( $dependencies, '<a href="javascript:jump( \''.
$dependency.
'\' );" class="patTemplate">'.
$dependency.
'</a>' );
echo
implode( '<br>', $dependencies );
echo
'<i class="patTemplate">[none]</i>';
* ------------------------------------------------------------------
if( in_array( $tmpl['attributes']['type'], $nestedTypes ) )
foreach( $tmpl['subtemplates'] as $subName =>
$subDetails )
$content .=
$subDetails['data'];
$content =
$tmpl['content'];
$setVars =
$this->_extractVars( $content );
echo
'<div class="patTemplateTmplContent">';
echo
' <div class="patTemplateCol">Variables</div>';
if( !empty( $tmpl['comments'] ) )
echo
' <div class="patTemplateTmplContent">';
echo
' <div class="patTemplateCol">Comments</div>';
echo
' <div style="margin-bottom:7px;">';
echo
implode( '<br>', $tmpl['comments'] );
* ------------------------------------------------------------------
* display template content
echo
' <div class="patTemplateTmplContent">';
switch( $tmpl['attributes']['type'] )
echo
' <div class="patTemplateCol">Content</div>';
echo
' <div class="patTemplateSource"><pre>'.
$this->_highlightVars( htmlspecialchars( $tmpl['content'] ), $vars[$name] ).
'</pre></div>';
echo
'<i class="patTemplate">[none]</i>';
echo
'<table border="0" cellpadding="3" cellpadding="0" class="patTemplate">';
$this->_useBorders( true );
$this->_displayHead( 'Name', 'Assigned value', 'Modifier' );
foreach( $setVars as $var )
if( isset
( $vars[$tmplName][$var] ) )
$value =
$vars[$tmplName][$var];
$value =
'<i class="patTemplate">[no value set]</i>';
if( isset
( $tmpl['modifyVars'][$var] ) )
foreach( $tmpl['modifyVars'][$var]['params'] as $n =>
$val )
$modifier =
sprintf( '%s( %s )', $tmpl['modifyVars'][$var]['mod'], implode( ', ', $params ) );
$modifier =
'<i class="patTemplate">[none]</i>';
$this->_displayLine( $var, $value, $modifier );
$this->_useBorders( false );
foreach( $tmpl['subtemplates'] as $cond =>
$spec )
echo
' <h3 class="patTemplateSub" onclick="patTemplateToggle(\'Cond'.
$cond.
'\');" style="cursor:pointer;"><span id="tmpl-Cond'.
$cond.
'-sign" class="patTemplateSign">[+]</span> Subtemplate <a name="Cond'.
$cond.
'">"'.
$cond.
'"</a></h3>';
echo
' <div class="patTemplateData" id="tmpl-Cond'.
$cond.
'" style="margin-bottom:15px;">';
echo
' <script language="JavaScript1.2" type="text/javascript">';
echo
' patTemplateAddTmpl( \'Cond'.
$cond.
'\' );';
if( !empty( $spec['comments'] ) )
echo
' <div class="patTemplateCol">Comments</div>';
echo
' <div style="margin-bottom:7px;">';
echo
implode( '<br>', $spec['comments'] );
echo
' <div class="patTemplateCol">Dependencies</div>';
echo
' <div style="margin-bottom:7px;">';
if( !empty( $spec['dependencies'] ) )
foreach( $spec['dependencies'] as $dependency )
array_push( $dependencies, '<a href="javascript:jump( \''.
$dependency.
'\' );" class="patTemplate">'.
$dependency.
'</a>' );
echo
implode( ', ', $dependencies );
echo
'<i class="patTemplate">[none]</i>';
echo
' <div class="patTemplateCol">Content</div>';
echo
' <div class="patTemplateSource"><pre>'.
$this->_highlightVars( htmlspecialchars( $spec['data'] ), $vars[$tmplName] ).
'</pre></div>';
* display the attributes of a template
* @param array template data
* @param string name of the template
function _displayAttributes( $tmpl, $tmplName =
null )
echo
'<div class="patTemplateCol">Attributes</div>';
echo
'<table border="0" cellpadding="0" cellpadding="0">';
switch( $tmpl['attributes']['type'] )
if( $tmpl['attributes']['modulo'] ==
2 )
$type =
'modulo (' .
$tmpl['attributes']['modulo'] .
')';
$this->_displayLine( 'Type', $tmpl['attributes']['type'] );
* condition variable, only used in condition templates
if( isset
( $tmpl['attributes']['conditionvar'] ) )
if( isset
( $tmpl['attributes']['conditiontmpl'] ) )
$this->_displayLine( 'ConditionVar', $tmpl['attributes']['conditiontmpl'].
'.'.
$tmpl['attributes']['conditionvar'] );
elseif( isset
( $tmpl['attributes']['useglobals'] ) &&
$tmpl['attributes']['useglobals'] ==
'yes' )
$this->_displayLine( 'ConditionVar', '__globals.'.
$tmpl['attributes']['conditionvar'] );
$this->_displayLine( 'ConditionVar', $tmpl['attributes']['conditionvar'] );
$this->_displayLine( 'Type', 'simplecondition' );
foreach ($tmpl['attributes']['requiredvars'] as $tmp) {
if ($tmp[0] !==
$tmplName) {
$var =
$tmp[0] .
'.' .
$tmp[1];
$var =
$var .
'='.
$tmp[2];
$this->_displayLine( 'RequiredVars', implode( ', ', $requiredvars ) );
$this->_displayLine( 'Type', $tmpl['attributes']['type'] );
$this->_displayLine( 'Visibility', $tmpl['attributes']['visibility'] );
$this->_displayLine( 'WhiteSpace', $tmpl['attributes']['whitespace'] );
$this->_displayLine( 'AddSystemVars', $tmpl['attributes']['addsystemvars'] );
$this->_displayLine( 'UnusedVars', $tmpl['attributes']['unusedvars'] );
if( isset
( $tmpl['attributes']['src'] ) )
$this->_displayLine( 'External Src', $tmpl['attributes']['src'] );
if (isset
($tmpl['attributes']['varscope'])) {
if (is_array($tmpl['attributes']['varscope'])) {
$this->_displayLine( 'Varscope', implode(', ', $tmpl['attributes']['varscope'] ) );
$this->_displayLine( 'Varscope', $tmpl['attributes']['varscope'] );
echo
' <div class="patTemplateCol">States</div>';
echo
' <table border="0" cellpadding="0" cellpadding="0">';
$this->_displayLine( 'Loaded', $tmpl['loaded'] );
$this->_displayLine( 'Parsed', $tmpl['parsed'] );
* hilight variables in a template
* @param string template content
* @return string template content
function _highlightVars( $template, $vars )
$pattern =
'/('.
$this->_tmpl->getStartTag().
'TMPL\:([^a-z]+)'.
$this->_tmpl->getEndTag().
')/U';
$template =
preg_replace( $pattern, '<span class="patTemplateTmpl" onclick="jump(\'\2\')" title="Click to view the dependency \'\2\'.">\1</span>', $template );
$pattern =
'/('.
$this->_tmpl->getStartTag().
'([^a-z:]+)'.
$this->_tmpl->getEndTag().
')/U';
for( $i =
0; $i <
count( $matches[1] ); $i++
)
if( isset
( $vars[$matches[2][$i]] ) )
$value =
$vars[$matches[2][$i]];
$value =
'[No value set]';
$replace =
'<span class="patTemplateVar" title="'.
$value.
'">'.
$matches[1][$i].
'</span>';
$template =
str_replace( $matches[1][$i], $replace, $template );
* @param mixed value, you may pass more than one value
echo
' <tr valign="top">';
foreach( $args as $head )
return $class .=
'Border';
* sets whether to draw borders in the tables generated via the
* {@link _displayHead()} and {@link _displayLine()} methods.
* @param bool $state Whether to draw the borders. true=draw, false=don't draw
function _useBorders( $state )
* display a line in a table
* @param mixed value, you may pass more than one value
function _displayLine( $prop, $value )
echo
' <tr valign="top">';
if( count( $args ) ==
1 )
echo
' <td class="'.
$this->_getClassName( 'patTemplateVal' ).
'"> : </td>';
foreach( $args as $value )
$value =
( $value ===
true ) ?
'yes' :
'no';