Difference between revisions of "Expandable.php"

From Organic Design wiki
(remove edit links as they're don't work properly)
({{legacy}})
 
(25 intermediate revisions by the same user not shown)
Line 1: Line 1:
<?
+
{{legacy}}
if ($GLOBALS['action'] == 'view') {
+
<php><?
 
+
# Insert a JS function into the page to be called when show/hide links are clicked
# Insert a JS function into the page to be called when show/hide links are clicked
+
$article = preg_replace(
$article = preg_replace(
+
'/(<\\/head\\s*>)/',
'/(<\\/head\\s*>)/',
+
'<script type="text/javascript">
'<script type="text/javascript">
 
 
 
 
function toggleExpandable(id) {
 
function toggleExpandable(id) {
var heading = document.getElementById("expandable-heading-"+id);
+
var content = document.getElementById("expandable-"+id);
var content = document.getElementById("expandable-content-"+id);
+
if (content.style.display == "none") content.style.display = "";
if (content.style.display == "none") {
+
else content.style.display = "none";
content.style.display = "";
+
this.parent.focus();
}
+
}
else {
 
content.style.display = "none";
 
}
 
this.parent.focus();
 
}
 
 
 
 
</script>$1',
 
</script>$1',
 +
$article
 +
);
  
$article
+
# Callback function executed for rendering each expandable table
);
+
function expandableCallback($matches) {
 +
$i = ++$GLOBALS["expandable/tbl-count"];
 +
$open = $matches[2] ? '' : ' style="display:none;"'; # default to expanded in id present after title attribute
 +
return '<table class=expandable-heading><tr>
 +
<td><a class=expandable-link href="javascript:toggleExpandable('.$i.')">&#9658; '.$matches[1].'</a></td>
 +
<td align=right><a href="'.$GLOBALS['xwScript'].'?title='.$matches[1].'&action=edit"></a></td>
 +
</tr><tr id=expandable-'.$i.$open.'><td colspan=2>
 +
<table class=expandable-content>'.$matches[3].'
 +
</td></tr></table>';
 +
}
  
# Callback function executed for rendering each expandable table
+
# Replace all the expandable tables with html containing CSS classes and the show/hide links
function expandableCallback($matches) {
+
$article = preg_replace_callback(
$i = ++$GLOBALS["expandable/tbl-count"];
+
'/<table class=["\']?expandable["\']? title=["\']?(.+?)["\']?\\s*(id=["\']?.+?["\']?)?\\s*>(.+?<\\/table\\s*?>)/s',
$open = $matches[2] ? '' : ' style="display:none;"'; # default to expanded in id present after title attribute
+
'expandableCallback',
return '<table class=expandable-heading id=expandable-heading-'.$i.'>
+
$article
<tr>
+
);
<td><a class=expandable-link href="javascript:toggleExpandable('.$i.')">&#9658; '.$matches[1].'</a></td>
 
<td align=right><a href="'.$GLOBALS['xwScript'].'?title='.$matches[1].'&action=edit"></a></td>
 
</tr>
 
<tr id=expandable-content-'.$i.$open.'><td colspan=2>
 
<table class=expandable-content>'.$matches[3].'
 
</td></tr></table>';
 
}
 
  
# Replace all the expandable tables with html containing CSS classes and the show/hide links
+
?></php>
$article = preg_replace_callback(
 
'/<table class=["\']?expandable["\']? title=["\']?(.+?)["\']?\\s*(id=["\']?.+?["\']?)?\\s*>(.+?<\\/table\\s*?>)/s',
 
'expandableCallback',
 
$article
 
);
 
 
}
 
?>
 

Latest revision as of 09:41, 14 March 2009

Legacy.svg Legacy: This article describes a concept that has been superseded in the course of ongoing development on the Organic Design wiki. Please do not develop this any further or base work on this concept, this is only useful for a historic record of work done. You may find a link to the currently used concept or function in this article, if not you can contact the author to find out what has taken the place of this legacy item.

<php><?

  1. Insert a JS function into the page to be called when show/hide links are clicked

$article = preg_replace( '/(<\\/head\\s*>)/', '<script type="text/javascript"> function toggleExpandable(id) { var content = document.getElementById("expandable-"+id); if (content.style.display == "none") content.style.display = ""; else content.style.display = "none"; this.parent.focus(); } </script>$1', $article );

  1. Callback function executed for rendering each expandable table

function expandableCallback($matches) { $i = ++$GLOBALS["expandable/tbl-count"]; $open = $matches[2] ?  : ' style="display:none;"'; # default to expanded in id present after title attribute

return '

<a class=expandable-link href="javascript:toggleExpandable('.$i.')">► '.$matches[1].'</a> <a href="'.$GLOBALS['xwScript'].'?title='.$matches[1].'&action=edit"></a>
'.$matches[3].'
';

}

  1. Replace all the expandable tables with html containing CSS classes and the show/hide links

$article = preg_replace_callback(

'/(.+?<\\/table\\s*?>)/s', 'expandableCallback', $article ); ?></php>