From ce120f0488f84e080dc88def1c338d0c0d1ba6e2 Mon Sep 17 00:00:00 2001 From: chriskl Date: Mon, 12 May 2003 09:55:14 +0000 Subject: [PATCH] convert from class.tree and treemenu.net to PEAR's HTML_TreeMenu. Much, much better. Still an odd problem with things defaulting to expanded. Needs testing. Updated HISTORY. Updated TODO. Removed Kevin Kemp's unused tree stuff. --- HISTORY | 1 + TODO | 5 +- browser.php | 223 ++-- classes/HTML_TreeMenu/TreeMenu.js | 667 +++++++++++ classes/HTML_TreeMenu/TreeMenu.php | 769 ++++++++++++ classes/HTML_TreeMenu/images/branch.gif | Bin 0 -> 70 bytes classes/HTML_TreeMenu/images/branchbottom.gif | Bin 0 -> 72 bytes classes/HTML_TreeMenu/images/branchtop.gif | Bin 0 -> 67 bytes .../HTML_TreeMenu/images/folder-expanded.gif | Bin 0 -> 923 bytes classes/HTML_TreeMenu/images/folder.gif | Bin 0 -> 922 bytes classes/HTML_TreeMenu/images/line.gif | Bin 0 -> 63 bytes classes/HTML_TreeMenu/images/linebottom.gif | Bin 0 -> 58 bytes classes/HTML_TreeMenu/images/minus.gif | Bin 0 -> 91 bytes classes/HTML_TreeMenu/images/minusbottom.gif | Bin 0 -> 90 bytes classes/HTML_TreeMenu/images/minustop.gif | Bin 0 -> 88 bytes classes/HTML_TreeMenu/images/plus.gif | Bin 0 -> 94 bytes classes/HTML_TreeMenu/images/plusbottom.gif | Bin 0 -> 93 bytes classes/HTML_TreeMenu/images/plustop.gif | Bin 0 -> 93 bytes classes/class.tree/COPYING.GPL | 340 ------ classes/class.tree/VERSION | 1 - classes/class.tree/class.tree.php | 128 -- classes/class.tree/ftiens4.js | 523 --------- classes/class.tree/ftv2/ftv2blank.gif | Bin 135 -> 0 bytes classes/class.tree/ftv2/ftv2folderclosed.gif | Bin 161 -> 0 bytes classes/class.tree/ftv2/ftv2folderopen.gif | Bin 167 -> 0 bytes classes/class.tree/ftv2/ftv2lastnode.gif | Bin 142 -> 0 bytes classes/class.tree/ftv2/ftv2link.gif | Bin 234 -> 0 bytes classes/class.tree/ftv2/ftv2mlastnode.gif | Bin 125 -> 0 bytes classes/class.tree/ftv2/ftv2mnode.gif | Bin 129 -> 0 bytes classes/class.tree/ftv2/ftv2node.gif | Bin 147 -> 0 bytes classes/class.tree/ftv2/ftv2plastnode.gif | Bin 130 -> 0 bytes classes/class.tree/ftv2/ftv2pnode.gif | Bin 133 -> 0 bytes classes/class.tree/ftv2/ftv2vertline.gif | Bin 140 -> 0 bytes classes/class.tree/mixed/draw.gif | Bin 1022 -> 0 bytes classes/class.tree/mixed/env.gif | Bin 636 -> 0 bytes classes/class.tree/mixed/home.gif | Bin 951 -> 0 bytes classes/class.tree/mixed/print.gif | Bin 1054 -> 0 bytes classes/class.tree/ph/ftv2blank.gif | Bin 103 -> 0 bytes classes/class.tree/ph/ftv2doc.gif | Bin 194 -> 0 bytes classes/class.tree/ph/ftv2folderclosed.gif | Bin 161 -> 0 bytes classes/class.tree/ph/ftv2folderopen.gif | Bin 167 -> 0 bytes classes/class.tree/ph/ftv2lastnode.gif | Bin 110 -> 0 bytes classes/class.tree/ph/ftv2link.gif | Bin 202 -> 0 bytes classes/class.tree/ph/ftv2mlastnode.gif | Bin 125 -> 0 bytes classes/class.tree/ph/ftv2mnode.gif | Bin 129 -> 0 bytes classes/class.tree/ph/ftv2node.gif | Bin 115 -> 0 bytes classes/class.tree/ph/ftv2plastnode.gif | Bin 103 -> 0 bytes classes/class.tree/ph/ftv2pnode.gif | Bin 106 -> 0 bytes classes/class.tree/ph/ftv2vertline.gif | Bin 108 -> 0 bytes classes/class.tree/ua.js | 164 --- .../themes/default/document.gif | Bin libraries/dyna.inc.php | 270 ----- libraries/tree.inc.php | 1034 ----------------- 53 files changed, 1597 insertions(+), 2528 deletions(-) create mode 100755 classes/HTML_TreeMenu/TreeMenu.js create mode 100755 classes/HTML_TreeMenu/TreeMenu.php create mode 100755 classes/HTML_TreeMenu/images/branch.gif create mode 100755 classes/HTML_TreeMenu/images/branchbottom.gif create mode 100755 classes/HTML_TreeMenu/images/branchtop.gif create mode 100755 classes/HTML_TreeMenu/images/folder-expanded.gif create mode 100755 classes/HTML_TreeMenu/images/folder.gif create mode 100755 classes/HTML_TreeMenu/images/line.gif create mode 100755 classes/HTML_TreeMenu/images/linebottom.gif create mode 100755 classes/HTML_TreeMenu/images/minus.gif create mode 100755 classes/HTML_TreeMenu/images/minusbottom.gif create mode 100755 classes/HTML_TreeMenu/images/minustop.gif create mode 100755 classes/HTML_TreeMenu/images/plus.gif create mode 100755 classes/HTML_TreeMenu/images/plusbottom.gif create mode 100755 classes/HTML_TreeMenu/images/plustop.gif delete mode 100755 classes/class.tree/COPYING.GPL delete mode 100755 classes/class.tree/VERSION delete mode 100755 classes/class.tree/class.tree.php delete mode 100644 classes/class.tree/ftiens4.js delete mode 100644 classes/class.tree/ftv2/ftv2blank.gif delete mode 100644 classes/class.tree/ftv2/ftv2folderclosed.gif delete mode 100644 classes/class.tree/ftv2/ftv2folderopen.gif delete mode 100644 classes/class.tree/ftv2/ftv2lastnode.gif delete mode 100644 classes/class.tree/ftv2/ftv2link.gif delete mode 100644 classes/class.tree/ftv2/ftv2mlastnode.gif delete mode 100644 classes/class.tree/ftv2/ftv2mnode.gif delete mode 100644 classes/class.tree/ftv2/ftv2node.gif delete mode 100644 classes/class.tree/ftv2/ftv2plastnode.gif delete mode 100644 classes/class.tree/ftv2/ftv2pnode.gif delete mode 100644 classes/class.tree/ftv2/ftv2vertline.gif delete mode 100755 classes/class.tree/mixed/draw.gif delete mode 100755 classes/class.tree/mixed/env.gif delete mode 100755 classes/class.tree/mixed/home.gif delete mode 100755 classes/class.tree/mixed/print.gif delete mode 100755 classes/class.tree/ph/ftv2blank.gif delete mode 100755 classes/class.tree/ph/ftv2doc.gif delete mode 100755 classes/class.tree/ph/ftv2folderclosed.gif delete mode 100755 classes/class.tree/ph/ftv2folderopen.gif delete mode 100755 classes/class.tree/ph/ftv2lastnode.gif delete mode 100755 classes/class.tree/ph/ftv2link.gif delete mode 100755 classes/class.tree/ph/ftv2mlastnode.gif delete mode 100755 classes/class.tree/ph/ftv2mnode.gif delete mode 100755 classes/class.tree/ph/ftv2node.gif delete mode 100755 classes/class.tree/ph/ftv2plastnode.gif delete mode 100755 classes/class.tree/ph/ftv2pnode.gif delete mode 100755 classes/class.tree/ph/ftv2vertline.gif delete mode 100644 classes/class.tree/ua.js rename classes/class.tree/ftv2/ftv2doc.gif => images/themes/default/document.gif (100%) delete mode 100644 libraries/dyna.inc.php delete mode 100644 libraries/tree.inc.php diff --git a/HISTORY b/HISTORY index 0891e2f2..16200633 100644 --- a/HISTORY +++ b/HISTORY @@ -16,6 +16,7 @@ Version 3.0.0-dev-5 - Hide admin for non-super users - Easy change password for any user - Enforceable minimum password length +* Switched to PEAR's HTML_TreeMenu to avoid license issue Version 3.0.0-dev-4 ------------------- diff --git a/TODO b/TODO index fc4a6aa9..b68d6e97 100644 --- a/TODO +++ b/TODO @@ -70,9 +70,9 @@ Tables * Insert and edit row aren't smart - eg. it will quote everything including 'current_timestamp' in a timestamp field. We need to detect if they're inserting into a timestamp field with a magic value and then not quote it. -* Insert needs the ability to use functions. It should also be able to handle +* -Insert needs the ability to use functions. It should also be able to handle some keywords (like DEFAULT) though it might be able to use function tech i - to accomplish this. + to accomplish this. (chriskl) * Preserve spaces when displaying user data (half done) (chriskl) Views @@ -182,6 +182,7 @@ Exotic ------ * Support contrib/tsearch for easy full text indexes +* Search for object feature Principles ---------- diff --git a/browser.php b/browser.php index 673cd0ea..b0256169 100644 --- a/browser.php +++ b/browser.php @@ -5,31 +5,136 @@ * if you click on a database it shows a list of database objects in that * database. * - * $Id: browser.php,v 1.7 2003/04/23 03:36:12 chriskl Exp $ + * $Id: browser.php,v 1.8 2003/05/12 09:55:14 chriskl Exp $ */ // Include application functions include_once('libraries/lib.inc.php'); - // Include tree classes - include_once('classes/class.tree/class.tree.php'); + // Include tree classe + include_once('classes/HTML_TreeMenu/TreeMenu.php'); // Output header - $misc->printHeader(); + $misc->printHeader('', ""); $misc->printBody('browser'); - + // Construct expanding tree - $tree = new Tree ('classes/class.tree'); - $tree->set_frame ('detail'); - $root = $tree->open_tree (''. htmlspecialchars($conf['servers'][$_SESSION['webdbServerID']]['desc']) .'', ''); + $menu = new HTML_TreeMenu(); + $root = new HTML_TreeNode(array( + 'text' => addslashes(htmlspecialchars(($conf['servers'][$_SESSION['webdbServerID']]['desc']))), + 'link' => 'all_db.php', + 'icon' => 'folder.gif', + 'expandedIcon' => 'folder-expanded.gif', + 'expanded' => true, + 'linkTarget' => 'detail')); + + // Add root node to menu + $menu->addItem($root); + + /** + * Helper function for adding nodes + * @param $schemanode Node onto which to add + */ + function addNodes(&$schemanode, $querystr) { + global $data, $localData, $lang, $conf; + + // Tables + if ($data->hasTables()) { + $table_node = &new HTML_TreeNode(array( + 'text' => addslashes($lang['strtables']), + 'link' => addslashes(htmlspecialchars("tables.php?{$querystr}")), + 'icon' => "../../../images/themes/{$conf['theme']}/tables.gif", + 'expandedIcon' => "../../../images/themes/{$conf['theme']}/tables.gif", + 'expanded' => false, + 'linkTarget' => 'detail')); + + // Add table folder to schema + $schemanode->addItem($table_node); + + $tables = &$localData->getTables(); + while (!$tables->EOF) { + $item_node = &new HTML_TreeNode(array( + 'text' => addslashes(htmlspecialchars($tables->f[$data->tbFields['tbname']])), + 'link' => addslashes(htmlspecialchars("tblproperties.php?{$querystr}&table=" . + urlencode($tables->f[$data->tbFields['tbname']]))), + 'icon' => "../../../images/themes/{$conf['theme']}/tables.gif", + 'expandedIcon' => "../../../images/themes/{$conf['theme']}/tables.gif", + 'expanded' => false, + 'linkTarget' => 'detail')); + + // Add table folder to schema + $table_node->addItem($item_node); + + $tables->moveNext(); + } + } + // Views + if ($data->hasViews()) { + $view_node = &new HTML_TreeNode(array( + 'text' => addslashes($lang['strviews']), + 'link' => addslashes(htmlspecialchars("views.php?{$querystr}")), + 'icon' => "../../../images/themes/{$conf['theme']}/views.gif", + 'expandedIcon' => "../../../images/themes/{$conf['theme']}/views.gif", + 'expanded' => false, + 'linkTarget' => 'detail')); + + // Add folder to schema + $schemanode->addItem($view_node); + } + // Sequences + if ($data->hasSequences()) { + $seq_node = &new HTML_TreeNode(array( + 'text' => addslashes($lang['strsequences']), + 'link' => addslashes(htmlspecialchars("sequences.php?{$querystr}")), + 'icon' => "../../../images/themes/{$conf['theme']}/sequences.gif", + 'expandedIcon' => "../../../images/themes/{$conf['theme']}/sequences.gif", + 'expanded' => false, + 'linkTarget' => 'detail')); + + // Add folder to schema + $schemanode->addItem($seq_node); + } + // Functions + if ($data->hasFunctions()) { + $func_node = &new HTML_TreeNode(array( + 'text' => addslashes($lang['strfunctions']), + 'link' => addslashes(htmlspecialchars("functions.php?{$querystr}")), + 'icon' => "../../../images/themes/{$conf['theme']}/functions.gif", + 'expandedIcon' => "../../../images/themes/{$conf['theme']}/functions.gif", + 'expanded' => false, + 'linkTarget' => 'detail')); + + // Add folder to schema + $schemanode->addItem($func_node); + } + // Types + if ($data->hasTypes()) { + $func_node = &new HTML_TreeNode(array( + 'text' => addslashes($lang['strtypes']), + 'link' => addslashes(htmlspecialchars("types.php?{$querystr}")), + 'icon' => "../../../images/themes/{$conf['theme']}/document.gif", + 'expandedIcon' => "../../../images/themes/{$conf['theme']}/document.gif", + 'expanded' => false, + 'linkTarget' => 'detail')); + + // Add folder to schema + $schemanode->addItem($func_node); + } + } $databases = &$data->getDatabases(); while (!$databases->EOF) { // If database is selected, show folder, otherwise show document if (isset($_REQUEST['database']) && $_REQUEST['database'] == $databases->f[$data->dbFields['dbname']]) { - $node = $tree->add_folder($root, addslashes(htmlspecialchars($databases->f[$data->dbFields['dbname']])), - 'database.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]), 'detail'); - + $db_node = &new HTML_TreeNode(array( + 'text' => addslashes(htmlspecialchars($databases->f[$data->dbFields['dbname']])), + 'link' => addslashes(htmlspecialchars('database.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]))), + 'icon' => "../../../images/themes/{$conf['theme']}/database.gif", + 'expandedIcon' => "../../../images/themes/{$conf['theme']}/database.gif", + 'expanded' => true, + 'linkTarget' => 'detail')); + + // If database supports schemas, add the extra level of hierarchy if ($data->hasSchemas()) { $schemas = &$localData->getSchemas(); while (!$schemas->EOF) { @@ -37,70 +142,56 @@ // Construct database & schema query string $querystr = 'database=' . urlencode($databases->f[$data->dbFields['dbname']]). '&schema=' . urlencode($schemas->f[$data->nspFields['nspname']]); - $schemanode = $tree->add_folder($node, addslashes($schemas->f[$data->nspFields['nspname']]), - "schema.php?{$querystr}", 'detail'); - if ($data->hasTables()) { - $tables = &$localData->getTables(); - $table_node = $tree->add_folder($schemanode, $lang['strtables'], - 'tables.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]) . '&schema=' . - urlencode($schemas->f[$data->nspFields['nspname']]), 'detail'); - while (!$tables->EOF) { - $tree->add_document($table_node, addslashes($tables->f[$data->tbFields['tbname']]), - 'tblproperties.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]) . '&schema=' . - urlencode($schemas->f[$data->nspFields['nspname']]) . '&table=' . - urlencode($tables->f[$data->tbFields['tbname']]), 'detail', "../../images/themes/{$conf['theme']}/tables.gif"); - $tables->moveNext(); - } - } - if ($data->hasViews()) - $tree->add_document($schemanode, $lang['strviews'], "views.php?{$querystr}", 'detail', "../../images/themes/{$conf['theme']}/views.gif"); - if ($data->hasSequences()) - $tree->add_document($schemanode, $lang['strsequences'], "sequences.php?{$querystr}", 'detail', "../../images/themes/{$conf['theme']}/sequences.gif"); - if ($data->hasFunctions()) - $tree->add_document($schemanode, $lang['strfunctions'], "functions.php?{$querystr}", 'detail', "../../images/themes/{$conf['theme']}/functions.gif"); -// if ($data->hasOperators()) -// $tree->add_document($schemanode, $lang['stroperators'], "operators.php?{$querystr}", 'detail', "../../images/themes/{$conf['theme']}/operators.gif"); - if ($data->hasTypes()) - $tree->add_document($schemanode, $lang['strtypes'], "types.php?{$querystr}", 'detail'); -// if ($data->hasAggregates()) -// $tree->add_document($schemanode, $lang['straggregates'], 'aggregates.php{$querystr}", 'detail'); + $schemanode = &new HTML_TreeNode(array( + 'text' => addslashes(htmlspecialchars($schemas->f[$data->nspFields['nspname']])), + 'link' => addslashes(htmlspecialchars("schema.php?{$querystr}")), + 'icon' => 'folder.gif', + 'expandedIcon' => 'folder-expanded.gif', + // Auto-expand your personal schema. @@ This currently also opens the first + // schema if your own schema doesn't exist... +// 'expanded' => ($schemas->f[$data->nspFields['nspname']] == $_SESSION['webdbUsername']), + 'expanded' => false, + 'linkTarget' => 'detail')); + + addNodes(&$schemanode, $querystr); + + // Add schema to database + $db_node->addItem($schemanode); + $schemas->moveNext(); } } // Database doesn't support schemas else { - if ($data->hasTables()) { - $tables = &$localData->getTables(); - $table_node = $tree->add_folder($node, $lang['strtables'], - 'tables.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]), 'detail'); - while (!$tables->EOF) { - $tree->add_document($table_node, addslashes($tables->f[$data->tbFields['tbname']]), - 'tblproperties.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]) . '&table=' . - urlencode($tables->f[$data->tbFields['tbname']]), 'detail', "../../images/themes/{$conf['theme']}/tables.gif"); - $tables->moveNext(); - } - } - if ($data->hasViews()) - $tree->add_document($node, $lang['strviews'], 'views.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]), 'detail', "../../images/themes/{$conf['theme']}/views.gif"); - if ($data->hasSequences()) - $tree->add_document($node, $lang['strsequences'], 'sequences.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]), 'detail', "../../images/themes/{$conf['theme']}/sequences.gif"); - if ($data->hasFunctions()) - $tree->add_document($node, $lang['strfunctions'], 'functions.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]), 'detail', "../../images/themes/{$conf['theme']}/functions.gif"); -// if ($data->hasOperators()) -// $tree->add_document($node, $lang['stroperators'], 'operators.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]), 'detail', "../../images/themes/{$conf['theme']}/operators.gif"); - if ($data->hasTypes()) - $tree->add_document($node, $lang['strtypes'], 'types.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]), 'detail'); -// if ($data->hasAggregates()) -// $tree->add_document($node, $lang['straggregates'], 'aggregates.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]), 'detail'); + // Construct database query string + $querystr = 'database=' . urlencode($databases->f[$data->dbFields['dbname']]); + + addNodes(&$db_node, $querystr); } - } else { - $node = $tree->add_document($root, addslashes(htmlspecialchars($databases->f[$data->dbFields['dbname']])), - "{$_SERVER['PHP_SELF']}?database=" . urlencode($databases->f[$data->dbFields['dbname']]), '_self', "../../images/themes/{$conf['theme']}/database.gif"); - } + // Add node to menu + $root->addItem($db_node); + + } else { + $db_node = &new HTML_TreeNode(array( + 'text' => addslashes(htmlspecialchars($databases->f[$data->dbFields['dbname']])), + 'link' => addslashes(htmlspecialchars("{$_SERVER['PHP_SELF']}?database=" . urlencode($databases->f[$data->dbFields['dbname']]))), + 'icon' => "../../../images/themes/{$conf['theme']}/database.gif", + 'expandedIcon' => "../../../images/themes/{$conf['theme']}/database.gif", + 'expanded' => false, + 'linkTarget' => '_self')); + + // Add node to menu + $root->addItem($db_node); + } + $databases->moveNext(); } - $tree->close_tree ( ); + // Create the presentation class + $treeMenu = &new HTML_TreeMenu_DHTML($menu, array('images' => 'classes/HTML_TreeMenu/images', 'defaultClass' => 'treeMenuDefault')); + + // Actually display the menu + $treeMenu->printMenu(); // Output footer $misc->printFooter(); diff --git a/classes/HTML_TreeMenu/TreeMenu.js b/classes/HTML_TreeMenu/TreeMenu.js new file mode 100755 index 00000000..740a72bb --- /dev/null +++ b/classes/HTML_TreeMenu/TreeMenu.js @@ -0,0 +1,667 @@ +// +-----------------------------------------------------------------------+ +// | Copyright (c) 2002-2003, Richard Heyes, Harald Radi | +// | All rights reserved. | +// | | +// | Redistribution and use in source and binary forms, with or without | +// | modification, are permitted provided that the following conditions | +// | are met: | +// | | +// | o Redistributions of source code must retain the above copyright | +// | notice, this list of conditions and the following disclaimer. | +// | o Redistributions in binary form must reproduce the above copyright | +// | notice, this list of conditions and the following disclaimer in the | +// | documentation and/or other materials provided with the distribution.| +// | o The names of the authors may not be used to endorse or promote | +// | products derived from this software without specific prior written | +// | permission. | +// | | +// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | +// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | +// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | +// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | +// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | +// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | +// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | +// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | +// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | +// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | +// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | +// | | +// +-----------------------------------------------------------------------+ +// | Author: Richard Heyes | +// | Harald Radi | +// +-----------------------------------------------------------------------+ +// +// $Id: TreeMenu.js,v 1.1 2003/05/12 09:55:14 chriskl Exp $ + + +/** +* TreeMenu class +*/ + function TreeMenu(iconpath, myname, linkTarget, defaultClass, usePersistence, noTopLevelImages) + { + // Properties + this.iconpath = iconpath; + this.myname = myname; + this.linkTarget = linkTarget; + this.defaultClass = defaultClass; + this.usePersistence = usePersistence; + this.noTopLevelImages = noTopLevelImages; + this.n = new Array(); + + this.nodeRefs = new Array(); + this.branches = new Array(); + this.branchStatus = new Array(); + this.layerRelations = new Array(); + this.childParents = new Array(); + this.cookieStatuses = new Array(); + + this.preloadImages(); + } + +/** +* Adds a node to the tree +*/ + TreeMenu.prototype.addItem = function (newNode) + { + newIndex = this.n.length; + this.n[newIndex] = newNode; + + return this.n[newIndex]; + } + +/** +* Preload images hack for Mozilla +*/ + TreeMenu.prototype.preloadImages = function () + { + var plustop = new Image; plustop.src = this.iconpath + '/plustop.gif'; + var plusbottom = new Image; plusbottom.src = this.iconpath + '/plusbottom.gif'; + var plus = new Image; plus.src = this.iconpath + '/plus.gif'; + + var minustop = new Image; minustop.src = this.iconpath + '/minustop.gif'; + var minusbottom = new Image; minusbottom.src = this.iconpath + '/minusbottom.gif'; + var minus = new Image; minus.src = this.iconpath + '/minus.gif'; + + var branchtop = new Image; branchtop.src = this.iconpath + '/branchtop.gif'; + var branchbottom = new Image; branchbottom.src = this.iconpath + '/branchbottom.gif'; + var branch = new Image; branch.src = this.iconpath + '/branch.gif'; + + var linebottom = new Image; linebottom.src = this.iconpath + '/linebottom.gif'; + var line = new Image; line.src = this.iconpath + '/line.gif'; + } + +/** +* Main function that draws the menu and assigns it +* to the layer (or document.write()s it) +*/ + TreeMenu.prototype.drawMenu = function ()// OPTIONAL ARGS: nodes = [], level = [], prepend = '', expanded = false, visbility = 'inline', parentLayerID = null + { + /** + * Necessary variables + */ + var output = ''; + var modifier = ''; + var layerID = ''; + var parentLayerID = ''; + + /** + * Parse any optional arguments + */ + var nodes = arguments[0] ? arguments[0] : this.n + var level = arguments[1] ? arguments[1] : []; + var prepend = arguments[2] ? arguments[2] : ''; + var expanded = arguments[3] ? arguments[3] : false; + var visibility = arguments[4] ? arguments[4] : 'inline'; + var parentLayerID = arguments[5] ? arguments[5] : null; + + var currentlevel = level.length; + + for (var i=0; i 1 ? "top" : 'single'; + } else if(i == (nodes.length-1)) { + modifier = "bottom"; + } else { + modifier = ""; + } + + /** + * Single root branch is always expanded + */ + if (!this.doesMenu() || (parentLayerID == null && (nodes.length == 1 || this.noTopLevelImages))) { + expanded = true; + + } else if (nodes[i].expanded) { + expanded = true; + + } else { + expanded = false; + } + + /** + * Make sure visibility is correct based on parent status + */ + visibility = this.checkParentVisibility(layerID) ? visibility : 'none'; + + /** + * Setup branch status and build an indexed array + * of branch layer ids + */ + if (nodes[i].n.length > 0) { + this.branchStatus[layerID] = expanded; + this.branches[this.branches.length] = layerID; + } + + /** + * Setup toggle relationship + */ + if (!this.layerRelations[parentLayerID]) { + this.layerRelations[parentLayerID] = new Array(); + } + this.layerRelations[parentLayerID][this.layerRelations[parentLayerID].length] = layerID; + + /** + * Branch images + */ + var gifname = nodes[i].n.length && this.doesMenu() && nodes[i].isDynamic ? (expanded ? 'minus' : 'plus') : 'branch'; + var iconimg = nodes[i].icon ? this.stringFormat('', this.iconpath, nodes[i].icon, layerID) : ''; + + /** + * Add event handlers + */ + var eventHandlers = ""; + for (j in nodes[i].events) { + eventHandlers += this.stringFormat('{0}="{1}" ', j, nodes[i].events[j]); + } + + /** + * Build the html to write to the document + * IMPORTANT: + * document.write()ing the string: '
', layerID, visibility, (nodes[i].cssClass ? nodes[i].cssClass : this.defaultClass)) : this.stringFormat('
', nodes[i].cssClass ? nodes[i].cssClass : this.defaultClass); + var onMDown = this.doesMenu() && nodes[i].n.length && nodes[i].isDynamic ? this.stringFormat('onmousedown="{0}.toggleBranch(\'{1}\', true)" style="cursor: pointer; cursor: hand"', this.myname, layerID) : ''; + var imgTag = this.stringFormat('', this.iconpath, gifname, modifier, layerID, onMDown); + var linkTarget= nodes[i].linkTarget ? nodes[i].linkTarget : this.linkTarget; + var linkStart = nodes[i].link ? this.stringFormat('', nodes[i].link, linkTarget) : ''; + var linkEnd = nodes[i].link ? '' : ''; + + output = this.stringFormat('{0}{1}{2}{3}{4}{6}{7}
', + layerTag, + prepend, + parentLayerID == null && (nodes.length == 1 || this.noTopLevelImages) ? '' : imgTag, + iconimg, + linkStart, + eventHandlers, + nodes[i].title, + linkEnd); + + /** + * Write out the HTML. Uses document.write for speed over layers and + * innerHTML. This however means no dynamic adding/removing nodes on + * the client side. This could be conditional I guess if dynamic + * adding/removing is required. + */ + document.write(output + "\r\n"); + + /** + * Traverse sub nodes ? + */ + if (nodes[i].n.length) { + /** + * Determine what to prepend. If there is only one root + * node then the prepend to pass to children is nothing. + * Otherwise it depends on where we are in the tree. + */ + if (parentLayerID == null && (nodes.length == 1 || this.noTopLevelImages)) { + var newPrepend = ''; + + } else if (i < (nodes.length - 1)) { + var newPrepend = prepend + this.stringFormat('', this.iconpath); + + } else { + var newPrepend = prepend + this.stringFormat('', this.iconpath); + } + + this.drawMenu(nodes[i].n, + level, + newPrepend, + nodes[i].expanded, + expanded ? 'inline' : 'none', + layerID); + } + } + } + +/** +* Toggles a branches visible status. Called from resetBranches() +* and also when a +/- graphic is clicked. +*/ + TreeMenu.prototype.toggleBranch = function (layerID, updateStatus) // OPTIONAL ARGS: fireEvents = true + { + var currentDisplay = this.getLayer(layerID).style.display; + var newDisplay = (this.branchStatus[layerID] && currentDisplay == 'inline') ? 'none' : 'inline'; + var fireEvents = arguments[2] != null ? arguments[2] : true; + + for (var i=0; i= 5)); + var is_gecko = (agt.indexOf('gecko') != -1); + + + var is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1)); + var is_ie4 = (is_ie && (is_major == 4) && (agt.indexOf("msie 4")!=-1) ); + var is_ie4up = (is_ie && (is_major >= 4)); + + var is_opera = (agt.indexOf("opera") != -1); + var is_opera7 = is_opera && (agt.indexOf("opera 7") != -1); +//--> end hide JavaScript diff --git a/classes/HTML_TreeMenu/TreeMenu.php b/classes/HTML_TreeMenu/TreeMenu.php new file mode 100755 index 00000000..a053e6f5 --- /dev/null +++ b/classes/HTML_TreeMenu/TreeMenu.php @@ -0,0 +1,769 @@ + | +// | Harald Radi | +// +-----------------------------------------------------------------------+ +// +// $Id: TreeMenu.php,v 1.1 2003/05/12 09:55:14 chriskl Exp $ + +/** +* HTML_TreeMenu Class +* +* A simple couple of PHP classes and some not so simple +* Jabbascript which produces a tree menu. In IE this menu +* is dynamic, with branches being collapsable. In IE5+ the +* status of the collapsed/open branches persists across page +* refreshes.In any other browser the tree is static. Code is +* based on work of Harald Radi. +* +* Usage. +* +* After installing the package, copy the example php script to +* your servers document root. Also place the TreeMenu.js and the +* images folder in the same place. Running the script should +* then produce the tree. +* +* Thanks go to Chip Chapin (http://www.chipchapin.com) for many +* excellent ideas and improvements. +* +* @author Richard Heyes +* @author Harald Radi +* @access public +* @package HTML_TreeMenu +*/ + +class HTML_TreeMenu +{ + /** + * Indexed array of subnodes + * @var array + */ + var $items; + + /** + * Constructor + * + * @access public + */ + function HTML_TreeMenu() + { + // Not much to do here :( + } + + /** + * This function adds an item to the the tree. + * + * @access public + * @param object $node The node to add. This object should be + * a HTML_TreeNode object. + * @return object Returns a reference to the new node inside + * the tree. + */ + function &addItem(&$node) + { + $this->items[] = &$node; + return $this->items[count($this->items) - 1]; + } + + /** + * Import method for creating HTML_TreeMenu objects/structures + * out of existing tree objects/structures. Currently supported + * are Wolfram Kriesings' PEAR Tree class, and Richard Heyes' (me!) + * Tree class (available here: http://www.phpguru.org/). This + * method is intended to be used statically, eg: + * $treeMenu = &HTML_TreeMenu::import($myTreeStructureObj); + * + * @param array $params An array of parameters that determine + * how the import happens. This can consist of: + * structure => The tree structure + * type => The type of the structure, currently + * can be either 'heyes' or 'kriesing' + * nodeOptions => Default options for each node + * + * @return object The resulting HTML_TreeMenu object + */ + function createFromStructure($params) + { + if (!isset($params['nodeOptions'])) { + $params['nodeOptions'] = array(); + } + + switch (@$params['type']) { + + /** + * Wolfram Kriesings' PEAR Tree class + */ + case 'kriesing': + $className = strtolower(get_class($params['structure']->dataSourceClass)); + $isXMLStruct = strpos($className,'_xml') !== false ? true : false; + + // Get the entire tree, the $nodes are sorted like in the tree view + // from top to bottom, so we can easily put them in the nodes + $nodes = $params['structure']->getNode(); + + // Make a new menu and fill it with the values from the tree + $treeMenu = new HTML_TreeMenu(); + $curNode[0] = &$treeMenu; // we need the current node as the reference to the + + foreach ( $nodes as $aNode ) { + $events = array(); + $data = array(); + + // In an XML, all the attributes are saved in an array, but since they might be + // used as the parameters, we simply extract them here if we handle an XML-structure + if ( $isXMLStruct && sizeof($aNode['attributes']) ){ + foreach ( $aNode['attributes'] as $key=>$val ) { + if ( !$aNode[$key] ) { // dont overwrite existing values + $aNode[$key] = $val; + } + } + } + + // Process all the data that are saved in $aNode and put them in the data and/or events array + foreach ( $aNode as $key=>$val ) { + if ( !is_array($val) ) { + // Dont get the recursive data in here! they are always arrays + if ( substr($key,0,2) == 'on' ){ // get the events + $events[$key] = $val; + } + + // I put it in data too, so in case an options starts with 'on' its also passed to the node ... not too cool i know + $data[$key] = $val; + } + } + + // Normally the text is in 'name' in the Tree class, so we check both but 'text' is used if found + $data['text'] = $aNode['text'] ? $aNode['text'] : $aNode['name']; + + // Add the item to the proper node + $thisNode = &$curNode[$aNode['level']]->addItem( new HTML_TreeNode( $data , $events ) ); + $curNode[$aNode['level']+1] = &$thisNode; + } + break; + + /** + * Richard Heyes' (me!) Tree class + */ + case 'heyes': + default: + // Need to create a HTML_TreeMenu object ? + if (!isset($params['treeMenu'])) { + $treeMenu = &new HTML_TreeMenu(); + } else { + $treeMenu = &$params['treeMenu']; + } + + // Loop thru the trees nodes + foreach ($params['structure']->nodes->nodes as $node) { + $tag = $node->getTag(); + $parentNode = &$treeMenu->addItem(new HTML_TreeNode(array_merge($params['nodeOptions'], $tag))); + + // Recurse ? + if (!empty($node->nodes->nodes)) { + $recurseParams['structure'] = $node; + $recurseParams['nodeOptions'] = $params['nodeOptions']; + $recurseParams['treeMenu'] = &$parentNode; + HTML_TreeMenu::createFromStructure($recurseParams); + } + } + break; + + } + + return $treeMenu; + } + + /** + * Creates a treeMenu from XML. The structure of your XML should be + * like so: + * + * + * + * + * + * + * + * + * + * Any of the options you can supply to the HTML_TreeNode constructor can be supplied as + * attributes to the tag. If there are no subnodes for a particular node, you can + * use the XML shortcut instead of . The $xml argument can + * be either the XML as a string, or an pre-created XML_Tree object. Also, this method + * REQUIRES my own Tree class to work (http://phpguru.org/tree.html). If this has not + * been include()ed or require()ed this method will die(). + * + * @param mixed $xml This can be either a string containing the XML, or an XML_Tree object + * (the PEAR::XML_Tree package). + * @return object The HTML_TreeMenu object + */ + function createFromXML($xml) + { + if (!class_exists('Tree')) { + die('Could not find Tree class'); + } + + // Supplied $xml is a string + if (is_string($xml)) { + require_once('XML/Tree.php'); + $xmlTree = &new XML_Tree(); + $xmlTree->getTreeFromString($xml); + + // Supplied $xml is an XML_Tree object + } else { + $xmlTree = $xml; + } + + // Now process the XML_Tree object, setting the XML attributes + // to be the tag data (with out the XML tag name or contents). + $treeStructure = Tree::createFromXMLTree($xmlTree, true); + $treeStructure->nodes->traverse(create_function('&$node', '$tagData = $node->getTag(); $node->setTag($tagData["attributes"]);')); + + + return HTML_TreeMenu::createFromStructure(array('structure' => $treeStructure)); + } +} // HTML_TreeMenu + + +/** +* HTML_TreeNode class +* +* This class is supplementary to the above and provides a way to +* add nodes to the tree. A node can have other nodes added to it. +* +* @author Richard Heyes +* @author Harald Radi +* @access public +* @package HTML_TreeMenu +*/ +class HTML_TreeNode +{ + /** + * The text for this node. + * @var string + */ + var $text; + + /** + * The link for this node. + * @var string + */ + var $link; + + /** + * The icon for this node. + * @var string + */ + var $icon; + + /** + * The icon to show when expanded for this node. + * @var string + */ + var $expandedIcon; + + /** + * The css class for this node + * @var string + */ + var $cssClass; + + /** + * The link target for this node + * @var string + */ + var $linkTarget; + + /** + * Indexed array of subnodes + * @var array + */ + var $items; + + /** + * Whether this node is expanded or not + * @var bool + */ + var $expanded; + + /** + * Whether this node is dynamic or not + * @var bool + */ + var $isDynamic; + + /** + * Should this node be made visible? + * @var bool + */ + var $ensureVisible; + + /** + * The parent node. Null if top level + * @var object + */ + var $parent; + + /** + * Javascript event handlers; + * @var array + */ + var $events; + + /** + * Constructor + * + * @access public + * @param array $options An array of options which you can pass to change + * the way this node looks/acts. This can consist of: + * o text The title of the node, defaults to blank + * o link The link for the node, defaults to blank + * o icon The icon for the node, defaults to blank + * o expandedIcon The icon to show when the node is expanded + * o class The CSS class for this node, defaults to blank + * o expanded The default expanded status of this node, defaults to false + * This doesn't affect non dynamic presentation types + * o linkTarget Target for the links. Defaults to linkTarget of the + * HTML_TreeMenu_Presentation. + * o isDynamic If this node is dynamic or not. Only affects + * certain presentation types. + * o ensureVisible If true this node will be made visible despite the expanded + * settings, and client side persistence. Will not affect + * some presentation styles, such as Listbox. Default is false + * @param array $events An array of javascript events and the corresponding event handlers. + * Additionally to the standard javascript events you can specify handlers + * for the 'onexpand', 'oncollapse' and 'ontoggle' events which will be fired + * whenever a node is collapsed and/or expanded. + */ + function HTML_TreeNode($options = array(), $events = array()) + { + $this->text = ''; + $this->link = ''; + $this->icon = ''; + $this->expandedIcon = ''; + $this->cssClass = ''; + $this->expanded = false; + $this->isDynamic = true; + $this->ensureVisible = false; + $this->linkTarget = null; + + $this->parent = null; + $this->events = $events; + + foreach ($options as $option => $value) { + $this->$option = $value; + } + } + + /** + * Allows setting of various parameters after the initial + * constructor call. Possible options you can set are: + * o text + * o link + * o icon + * o cssClass + * o expanded + * o isDynamic + * o ensureVisible + * ie The same options as in the constructor + * + * @access public + * @param string $option Option to set + * @param string $value Value to set the option to + */ + function setOption($option, $value) + { + $this->$option = $value; + } + + /** + * Adds a new subnode to this node. + * + * @access public + * @param object $node The new node + */ + function &addItem(&$node) + { + $node->parent = &$this; + $this->items[] = &$node; + + /** + * If the subnode has ensureVisible set it needs + * to be handled, and all parents set accordingly. + */ + if ($node->ensureVisible) { + $this->_ensureVisible(); + } + + return $this->items[count($this->items) - 1]; + } + + /** + * Private function to handle ensureVisible stuff + * + * @access private + */ + function _ensureVisible() + { + $this->ensureVisible = true; + $this->expanded = true; + + if (!is_null($this->parent)) { + $this->parent->_ensureVisible(); + } + } +} // HTML_TreeNode + + +/** +* HTML_TreeMenu_Presentation class +* +* Base class for other presentation classes to +* inherit from. +*/ +class HTML_TreeMenu_Presentation +{ + /** + * The TreeMenu structure + * @var object + */ + var $menu; + + /** + * Base constructor simply sets the menu object + * + * @param object $structure The menu structure + */ + function HTML_TreeMenu_Presentation(&$structure) + { + $this->menu = &$structure; + } + + /** + * Prints the HTML generated by the toHTML() method. + * toHTML() must therefore be defined by the derived + * class. + * + * @access public + * @param array Options to set. Any options taken by + * the presentation class can be specified + * here. + */ + function printMenu($options = array()) + { + foreach ($options as $option => $value) { + $this->$option = $value; + } + + echo $this->toHTML(); + } +} + + +/** +* HTML_TreeMenu_DHTML class +* +* This class is a presentation class for the tree structure +* created using the TreeMenu/TreeNode. It presents the +* traditional tree, static for browsers that can't handle +* the DHTML. +*/ +class HTML_TreeMenu_DHTML extends HTML_TreeMenu_Presentation +{ + /** + * Dynamic status of the treemenu. If true (default) this has no effect. If + * false it will override all dynamic status vars and set the menu to be + * fully expanded an non-dynamic. + */ + var $isDynamic; + + /** + * Path to the images + * @var string + */ + var $images; + + /** + * Target for the links generated + * @var string + */ + var $linkTarget; + + /** + * Whether to use clientside persistence or not + * @var bool + */ + var $userPersistence; + + /** + * The default CSS class for the nodes + */ + var $defaultClass; + + /** + * Whether to skip first level branch images + * @var bool + */ + var $noTopLevelImages; + + /** + * Constructor, takes the tree structure as + * an argument and an array of options which + * can consist of: + * o images - The path to the images folder. Defaults to "images" + * o linkTarget - The target for the link. Defaults to "_self" + * o defaultClass - The default CSS class to apply to a node. Default is none. + * o usePersistence - Whether to use clientside persistence. This persistence + * is achieved using cookies. Default is true. + * o noTopLevelImages - Whether to skip displaying the first level of images if + * there is multiple top level branches. + * + * And also a boolean for whether the entire tree is dynamic or not. + * This overrides any perNode dynamic settings. + * + * @param object $structure The menu structure + * @param array $options Array of options + * @param bool $isDynamic Whether the tree is dynamic or not + */ + function HTML_TreeMenu_DHTML(&$structure, $options = array(), $isDynamic = true) + { + $this->HTML_TreeMenu_Presentation($structure); + $this->isDynamic = $isDynamic; + + // Defaults + $this->images = 'images'; + $this->linkTarget = '_self'; + $this->defaultClass = ''; + $this->usePersistence = true; + $this->noTopLevelImages = false; + + foreach ($options as $option => $value) { + $this->$option = $value; + } + } + + /** + * Returns the HTML for the menu. This method can be + * used instead of printMenu() to use the menu system + * with a template system. + * + * @access public + * @return string The HTML for the menu + */ + function toHTML() + { + static $count = 0; + $menuObj = 'objTreeMenu_' . ++$count; + + $html = "\n"; + $html .= '"; + + return $html; + } + + /** + * Prints a node of the menu + * + * @access private + */ + function _nodeToHTML($nodeObj, $prefix, $return = 'newNode') + { + $expanded = $this->isDynamic ? ($nodeObj->expanded ? 'true' : 'false') : 'true'; + $isDynamic = $this->isDynamic ? ($nodeObj->isDynamic ? 'true' : 'false') : 'false'; + $html = sprintf("\t %s = %s.addItem(new TreeNode('%s', %s, %s, %s, %s, '%s', '%s', %s));\n", + $return, + $prefix, + $nodeObj->text, + !empty($nodeObj->icon) ? "'" . $nodeObj->icon . "'" : 'null', + !empty($nodeObj->link) ? "'" . $nodeObj->link . "'" : 'null', + $expanded, + $isDynamic, + $nodeObj->cssClass, + $nodeObj->linkTarget, + !empty($nodeObj->expandedIcon) ? "'" . $nodeObj->expandedIcon . "'" : 'null'); + + foreach ($nodeObj->events as $event => $handler) { + $html .= sprintf("\t %s.setEvent('%s', '%s');\n", + $return, + $event, + str_replace(array("\r", "\n", "'"), array('\r', '\n', "\'"), $handler)); + } + + /** + * Loop through subnodes + */ + if (!empty($nodeObj->items)) { + for ($i=0; $iitems); $i++) { + $html .= $this->_nodeToHTML($nodeObj->items[$i], $return, $return . '_' . ($i + 1)); + } + } + + return $html; + } +} // End class HTML_TreeMenu_DHTML + + +/** +* HTML_TreeMenu_Listbox class +* +* This class presents the menu as a listbox +*/ +class HTML_TreeMenu_Listbox extends HTML_TreeMenu_Presentation +{ + /** + * The text that is displayed in the first option + * @var string + */ + var $promoText; + + /** + * The character used for indentation + * @var string + */ + var $indentChar; + + /** + * How many of the indent chars to use + * per indentation level + * @var integer + */ + var $indentNum; + + /** + * Target for the links generated + * @var string + */ + var $linkTarget; + + /** + * Constructor + * + * @param object $structure The menu structure + * @param array $options Options whic affect the display of the listbox. + * These can consist of: + * o promoText The text that appears at the the top of the listbox + * Defaults to "Select..." + * o indentChar The character to use for indenting the nodes + * Defaults to " " + * o indentNum How many of the indentChars to use per indentation level + * Defaults to 2 + * o linkTarget Target for the links. Defaults to "_self" + * o submitText Text for the submit button. Defaults to "Go" + */ + function HTML_TreeMenu_Listbox($structure, $options = array()) + { + $this->HTML_TreeMenu_Presentation($structure); + + $this->promoText = 'Select...'; + $this->indentChar = ' '; + $this->indentNum = 2; + $this->linkTarget = '_self'; + $this->submitText = 'Go'; + + foreach ($options as $option => $value) { + $this->$option = $value; + } + } + + /** + * Returns the HTML generated + */ + function toHTML() + { + static $count = 0; + $nodeHTML = ''; + + /** + * Loop through subnodes + */ + if (isset($this->menu->items)) { + for ($i=0; $imenu->items); $i++) { + $nodeHTML .= $this->_nodeToHTML($this->menu->items[$i]); + } + } + + return sprintf('
', + $this->linkTarget, + 'HTML_TreeMenu_Listbox_' . ++$count, + 'HTML_TreeMenu_Listbox_' . $count, + 'HTML_TreeMenu_Listbox_' . $count, + $this->promoText, + $nodeHTML, + $this->submitText); + } + + /** + * Returns HTML for a single node + * + * @access private + */ + function _nodeToHTML($node, $prefix = '') + { + $html = sprintf('', $node->link, $prefix, $node->text); + + /** + * Loop through subnodes + */ + if (isset($node->items)) { + for ($i=0; $iitems); $i++) { + $html .= $this->_nodeToHTML($node->items[$i], $prefix . str_repeat($this->indentChar, $this->indentNum)); + } + } + + return $html; + } +} // End class HTML_TreeMenu_Listbox +?> diff --git a/classes/HTML_TreeMenu/images/branch.gif b/classes/HTML_TreeMenu/images/branch.gif new file mode 100755 index 0000000000000000000000000000000000000000..32e0f683d809fbb8b5d424825d3943e8573ff133 GIT binary patch literal 70 zcmZ?wbhEHb6k!lyX!y@?;J|^FrWVDYEQ}05paUX6G7e0#E&VG`zvW*%XUi?`!&j$; V&(Cde>r<;(FiC3TgxMkt)&LAK7=Zu) literal 0 HcmV?d00001 diff --git a/classes/HTML_TreeMenu/images/branchbottom.gif b/classes/HTML_TreeMenu/images/branchbottom.gif new file mode 100755 index 0000000000000000000000000000000000000000..55ceb453fbaf8693dab2d5ea36c00c555681e471 GIT binary patch literal 72 zcmZ?wbhEHb6k!lyX!y@?;J|^FrWVDYEQ}05paUX6G7d~qE&VG`zvW*%XUi?`!&j$; X&(Cde>r?Akx+;W$!FpK;BZD;nIK3Dv literal 0 HcmV?d00001 diff --git a/classes/HTML_TreeMenu/images/branchtop.gif b/classes/HTML_TreeMenu/images/branchtop.gif new file mode 100755 index 0000000000000000000000000000000000000000..f6bd127b420b37b02d802f070ce04a5653ca395f GIT binary patch literal 67 zcmZ?wbhEHb6k!lyXkcJCaNs~oQ;XtH7Dfgj&;b!383!h*mj0Ee-|{b>v*lLz=6f-$ SA6g&$s0@!>IOUcIgEat`5EqL8 literal 0 HcmV?d00001 diff --git a/classes/HTML_TreeMenu/images/folder-expanded.gif b/classes/HTML_TreeMenu/images/folder-expanded.gif new file mode 100755 index 0000000000000000000000000000000000000000..f779acc7394140ce604c0b53c6e8b51d1af64aba GIT binary patch literal 923 zcmZ?wbhEHb6k!ly_|55R*`=2#lPKDZ{~a9gX#wlz053otV=SOWkWUnvp* literal 0 HcmV?d00001 diff --git a/classes/HTML_TreeMenu/images/folder.gif b/classes/HTML_TreeMenu/images/folder.gif new file mode 100755 index 0000000000000000000000000000000000000000..842989f2ecb79897d03f79408d8400986a0847dc GIT binary patch literal 922 zcmZ?wbhEHb6k!ly_|CwfsHoV|(z0}^;1Tj^%A_kn o{o+FJOu33xTO2~>%5Sbq(GqC5zCK~Un~e9iH8(dhGBQ{L0ML{t=l}o! literal 0 HcmV?d00001 diff --git a/classes/HTML_TreeMenu/images/line.gif b/classes/HTML_TreeMenu/images/line.gif new file mode 100755 index 0000000000000000000000000000000000000000..a567ef9e53e0c2945efa03c306efc814953308f9 GIT binary patch literal 63 zcmZ?wbhEHb6k!lyX!y@?;J|^FrWVDYEQ}05paUX6G7d~)E&VG`zvW*%XUi?`!&j$; O&(BRVuM1>kum%8ObQHA! literal 0 HcmV?d00001 diff --git a/classes/HTML_TreeMenu/images/linebottom.gif b/classes/HTML_TreeMenu/images/linebottom.gif new file mode 100755 index 0000000000000000000000000000000000000000..a960f1ff06cc48b0a39e940cf563233d50ada6c6 GIT binary patch literal 58 zcmZ?wbhEHb6k!lyX!y@?;J^U}1_s5SEQ~;kK?g*DWE_|TTl!a?e#^gj&X!xU7CY_f4l>)c97teVa+GV`8 mWB2;j_URL6aI(JI<)>!FbjZfItob-s&W3%*x>U7CheB~l>)c97teVa+GV`8 lWB2;j_URL6aI(JI<)>!FbjZfItob-s&W3#)XG9nntO1#k9K-+s literal 0 HcmV?d00001 diff --git a/classes/HTML_TreeMenu/images/minustop.gif b/classes/HTML_TreeMenu/images/minustop.gif new file mode 100755 index 0000000000000000000000000000000000000000..9e8fc36d94e558c464678f214612d7c5730419cc GIT binary patch literal 88 zcmZ?wbhEHb6k!lynE0RJz<~oTO)U&yp!k!85ya2|5g>U7Ce4=ql>)c97teVa+GV`8 kWB2;jM;>7ZJLgSK-!Prw@R>VT+FzGtu6n8+#=u|=0F+=Kr2qf` literal 0 HcmV?d00001 diff --git a/classes/HTML_TreeMenu/images/plus.gif b/classes/HTML_TreeMenu/images/plus.gif new file mode 100755 index 0000000000000000000000000000000000000000..5bc24cfb74666c2d612ff98e12e3fe67e91747ab GIT binary patch literal 94 zcmZ?wbhEHb6k!lynE0RJz<~oTO)U&yp!k!85ya2|5g>U7CjFNFl>)c97teXgSg3Q? qCMqZ6+>NO-B^UXKZ&_zuyZj2rw!LP*W=Sc$uiP7U7CcT#al>)c97teXgSg3Q? pCMqZ6+>NO-B^UXKZ&_zuyZj2rw!LP*W=Sc$uiP8r;>pNh4FLEq9~A%q literal 0 HcmV?d00001 diff --git a/classes/HTML_TreeMenu/images/plustop.gif b/classes/HTML_TreeMenu/images/plustop.gif new file mode 100755 index 0000000000000000000000000000000000000000..24e8a9ec48141bb292d2bfe0a88ad1f7299b5663 GIT binary patch literal 93 zcmZ?wbhEHb6k!lynE0RJz<~oTO)U&yp!k!85ya2|5g>U7CcT#al>)c97teXgSg3Q? pCMqZ6+>NQvI>Qd0T6cN+-suj>XU{%)$oMMm_Nxwy!>)`B)&M+=BG>=` literal 0 HcmV?d00001 diff --git a/classes/class.tree/COPYING.GPL b/classes/class.tree/COPYING.GPL deleted file mode 100755 index dc63aaca..00000000 --- a/classes/class.tree/COPYING.GPL +++ /dev/null @@ -1,340 +0,0 @@ - - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) 19yy - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19yy name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/classes/class.tree/VERSION b/classes/class.tree/VERSION deleted file mode 100755 index 270d3a33..00000000 --- a/classes/class.tree/VERSION +++ /dev/null @@ -1 +0,0 @@ -class.tree 1.2 0 diff --git a/classes/class.tree/class.tree.php b/classes/class.tree/class.tree.php deleted file mode 100755 index 401923af..00000000 --- a/classes/class.tree/class.tree.php +++ /dev/null @@ -1,128 +0,0 @@ - - - class Tree { - var $tree_basefrm = "_top"; - var $tree_gbase; - - // internal data - var $tree_path; - var $tree_count = 1; - var $usetextlinks = true; - var $startallopen = false; - - var $tree_ftv2folderclosed; - var $tree_ftv2folderopen; - var $tree_ftv2doc; - - function Tree ($t_path = "class.tree") - { - $this->tree_path = $t_path; - } - - function set_frame ($t_frame) - // (c) Gildas LE NADAN, 10 march 2000 - // This method should be called before method open_tree - // if you want to change the default target frame - { - $this->tree_basefrm = $t_frame; - } - - function set_textlinks ($tlval) - { - $this->usetextlinks = $tlval; - } - - function set_startallopen ($saaval) - { - $this->startallopen = $saaval; - } - - function open_tree ($t_text, $t_url, $t_frame="", - $t_gbase="ftv2") - { - $this->tree_gbase = $t_gbase; - $this->tree_ftv2folderclosed = "$this->tree_gbase/ftv2folderclosed.gif"; - $this->tree_ftv2folderopen = "$this->tree_gbase/ftv2folderopen.gif"; - $this->tree_ftv2doc = "$this->tree_gbase/ftv2doc.gif"; - - $tree_ftv2blank = "$this->tree_gbase/ftv2blank.gif"; - $tree_ftv2lastnode = "$this->tree_gbase/ftv2lastnode.gif"; - $tree_ftv2link = "$this->tree_gbase/ftv2link.gif"; - $tree_ftv2mlastnode = "$this->tree_gbase/ftv2mlastnode.gif"; - $tree_ftv2mnode = "$this->tree_gbase/ftv2mnode.gif"; - $tree_ftv2node = "$this->tree_gbase/ftv2node.gif"; - $tree_ftv2plastnode = "$this->tree_gbase/ftv2plastnode.gif"; - $tree_ftv2pnode = "$this->tree_gbase/ftv2pnode.gif"; - $tree_ftv2vertline = "$this->tree_gbase/ftv2vertline.gif"; - if($t_frame) { - $this->tree_basefrm = $t_frame; - } - - echo " - - -"; - } - } - -?> - diff --git a/classes/class.tree/ftiens4.js b/classes/class.tree/ftiens4.js deleted file mode 100644 index f50a3213..00000000 --- a/classes/class.tree/ftiens4.js +++ /dev/null @@ -1,523 +0,0 @@ -//**************************************************************** -// You are free to copy the "Folder-Tree" script as long as you -// keep this copyright notice: -// Script found in: http://www.geocities.com/marcelino_martins/foldertree.html -// Author: Marcelino Alves Martins (http://www.mmartins.com) -// 1997--2001. -// Modified: Patrick Hess (posi@posi.de) March 2000, October 2001^M -// changed: global variables define the path to the^M -// .gif files (classPath), the names of the^M -// images (ftv2folderopen, ftv2*, ...) and the^M -// destination frame (basefrm)^M -//**************************************************************** - -// Log of changes: -// 10 Aug 01 - Support for Netscape 6 -// -// 17 Feb 98 - Fix initialization flashing problem with Netscape -// -// 27 Jan 98 - Root folder starts open; support for USETEXTLINKS; -// make the ftien4 a js file - - -// Definition of class Folder -// ***************************************************************** - -function Folder(folderDescription, hreference, framename, open, closed) //constructor -{ - //constant data - this.imgopen = open; - this.imgclosed = closed; - this.desc = folderDescription - this.hreference = hreference - this.framename = framename - this.id = -1 - this.navObj = 0 - this.iconImg = 0 - this.nodeImg = 0 - this.isLastNode = 0 - - //dynamic data - this.isOpen = true - this.iconSrc = classPath + "/" + this.imgopen // classPath + "/" + ftv2folderopen - this.children = new Array - this.nChildren = 0 - - //methods - this.initialize = initializeFolder - this.setState = setStateFolder - this.addChild = addChild - this.createIndex = createEntryIndex - this.escondeBlock = escondeBlock - this.esconde = escondeFolder - this.mostra = mostra - this.renderOb = drawFolder - this.totalHeight = totalHeight - this.subEntries = folderSubEntries - this.outputLink = outputFolderLink - this.blockStart = blockStart - this.blockEnd = blockEnd -} - -function initializeFolder(level, lastNode, leftSide) -{ - var j=0 - var i=0 - var numberOfFolders - var numberOfDocs - var nc - - nc = this.nChildren - - this.createIndex() - - var auxEv = "" - - if (browserVersion > 0) - auxEv = "" - else - auxEv = "" - - if (level>0) - if (lastNode) //the last child in the children array - { - this.renderOb(leftSide + auxEv + "") - leftSide = leftSide + "" - this.isLastNode = 1 - } - else - { - this.renderOb(leftSide + auxEv + "") - leftSide = leftSide + "" - this.isLastNode = 0 - } - else - this.renderOb("") - - if (nc > 0) - { - level = level + 1 - for (i=0 ; i < this.nChildren; i++) - { - if (i == this.nChildren-1) - this.children[i].initialize(level, 1, leftSide) - else - this.children[i].initialize(level, 0, leftSide) - } - } -} - -function setStateFolder(isOpen) -{ - var subEntries - var totalHeight - var fIt = 0 - var i=0 - - if (isOpen == this.isOpen) - return - - if (browserVersion == 2) - { - totalHeight = 0 - for (i=0; i < this.nChildren; i++) - totalHeight = totalHeight + this.children[i].navObj.clip.height - subEntries = this.subEntries() - if (this.isOpen) - totalHeight = 0 - totalHeight - for (fIt = this.id + subEntries + 1; fIt < nEntries; fIt++) - indexOfEntries[fIt].navObj.moveBy(0, totalHeight) - } - this.isOpen = isOpen - propagateChangesInState(this) -} - -function propagateChangesInState(folder) -{ - var i=0 - - if (folder.isOpen) - { - if (folder.nodeImg) - if (folder.isLastNode) - folder.nodeImg.src = classPath + "/" + ftv2mlastnode - else - folder.nodeImg.src = classPath + "/" + ftv2mnode - folder.iconImg.src = classPath + "/" + folder.imgopen // classPath + "/" + ftv2folderopen - for (i=0; i") - doc.write(leftSide) - this.outputLink() - doc.write("") - doc.write("") - if (USETEXTLINKS) - { - this.outputLink() - doc.write(this.desc + "") - } - else - doc.write(this.desc) - doc.write("") - - this.blockEnd() - - if (browserVersion == 1) { - this.navObj = doc.all["folder"+this.id] - this.iconImg = doc.all["folderIcon"+this.id] - this.nodeImg = doc.all["nodeIcon"+this.id] - } else if (browserVersion == 2) { - this.navObj = doc.layers["folder"+this.id] - this.iconImg = this.navObj.document.images["folderIcon"+this.id] - this.nodeImg = this.navObj.document.images["nodeIcon"+this.id] - doc.yPos=doc.yPos+this.navObj.clip.height - } else if (browserVersion == 3) { - this.navObj = doc.getElementById("folder"+this.id) - this.iconImg = doc.getElementById("folderIcon"+this.id) - this.nodeImg = doc.getElementById("nodeIcon"+this.id) - } -} - -function outputFolderLink() -{ - if (this.hreference) - { - doc.write(" 0) - doc.write("onClick='javascript:clickOnFolder("+this.id+")'") - doc.write(">") - } - else - doc.write("") -// doc.write("") -} - -function addChild(childNode) -{ - this.children[this.nChildren] = childNode - this.nChildren++ - return childNode -} - -function folderSubEntries() -{ - var i = 0 - var se = this.nChildren - - for (i=0; i < this.nChildren; i++){ - if (this.children[i].children) //is a folder - se = se + this.children[i].subEntries() - } - - return se -} - - -// Definition of class Item (a document or link inside a Folder) -// ************************************************************* - -function Item(itemDescription, itemLink, image) // Constructor -{ - // constant data - this.docimage = image - this.desc = itemDescription - this.link = itemLink - this.id = -1 //initialized in initalize() - this.navObj = 0 //initialized in render() - this.iconImg = 0 //initialized in render() - this.iconSrc = classPath + "/" + this.docimage // ftv2doc - - // methods - this.initialize = initializeItem - this.createIndex = createEntryIndex - this.esconde = escondeBlock - this.mostra = mostra - this.renderOb = drawItem - this.totalHeight = totalHeight - this.blockStart = blockStart - this.blockEnd = blockEnd -} - -function initializeItem(level, lastNode, leftSide) -{ - this.createIndex() - - if (level>0) - if (lastNode) //the last 'brother' in the children array - { - this.renderOb(leftSide + "") - leftSide = leftSide + "" - } - else - { - this.renderOb(leftSide + "") - leftSide = leftSide + "" - } - else - this.renderOb("") -} - -function drawItem(leftSide) -{ - this.blockStart("item") - - doc.write("") - doc.write(leftSide) - doc.write("") - doc.write("") - doc.write("") - doc.write("") - if (USETEXTLINKS) - doc.write("" + this.desc + "") - else - doc.write(this.desc) - - this.blockEnd() - - if (browserVersion == 1) { - this.navObj = doc.all["item"+this.id] - this.iconImg = doc.all["itemIcon"+this.id] - } else if (browserVersion == 2) { - this.navObj = doc.layers["item"+this.id] - this.iconImg = this.navObj.document.images["itemIcon"+this.id] - doc.yPos=doc.yPos+this.navObj.clip.height - } else if (browserVersion == 3) { - this.navObj = doc.getElementById("item"+this.id) - this.iconImg = doc.getElementById("itemIcon"+this.id) - } -} - - -// Methods common to both objects (pseudo-inheritance) -// ******************************************************** - -function mostra() -{ - if (browserVersion == 1 || browserVersion == 3) - this.navObj.style.display = "block" - else - this.navObj.visibility = "show" -} - -function escondeBlock() -{ - if (browserVersion == 1 || browserVersion == 3) { - if (this.navObj.style.display == "none") - return - this.navObj.style.display = "none" - } else { - if (this.navObj.visibility == "hidden") - return - this.navObj.visibility = "hidden" - } -} - -function blockStart(idprefix) { - var idParam = "id='" + idprefix + this.id + "'" - - if (browserVersion == 2) - doc.write("") - - if (browserVersion == 3) //N6 has bug on display property with tables - doc.write("
") - - doc.write("") - else - doc.write(">") -} - -function blockEnd() { - doc.write("
") - - if (browserVersion == 2) - doc.write("") - if (browserVersion == 3) - doc.write("
") -} - -function createEntryIndex() -{ - this.id = nEntries - indexOfEntries[nEntries] = this - nEntries++ -} - -// total height of subEntries open -function totalHeight() //used with browserVersion == 2 -{ - var h = this.navObj.clip.height - var i = 0 - - if (this.isOpen) //is a folder and _is_ open - for (i=0 ; i < this.nChildren; i++) - h = h + this.children[i].totalHeight() - - return h -} - - -// Events -// ********************************************************* - -function clickOnFolder(folderId) -{ - var clicked = indexOfEntries[folderId] - - if (!clicked.isOpen) - clickOnNode(folderId) - - return - - if (clicked.isSelected) - return -} - -function clickOnNode(folderId) -{ - var clickedFolder = 0 - var state = 0 - - clickedFolder = indexOfEntries[folderId] - state = clickedFolder.isOpen - - clickedFolder.setState(!state) //open<->close -} - - -// Auxiliary Functions for Folder-Tree backward compatibility -// *********************************************************** - -function gFld(description, hreference, framename, open, closed) -{ - folder = new Folder(description, hreference, framename, open, closed) - return folder -} - -function gLnk(target, description, linkData, framename, image) -{ - fullLink = "" - - if (target==0) - { - fullLink = "'"+linkData+"' target=\""+framename+"\"" - } - else - { - if (target==1) - // fullLink = "'http://"+linkData+"' target=_blank" - fullLink = "'"+linkData+"' target=_blank" - else - // fullLink = "'http://"+linkData+"' target=\""+framename+"\"" - fullLink = "'"+linkData+"' target=\""+framename+"\"" - } - - linkItem = new Item(description, fullLink, image) - return linkItem -} - -function insFld(parentFolder, childFolder) -{ - return parentFolder.addChild(childFolder) -} - -function insDoc(parentFolder, document) -{ - parentFolder.addChild(document) -} - - -// Global variables -// **************** - -//These two variables are overwriten on defineMyTree.js if needed be -//USETEXTLINKS = 0 -//STARTALLOPEN = 0 -indexOfEntries = new Array -nEntries = 0 -doc = document -browserVersion = 0 -selectedFolder=0 - - -// Main function -// ************* - -// This function uses an object (navigator) defined in -// ua.js, imported in the main html page (left frame). -function initializeDocument() -{ - switch(navigator.family) - { - case 'opera': - case 'ie4': - browserVersion = 1 //IE4 - break; - case 'nn4': - browserVersion = 2 //NS4 - break; - case 'gecko': - browserVersion = 3 //NS6 - break; - default: - browserVersion = 0 //other - break; - } - - //foldersTree (with the site's data) is created in an external .js - foldersTree.initialize(0, 1, "") - - if (browserVersion == 2) - doc.write(" ") - - //The tree starts in full display - if (!STARTALLOPEN) - if (browserVersion > 0) { - // close the whole tree - clickOnNode(0) - // open the root folder - clickOnNode(0) - } - - /* not used, ph 10/2001 - if (browserVersion == 0) - doc.write("


This tree only expands or contracts with DHTML capable browsers
") - */ -} - diff --git a/classes/class.tree/ftv2/ftv2blank.gif b/classes/class.tree/ftv2/ftv2blank.gif deleted file mode 100644 index 85df9a36ff9fad3f4b2cd86d44b032ba30023b14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135 zcmZ?wbhEHb6krfz*v!E2|Nnmmq5)8`;!hSv1_pix#eXuPIjM;$3hth63cIG&CGIaNs|Xg#=JIU~!-V#h)yU3=EtMIv@d%84fId z1}8mN&wbRo(fT=4fv-d6yyqR9YZmm)RBwKiegB7cP2BBQQu7Q1f{wQBNy l&iM0+sP+6$Rh!>j-PZrkJ^SIgJ#O=FeXreh{~QN{H2^xOJAVKG diff --git a/classes/class.tree/ftv2/ftv2folderopen.gif b/classes/class.tree/ftv2/ftv2folderopen.gif deleted file mode 100644 index aa1acd1c0127b7871f15293cb230e9cbd7283b9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmZ?wbhEHblwc5J*vtR||Nk>IG&CGIaNs|Xg$mI4Kn03FSr{1@xEORm3PEN#u!IDh z^jy94QSS!p=S&5G4w>_wS#avC?whIJ{xJLg4%zy{m$$7tlkB0=#683lZcElVAIHLA F4FFl;B{Tp4 diff --git a/classes/class.tree/ftv2/ftv2link.gif b/classes/class.tree/ftv2/ftv2link.gif deleted file mode 100644 index 32d3b9e31f285c1558181a355ef97ca5ee06cecc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmZ?wbhEHblwc5J*vtS14GjPP0~rkr4F4G#K;XcE1OLH75P3KW6jc1l!pOkD&!G5E zCNw8CF-5`M(@h~bH?gQBII%3XNFfY}jr0r{bU>Owb}+D%e>my6dauRn+TQ;P>XMTK z+o@674F?$t4ED>L|9SgVmFZH2Nm)XLu(Mvgn4wS!dtYB?fyLx06P2dV Lm^q7Ikii-NtVB?6 diff --git a/classes/class.tree/ftv2/ftv2mlastnode.gif b/classes/class.tree/ftv2/ftv2mlastnode.gif deleted file mode 100644 index 11ae43a5ae00b76b81e0bf2aa8d2b33efbbb5e53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmZ?wbhEHb6krfz*v!Dt(9rPz|9=MJ08pjkPZmZ721W)QkPeU;3@lm(Cp=eAeekN* p_`j$^Uvhd>T*aykg+2Kb&IWtk{95(e)U)Zpf&vd6DN{iPYXB-WAG`nn diff --git a/classes/class.tree/ftv2/ftv2mnode.gif b/classes/class.tree/ftv2/ftv2mnode.gif deleted file mode 100644 index b43ce87bf7f792005b398f7ade1f5613fb7031bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129 zcmZ?wbhEHb6krfz*v!Dt(9rPz|9=MD;J|?ca7my_#h)yU3=G^1Iv_!i84N6X1t&dM yPkr#J*7(1uLSJ%vR9wZX7fO5HPdXdyb@OZ0Yg5lA2cH5B6}G}-yg@>Y4AuaLZzG}r diff --git a/classes/class.tree/ftv2/ftv2node.gif b/classes/class.tree/ftv2/ftv2node.gif deleted file mode 100644 index 40167db1a5b31ebead9581ca798aa406aee3aa48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmZ?wbhEHb6krfz*v!Dt(9rPz|9=MJ08pjkPZmZ727U&`e=?ytsfj5H?w)Q6!MTY= zCBcbhsYME5Ky0LEz@P&%5oCu0i^7MKo~!p-ygs}8e}YEQf$*yI>683lZo9tgq}1G- K5^~9c4AuZD0w@gt diff --git a/classes/class.tree/ftv2/ftv2plastnode.gif b/classes/class.tree/ftv2/ftv2plastnode.gif deleted file mode 100644 index b87f003154502f8e9f569fefb12d57a5a1ebb515..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmZ?wbhEHb6krfz*v!Dt(9rPz|9=MJ08pjkPZmZ721W)QkPeU;3@rKvCp=eAeekN* v_`j$^Uvhd>oPv+$)O9m7&lFF%`-bKA@>z>*#XDKFr20=RDO%adz+epk!mc6H diff --git a/classes/class.tree/ftv2/ftv2pnode.gif b/classes/class.tree/ftv2/ftv2pnode.gif deleted file mode 100644 index 5b680136ee9db9cd706b2ef642e89d6edda3989a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmZ?wbhEHb6krfz*v!Dt(9rPz|9=MD;J|?ca7my_#h)yU3=G^1Iv_!i84N5&1t&dM zPkr#J*7(1uLSJ%v)IB91&8h2VXrB2z>Fyhr+skJywiWMW(K^=S5qIfERMD)-91PX~ DC2=QD diff --git a/classes/class.tree/ftv2/ftv2vertline.gif b/classes/class.tree/ftv2/ftv2vertline.gif deleted file mode 100644 index 63ee93a0f3886253fc434c0bbd4732c2593ed254..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140 zcmZ?wbhEHb6krfz*v!Dt(9rPz|9=MJ08pjkPZmZ727U&`e=?ytsfj5H?w)Q6!MTY= zCBcbhsYME5Ky0LEz@P&%5oCu0i{yuso~!p-ygs}8e}YEQf$*yI>66mBcWK4AGFSru D3pykE diff --git a/classes/class.tree/mixed/draw.gif b/classes/class.tree/mixed/draw.gif deleted file mode 100755 index 030be8228d70c7bd5f31382613fcb0ed151d8700..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1022 zcmZ?wbhEHb6krfwc+S93SXk)i=Qm}_6m@lV%b=hHUtjmMG$$t~MMXtBJ3C8D%jwgn zPguF~^X}azog5{PX9}pE!5!mz_H=+`oVO_3PKae+LBxUA}xdI5^l?Q}h3!L#-hp zMmjqETep7NyZ6BR_s70|J@@zT(W6JLt*sRl6e8`|jWjh6wYNXZ&DG}R-S^~4nmgC) zqiIv8O4}P7`^v~@$;r6|2mkx+@_mn4Q>3JvoLomo$Bu8`mOXtM`byupEy zS%6=`V?n|}r#2obi;52nPAr_l8X+4N6dYjXku=F@*wE9nLnaF%+% z0_P-`lR|2~b8Iwc3VMlX2CoR&SfuLcG>d0L%Ee8s-s1Z42Y7y*{@^5Gn0#W2;peA3 zvyQ4dFA3b-<|}QU|KP|$n~-yjmL;!lG%`Ns%WSLo^y22><^A*R>lyZ{RcrwI<3AG< GgEasEGL&2Z diff --git a/classes/class.tree/mixed/env.gif b/classes/class.tree/mixed/env.gif deleted file mode 100755 index bfd36a48834b37f4bf5dc793e26ef2bceefc4c80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 636 zcmZ?wbhEHb6krfwIL5%BCad5gC~vQ>D=jT8D<|utVQ9%AE-Nc5&%m`?(0!+Qw2^|U zlCsiC!xPS9yFdc;pyKD_pfsKgZ$W!XU=X%q%P{?C0ml z!om>4B70fT|FcKMVIFrUcBw!=w;zu-etWR)^ZiwiuT8#rzG2_iU?)3q9v%iyRi%?W zo|D=O-rZUJ;^wUTSNd*UXe!N>RF-G3l~mfx;T+5$eL~QCVo&8fj*nW&{DNq3d8?p&em>men>$)C=kXwEL~?Pc9n&abDZz>0nX$_41q?H~ zl;=#g%+1YJS6BZ}2q^yJ^G!@iRVdFa$xv|j^bKH8{K>+|z);Vi!vF-JSYlv5-caAv z+|pXlz{td0&%(;a-d4}S$;HjX%FD+uFlVlykg$lTn7D+bl=R9~f-Kd9_GBVma;<{W+din;2Mw-SZdrW!F%q^x`8d_P~*xJe1i<>z(n(K->8Cg5KxVp)> zdw6|mvYwg785ial2DhD=(IRtX yg6HBi-q~ikH`WABZsTz?&wp@a;^9rHG8XxF3T8MjUv_r3`E!?BCyUb+7_0$z3z5B&53PwX$%GyQx>+S&3!Cf;EwwwI_=G)l@uiVXlhk9FwSvi+maQKiNTtcze}gs~3xhQP Ddi+@t diff --git a/classes/class.tree/mixed/print.gif b/classes/class.tree/mixed/print.gif deleted file mode 100755 index 6171b29825aeceb6b840c5ecfbb25bacae9414f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1054 zcmZ?wbhEHb6krfwc+SAk)6-*YY^<-Qtfi%;r>AFVXjoiaJT*K#GBPs0s_ONLZQGwb zIrQPf>7PF@{{LS)bEd7W?XqRdX3m`H;NY-q?b3Vaj&6SNK+n@NJw1I|L_}RhMRasD zZ%D|p)BA$2UevpH&+y^H-k(34&zunv5ov5}Tsvb%VPT=Xyu7rM()O*Z4^Z?_PfWbno+rTW_B2xN|K0#99kw zS%%~&w;zu-e!REz!`;Q7?ydNIf7Q!t^UfWtxpltd+!m$Rx8@yMWAX0Jf~#kWFP_Z4 za=Q5LrOx|T`VQ{MZmbeJxxet#CYkFe%XckQiVQKkezxq|*~&BfvTvMeIXBL8!+l`0eSCzBs)|BFHKhRvsQ6OP4O4-`)Lx6woXL6#w!0 zCZ?n+lxLP?D7bt21~4f8WMO1r_|Krj00f|1!ocy8;XkJcheAUGBMTP`hr@vb4vp*r zDghfB9GThq^y+pOcH>6~~b~z0+W>>{eCbga!hAF4Em=?1YB$&kSTN1dr%~#so z?cRZ#XDs`kTNFLJurm2M-#nYDpw-tlxBJg$s{6;lrIIn>?d@icubL?y4-_3bnz+U1 Tt@wVxzH5?p_`Zw;2L@{Zj;NVU diff --git a/classes/class.tree/ph/ftv2blank.gif b/classes/class.tree/ph/ftv2blank.gif deleted file mode 100755 index dcc597b20a66a83f771a2b34b51d9aadcf7b6a12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103 zcmZ?wbhEHb6krfz*v!Ci;J^U}qQU?F{}q3-FoM+UfC!Ko4lE)9Cp=g0wRnAY_x}Wq OzLd;)8LOBC8LR;YgcFUMYiYv731R5C=3sRHja5xuv%TD8AaZ0e(sMObODKlVrb5B-;Y5DQ+N2cYW Z){S){E>*SC7CpUfN)skdnk>j*4FGaDK~n$# diff --git a/classes/class.tree/ph/ftv2folderclosed.gif b/classes/class.tree/ph/ftv2folderclosed.gif deleted file mode 100755 index 1c4808f9d9cf029fd5e97454ad39c8a1f18ffe8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161 zcmZ?wbhEHblwc5J*vtR||Nk>IG&CGIaNs|Xg#=JIU~!-V#h)yU3=GT+Iv@d%84fId z1t&aL&wa$Y$@)1{fv-d6yyqR9YZmm)RBwKiegB7cP2BBQQu7Q1f{wQBNyj-PZrkJ^SIgJ#O=FeXreh{~QN{H2@{zJ1qbJ diff --git a/classes/class.tree/ph/ftv2folderopen.gif b/classes/class.tree/ph/ftv2folderopen.gif deleted file mode 100755 index ea52f20297789df36bd8b0d48f8bbefff3849555..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmZ?wbhEHblwc5J*vtR||Nk>IG&CGIaNs|Xg$mI4Kn03FSr{1@m>G0H3PEN#u!Izx z@Law0(Zmhb&zTAW9Wv)Vv*6TO-8WOc{bBa~9kTUDE^k|PCfP%!jbrPB=Hon_MHg0- qSP4iimP}heW6Pg?`yIA#nq14U=DBM2y9HOXKWukdd;7H@gEat~qCN)z diff --git a/classes/class.tree/ph/ftv2lastnode.gif b/classes/class.tree/ph/ftv2lastnode.gif deleted file mode 100755 index 777773303920f5d2419a11d552a7eec6d369dcc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmZ?wbhEHb6krfz*v!Dt(9m$;zySv0!2kdM6@RiYGB7YQ=zw&9%y3|lHaOwAdauRn bv%CK%XcQd?uS%aj$?@g3WS#SIEDY8FJ3$#) diff --git a/classes/class.tree/ph/ftv2link.gif b/classes/class.tree/ph/ftv2link.gif deleted file mode 100755 index cbd57b3112703d4f4f1658d72e455e1555910d0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 zcmZ?wbhEHblwc5J*vtS14GjPP0~rkr4F4G#K;XcE1OLH75P3KW6jc1l!pOkD&Y%Ml z1ew9WQvTtD=jy!{uWNh%E2v9O4p35YpC!~Svr=qxJHwp=+vGeR?q_oGQ+p}N)p*Ez z#cEA%mL-Z7XO?j7InZG6AkY4AuaJuOpHG diff --git a/classes/class.tree/ph/ftv2node.gif b/classes/class.tree/ph/ftv2node.gif deleted file mode 100755 index 30fec026473101ede1d187e43edd86692cdcbb53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115 zcmZ?wbhEHb6krfz*v!Dt(9m$;zySv0!2kdM6@RiYGB7YQ=zw&9%y3{)FgW44dauRn hv%CK%XcQd?uS%aj$?@g3>$^@$&Allhmn_I&4FJ##95Mg^ diff --git a/classes/class.tree/ph/ftv2plastnode.gif b/classes/class.tree/ph/ftv2plastnode.gif deleted file mode 100755 index ef6623ca9b48b74cea529b70dd667c581cf3518b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103 zcmZ?wbhEHb6krfzSj52a|NsAI&z>DPaG;@~fdL69{$ycfU|?d<0f~XsGBE3C?7Fk= x@yVY`dvjmxU0ptnK}S)zZvy+8)dG8;H0_!%(Y*C!VZ{6Y2No1)crq|p0|3Z%B=7(L diff --git a/classes/class.tree/ph/ftv2pnode.gif b/classes/class.tree/ph/ftv2pnode.gif deleted file mode 100755 index 47b3d3f948054218a88377f2ce2124a166ecd156..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106 zcmZ?wbhEHb6krfzSj52a|NsAI&z>DPaG;@~fdL69{$ycfU|?d<0f~XsGBE3F?7Fk= z@yVY`dvjmxU0ptnK}S)zZvy+8)dG8;H0_!%(Y*C!VZ{7j4pA4vrGmP;Ss1JVH5MhK diff --git a/classes/class.tree/ph/ftv2vertline.gif b/classes/class.tree/ph/ftv2vertline.gif deleted file mode 100755 index 73c68f9bafaf36223e8de2e8ffedf2fb93af18ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108 zcmZ?wbhEHb6krfz*v!Dt(9m$;zySv0!2kdM6@RiYGB7YQ=zw&9%y3|lG&te8dauRn Zv%CK%XcQd?uS%ajDXn{#R*WlyH2?&_7%cz* diff --git a/classes/class.tree/ua.js b/classes/class.tree/ua.js deleted file mode 100644 index 6dc4c2d4..00000000 --- a/classes/class.tree/ua.js +++ /dev/null @@ -1,164 +0,0 @@ -// ua.js - Detect Browser -// Requires JavaScript 1.1 -/* -The contents of this file are subject to the Netscape Public -License Version 1.1 (the "License"); you may not use this file -except in compliance with the License. You may obtain a copy of -the License at http://www.mozilla.org/NPL/ - -Software distributed under the License is distributed on an "AS -IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or -implied. See the License for the specific language governing -rights and limitations under the License. - -The Initial Developer of the Original Code is Bob Clary. - -Contributor(s): Bob Clary, Original Work, Copyright 1999-2000 - Bob Clary, Netscape Communications, Copyright 2001 - -Alternatively, the contents of this file may be used under the -terms of the GNU Public License (the "GPL"), in which case the -provisions of the GPL are applicable instead of those above. -If you wish to allow use of your version of this file only -under the terms of the GPL and not to allow others to use your -version of this file under the NPL, indicate your decision by -deleting the provisions above and replace them with the notice -and other provisions required by the GPL. If you do not delete -the provisions above, a recipient may use your version of this -file under either the NPL or the GPL. -*/ - -// work around bug in xpcdom Mozilla 0.9.1 -window.saveNavigator = window.navigator; - -// Handy functions -function noop() {} -function noerror() { return true; } - -function defaultOnError(msg, url, line) -{ - // customize this for your site - if (top.location.href.indexOf('_files/errors/') == -1) - top.location = '/evangelism/xbProjects/_files/errors/index.html?msg=' + escape(msg) + '&url=' + escape(url) + '&line=' + escape(line); -} - -// Display Error page... -// XXX: more work to be done here -// -function reportError(message) -{ - // customize this for your site - if (top.location.href.indexOf('_files/errors/') == -1) - top.location = '/evangelism/xbProjects/_files/errors/index.html?msg=' + escape(message); -} - -function pageRequires(cond, msg, redirectTo) -{ - if (!cond) - { - msg = 'This page requires ' + msg; - top.location = redirectTo + '?msg=' + escape(msg); - } - // return cond so can use in onclick handlers to exclude browsers - // from pages they do not support. - return cond; -} - -function detectBrowser() -{ - var oldOnError = window.onerror; - var element = null; - - window.onerror = defaultOnError; - - navigator.OS = ''; - navigator.version = 0; - navigator.org = ''; - navigator.family = ''; - - var platform; - if (typeof(window.navigator.platform) != 'undefined') - { - platform = window.navigator.platform.toLowerCase(); - if (platform.indexOf('win') != -1) - navigator.OS = 'win'; - else if (platform.indexOf('mac') != -1) - navigator.OS = 'mac'; - else if (platform.indexOf('unix') != -1 || platform.indexOf('linux') != -1 || platform.indexOf('sun') != -1) - navigator.OS = 'nix'; - } - - var i = 0; - var ua = window.navigator.userAgent.toLowerCase(); - - if (ua.indexOf('opera') != -1) - { - i = ua.indexOf('opera'); - navigator.family = 'opera'; - navigator.org = 'opera'; - navigator.version = parseFloat('0' + ua.substr(i+6), 10); - } - else if ((i = ua.indexOf('msie')) != -1) - { - navigator.org = 'microsoft'; - navigator.version = parseFloat('0' + ua.substr(i+5), 10); - - if (navigator.version < 4) - navigator.family = 'ie3'; - else - navigator.family = 'ie4' - } - else if (typeof(window.controllers) != 'undefined' && typeof(window.locationbar) != 'undefined') - { - i = ua.lastIndexOf('/') - navigator.version = parseFloat('0' + ua.substr(i+1), 10); - navigator.family = 'gecko'; - - if (ua.indexOf('netscape') != -1) - navigator.org = 'netscape'; - else if (ua.indexOf('compuserve') != -1) - navigator.org = 'compuserve'; - else - navigator.org = 'mozilla'; - } - else if ((ua.indexOf('mozilla') !=-1) && (ua.indexOf('spoofer')==-1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('opera')==-1)&& (ua.indexOf('webtv')==-1) && (ua.indexOf('hotjava')==-1)) - { - var is_major = parseFloat(navigator.appVersion); - - if (is_major < 4) - navigator.version = is_major; - else - { - i = ua.lastIndexOf('/') - navigator.version = parseFloat('0' + ua.substr(i+1), 10); - } - navigator.org = 'netscape'; - navigator.family = 'nn' + parseInt(navigator.appVersion); - } - else if ((i = ua.indexOf('aol')) != -1 ) - { - // aol - navigator.family = 'aol'; - navigator.org = 'aol'; - navigator.version = parseFloat('0' + ua.substr(i+4), 10); - } - - navigator.DOMCORE1 = (typeof(document.getElementsByTagName) != 'undefined' && typeof(document.createElement) != 'undefined'); - navigator.DOMCORE2 = (navigator.DOMCORE1 && typeof(document.getElementById) != 'undefined' && typeof(document.createElementNS) != 'undefined'); - navigator.DOMHTML = (navigator.DOMCORE1 && typeof(document.getElementById) != 'undefined'); - navigator.DOMCSS1 = ( (navigator.family == 'gecko') || (navigator.family == 'ie4') ); - - navigator.DOMCSS2 = false; - if (navigator.DOMCORE1) - { - element = document.createElement('p'); - navigator.DOMCSS2 = (typeof(element.style) == 'object'); - } - - navigator.DOMEVENTS = (typeof(document.createEvent) != 'undefined'); - - window.onerror = oldOnError; -} - -detectBrowser(); - diff --git a/classes/class.tree/ftv2/ftv2doc.gif b/images/themes/default/document.gif similarity index 100% rename from classes/class.tree/ftv2/ftv2doc.gif rename to images/themes/default/document.gif diff --git a/libraries/dyna.inc.php b/libraries/dyna.inc.php deleted file mode 100644 index e38c43ab..00000000 --- a/libraries/dyna.inc.php +++ /dev/null @@ -1,270 +0,0 @@ - | - - | Harald Radi | - - +-----------------------------------------------------------------------+ - -*/ - - - -require_once('tree.inc.php'); - - - -class HTML_TreeMenu - -{ - - - - var $items; - - var $layer; - - var $images; - - var $menuobj; - - - - function HTML_TreeMenu($layer, $images, $linkTarget = '_self', $usePersistence = false) - - { - - $this->menuobj = 'objTreeMenu'; - - $this->layer = $layer; - - $this->images = $images; - - $this->linkTarget = $linkTarget; - - $this->usePersistence = $usePersistence; - - } - - - - function &addItem(&$menu) - - { - - $this->items[] = &$menu; - - return $this->items[count($this->items) - 1]; - - } - - - - function printMenu() - - { - - echo "\n"; - - - - echo '"; - - } - -} - - - -class HTML_TreeNode - -{ - - var $text; - - var $link; - - var $icon; - - var $items; - - var $expanded; - - - - function HTML_TreeNode($text = null, $link = null, $icon = null, $expanded = false, $isDynamic = true) - - { - - $this->text = (string)$text; - - $this->link = (string)$link; - - $this->icon = (string)$icon; - - $this->expanded = $expanded; - - $this->isDynamic = $isDynamic; - - } - - - - function &addItem(&$node) - - { - - $this->items[] = &$node; - - return $this->items[count($this->items) - 1]; - - } - - - - function _printMenu($prefix) - - { - - echo sprintf("\t%s = new TreeNode('%s', %s, %s, %s, %s);\n", - - $prefix, - - $this->text, - - !empty($this->icon) ? "'" . $this->icon . "'" : 'null', - - !empty($this->link) ? "'" . $this->link . "'" : 'null', - - $this->expanded ? 'true' : 'false', - - $this->isDynamic ? 'true' : 'false'); - - - - if (!empty($this->items)) { - - for ($i=0; $iitems); $i++) { - - $this->items[$i]->_printMenu($prefix . ".n[$i]"); - - } - - } - - } - -} - -?> - diff --git a/libraries/tree.inc.php b/libraries/tree.inc.php deleted file mode 100644 index 75af7788..00000000 --- a/libraries/tree.inc.php +++ /dev/null @@ -1,1034 +0,0 @@ - - -- 2.39.5