includes/clientside/admin-menu.js
changeset 1 fe660c52c48f
equal deleted inserted replaced
0:902822492a68 1:fe660c52c48f
       
     1 /*
       
     2  * Midget - an open source wiki-like CMS
       
     3  * Copyright (C) 2006 Dan Fuhry
       
     4  *
       
     5  * This program is Free Software; you can redistribute and/or modify it under the terms of the GNU General Public License
       
     6  * as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
       
     7  *
       
     8  * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
       
     9  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
       
    10  *
       
    11  * Some code found in this script is not licensed under the GNU General Public License; however, it is believed that the license terms shown
       
    12  * below are GPL-compatible. If you believe that this is not the case, please drop a note to support@midget.no-ip.org.
       
    13  */
       
    14  
       
    15 /*
       
    16  * Title: Tigra Tree
       
    17  * Description: See the demo at url
       
    18  * URL: http://www.softcomplex.com/products/tigra_tree_menu/
       
    19  * Version: 1.1
       
    20  * Date: 11-12-2002 (mm-dd-yyyy)
       
    21  * Notes: This script is free. Visit official site for further details.
       
    22  * 
       
    23  * There is no license fee or royalty fee to be paid at any time for using the Tigra Tree Menu v1.x
       
    24  * You may include the source code or modified source code within your own projects for either personal or commercial use but excluding the restrictions outlined below. The following restrictions apply to all parts of the component, including all source code, samples and documentation.
       
    25  *
       
    26  * - Header block of script file (tree.js) CAN NOT be modified or removed.
       
    27  * - The above items CAN NOT be sold as are, either individually or together.
       
    28  * - The above items CAN NOT be modified and then sold as a library component, either individually or together. 
       
    29  */
       
    30  
       
    31 function tree (a_items, a_template) {
       
    32 
       
    33 	this.a_tpl      = a_template;
       
    34 	this.a_config   = a_items;
       
    35 	this.o_root     = this;
       
    36 	this.a_index    = [];
       
    37 	this.o_selected = null;
       
    38 	this.n_depth    = -1;
       
    39 	
       
    40 	var o_icone = new Image(),
       
    41 		o_iconl = new Image();
       
    42 	o_icone.src = a_template['icon_e'];
       
    43 	o_iconl.src = a_template['icon_l'];
       
    44 	a_template['im_e'] = o_icone;
       
    45 	a_template['im_l'] = o_iconl;
       
    46 	for (var i = 0; i < 64; i++)
       
    47 		if (a_template['icon_' + i]) {
       
    48 			var o_icon = new Image();
       
    49 			a_template['im_' + i] = o_icon;
       
    50 			o_icon.src = a_template['icon_' + i];
       
    51 		}
       
    52 	
       
    53 	this.toggle = function (n_id) {	var o_item = this.a_index[n_id]; o_item.open(o_item.b_opened) };
       
    54 	this.select = function (n_id) { return this.a_index[n_id].select(); };
       
    55 	this.mout   = function (n_id) { this.a_index[n_id].upstatus(true) };
       
    56 	this.mover  = function (n_id) { this.a_index[n_id].upstatus() };
       
    57 
       
    58 	this.a_children = [];
       
    59 	for (var i = 0; i < a_items.length; i++)
       
    60 		new tree_item(this, i);
       
    61 
       
    62 	this.n_id = trees.length;
       
    63 	trees[this.n_id] = this;
       
    64 	
       
    65 	for (var i = 0; i < this.a_children.length; i++) {
       
    66 		document.write(this.a_children[i].init());
       
    67 		this.a_children[i].open();
       
    68 	}
       
    69 }
       
    70 function tree_item (o_parent, n_order) {
       
    71 
       
    72 	this.n_depth  = o_parent.n_depth + 1;
       
    73 	this.a_config = o_parent.a_config[n_order + (this.n_depth ? 2 : 0)];
       
    74 	if (!this.a_config) return;
       
    75 
       
    76 	this.o_root    = o_parent.o_root;
       
    77 	this.o_parent  = o_parent;
       
    78 	this.n_order   = n_order;
       
    79 	this.b_opened  = !this.n_depth;
       
    80 
       
    81 	this.n_id = this.o_root.a_index.length;
       
    82 	this.o_root.a_index[this.n_id] = this;
       
    83 	o_parent.a_children[n_order] = this;
       
    84 
       
    85 	this.a_children = [];
       
    86 	for (var i = 0; i < this.a_config.length - 2; i++)
       
    87 		new tree_item(this, i);
       
    88 
       
    89 	this.get_icon = item_get_icon;
       
    90 	this.open     = item_open;
       
    91 	this.select   = item_select;
       
    92 	this.init     = item_init;
       
    93 	this.upstatus = item_upstatus;
       
    94 	this.is_last  = function () { return this.n_order == this.o_parent.a_children.length - 1 };
       
    95 }
       
    96 
       
    97 function item_open (b_close) {
       
    98 	var o_idiv = get_element('i_div' + this.o_root.n_id + '_' + this.n_id);
       
    99 	if (!o_idiv) return;
       
   100 	
       
   101 	if (!o_idiv.innerHTML) {
       
   102 		var a_children = [];
       
   103 		for (var i = 0; i < this.a_children.length; i++)
       
   104 			a_children[i]= this.a_children[i].init();
       
   105 		o_idiv.innerHTML = a_children.join('');
       
   106 	}
       
   107 	o_idiv.style.display = (b_close ? 'none' : 'block');
       
   108 	
       
   109 	this.b_opened = !b_close;
       
   110 	var o_jicon = document.images['j_img' + this.o_root.n_id + '_' + this.n_id],
       
   111 		o_iicon = document.images['i_img' + this.o_root.n_id + '_' + this.n_id];
       
   112 	if (o_jicon) o_jicon.src = this.get_icon(true);
       
   113 	if (o_iicon) o_iicon.src = this.get_icon();
       
   114 	this.upstatus();
       
   115 }
       
   116 
       
   117 function item_select (b_deselect) {
       
   118 	if (!b_deselect) {
       
   119 		var o_olditem = this.o_root.o_selected;
       
   120 		this.o_root.o_selected = this;
       
   121 		if (o_olditem) o_olditem.select(true);
       
   122 	}
       
   123 	var o_iicon = document.images['i_img' + this.o_root.n_id + '_' + this.n_id];
       
   124 	if (o_iicon) o_iicon.src = this.get_icon();
       
   125 	get_element('i_txt' + this.o_root.n_id + '_' + this.n_id).style.fontWeight = b_deselect ? 'normal' : 'bold';
       
   126 	
       
   127 	this.upstatus();
       
   128 	return Boolean(this.a_config[1]);
       
   129 }
       
   130 
       
   131 function item_upstatus (b_clear) {
       
   132 	window.setTimeout('window.status="' + (b_clear ? '' : this.a_config[0] + (this.a_config[1] ? ' ('+ this.a_config[1] + ')' : '')) + '"', 10);
       
   133 }
       
   134 
       
   135 function item_init () {
       
   136 	var a_offset = [],
       
   137 		o_current_item = this.o_parent;
       
   138 	for (var i = this.n_depth; i > 1; i--) {
       
   139 		a_offset[i] = '<img src="' + this.o_root.a_tpl[o_current_item.is_last() ? 'icon_e' : 'icon_l'] + '" border="0" align="absbottom">';
       
   140 		o_current_item = o_current_item.o_parent;
       
   141 	}
       
   142 	return '<table cellpadding="0" cellspacing="0" border="0"><tr><td nowrap>' + (this.n_depth ? a_offset.join('') + (this.a_children.length
       
   143 		? '<a href="javascript: trees[' + this.o_root.n_id + '].toggle(' + this.n_id + ')" onmouseover="trees[' + this.o_root.n_id + '].mover(' + this.n_id + ')" onmouseout="trees[' + this.o_root.n_id + '].mout(' + this.n_id + ')"><img src="' + this.get_icon(true) + '" border="0" align="absbottom" name="j_img' + this.o_root.n_id + '_' + this.n_id + '"></a>'
       
   144 		: '<img src="' + this.get_icon(true) + '" border="0" align="absbottom">') : '')
       
   145   // CODE MODIFICATION
       
   146   // removed: 
       
   147 	//	+ '<a href="' + this.a_config[1] + '" target="' + this.o_root.a_tpl['target'] + '" onclick="return trees[' + this.o_root.n_id + '].select(' + this.n_id + ')" ondblclick="trees[' + this.o_root.n_id + '].toggle(' + this.n_id + ')" onmouseover="trees[' + this.o_root.n_id + '].mover(' + this.n_id + ')" onmouseout="trees[' + this.o_root.n_id + '].mout(' + this.n_id + ')" class="t' + this.o_root.n_id + 'i" id="i_txt' + this.o_root.n_id + '_' + this.n_id + '"><img src="' + this.get_icon() + '" border="0" align="absbottom" name="i_img' + this.o_root.n_id + '_' + this.n_id + '" class="t' + this.o_root.n_id + 'im">' + this.a_config[0] + '</a></td></tr></table>' + (this.a_children.length ? '<div id="i_div' + this.o_root.n_id + '_' + this.n_id + '" style="display:none"></div>' : '');
       
   148   // added:
       
   149       + '<a href="' + this.a_config[1] + '" target="' + this.o_root.a_tpl['target'] + '" onclick="return trees[' + this.o_root.n_id + '].select(' + this.n_id + ')" ondblclick="trees[' + this.o_root.n_id + '].toggle(' + this.n_id + ')" onmouseover="trees[' + this.o_root.n_id + '].mover(' + this.n_id + ')" onmouseout="trees[' + this.o_root.n_id + '].mout(' + this.n_id + ')" class="t' + this.o_root.n_id + 'i" id="i_txt' + this.o_root.n_id + '_' + this.n_id + '">' + this.a_config[0] + '</a></td></tr></table>' + (this.a_children.length ? '<div id="i_div' + this.o_root.n_id + '_' + this.n_id + '" style="display:none"></div>' : '');
       
   150 }
       
   151 
       
   152 function item_get_icon (b_junction) {
       
   153 	return this.o_root.a_tpl['icon_' + ((this.n_depth ? 0 : 32) + (this.a_children.length ? 16 : 0) + (this.a_children.length && this.b_opened ? 8 : 0) + (!b_junction && this.o_root.o_selected == this ? 4 : 0) + (b_junction ? 2 : 0) + (b_junction && this.is_last() ? 1 : 0))];
       
   154 }
       
   155 
       
   156 var trees = [];
       
   157 get_element = document.all ?
       
   158 	function (s_id) { return document.all[s_id] } :
       
   159 	function (s_id) { return document.getElementById(s_id) };
       
   160 
       
   161