3 * $Revision: 1.3 $ $Date: 2003/07/14 06:02:50 $
\r
6 /* ***** BEGIN LICENSE BLOCK *****
\r
7 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
\r
9 * The contents of this file are subject to the Mozilla Public License Version
\r
10 * 1.1 (the "License"); you may not use this file except in compliance with
\r
11 * the License. You may obtain a copy of the License at
\r
12 * http://www.mozilla.org/MPL/
\r
14 * Software distributed under the License is distributed on an "AS IS" basis,
\r
15 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
\r
16 * for the specific language governing rights and limitations under the
\r
19 * The Original Code is Netscape code.
\r
21 * The Initial Developer of the Original Code is
\r
22 * Netscape Corporation.
\r
23 * Portions created by the Initial Developer are Copyright (C) 2003
\r
24 * the Initial Developer. All Rights Reserved.
\r
26 * Contributor(s): Bob Clary <bclary@netscape.com>
\r
28 * ***** END LICENSE BLOCK ***** */
\r
30 function CTOCWidget(domTOCModel, target)
\r
32 if (domTOCModel.documentElement.nodeName != 'toc')
\r
34 throw 'CTOCWidget called on non toc Document: ' + domTOCModel.nodeName;
\r
37 this.model = domTOCModel;
\r
38 this.target = target;
\r
39 this.view = document.createElement('div');
\r
40 this.view.setAttribute('class', CTOCWidget._classprefix + '_view');
\r
42 var modelItems = domTOCModel.documentElement.childNodes;
\r
43 for (var i = 0; i < modelItems.length; i++)
\r
45 var modelItem = modelItems.item(i);
\r
46 if (modelItem.nodeType == Node.ELEMENT_NODE)
\r
48 var viewItem = CTOCWidget.createItemView(modelItem, target);
\r
49 this.view.appendChild(viewItem);
\r
54 CTOCWidget._handleImages = { open: '/toolbox/examples/2003/CTOCWidget/minus.gif', closed: '/toolbox/examples/2003/CTOCWidget/plus.gif', height: '12px', width: '16px'};
\r
55 CTOCWidget._classprefix = 'CTOCWidget';
\r
57 CTOCWidget.createItemView = function (modelItem, target)
\r
59 if (modelItem.nodeType != Node.ELEMENT_NODE)
\r
61 throw 'CTOCWidget.createItemView called on non-Element: ' + modelItem.nodeName;
\r
66 var viewItem = document.createElement('div');
\r
67 viewItem.setAttribute('class', CTOCWidget._classprefix + '_item');
\r
69 var viewItemHandle = document.createElement('div');
\r
70 viewItemHandle.setAttribute('class', CTOCWidget._classprefix + '_itemhandle');
\r
71 viewItemHandle.style.cursor = 'pointer';
\r
73 var viewItemHandleImg = document.createElement('img');
\r
74 viewItemHandleImg.style.height = CTOCWidget._handleImages.height;
\r
75 viewItemHandleImg.style.width = CTOCWidget._handleImages.width;
\r
76 viewItemHandleImg.addEventListener('click', CTOCWidget.toggleHandle, false);
\r
78 var viewItemHandleLink;
\r
79 if (!modelItem.getAttribute('url'))
\r
81 viewItemHandleLink = document.createElement('span');
\r
85 viewItemHandleLink = document.createElement('a');
\r
86 viewItemHandleLink.setAttribute('href', modelItem.getAttribute('url'));
\r
87 viewItemHandleLink.setAttribute('target', target);
\r
89 viewItemHandleLink.appendChild(document.createTextNode(modelItem.getAttribute('title')));
\r
91 viewItemHandle.appendChild(viewItemHandleImg);
\r
92 viewItemHandle.appendChild(viewItemHandleLink);
\r
93 viewItem.appendChild(viewItemHandle);
\r
95 if (modelItem.childNodes.length == 0)
\r
97 viewItemHandleImg.setAttribute('src', CTOCWidget._handleImages.open);
\r
101 viewItemHandleImg.setAttribute('src', CTOCWidget._handleImages.closed);
\r
103 var viewItemChildren = document.createElement('div');
\r
104 viewItemChildren.setAttribute('class', CTOCWidget._classprefix + '_itemchildren');
\r
105 viewItemChildren.style.display = 'none';
\r
106 viewItemChildren.style.position = 'relative';
\r
107 viewItemChildren.style.left = '1em';
\r
109 for (i = 0; i < modelItem.childNodes.length; i++)
\r
111 var modelItemChild = modelItem.childNodes.item(i);
\r
112 if (modelItemChild.nodeType == Node.ELEMENT_NODE)
\r
114 viewItemChildren.appendChild(CTOCWidget.createItemView(modelItemChild, target));
\r
118 viewItem.appendChild(viewItemChildren);
\r
124 // fires on img part of the handle
\r
125 CTOCWidget.toggleHandle = function(e)
\r
127 switch (e.eventPhase)
\r
129 case Event.CAPTURING_PHASE:
\r
130 case Event.BUBBLING_PHASE:
\r
133 case Event.AT_TARGET:
\r
137 var domHandle = e.target.parentNode;
\r
138 var domChildren = domHandle.nextSibling;
\r
145 switch(domChildren.style.display)
\r
149 domChildren.style.display = 'none';
\r
150 e.target.setAttribute('src', CTOCWidget._handleImages.closed);
\r
153 domChildren.style.display = 'block';
\r
154 e.target.setAttribute('src', CTOCWidget._handleImages.open);
\r
163 dump('Unknown Event Phase ' + e.eventPhase);
\r