Skip to content

Commit 1832d10

Browse files
committed
feat(single_value): typerenderer options
1 parent d9cf55d commit 1832d10

File tree

5 files changed

+62
-47
lines changed

5 files changed

+62
-47
lines changed

src/modules/types/display/single_value/controller.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ define(['modules/default/defaultcontroller', 'src/util/util'], function (Default
1919
Controller.prototype.references = {
2020
value: {
2121
label: 'Any displayable object'
22-
2322
},
2423
color: {
2524
type: 'string',
@@ -87,6 +86,11 @@ define(['modules/default/defaultcontroller', 'src/util/util'], function (Default
8786
{title: 'Bottom', key: 'bottom'}
8887
]
8988
},
89+
rendererOptions: {
90+
type: 'text',
91+
title: 'Renderer options',
92+
default: ''
93+
},
9094
sprintf: {
9195
type: 'text',
9296
title: 'Sprintf'
@@ -135,6 +139,7 @@ define(['modules/default/defaultcontroller', 'src/util/util'], function (Default
135139
valign: ['groups', 'group', 0, 'valign', 0],
136140
defaultvalue: ['groups', 'group', 0, 'defaultvalue', 0],
137141
sprintf: ['groups', 'group', 0, 'sprintf', 0],
142+
rendererOptions: ['groups', 'group', 0, 'rendererOptions', 0],
138143
sprintfOrder: ['groups', 'group', 0, 'sprintfOrder'],
139144
preformatted: ['groups', 'group', 0, 'preformatted', 0],
140145
append: ['groups', 'group', 0, 'append', 0],

src/modules/types/display/single_value/view.js

Lines changed: 37 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,17 @@
22

33
define([
44
'modules/default/defaultview',
5-
'src/util/domdeferred',
5+
'src/util/util',
66
'src/util/api',
77
'src/util/typerenderer',
8-
'src/util/color'
8+
'src/util/color',
9+
'sprintf'
910
], function (Default,
10-
DomDeferred,
11+
Util,
1112
API,
1213
Renderer,
13-
Color) {
14+
Color,
15+
sprintf) {
1416

1517
function View() {
1618
}
@@ -86,31 +88,31 @@ define([
8688

8789
var that = this,
8890
sprintfVal = this.module.getConfiguration('sprintf'),
89-
sprintfOrder = this.module.getConfiguration('sprintfOrder');
90-
91-
if (sprintfVal && sprintfVal != '') {
92-
93-
try {
94-
require(['sprintf'], function (sprintf) {
95-
91+
rendererOptions = Util.evalOptions(this.module.getConfiguration('rendererOptions')) || {};
92+
if (sprintfVal) {
93+
if (rendererOptions) {
94+
var prom = [];
95+
for (var i in that.values) {
96+
prom.push(this.renderVal(that.values[i], rendererOptions));
97+
}
98+
Promise.all(prom).then(function (rendered) {
99+
var args = [sprintfVal].concat(rendered);
100+
that.fillWithVal(sprintf.sprintf.apply(null, args));
101+
});
102+
} else {
103+
try {
96104
var args = [sprintfVal];
97105
for (var i in that.values) {
98106
args.push(that.values[i]);
99107
}
100-
101108
val = sprintf.sprintf.apply(this, args);
102-
103-
that.fillWithVal(val);
104-
});
105-
106-
} catch (e) {
107-
108-
that.fillWithVal(val);
109-
109+
that.fillWithVal(val, rendererOptions);
110+
} catch (e) {
111+
that.fillWithVal(val, rendererOptions);
112+
}
110113
}
111-
112114
} else {
113-
that.fillWithVal(val);
115+
that.fillWithVal(val, rendererOptions);
114116
}
115117
},
116118

@@ -119,7 +121,18 @@ define([
119121
this.dom.scrollTop(scroll_height);
120122
},
121123

122-
fillWithVal: function (val) {
124+
renderVal: function (val, options) {
125+
var $span = $('<span>');
126+
return Renderer.render($span, val, options)
127+
.then(function () {
128+
return $span.html();
129+
})
130+
.catch(function () {
131+
return '[failed]';
132+
});
133+
},
134+
135+
fillWithVal: function (val, rendererOptions) {
123136

124137
var valign = this.module.getConfiguration('valign');
125138
var align = this.module.getConfiguration('align');
@@ -168,11 +181,9 @@ define([
168181
this._scrollDown();
169182

170183
var that = this;
171-
Renderer.render(div, val).then(function () {
184+
Renderer.render(div, val, rendererOptions).then(function () {
172185
that._scrollDown();
173186
});
174-
175-
DomDeferred.notify(div);
176187
}
177188

178189
});

src/modules/types/edition/slick_grid/view.js

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,6 @@ define([
1414
function View() {
1515
}
1616

17-
function _rendererOptions(options) {
18-
var result;
19-
if (!options) return undefined;
20-
if (!options.match(/^\s*\{/)) {
21-
options = '{' + options + '}';
22-
}
23-
try {
24-
eval('result = ' + options);
25-
return result;
26-
} catch (e) {
27-
Debug.warn('rendererOptions invalid in SlickGrid preferences');
28-
return undefined;
29-
}
30-
}
31-
3217

3318
var cssPromises = [];
3419
cssPromises.push(Util.loadCss('components/slickgrid/slick.grid.css'));
@@ -673,7 +658,7 @@ define([
673658
type = getType(row.jpath);
674659
}
675660

676-
var rendererOptions = _rendererOptions(row.rendererOptions);
661+
var rendererOptions = Util.evalOptions(row.rendererOptions);
677662
return {
678663
id: row.name,
679664
name: row.name,

src/src/util/typerenderer.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,11 @@ define(['require', 'jquery', 'lodash', 'src/util/api', 'src/util/util', 'moment'
101101
number = number.toPrecision(options.toPrecision);
102102
} else if (options.hasOwnProperty('toFixed')) {
103103
number = number.toFixed(options.toFixed);
104-
} else if(options.hasOwnProperty('numeral')) {
104+
} else if (options.hasOwnProperty('numeral')) {
105105
number = numeral(number).format(options.numeral);
106-
} else if(options.hasOwnProperty('sprintf')) {
106+
} else if (options.hasOwnProperty('sprintf')) {
107107
number = sprintf.sprintf(options.sprintf, number);
108-
}
109-
else if (checkDate(options)) {
108+
} else if (checkDate(options)) {
110109
number = toDate(number, options);
111110
}
112111
$element.html(number);

src/src/util/util.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,21 @@ define(['src/util/debug', 'src/util/color', 'lodash', 'components/web-animations
459459
exports.rgbToHex = exports.deprecate(Color.rgb2hex, 'use Color.rgb2hex');
460460
exports.getColor = exports.deprecate(Color.getColor, 'use Color.getColor');
461461

462+
exports.evalOptions = function (options) {
463+
var result;
464+
if (!options) return undefined;
465+
if (!options.match(/^\s*\{/)) {
466+
options = '{' + options + '}';
467+
}
468+
try {
469+
eval('result = ' + options);
470+
return result;
471+
} catch (e) {
472+
Debug.warn('could not eval options');
473+
return undefined;
474+
}
475+
};
476+
462477
return exports;
463478

464479
});

0 commit comments

Comments
 (0)