From 9af5ea424e8a40cf94e2665fe5bf5c5f7b2d5a9f Mon Sep 17 00:00:00 2001 From: Ernst Haagsman Date: Wed, 8 May 2013 21:30:25 +0200 Subject: [PATCH] @default tag: added support for object literal defaults Default object literals are now stored as a string. In the default template they are shown with syntax highlighting. --- lib/jsdoc/tag/dictionary/definitions.js | 4 ++++ templates/default/static/styles/jsdoc-default.css | 5 +++-- templates/default/tmpl/details.tmpl | 11 ++++++++++- test/fixtures/defaulttag.js | 7 ++++++- test/specs/tags/defaulttag.js | 12 +++++++++--- 5 files changed, 32 insertions(+), 7 deletions(-) diff --git a/lib/jsdoc/tag/dictionary/definitions.js b/lib/jsdoc/tag/dictionary/definitions.js index 137b0286..4c9b68f7 100644 --- a/lib/jsdoc/tag/dictionary/definitions.js +++ b/lib/jsdoc/tag/dictionary/definitions.js @@ -251,6 +251,10 @@ exports.defineTags = function(dictionary) { // TODO: handle escaped quotes in values doclet.defaultvalue = 'null'; } + else if (doclet.meta.code.type === 'OBJECTLIT'){ + doclet.defaultvalue = String(doclet.meta.code.node.toSource()); + doclet.defaultobject = true; + } } } }) diff --git a/templates/default/static/styles/jsdoc-default.css b/templates/default/static/styles/jsdoc-default.css index ea49f607..327b17ad 100644 --- a/templates/default/static/styles/jsdoc-default.css +++ b/templates/default/static/styles/jsdoc-default.css @@ -195,12 +195,13 @@ h6 font-family: Consolas, "Lucida Console", Monaco, monospace; } -.details { margin-top: 14px; } -.details dt { width:100px; float:left; border-left: 2px solid #DDD; padding-left: 10px; padding-top: 6px; } +.details { margin-top: 14px; border-left: 2px solid #DDD; } +.details dt { width:100px; float:left; padding-left: 10px; padding-top: 6px; } .details dd { margin-left: 50px; } .details ul { margin: 0; } .details ul { list-style-type: none; } .details li { margin-left: 30px; padding-top: 6px; } +.details pre.prettyprint { margin: 0 } .description { margin-bottom: 1em; diff --git a/templates/default/tmpl/details.tmpl b/templates/default/tmpl/details.tmpl index d3b35522..141bd58a 100644 --- a/templates/default/tmpl/details.tmpl +++ b/templates/default/tmpl/details.tmpl @@ -1,6 +1,13 @@ " + data.defaultvalue + ""; + default_object_css = ' style="padding-top: 0;" '; +} ?>
Default Value:
-
+
    + > +
diff --git a/test/fixtures/defaulttag.js b/test/fixtures/defaulttag.js index bd8461aa..e14d4f74 100644 --- a/test/fixtures/defaulttag.js +++ b/test/fixtures/defaulttag.js @@ -31,4 +31,9 @@ var win = getParentWindow(); /** @default */ -var header = getHeaders(request); \ No newline at end of file +var header = getHeaders(request); + +/** + @default + */ +var obj = { value_a : 'a', value_b : 'b' }; diff --git a/test/specs/tags/defaulttag.js b/test/specs/tags/defaulttag.js index ca4b086b..bd5987d4 100644 --- a/test/specs/tags/defaulttag.js +++ b/test/specs/tags/defaulttag.js @@ -5,8 +5,9 @@ describe("@default tag", function() { rcode = (docSet.getByLongname('rcode') || [])[0], rvalid = (docSet.getByLongname('rvalid') || [])[0], rerrored = (docSet.getByLongname('rerrored') || [])[0], - win = (docSet.getByLongname('win') || [])[0]; - header = (docSet.getByLongname('header') || [])[0]; + win = (docSet.getByLongname('win') || [])[0], + header = (docSet.getByLongname('header') || [])[0], + obj = docSet.getByLongname('obj')[0]; it('When symbol set to null has a @default tag with no text, the doclet\'s defaultValue property should be: null', function() { expect(request.defaultvalue).toBe('null'); @@ -36,4 +37,9 @@ describe("@default tag", function() { expect(header.defaultvalue).toBeUndefined(); }); -}); \ No newline at end of file + it('When symbol has a @default tag with an object.', function(){ + var expected_value = "{value_a: 'a', value_b: 'b'}"; + expect(obj.defaultvalue).toEqual(expected_value); + }) + +});