Sorry about that. Here is the unified diff format.

Regards
-fawad

Miguel de Icaza wrote:

Hello,



Attached is a patch that makes monodoc.ashx fix the <a> links on the server side instead of using javascript on the client side.



Great patch, one of the things I wanted to see.


Would you mind resending this in diff -u format, so it is easier to
study/apply?

Miguel
_______________________________________________
Mono-docs-list maillist  -  [EMAIL PROTECTED]
http://lists.ximian.com/mailman/listinfo/mono-docs-list




Index: browser/web/monodoc.ashx
===================================================================
RCS file: /mono/monodoc/browser/web/monodoc.ashx,v
retrieving revision 1.18
diff -u -r1.18 monodoc.ashx
--- browser/web/monodoc.ashx    31 Aug 2003 23:45:50 -0000      1.18
+++ browser/web/monodoc.ashx    16 Oct 2003 22:09:49 -0000
@@ -21,6 +21,7 @@
 using System.Xml;
 using System.Xml.Xsl;
 using Monodoc;
+using System.Text.RegularExpressions;
 
 namespace Mono.Website.Handlers
 {
@@ -195,6 +196,7 @@
                        output.Flush();
                }
 
+               string requestPath;
                void PrintDocs (string content, HttpContext ctx)
                {
                        ctx.Response.Write (@"
@@ -204,14 +206,12 @@
 <!--
 function load ()
 {
-       objs = document.getElementsByTagName('a');
-       for (i = 0; i < objs.length; i++) {
-               e = objs [i];
-               if (e.href == null) continue;
-               
-               objs[i].href = makeLink (objs[i].href);
+       // If topic loaded in a window by itself, load index.aspx with the same set of 
params.
+       if (top.location == document.location)
+       {
+               top.location.href = 'index.aspx'+document.location.search;
        }
-       
+
        objs = document.getElementsByTagName('img');
        for (i = 0; i < objs.length; i++)
        {
@@ -249,12 +249,43 @@
                <body onLoad='load()'>
 
                ");
-                       ctx.Response.Write (content);
+                       // Set up object variable, as it's required by the MakeLink 
delegate
+                       requestPath=ctx.Request.Path;
+                       string content_changed=MakeLinks(content);
+                       ctx.Response.Write (content_changed);
                        ctx.Response.Write (@"
                </body>
                </html>");
                }
 
+
+               string MakeLinks(string content)
+               {
+                       MatchEvaluator linkUpdater=new MatchEvaluator(MakeLink);
+                       if(content.Trim().Length<1|| content==null)
+                               return content;
+                       try
+                       {
+                               string 
updatedContents=Regex.Replace(content,"(<a[^>]*href=['\"])([^'\"]+)(['\"][^>]*>)", 
linkUpdater);
+                               return(updatedContents);
+                       }
+                       catch(Exception e)
+                       {
+                               return content+"!<!--Exception:"+e.Message+"-->";
+                       }
+               }
+               
+               // Delegate to be called from MakeLinks for fixing <a> tag
+               string MakeLink(Match theMatch)
+               {
+                       string updatedLink=String.Format("{0}{1}?link={2}{3}",
+                               theMatch.Groups[1].ToString(),
+                               requestPath, 
+                               
HttpUtility.UrlEncode(theMatch.Groups[2].ToString().Replace("file://","")),
+                               theMatch.Groups[3].ToString());
+                       return updatedLink;
+               }
+               
                bool IHttpHandler.IsReusable
                {
                        get {

Reply via email to