From 67ff75772282f761f4b82587f2a045f44a4119b1 Mon Sep 17 00:00:00 2001 From: Rufus Pollock Date: Sat, 21 Apr 2012 23:54:49 +0100 Subject: [PATCH] [#68,field][s]: link and markdown format for strings with default formatter. --- src/model.js | 19 ++++++++++++++++++- test/model.test.js | 18 +++++++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/model.js b/src/model.js index 4145507b..88c724a7 100644 --- a/src/model.js +++ b/src/model.js @@ -217,7 +217,8 @@ my.DocumentList = Backbone.Collection.extend({ // * format: (optional) used to indicate how the data should be formatted. For example: // * type=date, format=yyyy-mm-dd // * type=float, format=percentage -// * type=float, format='###,###.##' +// * type=string, format=link (render as hyperlink) +// * type=string, format=markdown (render as markdown if Showdown available) // * is_derived: (default: false) attribute indicating this field has no backend data but is just derived from other fields (see below). // // Following additional instance properties: @@ -273,6 +274,22 @@ my.Field = Backbone.Model.extend({ if (format === 'percentage') { return val + '%'; } + return val; + }, + 'string': function(val, field, doc) { + var format = field.get('format'); + if (format === 'link') { + return 'VAL'.replace(/VAL/g, val); + } else if (format === 'markdown') { + if (typeof Showdown !== 'undefined') { + var showdown = new Showdown.converter(); + out = showdown.makeHtml(val); + return out; + } else { + return val; + } + } + return val; } } }); diff --git a/test/model.test.js b/test/model.test.js index 2f0c4e6a..f4a4c623 100644 --- a/test/model.test.js +++ b/test/model.test.js @@ -39,7 +39,12 @@ test('Field: basics', function () { }); test('Field: default renderers', function () { - var doc = new recline.Model.Document({x: 12.3, myobject: {a: 1, b: 2}}); + var doc = new recline.Model.Document({ + x: 12.3, + myobject: {a: 1, b: 2}, + link: 'http://abc.com/', + markdown: '### ABC' + }); var field = new recline.Model.Field({id: 'myobject', type: 'object'}); var out = doc.getFieldValue(field); var exp = '{"a":1,"b":2}'; @@ -49,6 +54,17 @@ test('Field: default renderers', function () { var out = doc.getFieldValue(field); var exp = '12.3%'; equal(out, exp); + + var field = new recline.Model.Field({id: 'link', type: 'string', format: 'link'}); + var out = doc.getFieldValue(field); + var exp = 'http://abc.com/'; + equal(out, exp); + + var field = new recline.Model.Field({id: 'markdown', type: 'string', format: 'markdown'}); + var out = doc.getFieldValue(field); + // Showdown is not installed so nothing should happen + var exp = doc.get('markdown'); + equal(out, exp); }); test('Field: custom deriver and renderer', function () {