diff --git a/demo_proj/templates/dashboard.html b/demo_proj/templates/dashboard.html
index ed85e24..953cbb0 100644
--- a/demo_proj/templates/dashboard.html
+++ b/demo_proj/templates/dashboard.html
@@ -9,8 +9,8 @@
- {% get_widget_from_url url_name="total-product-sales" title="Widget custom title" %}
+
+ {% get_widget_from_url url_name="total-product-sales-by-country" title="Widget custom title" %}
@@ -18,7 +18,7 @@
- {% get_widget_from_url url_name="total-product-sales" display_table=False title="No table, Chart Only" %}
+ {% get_widget_from_url url_name="monthly-product-sales" chart_id=1 display_table=False title="No table, Chart Only" %}
diff --git a/slick_reporting/static/slick_reporting/slick_reporting.highchart.js b/slick_reporting/static/slick_reporting/slick_reporting.highchart.js
index c7a3c1e..bb4be56 100644
--- a/slick_reporting/static/slick_reporting/slick_reporting.highchart.js
+++ b/slick_reporting/static/slick_reporting/slick_reporting.highchart.js
@@ -380,7 +380,8 @@
}
let chart = $elem.find("div[data-inner-chart-container]")
- let cache_key = data.report_slug + ':' + chartOptions.id;
+
+ let cache_key = $.slick_reporting.get_xpath($elem) + ":" + data.report_slug + ':' + chartOptions.id;
try {
let existing_chart = _chart_cache[cache_key];
if (typeof (existing_chart) !== 'undefined') {
diff --git a/slick_reporting/static/slick_reporting/slick_reporting.js b/slick_reporting/static/slick_reporting/slick_reporting.js
index bc575d9..84f7ef8 100644
--- a/slick_reporting/static/slick_reporting/slick_reporting.js
+++ b/slick_reporting/static/slick_reporting/slick_reporting.js
@@ -1,23 +1,23 @@
(function ($) {
function executeFunctionByName(functionName, context /*, args */) {
- let args = Array.prototype.slice.call(arguments, 2);
- let namespaces = functionName.split(".");
- let func = namespaces.pop();
- for (let i = 0; i < namespaces.length; i++) {
- context = context[namespaces[i]];
- }
- try {
- func = context[func];
- if (typeof func == 'undefined') {
- throw `Function ${functionName} is not found in the context ${context}`
+ let args = Array.prototype.slice.call(arguments, 2);
+ let namespaces = functionName.split(".");
+ let func = namespaces.pop();
+ for (let i = 0; i < namespaces.length; i++) {
+ context = context[namespaces[i]];
}
+ try {
+ func = context[func];
+ if (typeof func == 'undefined') {
+ throw `Function ${functionName} is not found in the context ${context}`
+ }
- } catch (err) {
- console.error(`Function ${functionName} is not found in the context ${context}`, err)
+ } catch (err) {
+ console.error(`Function ${functionName} is not found in the context ${context}`, err)
+ }
+ return func.apply(context, args);
}
- return func.apply(context, args);
-}
function getObjFromArray(objList, obj_key, key_value, failToFirst) {
failToFirst = typeof (failToFirst) !== 'undefined';
@@ -64,12 +64,42 @@
return total_container;
}
+ function get_xpath($element, forceTree) {
+ if ($element.length === 0) {
+ return null;
+ }
+
+ let element = $element[0];
+
+ if ($element.attr('id') && ((forceTree === undefined) || !forceTree)) {
+ return '//*[@id="' + $element.attr('id') + '"]';
+ } else {
+ let paths = [];
+ for (; element && element.nodeType === Node.ELEMENT_NODE; element = element.parentNode) {
+ let index = 0;
+ for (var sibling = element.previousSibling; sibling; sibling = sibling.previousSibling) {
+ if (sibling.nodeType === Node.DOCUMENT_TYPE_NODE)
+ continue;
+ if (sibling.nodeName === element.nodeName)
+ ++index;
+ }
+
+ var tagName = element.nodeName.toLowerCase();
+ var pathIndex = (index ? '[' + (index + 1) + ']' : '');
+ paths.splice(0, 0, tagName + pathIndex);
+ }
+
+ return paths.length ? '/' + paths.join('/') : null;
+ }
+ }
+
$.slick_reporting = {
'getObjFromArray': getObjFromArray,
'calculateTotalOnObjectArray': calculateTotalOnObjectArray,
"executeFunctionByName": executeFunctionByName,
- defaults:{
+ "get_xpath": get_xpath,
+ defaults: {
total_label: 'Total',
}