Dan McGhan recently announced a new plug-in using sparklines. This post details how I extended the plug-in to support another chart type. A
separate post details how I implemented this in an application.
If you haven't seen them, check out his
brief summary - there's a great image showing examples of those he's built into the plug-in from those available in the original
jQuery plugin.
They are basically word/sentence sized graphs - which I think are great because a picture often paints a thousand words.
Out of all the info I've read since coming home from leave, this really stood out because I knew some perfect applications for them in a current project - using the bar chart with negative values, it can display a visual indicator for the users that encourage them to target "zero", which is a big culture change in regard to what's being attempted.
Since I was curious, and noticed they had only enabled some of the available charts, I checked out the documentation on the jQuery plugin and saw the bullet charts. These were another potential solution for us since the AnyChart options licensed through APEX did not include
horizontal linear gauges.
The APEX evangelists have built an
integration kit. I also considered looking into
RGraph and
jqChart, but since finding the
bullet sparklines I tried tweaking the example and scaled it up using Chrome - there was my answer.
My APEX plug-in authoring skills are still developing, as is my jQuery - but I didn't find it hard to adapt Dan's code to include bullet sparklines as another chart type in the plug-in.
|
Bullet Sparkline - scaled up |
I also adjusted the custom attributes to make width always available. I've made an export of the extended plugin available
here.
This segment of code shows how easy it was to extend - all I needed to do was modify the attributes to match those in the jQuery Sparklines documentation
ELSIF l_chart_type = 'bullet'
THEN
l_js_function :=
'function(){'|| l_crlf ||
'this.affectedElements.sparkline("html", {' || l_crlf ||
'type: "' || l_chart_type || '",' || l_crlf ||
'height: "' || l_height || '",' || l_crlf ||
'width: "' || l_width || '",' || l_crlf ||
'targetColor: "' || l_bullet_target_color || '",' || l_crlf ||
'targetWidth: "' || l_target_width || '",' || l_crlf ||
'performanceColor: "' || l_bullet_perf_color || '",' || l_crlf ||
'rangeColors: ' || l_bullet_range_colors || ',' || l_crlf ||
CASE
WHEN l_enable_tooltips_and_hl = 'N'
THEN 'disableTooltips: true,' || l_crlf ||
'disableHighlight: true'
END ||
CASE
WHEN l_additional_options IS NOT NULL
THEN l_crlf || l_additional_options || l_crlf
ELSE l_crlf
END ||
'});' || l_crlf ||
CASE
WHEN l_add_click_event_bindings = 'Y'
THEN
'this.affectedElements.bind("sparklineClick", function(evnt) {' || l_crlf ||
'var sparkline = evnt.sparklines[0];' || l_crlf ||
'apex.jQuery(document).trigger("enkitecsparklineclick", {' || l_crlf ||
'"sparklineId": "' || l_sparkline_id || '",' || l_crlf ||
'"sparklineObj": sparkline,' || l_crlf ||
'"xValue": sparkline.currentRegion,' || l_crlf ||
'"yValue": sparkline.values[sparkline.currentRegion]' ||
'});' || l_crlf ||
'});' || l_crlf
END ||
'}';
END IF;
And just quietly, I really love the floating bookmark index in the
jQuery Sparklines documentation.
Thanks Dan, Doug &
Enkitec, for the headstart on this versatile solution.
Scott