gov-uk-dashboards 21.2.2__tar.gz → 22.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. {gov_uk_dashboards-21.2.2/gov_uk_dashboards.egg-info → gov_uk_dashboards-22.1.0}/PKG-INFO +1 -1
  2. gov_uk_dashboards-22.1.0/gov_uk_dashboards/assets/download-map.js +39 -0
  3. gov_uk_dashboards-22.1.0/gov_uk_dashboards/assets/index.html +3 -0
  4. gov_uk_dashboards-22.1.0/gov_uk_dashboards/assets/scripts.js +4 -0
  5. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/download_button.py +14 -5
  6. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/helpers/display_chart_or_table_with_header.py +15 -2
  7. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/leaflet/leaflet_choropleth_map.py +41 -3
  8. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0/gov_uk_dashboards.egg-info}/PKG-INFO +1 -1
  9. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards.egg-info/SOURCES.txt +3 -0
  10. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/setup.py +1 -1
  11. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/LICENSE +0 -0
  12. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/MANIFEST.in +0 -0
  13. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/README.md +0 -0
  14. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/__init__.py +0 -0
  15. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/__init__.py +0 -0
  16. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/attach-event-to-dash.js +0 -0
  17. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/custom_map_style_functions.js +0 -0
  18. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/dashboard.css +0 -0
  19. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/fonts/bold-affa96571d-v2.woff +0 -0
  20. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/fonts/bold-b542beb274-v2.woff2 +0 -0
  21. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/fonts/light-94a07e06a1-v2.woff2 +0 -0
  22. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/fonts/light-f591b13f7d-v2.woff +0 -0
  23. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/get_assets_folder.py +0 -0
  24. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/govuk-frontend-3.14.0.min.js +0 -0
  25. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/images/DLUHC_WHITE_Master_AW_sm.png +0 -0
  26. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/images/MHCLG-favicon.png +0 -0
  27. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/images/MHCLG_favicon.png +0 -0
  28. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/images/dcms_coatofarms.png +0 -0
  29. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/images/dluhc_favicon.ico +0 -0
  30. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/images/gov_favicon.ico +0 -0
  31. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/images/govuk-crest.svg +0 -0
  32. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/images/hm-government-logo.png +0 -0
  33. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/images/mhclg_coat_of_arms.png +0 -0
  34. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/images/mhclg_white_no_background.png +0 -0
  35. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/images/oflog/MedianAbsolute.png +0 -0
  36. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/images/oflog/how_to_1_selecting_data.png +0 -0
  37. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/images/oflog/how_to_2_viewing_tabs.png +0 -0
  38. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/images/oflog/how_to_3_viewing_charts.png +0 -0
  39. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/images/oflog/how_to_4_viewing_trends.png +0 -0
  40. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/images/oflog/how_to_5_viewing_tables.png +0 -0
  41. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/mobile-nav.js +0 -0
  42. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/topojson/usa_110m.json +0 -0
  43. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/assets/topojson/world_110m.json +0 -0
  44. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/axes.py +0 -0
  45. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/colours.py +0 -0
  46. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/__init__.py +0 -0
  47. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/__init__.py +0 -0
  48. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/apply_and_reset_filters_buttons.py +0 -0
  49. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/banners.py +0 -0
  50. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/card.py +0 -0
  51. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/card_full_width.py +0 -0
  52. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/collapsible_panel.py +0 -0
  53. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/comparison_la_filter_button.py +0 -0
  54. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/context_banner.py +0 -0
  55. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/dashboard_container.py +0 -0
  56. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/details.py +0 -0
  57. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/filter_panel.py +0 -0
  58. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/footer.py +0 -0
  59. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/graph.py +0 -0
  60. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/header.py +0 -0
  61. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/heading.py +0 -0
  62. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/home_page_link_button.py +0 -0
  63. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/html_list.py +0 -0
  64. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/key_value_pair.py +0 -0
  65. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/main_content.py +0 -0
  66. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/navbar.py +0 -0
  67. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/no_data_message.py +0 -0
  68. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/notification_banner.py +0 -0
  69. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/paragraph.py +0 -0
  70. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/phase_banner.py +0 -0
  71. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/row_component.py +0 -0
  72. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/side_navbar.py +0 -0
  73. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/table.py +0 -0
  74. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/tooltip.py +0 -0
  75. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/tooltip_title.py +0 -0
  76. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/visualisation_commentary.py +0 -0
  77. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/visualisation_title.py +0 -0
  78. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/dash/warning_text.py +0 -0
  79. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/helpers/__init__.py +0 -0
  80. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/helpers/generate_dash_graph_from_figure.py +0 -0
  81. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/helpers/get_chart_for_download.py +0 -0
  82. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/helpers/plotting_helper_functions.py +0 -0
  83. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/helpers/update_layout_bgcolor_margin.py +0 -0
  84. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/leaflet/__init__.py +0 -0
  85. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/plotly/__init__.py +0 -0
  86. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/plotly/captioned_figure.py +0 -0
  87. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/plotly/choropleth_map.py +0 -0
  88. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/plotly/enums.py +0 -0
  89. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/plotly/stacked_barchart.py +0 -0
  90. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/components/plotly/time_series_chart.py +0 -0
  91. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/constants.py +0 -0
  92. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/figures/__init__.py +0 -0
  93. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/figures/chart_data.py +0 -0
  94. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/figures/enums/__init__.py +0 -0
  95. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/figures/enums/dash_patterns.py +0 -0
  96. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/figures/line_chart.py +0 -0
  97. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/figures/styles/__init__.py +0 -0
  98. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/figures/styles/line_style.py +0 -0
  99. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/formatting/__init__.py +0 -0
  100. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/formatting/human_readable.py +0 -0
  101. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/formatting/number_formatting.py +0 -0
  102. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/formatting/round_and_add_prefix_and_suffix.py +0 -0
  103. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/formatting/rounding.py +0 -0
  104. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/lib/__init__.py +0 -0
  105. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/lib/dap/__init__.py +0 -0
  106. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/lib/dap/dap_deployment.py +0 -0
  107. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/lib/dap/get_dataframe_from_cds.py +0 -0
  108. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/lib/datetime_functions/__init__.py +0 -0
  109. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/lib/datetime_functions/datetime_functions.py +0 -0
  110. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/lib/download_functions/__init__.py +0 -0
  111. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/lib/download_functions/convert_fig_to_image_and_download.py +0 -0
  112. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/lib/download_functions/download_csv_with_headers.py +0 -0
  113. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/lib/enable_basic_auth.py +0 -0
  114. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/lib/http_headers.py +0 -0
  115. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/lib/logging.py +0 -0
  116. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/symbols.py +0 -0
  117. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/template.html +0 -0
  118. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards/template.py +0 -0
  119. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards.egg-info/dependency_links.txt +0 -0
  120. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards.egg-info/requires.txt +0 -0
  121. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/gov_uk_dashboards.egg-info/top_level.txt +0 -0
  122. {gov_uk_dashboards-21.2.2 → gov_uk_dashboards-22.1.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gov_uk_dashboards
3
- Version: 21.2.2
3
+ Version: 22.1.0
4
4
  Summary: Provides access to functionality common to creating a data dashboard.
5
5
  Author: Department for Levelling Up, Housing and Communities
6
6
  Description-Content-Type: text/markdown
@@ -0,0 +1,39 @@
1
+ window.mynamespace = window.mynamespace || {};
2
+
3
+ window.mynamespace = {
4
+ downloadMap: function(buttonId) {
5
+ if (typeof buttonId !== "string") {
6
+ console.warn("Invalid buttonId passed to downloadMap:", buttonId);
7
+ return;
8
+ }
9
+
10
+ const mapDiv = document.getElementById(`${buttonId}-hidden-map-container`);
11
+
12
+ if (!mapDiv) {
13
+ console.error("Map container not found");
14
+ return;
15
+ }
16
+
17
+ html2canvas(mapDiv, { useCORS: true, scale: 1 }).then(originalCanvas => {
18
+ const cropHeight = originalCanvas.height - 300;
19
+ const cropWidth = originalCanvas.width;
20
+
21
+ const croppedCanvas = document.createElement("canvas");
22
+ croppedCanvas.width = cropWidth;
23
+ croppedCanvas.height = cropHeight;
24
+
25
+ const ctx = croppedCanvas.getContext("2d");
26
+ ctx.drawImage(originalCanvas, 0, 0, cropWidth, cropHeight, 0, 0, cropWidth, cropHeight);
27
+
28
+ const link = document.createElement("a");
29
+ link.download = `${buttonId}.png`;
30
+ link.href = croppedCanvas.toDataURL("image/png");
31
+ document.body.appendChild(link);
32
+ link.click();
33
+ document.body.removeChild(link);
34
+ }).catch(error => {
35
+ console.error("html2canvas error:", error);
36
+ alert("Failed to capture the map.");
37
+ });
38
+ }
39
+ };
@@ -0,0 +1,3 @@
1
+ <head>
2
+ <script src="https://cdn.jsdelivr.net/npm/html2canvas@1.4.1/dist/html2canvas.min.js"></script>
3
+ </head>
@@ -0,0 +1,4 @@
1
+ const script = document.createElement("script");
2
+ script.src = "https://cdn.jsdelivr.net/npm/html2canvas@1.4.1/dist/html2canvas.min.js";
3
+ script.onload = () => console.log("html2canvas loaded");
4
+ document.head.appendChild(script);
@@ -1,4 +1,5 @@
1
1
  """download_button"""
2
+ from typing import Union
2
3
  import warnings
3
4
  from dash import html
4
5
 
@@ -35,26 +36,34 @@ def download_button(button_text: str, button_id: str = "download-button"):
35
36
 
36
37
 
37
38
  def create_download_button_with_icon(
38
- button_text: str, button_id_name: str
39
+ button_text: str, button_id_name: str, instance: Union[str, int] = None
39
40
  ) -> html.Button:
40
41
  """Create a download button with icon, aligned to the left.
41
42
 
42
43
  Parameters:
44
+ - button_text (str): Text to display on button.
43
45
  - button_id_name (str): A unique identifier for the button.
46
+ - instance (Union[int,str]): Optional additional id parameter for when button_text is
47
+ "Download map".
44
48
 
45
49
  Returns:
46
50
  - html.Button: Download button.
47
51
  """
48
52
  download_type = button_text.lower().replace(" ", "-")
53
+ if button_text == "Download map":
54
+ id_dict = {
55
+ "download-type": download_type,
56
+ "name": button_id_name,
57
+ "instance": instance,
58
+ }
59
+ else:
60
+ id_dict = {"download-type": download_type, "name": button_id_name}
49
61
  return html.Button(
50
62
  [
51
63
  html.Div("", className="download-icon"),
52
64
  button_text,
53
65
  ],
54
- id={
55
- "download-type": download_type,
56
- "name": button_id_name,
57
- },
66
+ id=id_dict,
58
67
  n_clicks=0,
59
68
  className=DOWNLOAD_BUTTON_CLASSES,
60
69
  type="submit",
@@ -18,7 +18,10 @@ def display_chart_or_table_with_header(
18
18
  sub_heading: str = None,
19
19
  download_button_id: str = None,
20
20
  download_data_button_id: str = None,
21
+ download_map_button_id: str = None,
21
22
  footnote: str = None,
23
+ instance=1,
24
+ text_below_subheading: str = None,
22
25
  ) -> html.Div:
23
26
  """Generate the wrapping information/header for a chart or table.
24
27
 
@@ -29,7 +32,11 @@ def display_chart_or_table_with_header(
29
32
  download_button_id (str, optional): id for download button if required. Defaults to None.
30
33
  if None then the button will not be included.
31
34
  download_data_button_id (str, optional): the id to be applied to the download data button.
35
+ download_map_button_id (str, optional): the id to be applied to the download map button.
32
36
  footnote (str, optional): the footnote to be added to charts and downloads.
37
+ instance (int or str): Optional additional paramter for id dict.
38
+ text_below_subheading (str, optional): Optional text to go below subheading but above
39
+ chart_or_table.
33
40
 
34
41
  Returns:
35
42
  html.Div: Div containing Header and chart/table.
@@ -54,6 +61,7 @@ def display_chart_or_table_with_header(
54
61
  ),
55
62
  ]
56
63
  ),
64
+ paragraph(text_below_subheading),
57
65
  chart_or_table,
58
66
  html.Div([paragraph(footnote)], style={"padding-top": "20px"}),
59
67
  html.Div(
@@ -62,12 +70,17 @@ def display_chart_or_table_with_header(
62
70
  html.Div(
63
71
  [
64
72
  create_download_button_with_icon(
65
- "Download chart", download_button_id
73
+ "Download chart", download_button_id, instance
66
74
  )
67
75
  if download_button_id
68
76
  else [],
69
77
  create_download_button_with_icon(
70
- "Download data", download_data_button_id
78
+ "Download map", download_map_button_id, instance
79
+ )
80
+ if download_map_button_id
81
+ else [],
82
+ create_download_button_with_icon(
83
+ "Download data", download_data_button_id, instance
71
84
  )
72
85
  if download_data_button_id
73
86
  else [],
@@ -36,6 +36,7 @@ class LeafletChoroplethMap:
36
36
  legend_column: str,
37
37
  area_column: str,
38
38
  title: str,
39
+ instance: int,
39
40
  subtitle: Optional[str] = None,
40
41
  enable_zoom: bool = True,
41
42
  download_chart_button_id: Optional[str] = None,
@@ -57,6 +58,7 @@ class LeafletChoroplethMap:
57
58
  self.color_scale_is_discrete = color_scale_is_discrete
58
59
  self.show_tile_layer = show_tile_layer
59
60
  self._add_data_to_geojson()
61
+ self.instance = instance
60
62
 
61
63
  def get_leaflet_choropleth_map(self):
62
64
  """Creates and returns leaflet choropleth map chart for display on application.
@@ -88,14 +90,49 @@ class LeafletChoroplethMap:
88
90
  attributionControl=False,
89
91
  style={"width": "100%", "height": "800px", "background": "white"},
90
92
  )
91
- return display_chart_or_table_with_header(
93
+ download_choropleth_map = dl.Map(
94
+ children=[
95
+ dl.TileLayer() if self.show_tile_layer else None,
96
+ self._get_colorbar(),
97
+ self._get_colorbar_title(),
98
+ self._get_dl_geojson(),
99
+ ],
100
+ center=[54.5, -25.0],
101
+ zoom=7.5,
102
+ maxBounds=[[49.5, -30], [60, 2]],
103
+ zoomControl=False,
104
+ attributionControl=False,
105
+ style={"width": "1200px", "height": "1200px", "background": "white"},
106
+ )
107
+ choropleth_map = display_chart_or_table_with_header(
92
108
  choropleth_map,
93
109
  self.title,
94
110
  self.subtitle,
95
- self.download_chart_button_id,
111
+ None,
96
112
  self.download_data_button_id,
113
+ self.download_chart_button_id,
114
+ None,
115
+ self.instance,
116
+ )
117
+ download_choropleth_map_display = display_chart_or_table_with_header(
118
+ download_choropleth_map,
119
+ self.title,
120
+ self.subtitle,
97
121
  )
98
122
 
123
+ return [
124
+ choropleth_map,
125
+ html.Div(
126
+ [download_choropleth_map_display],
127
+ id=f"{self.download_chart_button_id}-hidden-map-container",
128
+ style={
129
+ "position": "absolute",
130
+ "top": "-10000px",
131
+ "left": "-10000px",
132
+ }, # hide off screen
133
+ ),
134
+ ]
135
+
99
136
  def _add_data_to_geojson(self):
100
137
  info_map = {
101
138
  row["Area_Code"]: {
@@ -230,11 +267,12 @@ class LeafletChoroplethMap:
230
267
  def _get_colorbar_title(self):
231
268
  if self.color_scale_is_discrete:
232
269
  return None
270
+ top = "70px" if self.enable_zoom is False else "140px"
233
271
  return html.Div(
234
272
  self.hover_text_columns[0],
235
273
  style={
236
274
  "position": "absolute",
237
- "bottom": "700px", # Adjusted to place above the colorbar
275
+ "top": top, # Adjusted to place above the colorbar
238
276
  "left": "10px", # Align with the left side of the colorbar
239
277
  "background": "white",
240
278
  "padding": "2px 6px",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gov_uk_dashboards
3
- Version: 21.2.2
3
+ Version: 22.1.0
4
4
  Summary: Provides access to functionality common to creating a data dashboard.
5
5
  Author: Department for Levelling Up, Housing and Communities
6
6
  Description-Content-Type: text/markdown
@@ -18,9 +18,12 @@ gov_uk_dashboards/assets/__init__.py
18
18
  gov_uk_dashboards/assets/attach-event-to-dash.js
19
19
  gov_uk_dashboards/assets/custom_map_style_functions.js
20
20
  gov_uk_dashboards/assets/dashboard.css
21
+ gov_uk_dashboards/assets/download-map.js
21
22
  gov_uk_dashboards/assets/get_assets_folder.py
22
23
  gov_uk_dashboards/assets/govuk-frontend-3.14.0.min.js
24
+ gov_uk_dashboards/assets/index.html
23
25
  gov_uk_dashboards/assets/mobile-nav.js
26
+ gov_uk_dashboards/assets/scripts.js
24
27
  gov_uk_dashboards/assets/fonts/bold-affa96571d-v2.woff
25
28
  gov_uk_dashboards/assets/fonts/bold-b542beb274-v2.woff2
26
29
  gov_uk_dashboards/assets/fonts/light-94a07e06a1-v2.woff2
@@ -10,7 +10,7 @@ setup(
10
10
  author="Department for Levelling Up, Housing and Communities",
11
11
  description="Provides access to functionality common to creating a data dashboard.",
12
12
  name="gov_uk_dashboards",
13
- version="21.2.2",
13
+ version="22.1.0",
14
14
  long_description=long_description,
15
15
  long_description_content_type="text/markdown",
16
16
  packages=find_packages(),