Hello,

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
http://helios.acomp.usf.edu/~luke/web/monodoc.png
<%@ WebHandler Language="c#" Class="Monodoc.JsTree" %>

//
// Authors:
//     John Luke ([EMAIL PROTECTED])
//
// (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 (@"
<html>
<head>

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

if(parent.frames.length == 0) {
  if(document.images) {
    location.replace(relocateURL);
  } else {
    location = relocateURL;
  }
}
</script>

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

<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');
</script>
</head>
<body onload='MTMStartMenu(true)' bgcolor='#000033' text='#ffffcc' link='yellow' 
vlink='lime' alink='red'>
</body>
</html>
");
                }
                
                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; }
                }
        }
}

Reply via email to