|
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 |