From 9af5ea424e8a40cf94e2665fe5bf5c5f7b2d5a9f Mon Sep 17 00:00:00 2001 From: Ernst Haagsman Date: Wed, 8 May 2013 21:30:25 +0200 Subject: [PATCH 1/2] @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); + }) + +}); From 70109a29562e0bdbfd84c511fb952580cba699ff Mon Sep 17 00:00:00 2001 From: Ernst Haagsman Date: Wed, 15 May 2013 10:54:55 +0200 Subject: [PATCH 2/2] @default tag with object literals Changed boolean 'doclet.defaultobject' to 'doclet.defaultvaluetype' field. Improved unit testing and fixed template. --- lib/jsdoc/tag/dictionary/definitions.js | 4 ++-- templates/default/static/styles/jsdoc-default.css | 1 + templates/default/tmpl/details.tmpl | 8 ++++---- test/fixtures/defaulttag.js | 8 ++++++++ test/specs/tags/defaulttag.js | 12 +++++++++--- 5 files changed, 24 insertions(+), 9 deletions(-) diff --git a/lib/jsdoc/tag/dictionary/definitions.js b/lib/jsdoc/tag/dictionary/definitions.js index 4c9b68f7..0bd66713 100644 --- a/lib/jsdoc/tag/dictionary/definitions.js +++ b/lib/jsdoc/tag/dictionary/definitions.js @@ -251,9 +251,9 @@ exports.defineTags = function(dictionary) { // TODO: handle escaped quotes in values doclet.defaultvalue = 'null'; } - else if (doclet.meta.code.type === 'OBJECTLIT'){ + else if (doclet.meta.code.type === 'OBJECTLIT') { doclet.defaultvalue = String(doclet.meta.code.node.toSource()); - doclet.defaultobject = true; + doclet.defaultvaluetype = 'object'; } } } diff --git a/templates/default/static/styles/jsdoc-default.css b/templates/default/static/styles/jsdoc-default.css index 327b17ad..cbcff70f 100644 --- a/templates/default/static/styles/jsdoc-default.css +++ b/templates/default/static/styles/jsdoc-default.css @@ -202,6 +202,7 @@ h6 .details ul { list-style-type: none; } .details li { margin-left: 30px; padding-top: 6px; } .details pre.prettyprint { margin: 0 } +.details .object-value { padding-top: 0; } .description { margin-bottom: 1em; diff --git a/templates/default/tmpl/details.tmpl b/templates/default/tmpl/details.tmpl index 141bd58a..a18dfdc0 100644 --- a/templates/default/tmpl/details.tmpl +++ b/templates/default/tmpl/details.tmpl @@ -1,12 +1,12 @@ " + data.defaultvalue + ""; - default_object_css = ' style="padding-top: 0;" '; + defaultObjectClass = ' class="object-value"'; } ?>
@@ -67,7 +67,7 @@ if (data.defaultvalue && data.defaultobject){
Default Value:
    - > + >
diff --git a/test/fixtures/defaulttag.js b/test/fixtures/defaulttag.js index e14d4f74..996033a7 100644 --- a/test/fixtures/defaulttag.js +++ b/test/fixtures/defaulttag.js @@ -37,3 +37,11 @@ var header = getHeaders(request); @default */ var obj = { value_a : 'a', value_b : 'b' }; + +/** + * @default + */ +var multilineObject = { + value_a : 'a', + value_b : 'b' +}; diff --git a/test/specs/tags/defaulttag.js b/test/specs/tags/defaulttag.js index bd5987d4..c9a83032 100644 --- a/test/specs/tags/defaulttag.js +++ b/test/specs/tags/defaulttag.js @@ -7,7 +7,8 @@ describe("@default tag", function() { rerrored = (docSet.getByLongname('rerrored') || [])[0], win = (docSet.getByLongname('win') || [])[0], header = (docSet.getByLongname('header') || [])[0], - obj = docSet.getByLongname('obj')[0]; + obj = docSet.getByLongname('obj')[0], + multilineObject = docSet.getByLongname('multilineObject')[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'); @@ -37,9 +38,14 @@ describe("@default tag", function() { expect(header.defaultvalue).toBeUndefined(); }); - it('When symbol has a @default tag with an object.', function(){ + it('When symbol has a @default tag with an object, the doclet\'s defaultValue property should contain the stringified object', function() { var expected_value = "{value_a: 'a', value_b: 'b'}"; expect(obj.defaultvalue).toEqual(expected_value); - }) + }); + + it('When symbol has a @default tag with a multiline object, the doclet\'s defaultValue property should contain the properly stringified object', function() { + var expected_value = "{value_a: 'a', value_b: 'b'}"; + expect(obj.defaultvalue).toEqual(expected_value); + }); });