fix linkage of NS constants
[mdref/mdref] / public / index.js
index 62ccba63c8ffd9eac673bc40e8dbdd69a2c49079..4878936a383649981948a0b3645b81534c10b3f3 100644 (file)
@@ -55,9 +55,11 @@ $(function() {
                        case "ArrayObject":
                        case "ArrayIterator":
                        case "RecursiveArrayIterator":
+                       case "SeekableIterator":
                        case "SplObserver":
                        case "SplSubject":
                        case "SplObjectStorage":
+                       case "JsonSerializable":
                                return "<code>";
 
                        // keywords
@@ -95,8 +97,12 @@ $(function() {
                                        return "<a href=\"" + s.replace(/::|\\/g, "/") + "\">";
                                }
                        }
-                       if (-1 !== (j = s.indexOf("\\")) && s.substr(j+1,1) !== "n") {
-                               return "<a href=\"" + s.replace(/\\/g, "/").replace(/::|$/, "#") + "\">";
+                       if (-1 !== (j = s.lastIndexOf("\\")) && s.substr(j+1,1) !== "n") {
+                               t = s.substring(j+1);
+                               if (!mdref.is_constant(t) || s.match(/\\/g).length <= 1) {
+                                       return "<a href=\"" + s.replace(/\\/g, "/").replace(/::/, "#") + "\">";
+                               }
+                               return "<a href=\"" + s.substring(0,j).replace(/\\/g, "/") + "#" + t + "\">";
                        }
 
                        switch (s.toLowerCase()) {
@@ -117,20 +123,24 @@ $(function() {
                                return "<span class=\"constant\">";
                        }
                },
-               node: function node(s, nn) {
-                       // mdref.log("node", s);
-                       var t;
-                       if ((t = mdref.type(s, nn))) {
-                               return $(t).text(s);
-                       }
-                       return document.createTextNode(s);
-               },
                wrap: function wrap(n, nn) {
                        var $n = $(n)
                        var a = [];
 
                        $n.text().split(/([^a-zA-Z0-9_\\\$:]+)/).forEach(function(v) {
-                               a.push(mdref.node(v, nn));
+                               var t;
+                               
+                               if ((t = mdref.type(v.replace(/:$/, ""), nn))) {
+                                       a.push($(t).text(v));
+                               } else if (a.length && a[a.length-1].nodeName === "#text") {
+                                       /* if we already have a text node and the next is also gonna be a text
+                                        * node, then join them, becuase chrome v30+ or something eats whitespace
+                                        * for breakfast, lunch and dinner!
+                                        */
+                                       a[a.length-1].textContent += v;
+                               } else {
+                                       a.push(document.createTextNode(v));
+                               }
                        });
                        $n.replaceWith(a);
                },
@@ -142,6 +152,9 @@ $(function() {
                                case "A":
                                case "BR":
                                case "HR":
+                               case "EM":
+                               case "CODE":
+                               case "SPAN":
                                        break;
                                case "#text":
                                        mdref.wrap(n, e.nodeName);
@@ -188,7 +201,7 @@ $(function() {
                }
        };
        
-       $("h1,h2,h3,h4,h5,h6,p,li,code").each(mdref.walk);
+       $("h1,h2,h3,h4,h5,h6,p,li,code,td").each(mdref.walk);
        $(window).on("hashchange", mdref.hashchange);
        mdref.hashchange();
 });