Skip to content

Commit 027c431

Browse files
authored
Add percentage range option for y-axis (#493)
1 parent 6d2817b commit 027c431

File tree

7 files changed

+123
-6
lines changed

7 files changed

+123
-6
lines changed

ckanext/querytool/controllers/querytool.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -492,6 +492,14 @@ def edit_visualizations(self, querytool=None, data=None,
492492
visualization['y_from_zero'] = 'true'
493493
else:
494494
visualization['y_from_zero'] = 'false'
495+
visualization['axis_max'] = \
496+
data.get('chart_field_axis_max_{}'.format(id))
497+
visualization['axis_min'] = \
498+
data.get('chart_field_axis_min_{}'.format(id))
499+
if 'chart_field_axis_range_{}'.format(id) in data:
500+
visualization['axis_range'] = 'true'
501+
else:
502+
visualization['axis_range'] = 'false'
495503
if 'chart_field_x_from_zero_{}'.format(id) in data:
496504
visualization['x_from_zero'] = 'true'
497505
else:

ckanext/querytool/fanstatic/javascript/dist/modules/viz-preview.js

Lines changed: 22 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ckanext/querytool/fanstatic/javascript/dist/visualizations_settings.js

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ckanext/querytool/fanstatic/javascript/vitals.js

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1075,4 +1075,44 @@ function renderChartTitle (title, options) {
10751075
} catch (error) {
10761076
return title;
10771077
}
1078-
}
1078+
}
1079+
1080+
// Hide axis range for unsupported types
1081+
$('body').on('change','[id^=chart_field_graph_]',function(){
1082+
var chart_number = this.id.split('_').slice(-1)[0];
1083+
var selected = $(`#chart_field_graph_${chart_number}`).val();
1084+
var rangeEnabled = $(`#chart_field_axis_range_${chart_number}`)[0].checked;
1085+
1086+
hideAxisPercentagesCheckbox(selected,chart_number);
1087+
hideAxisMinMax(selected,chart_number,rangeEnabled);
1088+
});
1089+
1090+
$('body').on('change','[id^=chart_field_axis_range_]',function(){
1091+
var chart_number = this.id.split('_').slice(-1)[0];
1092+
var selected = $(`#chart_field_graph_${chart_number}`).val();
1093+
var rangeEnabled = this.checked;
1094+
1095+
hideAxisMinMax(selected,chart_number,rangeEnabled);
1096+
});
1097+
1098+
function hideAxisPercentagesCheckbox(selected,chart_number){
1099+
if(['shbar', 'sbar', 'pie', 'donut'].includes(selected)) {
1100+
$(`#chart_field_axis_range_${chart_number}`).attr('checked', false);
1101+
$(`#chart_field_axis_range_${chart_number}`).hide();
1102+
$(`label[for=chart_field_axis_range_${chart_number}], #chart_field_axis_range_${chart_number}`).hide();
1103+
} else {
1104+
$(`#chart_field_axis_range_${chart_number}`).show();
1105+
$(`.show_axis_range_${chart_number}`).removeClass('hidden');
1106+
$(`label[for=chart_field_axis_range_${chart_number}], #chart_field_axis_range_${chart_number}`).show();
1107+
}
1108+
};
1109+
1110+
function hideAxisMinMax(selected,chart_number,rangeEnabled){
1111+
if(['shbar', 'sbar', 'pie', 'donut'].includes(selected) || [false, undefined].includes(rangeEnabled)) {
1112+
$(`.axis_range_min_${chart_number}`).addClass('hidden');
1113+
$(`.axis_range_max_${chart_number}`).addClass('hidden');
1114+
} else {
1115+
$(`.axis_range_min_${chart_number}`).removeClass('hidden');
1116+
$(`.axis_range_max_${chart_number}`).removeClass('hidden');
1117+
}
1118+
};

ckanext/querytool/templates/ajax_snippets/chart_item.html

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,7 @@
570570
</div>
571571
</div>
572572

