[Mono-docs-list] monodoc javascript treeview

John Luke jluke@cfl.rr.com
Sun, 03 Aug 2003 00:44:19 -0400

Content-Type: text/plain
Content-Transfer-Encoding: 7bit


I wasn't sure how you wanted to implement the menu dynamically so what I
have done is written a HttpHandler that writes the javascript menu like
the one that Miguel posted.  So if someone can tell me how to get the
children nodes for a given item, then those children can be dynamically
added to the menu.

Currently I have a couple nodes hardcoded, but it would just be a matter
of adding a foreach to add the children items.

There is a screenshot at

Content-Disposition: attachment; filename=jstree.ashx
Content-Type: text/plain; name=jstree.ashx; charset=
Content-Transfer-Encoding: 7bit

<%@ WebHandler Language="c#" Class="Monodoc.JsTree" %>

// Authors:
//     John Luke (jluke@cfl.rr.com)
// (C) 2003 John Luke

using System.Web;
using System.Text;

namespace Monodoc
	public class JsTree : IHttpHandler
		HttpResponse resp;
		public void ProcessRequest (HttpContext context)
			resp = context.Response;
			resp.Write (@"

<script type='text/javascript'>
var relocateURL = '/monodoc';

if(parent.frames.length == 0) {
  if(document.images) {
  } else {
    location = relocateURL;

<script type='text/javascript' src='mtmcode.js'>

<script type='text/javascript'>
MTMDefaultTarget = 'text';

var MTMIconList = null;
MTMIconList = new IconList();
MTMIconList.addIcon(new MTMIcon('menu_link_external.gif', 'http://', 'pre'));
MTMIconList.addIcon(new MTMIcon('menu_link_pdf.gif', '.pdf', 'post'));

MTMSubsGetPlus = 'Always';
MTMSubsAutoClose = 'true';
MTMenuText = 'Mono Documentation';

var menu = null;
menu = new MTMenu();

			WriteMenu ("Class Library");

			resp.Write (@"menu.addItem('Home', 'main.ashx');
<body onload='MTMStartMenu(true)' bgcolor='#000033' text='#ffffcc' link='yellow' vlink='lime' alink='red'>
		public void WriteMenu (string name)
			StringBuilder sb = new StringBuilder ();
			sb.AppendFormat ("menu.addItem('{0}');", name);
			sb.Append ("var bcl = null;");
			sb.Append ("bcl = new MTMenu();");

			// get list of items from monodoc and add to menu
			sb.Append (WriteItem ("bcl", "System", "N:System"));
			sb.Append (WriteItem ("bcl", "System.IO", "N:System.IO"));
			sb.Append (WriteItem ("bcl", "System.Xml", "N:System.Xml"));
			sb.Append ("menu.makeLastSubmenu(bcl);");

			resp.Write (sb.ToString ());
		public string WriteItem (string parent, string name, string link)
			StringBuilder sb = new StringBuilder ();
			sb.AppendFormat ("{0}.addItem('{1}', 'main.ashx?link={2}');", parent, name, link);
			return sb.ToString ();

		public bool IsReusable {
			get { return true; }