move formatting from JS to PHP
[mdref/mdref] / public / index.js
index 5124ffee52e50acec7bec355821a6a5d4075716b..5c4d8f114ba3f1d42ecc20215dffc317e3d442c8 100644 (file)
@@ -5,190 +5,6 @@ $(function() {
                log: function log() {
                        console.log.apply(console, arguments);
                },
-               is_constant: function is_constant(s) {
-                       s = s.replace(/v\d+(_\d+)?$/, "");
-                       if (s.length < 2) {
-                               return false;
-                       }
-                       return s.toUpperCase(s) === s;
-               },
-               is_variable: function is_variable(s) {
-                       return s.substring(0,1) === "$";
-               },
-               type: function type(s, nn) {
-                       var i, j, t;
-                       // mdref.log("type", s);
-                       // nothing
-                       if (!s.match(/[a-zA-Z]/)) {
-                               return;
-                       }
-
-                       switch (s) {
-                       // types
-                       case "void":
-                       case "bool":
-                       case "int":
-                       case "float":
-                       case "string":
-                       case "resource":
-                       case "array":
-                       case "object":
-                       case "callable":
-                       case "mixed":
-                       // Zend/SPL
-                       case "stdClass":
-                       case "Exception":
-                       case "ErrorException":
-                       case "RuntimeException":
-                       case "UnexpectedValueException":
-                       case "DomainException":
-                       case "InvalidArgumentException":
-                       case "BadMethodCallException":
-                       case "Closure":
-                       case "Generator":
-                       case "Countable":
-                       case "Serializable":
-                       case "Traversable":
-                       case "Iterator":
-                       case "IteratorAggregate":
-                       case "RecursiveIterator":
-                       case "ArrayAccess":
-                       case "ArrayObject":
-                       case "ArrayIterator":
-                       case "RecursiveArrayIterator":
-                       case "SeekableIterator":
-                       case "SplObserver":
-                       case "SplSubject":
-                       case "SplObjectStorage":
-                       case "JsonSerializable":
-                               return "<code>";
-
-                       // keywords
-                       case "is":
-                               if (nn !== "H1") {
-                                       return;
-                               }
-                       case "extends":
-                       case "implements":
-                               if (nn === "H1") {
-                                       return "<br>&nbsp;<em>";
-                               }
-                       case "class":
-                       case "enum":
-                       case "interface":
-                       case "namespace":
-                       case "public":
-                       case "protected":
-                       case "private":
-                       case "static":
-                       case "final":
-                       case "abstract":
-                       case "self":
-                       case "parent":
-                       // phrases
-                       case "Optional":
-                       case "optional":
-                               return "<em>";
-                       }
-
-                       // class members
-                       if (-1 !== (i = s.indexOf("::"))) {
-                               t = s.substring(i+2);
-                               if (!mdref.is_constant(t) && !mdref.is_variable(t)) {
-                                       // methods
-                                       return "<a href=\"" + s.replace(/::|\\/g, "/") + "\">";
-                               }
-                       }
-                       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()) {
-                       // variables
-                       default:
-                               if (!mdref.is_variable(s)) {
-                                       break;
-                               }
-                       // special constants
-                       case "null":
-                       case "true":
-                       case "false":
-                               return "<span class=\"var\">";
-                       }
-
-                       // constants
-                       if (mdref.is_constant(s)) {
-                               return "<span class=\"constant\">";
-                       }
-               },
-               wrap: function wrap(n, nn) {
-                       var $n = $(n)
-                       var a = [];
-
-                       $n.text().split(/([^a-zA-Z0-9_\\\$:]+)/).forEach(function(v) {
-                               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);
-               },
-               walk: function walk(i, e) {
-                       // mdref.log("walk", i, e);
-
-                       switch (e.nodeName) {
-                       case "H1":
-                       case "H2":
-                       case "H3":
-                       case "H4":
-                       case "H5":
-                       case "H6":
-                               if (e.id.length) {
-                                       var href = document.location.pathname;
-                                       var perm = $("<a class=\"permalink\" href=\""+href+"#\">#</a>");
-                                       if (e.nodeName === "H1") {
-                                               perm.prependTo(e);
-                                       } else {
-                                               perm.attr("href", function(i, href) {
-                                                       return href + e.id;
-                                               });
-                                               perm.appendTo(e);
-                                       }
-                               }
-                               break;
-                       }
-
-                       $.each($.makeArray(e.childNodes), function(i, n) {
-                               switch (n.nodeName) {
-                               case "A":
-                               case "BR":
-                               case "HR":
-                               case "EM":
-                               case "CODE":
-                               case "SPAN":
-                                       break;
-                               case "#text":
-                                       mdref.wrap(n, e.nodeName);
-                                       break;
-                               default:
-                                       mdref.walk(-1, n);
-                                       break;
-                               }
-                       });
-               },
                blink: function blink(c) {
                        var $c = $(c);
 
@@ -202,15 +18,17 @@ $(function() {
                },
                hashchange: function hashchange() {
                        if (location.hash.length > 1) {
+                               var hash = decodeURIComponent(location.hash.substring(1));
                                var e;
                                if ((e = document.getElementById(location.hash.substring(1)))) {
                                        mdref.blink(e);
                                } else {
-                                       var hash = location.hash.substring(1);
-                                       var name = mdref.is_variable(hash) ? ".var" : ".constant";
                                        var scrolled = false;
 
-                                       $(name).each(hash.substring(hash.length-1) === "_" ? function(i, c) {
+                                       if (hash.substring(hash.length-1) === "*") {
+                                               hash = hash.substring(0, hash.length-1);
+                                       }
+                                       $((hash.substring(0,1) === "$") ? ".var" : ".constant").each(function(i, c) {
                                                if (c.textContent.substring(0, hash.length) === hash) {
                                                        if (!scrolled) {
                                                                $(window).scrollTop($(c).offset().top - 100);
@@ -218,19 +36,12 @@ $(function() {
                                                        }
                                                        mdref.blink(c);
                                                }
-                                       } : function(i, c) {
-                                               if (c.textContent === hash) {
-                                                       $(window).scrollTop($(c).offset().top - 100);
-                                                       mdref.blink(c);
-                                                       return false;
-                                               }
                                        });
                                }
                        }
                }
        };
 
-       $("h1,h2,h3,h4,h5,h6,p,li,code,td").each(mdref.walk);
        $(window).on("hashchange", mdref.hashchange);
        mdref.hashchange();