573+
573574
{# Show values as percentages (pie and donut charts only) #}
574575
{% if chart %}
575576
{% set show_labels_as_percentages = chart.show_labels_as_percentages %}
@@ -630,6 +631,42 @@
630631
</div>
631632
{# {% endif %} #}
632633

634+
{# Axis percentages #}
635+
{% if chart %}
636+
{% set axis_range = chart.axis_range %}
637+
{% set axis_min = chart.axis_min %}
638+
{% set axis_max = chart.axis_max %}
639+
{% endif %}
640+
641+
{% if axis_range=='true' and selected_chart_type not in ['pie', 'donut', 'sbar', 'shbar'] %}
642+
{% set show_range = '' %}
643+
{% else %}
644+
{% set show_range = 'hidden' %}
645+
{% endif %}
646+
647+
<div class="control-group show_axis_range_{{ n }} {{show_range}}">
648+
<label class="control-label" for="chart_field_axis_range_{{ n }}">{{ _('Set axis range') }}</label>
649+
<div class="controls ">
650+
<input id="chart_field_axis_range_{{ n }}" type="checkbox" name="chart_field_axis_range_{{ n }}" value="{{ axis_range }}" {% if axis_range=='true' %}checked{% endif %}>
651+
</div>
652+
</div>
653+
654+
{# Axis range min #}
655+
<div class="control-group axis_range_min_{{n}} {{ show_range }}">
656+
<label class="control-label" for="chart_field_axis_min_{{ n }}">{{ _('Axis range minimum') }}</label>
657+
<div class="controls ">
658+
<input id="chart_field_axis_min_{{ n }}" type="text" name="chart_field_axis_min_{{ n }}" value="{{ axis_min }}" placeholder="{{ _('Axis minimum') }}">
659+
</div>
660+
</div>
661+
662+
{# Axis range max #}
663+
<div class="control-group axis_range_max_{{n}} {{ show_range }}">
664+
<label class="control-label" for="chart_field_axis_max_{{ n }}">{{ _('Axis range maximum') }}</label>
665+
<div class="controls ">
666+
<input id="chart_field_axis_max_{{ n }}" type="text" name="chart_field_axis_max_{{ n }}" value="{{ axis_max }}" placeholder="{{ _('Axis maximum') }}">
667+
</div>
668+
</div>
669+
{# {% endif %} #}
633670

634671
</div>
635672
</div>
@@ -917,6 +954,8 @@
917954
{% set upper_bounds = chart.upper_bounds %}
918955
{% set lower_bounds = chart.lower_bounds %}
919956
{% set show_bounds = chart.show_bounds %}
957+
{% set axis_min = chart.axis_min %}
958+
{% set axis_max = chart.axis_max %}
920959
{% endif %}
921960
{% snippet 'ajax_snippets/visualization_item.html',
922961
type='chart',
@@ -967,7 +1006,10 @@
9671006
donut_hole = donut_hole,
9681007
upper_bounds = upper_bounds,
9691008
lower_bounds = lower_bounds,
970-
show_bounds = show_bounds
1009+
show_bounds = show_bounds,
1010+
axis_range = axis_range,
1011+
axis_min = axis_min,
1012+
axis_max = axis_max
9711013
%}
9721014
</div>
9731015
</div>

ckanext/querytool/templates/ajax_snippets/visualization_item.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,8 @@
5050
data-module-upper_bounds="{{ upper_bounds }}"
5151
data-module-lower_bounds="{{ lower_bounds }}"
5252
data-module-show_bounds="{{ show_bounds }}"
53+
data-module-axis_range="{{ axis_range or 'false' }}"
54+
data-module-axis_min="{{ axis_min }}"
55+
data-module-axis_max="{{ axis_max }}"
5356
>
5457
</div>

ckanext/querytool/templates/querytool/public/read.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,10 @@ <h3 id="item-title-{{chart_id}}">{{ item.map_custom_title_field }}</h3>
275275
description = item.additional_description,
276276
upper_bounds = item.upper_bounds,
277277
lower_bounds = item.lower_bounds,
278-
show_bounds = item.show_bounds
278+
show_bounds = item.show_bounds,
279+
axis_range = item.axis_range,
280+
axis_min = item.axis_min,
281+
axis_max = item.axis_max
279282
%}
280283
{% endif %}
281284
{% if item.type == 'text_box' %}

0 commit comments

Comments
 (0)