From 7718254bd459801ad6e0e0dfc7b3afc01c13ed63 Mon Sep 17 00:00:00 2001 From: j Date: Mon, 6 Dec 2010 18:40:27 +0100 Subject: [PATCH] load comments from source --- docs/api.js | 132 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 95 insertions(+), 37 deletions(-) diff --git a/docs/api.js b/docs/api.js index 20c3aee..e98b04b 100644 --- a/docs/api.js +++ b/docs/api.js @@ -7,6 +7,25 @@ $(function() { app.$document = $(document); app.$window = $(window); + app.docstrings = {}; + $("
").load('../build/js/ox.ui.js', function(data) { + app.source = data; + var docstrings = app.source.match(/\/\*\*\n([\s\S]+?\*\/\n.*?)\n/gm) + docstrings.forEach(function(doc) { + doc = Ox.trim(doc); + var name = doc.match(/Ox\.(.+) = function/); + if(name) { + doc = doc.split('\n'); + doc.splice(0, 1); + doc.pop(); + doc.pop(); + //remove whitespace + var offset = /^\s+/.exec(doc[0]); + if(offset) + doc = Ox.map(doc, function(line) { return line.substring(offset[0].length)}); + app.docstrings[name[1]] = Ox.trim(doc.join('\n')); + } + }) app.$ui = {}; app.docs = getDocsJSON(); app.$ui.actionList = constructList(); @@ -27,6 +46,7 @@ $(function() { }); $main.appendTo(app.$body); + }); }); function constructList() { @@ -48,8 +68,14 @@ function constructList() { request: function(data, callback) { var items = []; app.docs.forEach(function(v) { - items.push({'name': v.name}); + items.push(v.name); }); + Ox.keys(app.docstrings).forEach(function(v) { + if(!$.inArray(v.name, items)) { + items.push(v.name); + } + }); + items = Ox.map(items, function(i) { return {name: i}}); items.sort(function(a, b) { if(a.name < b.name) { return -1 } else if( a.name == b.name) { return 0 }else { return 1 } }) if(!data.keys) { var result = {'data': {'items': items.length}}; @@ -80,49 +106,81 @@ function constructList() { } function getDocHtml(doc) { - var wrapper = $('
'); - var title = $('

').html(doc.name).appendTo(wrapper); - var $options = $('
').html("Options: ").css({'marginBottom': '20px'}).appendTo(wrapper); - Ox.keys(doc.options).forEach(function(k) { - var $option = $('
'); - var optionKey = $('').html(k + ": ").appendTo($option); - var optionVal = $('').html(typeof doc.options[k]).appendTo($option); - $('').html(' ' + doc.options[k].toString() + '').appendTo($option); - $option.appendTo($options); - }); - var methods = Ox.keys(doc.methods); - if (methods.length > 0) { - var $methods = $('
').html("Methods:
").appendTo(wrapper); - methods.forEach(function(m) { - var $m = $('
').appendTo($methods); - var f = $('
').html(doc.methods[m]).hide();
-        var title = m;
-        var options = /function \((.*?)\)/.exec(doc.methods[m]);
-        if(options) {
-            title = title + '('+options[1]+')';
+    function cell(content) {
+        return $('').css({'padding-right': '4px'}).html(content);
+    }
+
+    var $div = $('
'); + var title = $('

').html('Ox.'+doc.name) + .appendTo($div); + + if(app.docstrings[doc.name]) + $('
').html(app.docstrings[doc.name]).appendTo($div);
+
+    var $options = $('
').html("Options: ") + .css({'marginBottom': '20px'}) + .appendTo($div); + var $table = $('').attr({'cellpadding': '4'}) + .appendTo($options); + Ox.keys(doc.options).forEach(function(k) { + var $option = $(''); + cell(k).appendTo($option); + if(typeof(doc.options[k]) != 'undefined') { + cell(typeof doc.options[k]).appendTo($option); + if(Ox.isNull(doc.options[k])) + cell(' null').appendTo($option); + else + cell(' ' + doc.options[k].toString() + '').appendTo($option); + } else { + cell(' ').appendTo($option); + cell('required, no default value').appendTo($option); } - var lable = new Ox.Label({ - title: title, - width: 190 - }) - .css({'float': 'left', 'margin-right': '4px'}) - .addClass("margin") - .appendTo($m); - var b = new Ox.Button({ + $option.appendTo($options); + }); + + var methods = Ox.keys(doc.methods); + if (methods.length > 0) { + var $methods = $('
').html("Methods:").appendTo($div); + methods.forEach(function(m) { + var $method = $('
').appendTo($methods); + var $code = $('
').html(doc.methods[m]).hide();
+            var options = /function \((.*?)\)/.exec(doc.methods[m]);
+            var lable = new Ox.Label({
+                                    title: m + '('+options[1]+')', 
+                                    width: 190
+                                })
+                                .css({'float': 'left', 'margin-right': '4px'})
+                                .addClass("margin")
+                                .appendTo($method);
+            var $button = new Ox.Button({
+                    title: [
+                        {id: "one", title: "expand"},
+                        {id: "two", title: "collapse"},
+                    ],
+                    type: "image"
+                })
+                .addClass("margin")
+                .appendTo($method)
+                .click(function() { $code.toggle()});
+          $code.appendTo($method);
+        });
+    }
+
+    var $methodcode = $('
').html(doc.functionString.replace(/').html(doc.functionString).appendTo(wrapper);
-  return wrapper;
+        .addClass("margin")
+        .click(function() { $methodcode.toggle()})
+        .appendTo($div)
+    $('').html(' View Source').appendTo($div)
+    $methodcode.appendTo($div);
+    return $div;
 }
 
 function getObjectByName(obj, name) {