From 55f72749a29e303c3a1049349b82baf258079e29 Mon Sep 17 00:00:00 2001 From: Tibor Frank Date: Wed, 21 Jun 2023 14:03:36 +0000 Subject: [PATCH] C-Dash: Add documentation and other items to the navbar Change-Id: Ic6ec5e74d62ac115a30973cf8204fe6001ff7d33 Signed-off-by: Tibor Frank --- csit.infra.dash/app/cdash/comparisons/layout.py | 52 ++++++++++++++++++++----- csit.infra.dash/app/cdash/coverage/layout.py | 50 ++++++++++++++++++++---- csit.infra.dash/app/cdash/news/layout.py | 50 ++++++++++++++++++++---- csit.infra.dash/app/cdash/report/layout.py | 50 ++++++++++++++++++++---- csit.infra.dash/app/cdash/stats/layout.py | 50 ++++++++++++++++++++---- csit.infra.dash/app/cdash/trending/layout.py | 48 ++++++++++++++++++++--- csit.infra.dash/app/cdash/utils/constants.py | 4 ++ 7 files changed, 257 insertions(+), 47 deletions(-) diff --git a/csit.infra.dash/app/cdash/comparisons/layout.py b/csit.infra.dash/app/cdash/comparisons/layout.py index a16277c0f1..0680cc3d06 100644 --- a/csit.infra.dash/app/cdash/comparisons/layout.py +++ b/csit.infra.dash/app/cdash/comparisons/layout.py @@ -210,6 +210,18 @@ class Layout: self._add_ctrl_col(), self._add_plotting_col() ] + ), + dbc.Offcanvas( + class_name="w-75", + id="offcanvas-documentation", + title="Documentation", + placement="end", + is_open=False, + children=html.Iframe( + src=C.URL_DOC_REL_NOTES, + width="100%", + height="100%" + ) ) ] ) @@ -235,14 +247,26 @@ class Layout: return dbc.NavbarSimple( id="navbarsimple-main", children=[ - dbc.NavItem( - dbc.NavLink( - C.COMP_TITLE, - disabled=True, - external_link=True, - href="#" - ) - ) + dbc.NavItem(dbc.NavLink( + C.REPORT_TITLE, + external_link=True, + href="/report" + )), + dbc.NavItem(dbc.NavLink( + "Comparisons", + active=True, + external_link=True, + href="/comparisons" + )), + dbc.NavItem(dbc.NavLink( + "Coverage Data", + external_link=True, + href="/coverage" + )), + dbc.NavItem(dbc.NavLink( + "Documentation", + id="btn-documentation", + )) ], brand=C.BRAND, brand_href="/", @@ -1018,10 +1042,20 @@ class Layout: if not table_data: raise PreventUpdate - + if filtered_table_data: table = pd.DataFrame.from_records(filtered_table_data) else: table = pd.DataFrame.from_records(table_data) return dcc.send_data_frame(table.to_csv, C.COMP_DOWNLOAD_FILE_NAME) + + @app.callback( + Output("offcanvas-documentation", "is_open"), + Input("btn-documentation", "n_clicks"), + State("offcanvas-documentation", "is_open") + ) + def toggle_offcanvas_documentation(n_clicks, is_open): + if n_clicks: + return not is_open + return is_open diff --git a/csit.infra.dash/app/cdash/coverage/layout.py b/csit.infra.dash/app/cdash/coverage/layout.py index a5e095f0c0..8c11523368 100644 --- a/csit.infra.dash/app/cdash/coverage/layout.py +++ b/csit.infra.dash/app/cdash/coverage/layout.py @@ -175,6 +175,18 @@ class Layout: self._add_ctrl_col(), self._add_plotting_col() ] + ), + dbc.Offcanvas( + class_name="w-75", + id="offcanvas-documentation", + title="Documentation", + placement="end", + is_open=False, + children=html.Iframe( + src=C.URL_DOC_REL_NOTES, + width="100%", + height="100%" + ) ) ] ) @@ -200,14 +212,26 @@ class Layout: return dbc.NavbarSimple( id="navbarsimple-main", children=[ - dbc.NavItem( - dbc.NavLink( - C.COVERAGE_TITLE, - disabled=True, - external_link=True, - href="#" - ) - ) + dbc.NavItem(dbc.NavLink( + C.REPORT_TITLE, + external_link=True, + href="/report" + )), + dbc.NavItem(dbc.NavLink( + "Comparisons", + external_link=True, + href="/comparisons" + )), + dbc.NavItem(dbc.NavLink( + "Coverage Data", + active=True, + external_link=True, + href="/coverage" + )), + dbc.NavItem(dbc.NavLink( + "Documentation", + id="btn-documentation", + )) ], brand=C.BRAND, brand_href="/", @@ -712,3 +736,13 @@ class Layout: ) return dcc.send_data_frame(df.to_csv, C.COVERAGE_DOWNLOAD_FILE_NAME) + + @app.callback( + Output("offcanvas-documentation", "is_open"), + Input("btn-documentation", "n_clicks"), + State("offcanvas-documentation", "is_open") + ) + def toggle_offcanvas_documentation(n_clicks, is_open): + if n_clicks: + return not is_open + return is_open diff --git a/csit.infra.dash/app/cdash/news/layout.py b/csit.infra.dash/app/cdash/news/layout.py index d8ad92a1db..3f2280ef10 100644 --- a/csit.infra.dash/app/cdash/news/layout.py +++ b/csit.infra.dash/app/cdash/news/layout.py @@ -273,6 +273,18 @@ class Layout: self._add_ctrl_col(), self._add_plotting_col() ] + ), + dbc.Offcanvas( + class_name="w-75", + id="offcanvas-documentation", + title="Documentation", + placement="end", + is_open=False, + children=html.Iframe( + src=C.URL_DOC_TRENDING, + width="100%", + height="100%" + ) ) ] ) @@ -299,14 +311,26 @@ class Layout: return dbc.NavbarSimple( id="navbarsimple-main", children=[ - dbc.NavItem( - dbc.NavLink( - C.NEWS_TITLE, - disabled=True, - external_link=True, - href="#" - ) - ) + dbc.NavItem(dbc.NavLink( + C.TREND_TITLE, + external_link=True, + href="/trending" + )), + dbc.NavItem(dbc.NavLink( + C.NEWS_TITLE, + active=True, + external_link=True, + href="/news" + )), + dbc.NavItem(dbc.NavLink( + C.STATS_TITLE, + external_link=True, + href="/stats" + )), + dbc.NavItem(dbc.NavLink( + "Documentation", + id="btn-documentation", + )) ], brand=C.BRAND, brand_href="/", @@ -512,3 +536,13 @@ class Layout: if n: return not is_open return is_open + + @app.callback( + Output("offcanvas-documentation", "is_open"), + Input("btn-documentation", "n_clicks"), + State("offcanvas-documentation", "is_open") + ) + def toggle_offcanvas_documentation(n_clicks, is_open): + if n_clicks: + return not is_open + return is_open diff --git a/csit.infra.dash/app/cdash/report/layout.py b/csit.infra.dash/app/cdash/report/layout.py index ec17dec7e8..06b5d467dc 100644 --- a/csit.infra.dash/app/cdash/report/layout.py +++ b/csit.infra.dash/app/cdash/report/layout.py @@ -293,6 +293,18 @@ class Layout: ] ), delay_show=C.SPINNER_DELAY + ), + dbc.Offcanvas( + class_name="w-75", + id="offcanvas-documentation", + title="Documentation", + placement="end", + is_open=False, + children=html.Iframe( + src=C.URL_DOC_REL_NOTES, + width="100%", + height="100%" + ) ) ] ) @@ -318,14 +330,26 @@ class Layout: return dbc.NavbarSimple( id="navbarsimple-main", children=[ - dbc.NavItem( - dbc.NavLink( - C.REPORT_TITLE, - disabled=True, - external_link=True, - href="#" - ) - ) + dbc.NavItem(dbc.NavLink( + C.REPORT_TITLE, + active=True, + external_link=True, + href="/report" + )), + dbc.NavItem(dbc.NavLink( + "Comparisons", + external_link=True, + href="/comparisons" + )), + dbc.NavItem(dbc.NavLink( + "Coverage Data", + external_link=True, + href="/coverage" + )), + dbc.NavItem(dbc.NavLink( + "Documentation", + id="btn-documentation", + )) ], brand=C.BRAND, brand_href="/", @@ -1443,3 +1467,13 @@ class Layout: ] return metadata, graph, True + + @app.callback( + Output("offcanvas-documentation", "is_open"), + Input("btn-documentation", "n_clicks"), + State("offcanvas-documentation", "is_open") + ) + def toggle_offcanvas_documentation(n_clicks, is_open): + if n_clicks: + return not is_open + return is_open diff --git a/csit.infra.dash/app/cdash/stats/layout.py b/csit.infra.dash/app/cdash/stats/layout.py index ecd81bacbe..574479e123 100644 --- a/csit.infra.dash/app/cdash/stats/layout.py +++ b/csit.infra.dash/app/cdash/stats/layout.py @@ -252,6 +252,18 @@ class Layout: self._add_ctrl_col(), self._add_plotting_col() ] + ), + dbc.Offcanvas( + class_name="w-75", + id="offcanvas-documentation", + title="Documentation", + placement="end", + is_open=False, + children=html.Iframe( + src=C.URL_DOC_TRENDING, + width="100%", + height="100%" + ) ) ] ) @@ -277,14 +289,26 @@ class Layout: return dbc.NavbarSimple( id="navbarsimple-main", children=[ - dbc.NavItem( - dbc.NavLink( - C.STATS_TITLE, - disabled=True, - external_link=True, - href="#" - ) - ) + dbc.NavItem(dbc.NavLink( + C.TREND_TITLE, + external_link=True, + href="/trending" + )), + dbc.NavItem(dbc.NavLink( + C.NEWS_TITLE, + external_link=True, + href="/news" + )), + dbc.NavItem(dbc.NavLink( + C.STATS_TITLE, + active=True, + external_link=True, + href="/stats" + )), + dbc.NavItem(dbc.NavLink( + "Documentation", + id="btn-documentation", + )) ], brand=C.BRAND, brand_href="/", @@ -839,3 +863,13 @@ class Layout: open_canvas = True return metadata, open_canvas + + @app.callback( + Output("offcanvas-documentation", "is_open"), + Input("btn-documentation", "n_clicks"), + State("offcanvas-documentation", "is_open") + ) + def toggle_offcanvas_documentation(n_clicks, is_open): + if n_clicks: + return not is_open + return is_open diff --git a/csit.infra.dash/app/cdash/trending/layout.py b/csit.infra.dash/app/cdash/trending/layout.py index 409038acef..f84f8b1cd9 100644 --- a/csit.infra.dash/app/cdash/trending/layout.py +++ b/csit.infra.dash/app/cdash/trending/layout.py @@ -274,6 +274,18 @@ class Layout: ] ), delay_show=C.SPINNER_DELAY + ), + dbc.Offcanvas( + class_name="w-75", + id="offcanvas-documentation", + title="Documentation", + placement="end", + is_open=False, + children=html.Iframe( + src=C.URL_DOC_TRENDING, + width="100%", + height="100%" + ) ) ] ) @@ -290,14 +302,28 @@ class Layout: :rtype: dbc.NavbarSimple """ return dbc.NavbarSimple( - dbc.NavItem( - dbc.NavLink( + children=[ + dbc.NavItem(dbc.NavLink( C.TREND_TITLE, - disabled=True, + active=True, external_link=True, - href="#" - ) - ), + href="/trending" + )), + dbc.NavItem(dbc.NavLink( + C.NEWS_TITLE, + external_link=True, + href="/news" + )), + dbc.NavItem(dbc.NavLink( + C.STATS_TITLE, + external_link=True, + href="/stats" + )), + dbc.NavItem(dbc.NavLink( + "Documentation", + id="btn-documentation", + )) + ], id="navbarsimple-main", brand=C.BRAND, brand_href="/", @@ -1772,3 +1798,13 @@ class Layout: raise PreventUpdate return dcc.send_data_frame(df.to_csv, file_name) + + @app.callback( + Output("offcanvas-documentation", "is_open"), + Input("btn-documentation", "n_clicks"), + State("offcanvas-documentation", "is_open") + ) + def toggle_offcanvas_documentation(n_clicks, is_open): + if n_clicks: + return not is_open + return is_open diff --git a/csit.infra.dash/app/cdash/utils/constants.py b/csit.infra.dash/app/cdash/utils/constants.py index c2a778236b..b797ac2cf5 100644 --- a/csit.infra.dash/app/cdash/utils/constants.py +++ b/csit.infra.dash/app/cdash/utils/constants.py @@ -44,6 +44,10 @@ class Constants: # External stylesheets. EXTERNAL_STYLESHEETS = ["/static/dist/css/bootstrap.css", ] + # URL to the documentation + URL_DOC_TRENDING = "https://csit.fd.io/cdocs/methodology/trending/analysis/" + URL_DOC_REL_NOTES = "https://csit.fd.io/cdocs/release_notes/csit_rls2306/" + # Path and name of the file specifying the HTML layout of the dash # application. MAIN_HTML_LAYOUT_FILE = "base_layout.jinja2" -- 2.16.6