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 () {