[#68,field][s]: link and markdown format for strings with default formatter.
This commit is contained in:
19
src/model.js
19
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:
|
// * format: (optional) used to indicate how the data should be formatted. For example:
|
||||||
// * type=date, format=yyyy-mm-dd
|
// * type=date, format=yyyy-mm-dd
|
||||||
// * type=float, format=percentage
|
// * 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).
|
// * 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:
|
// Following additional instance properties:
|
||||||
@@ -273,6 +274,22 @@ my.Field = Backbone.Model.extend({
|
|||||||
if (format === 'percentage') {
|
if (format === 'percentage') {
|
||||||
return val + '%';
|
return val + '%';
|
||||||
}
|
}
|
||||||
|
return val;
|
||||||
|
},
|
||||||
|
'string': function(val, field, doc) {
|
||||||
|
var format = field.get('format');
|
||||||
|
if (format === 'link') {
|
||||||
|
return '<a href="VAL">VAL</a>'.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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -39,7 +39,12 @@ test('Field: basics', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('Field: default renderers', 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 field = new recline.Model.Field({id: 'myobject', type: 'object'});
|
||||||
var out = doc.getFieldValue(field);
|
var out = doc.getFieldValue(field);
|
||||||
var exp = '{"a":1,"b":2}';
|
var exp = '{"a":1,"b":2}';
|
||||||
@@ -49,6 +54,17 @@ test('Field: default renderers', function () {
|
|||||||
var out = doc.getFieldValue(field);
|
var out = doc.getFieldValue(field);
|
||||||
var exp = '12.3%';
|
var exp = '12.3%';
|
||||||
equal(out, exp);
|
equal(out, exp);
|
||||||
|
|
||||||
|
var field = new recline.Model.Field({id: 'link', type: 'string', format: 'link'});
|
||||||
|
var out = doc.getFieldValue(field);
|
||||||
|
var exp = '<a href="http://abc.com/">http://abc.com/</a>';
|
||||||
|
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 () {
|
test('Field: custom deriver and renderer', function () {
|
||||||
|
|||||||
Reference in New Issue
Block a user