From afd80b3029a4aabc8c4a9460b6abfec7673b3f77 Mon Sep 17 00:00:00 2001 From: thomaswoehlke <thomas.woehlke@gmail.com> Date: Sat, 30 Jan 2021 20:09:33 +0100 Subject: [PATCH] ### 0.0.13 Release * Fixed #49 EuropeServiceUpdate.__update_data_short() (wontfix) * Fixed #52 download vaccination timeline data file * Fixed #53 import vaccination timeline data file into db * Fixed #54 /vaccination/imported * Fixed #57 frontend: use npm for handling 3rdParty css and javascript modules like jQuery, Bootstrap * Fixed #58 frontend: remove jumbotron from all pageheader, put jumbotron as main content on home page * Fixed #47 major refactoring: Routes from app.py to org...who,europe,... (Doublette von #65) * Fixed #48 major refactoring: Tasks from server_mq.py to org...who,europe,... (Doublette von #65) * Fixed #64 major refactoring: create two packages: for web app and for celery worker * Issue #65 major refactoring: add flask-blueprints for admin, common, europe, rki, vaccination, who ### 0.0.14 Release * Issue #66 frontend: migrate to Bootstrap Theme sb-admin-angular * Issue #67 implement Flask-Login ### 0.0.15 Release * Issue #5 Visual Graphs for Data per Countries order by Date * Issue #59 frontend: add correct breadcrumb to every page * Issue #60 frontend: better design for tables * Issue #61 frontend: better design for navtabs * Issue #62 frontend: better design for pages * Issue #63 frontend: add footer design ### 0.0.16 Release * Issue #28 /admin/database/import * Issue #39 SQLalchemy instead of SQL: AllModelClasses.remove_all() * Issue #40 SQLalchemy instead of SQL: EuropeDataImportTable.get_date_rep() * Issue #41 SQLalchemy instead of SQL: EuropeDataImportTable.get_countries_of_continent() * Issue #42 SQLalchemy instead of SQL: WhoGlobalDataImportTable.get_new_dates_as_array() --- covid19/templates/admin/admin_info.html | 2 +- covid19/templates/admin/admin_tasks.html | 2 +- covid19/templates/common/page_home.html | 2 +- covid19/templates/{ => common}/page_layout.html | 0 covid19/templates/europe/continent/europe_continent_all.html | 2 +- .../templates/europe/continent/europe_continent_germany.html | 2 +- covid19/templates/europe/continent/europe_continent_one.html | 2 +- covid19/templates/europe/country/europe_country_all.html | 2 +- covid19/templates/europe/country/europe_country_germany.html | 2 +- covid19/templates/europe/country/europe_country_one.html | 2 +- .../europe/date_reported/europe_date_reported_all.html | 2 +- .../europe/date_reported/europe_date_reported_one.html | 2 +- .../date_reported/europe_date_reported_one_cases_weekly.html | 2 +- .../date_reported/europe_date_reported_one_deaths_weekly.html | 2 +- .../europe_date_reported_one_notification_rate.html | 2 +- covid19/templates/europe/europe_data.html | 2 +- covid19/templates/europe/europe_imported.html | 2 +- covid19/templates/europe/europe_info.html | 2 +- covid19/templates/europe/europe_tasks.html | 2 +- covid19/templates/rki/rki_imported.html | 2 +- covid19/templates/rki/rki_info.html | 2 +- covid19/templates/rki/rki_tasks.html | 2 +- covid19/templates/vaccination/vaccination_info.html | 2 +- covid19/templates/vaccination/vaccination_tasks.html | 2 +- covid19/templates/vaccination/vaccination_timeline_germany.html | 2 +- covid19/templates/who/country/who_country_all.html | 2 +- covid19/templates/who/country/who_country_germany.html | 2 +- covid19/templates/who/country/who_country_one.html | 2 +- .../templates/who/country/who_country_one_cases_cumulative.html | 2 +- covid19/templates/who/country/who_country_one_cases_new.html | 2 +- .../who/country/who_country_one_deaths_cumulative.html | 2 +- covid19/templates/who/country/who_country_one_deaths_new.html | 2 +- covid19/templates/who/date_reported/who_date_reported_all.html | 2 +- covid19/templates/who/date_reported/who_date_reported_one.html | 2 +- .../date_reported/who_date_reported_one_cases_cumulative.html | 2 +- .../who/date_reported/who_date_reported_one_cases_new.html | 2 +- .../date_reported/who_date_reported_one_deaths_cumulative.html | 2 +- .../who/date_reported/who_date_reported_one_deaths_new.html | 2 +- covid19/templates/who/region/who_region_all.html | 2 +- covid19/templates/who/region/who_region_one.html | 2 +- covid19/templates/who/who_imported.html | 2 +- covid19/templates/who/who_info.html | 2 +- covid19/templates/who/who_tasks.html | 2 +- 43 files changed, 42 insertions(+), 42 deletions(-) rename covid19/templates/{ => common}/page_layout.html (100%) diff --git a/covid19/templates/admin/admin_info.html b/covid19/templates/admin/admin_info.html index b97f4513..2f3f9caf 100644 --- a/covid19/templates/admin/admin_info.html +++ b/covid19/templates/admin/admin_info.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} diff --git a/covid19/templates/admin/admin_tasks.html b/covid19/templates/admin/admin_tasks.html index 0ace9684..d30234c9 100644 --- a/covid19/templates/admin/admin_tasks.html +++ b/covid19/templates/admin/admin_tasks.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} diff --git a/covid19/templates/common/page_home.html b/covid19/templates/common/page_home.html index 3f4341ab..9b4cdb8b 100644 --- a/covid19/templates/common/page_home.html +++ b/covid19/templates/common/page_home.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} diff --git a/covid19/templates/page_layout.html b/covid19/templates/common/page_layout.html similarity index 100% rename from covid19/templates/page_layout.html rename to covid19/templates/common/page_layout.html diff --git a/covid19/templates/europe/continent/europe_continent_all.html b/covid19/templates/europe/continent/europe_continent_all.html index 6c589422..ae1c59b8 100644 --- a/covid19/templates/europe/continent/europe_continent_all.html +++ b/covid19/templates/europe/continent/europe_continent_all.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} <nav aria-label="breadcrumb"> diff --git a/covid19/templates/europe/continent/europe_continent_germany.html b/covid19/templates/europe/continent/europe_continent_germany.html index 84b53d06..e3c8dbb9 100644 --- a/covid19/templates/europe/continent/europe_continent_germany.html +++ b/covid19/templates/europe/continent/europe_continent_germany.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} <nav aria-label="breadcrumb"> diff --git a/covid19/templates/europe/continent/europe_continent_one.html b/covid19/templates/europe/continent/europe_continent_one.html index 46f169bf..40f0d16c 100644 --- a/covid19/templates/europe/continent/europe_continent_one.html +++ b/covid19/templates/europe/continent/europe_continent_one.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} <nav aria-label="breadcrumb"> diff --git a/covid19/templates/europe/country/europe_country_all.html b/covid19/templates/europe/country/europe_country_all.html index 114cda0b..b779f911 100644 --- a/covid19/templates/europe/country/europe_country_all.html +++ b/covid19/templates/europe/country/europe_country_all.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} <nav aria-label="breadcrumb"> diff --git a/covid19/templates/europe/country/europe_country_germany.html b/covid19/templates/europe/country/europe_country_germany.html index ff7bc975..603cc87d 100644 --- a/covid19/templates/europe/country/europe_country_germany.html +++ b/covid19/templates/europe/country/europe_country_germany.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_navtabs %} {% include 'europe/fragments/fragment_europe_navtabs.html' %} diff --git a/covid19/templates/europe/country/europe_country_one.html b/covid19/templates/europe/country/europe_country_one.html index 58bbe6b5..4cdf7182 100644 --- a/covid19/templates/europe/country/europe_country_one.html +++ b/covid19/templates/europe/country/europe_country_one.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_navtabs %} {% include 'europe/fragments/fragment_europe_navtabs.html' %} diff --git a/covid19/templates/europe/date_reported/europe_date_reported_all.html b/covid19/templates/europe/date_reported/europe_date_reported_all.html index a20ebca6..0124a4fc 100644 --- a/covid19/templates/europe/date_reported/europe_date_reported_all.html +++ b/covid19/templates/europe/date_reported/europe_date_reported_all.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} <nav aria-label="breadcrumb"> diff --git a/covid19/templates/europe/date_reported/europe_date_reported_one.html b/covid19/templates/europe/date_reported/europe_date_reported_one.html index aaafde0c..a5468298 100644 --- a/covid19/templates/europe/date_reported/europe_date_reported_one.html +++ b/covid19/templates/europe/date_reported/europe_date_reported_one.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} {% endblock %} diff --git a/covid19/templates/europe/date_reported/europe_date_reported_one_cases_weekly.html b/covid19/templates/europe/date_reported/europe_date_reported_one_cases_weekly.html index 32bed5b3..2526106f 100644 --- a/covid19/templates/europe/date_reported/europe_date_reported_one_cases_weekly.html +++ b/covid19/templates/europe/date_reported/europe_date_reported_one_cases_weekly.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} {% endblock %} diff --git a/covid19/templates/europe/date_reported/europe_date_reported_one_deaths_weekly.html b/covid19/templates/europe/date_reported/europe_date_reported_one_deaths_weekly.html index b731f445..12ac115c 100644 --- a/covid19/templates/europe/date_reported/europe_date_reported_one_deaths_weekly.html +++ b/covid19/templates/europe/date_reported/europe_date_reported_one_deaths_weekly.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} {% endblock %} diff --git a/covid19/templates/europe/date_reported/europe_date_reported_one_notification_rate.html b/covid19/templates/europe/date_reported/europe_date_reported_one_notification_rate.html index 21fbd9d9..dd2a5d23 100644 --- a/covid19/templates/europe/date_reported/europe_date_reported_one_notification_rate.html +++ b/covid19/templates/europe/date_reported/europe_date_reported_one_notification_rate.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} {% endblock %} diff --git a/covid19/templates/europe/europe_data.html b/covid19/templates/europe/europe_data.html index 77fe8001..548cdf07 100644 --- a/covid19/templates/europe/europe_data.html +++ b/covid19/templates/europe/europe_data.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} <nav aria-label="breadcrumb"> diff --git a/covid19/templates/europe/europe_imported.html b/covid19/templates/europe/europe_imported.html index 5056a0a9..a2159a28 100644 --- a/covid19/templates/europe/europe_imported.html +++ b/covid19/templates/europe/europe_imported.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} <nav aria-label="breadcrumb"> diff --git a/covid19/templates/europe/europe_info.html b/covid19/templates/europe/europe_info.html index ad9a73ce..34445d4a 100644 --- a/covid19/templates/europe/europe_info.html +++ b/covid19/templates/europe/europe_info.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} <nav aria-label="breadcrumb"> diff --git a/covid19/templates/europe/europe_tasks.html b/covid19/templates/europe/europe_tasks.html index 8098e7a5..97fc88a4 100644 --- a/covid19/templates/europe/europe_tasks.html +++ b/covid19/templates/europe/europe_tasks.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} <nav aria-label="breadcrumb"> diff --git a/covid19/templates/rki/rki_imported.html b/covid19/templates/rki/rki_imported.html index 748ddf9e..9831348f 100644 --- a/covid19/templates/rki/rki_imported.html +++ b/covid19/templates/rki/rki_imported.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% include 'common/fragment_pagination.html' %} diff --git a/covid19/templates/rki/rki_info.html b/covid19/templates/rki/rki_info.html index 6eea293c..1706588e 100644 --- a/covid19/templates/rki/rki_info.html +++ b/covid19/templates/rki/rki_info.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} diff --git a/covid19/templates/rki/rki_tasks.html b/covid19/templates/rki/rki_tasks.html index 90d54b24..14037156 100644 --- a/covid19/templates/rki/rki_tasks.html +++ b/covid19/templates/rki/rki_tasks.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} diff --git a/covid19/templates/vaccination/vaccination_info.html b/covid19/templates/vaccination/vaccination_info.html index b5b5b612..a2dc028b 100644 --- a/covid19/templates/vaccination/vaccination_info.html +++ b/covid19/templates/vaccination/vaccination_info.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} diff --git a/covid19/templates/vaccination/vaccination_tasks.html b/covid19/templates/vaccination/vaccination_tasks.html index edaadd4d..ebf1cfd1 100644 --- a/covid19/templates/vaccination/vaccination_tasks.html +++ b/covid19/templates/vaccination/vaccination_tasks.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} diff --git a/covid19/templates/vaccination/vaccination_timeline_germany.html b/covid19/templates/vaccination/vaccination_timeline_germany.html index 8c4b2957..fe8e7949 100644 --- a/covid19/templates/vaccination/vaccination_timeline_germany.html +++ b/covid19/templates/vaccination/vaccination_timeline_germany.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% include 'common/fragment_pagination.html' %} diff --git a/covid19/templates/who/country/who_country_all.html b/covid19/templates/who/country/who_country_all.html index 59defe4e..ecaa1c45 100644 --- a/covid19/templates/who/country/who_country_all.html +++ b/covid19/templates/who/country/who_country_all.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_jumbotron %}{% endblock %} diff --git a/covid19/templates/who/country/who_country_germany.html b/covid19/templates/who/country/who_country_germany.html index a87dd358..e03bb4f2 100644 --- a/covid19/templates/who/country/who_country_germany.html +++ b/covid19/templates/who/country/who_country_germany.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_jumbotron %}{% endblock %} diff --git a/covid19/templates/who/country/who_country_one.html b/covid19/templates/who/country/who_country_one.html index 12b73106..01115252 100644 --- a/covid19/templates/who/country/who_country_one.html +++ b/covid19/templates/who/country/who_country_one.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_jumbotron %}{% endblock %} diff --git a/covid19/templates/who/country/who_country_one_cases_cumulative.html b/covid19/templates/who/country/who_country_one_cases_cumulative.html index ce31cff8..45ec6418 100644 --- a/covid19/templates/who/country/who_country_one_cases_cumulative.html +++ b/covid19/templates/who/country/who_country_one_cases_cumulative.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_jumbotron %}{% endblock %} diff --git a/covid19/templates/who/country/who_country_one_cases_new.html b/covid19/templates/who/country/who_country_one_cases_new.html index ac2c5945..762f1696 100644 --- a/covid19/templates/who/country/who_country_one_cases_new.html +++ b/covid19/templates/who/country/who_country_one_cases_new.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_jumbotron %}{% endblock %} diff --git a/covid19/templates/who/country/who_country_one_deaths_cumulative.html b/covid19/templates/who/country/who_country_one_deaths_cumulative.html index d5792124..ee46e9a0 100644 --- a/covid19/templates/who/country/who_country_one_deaths_cumulative.html +++ b/covid19/templates/who/country/who_country_one_deaths_cumulative.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_jumbotron %}{% endblock %} diff --git a/covid19/templates/who/country/who_country_one_deaths_new.html b/covid19/templates/who/country/who_country_one_deaths_new.html index 24851dc5..93d92ebe 100644 --- a/covid19/templates/who/country/who_country_one_deaths_new.html +++ b/covid19/templates/who/country/who_country_one_deaths_new.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_jumbotron %}{% endblock %} diff --git a/covid19/templates/who/date_reported/who_date_reported_all.html b/covid19/templates/who/date_reported/who_date_reported_all.html index 45c254d7..a3aac1bf 100644 --- a/covid19/templates/who/date_reported/who_date_reported_all.html +++ b/covid19/templates/who/date_reported/who_date_reported_all.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_jumbotron %}{% endblock %} diff --git a/covid19/templates/who/date_reported/who_date_reported_one.html b/covid19/templates/who/date_reported/who_date_reported_one.html index fab493d5..392ededd 100644 --- a/covid19/templates/who/date_reported/who_date_reported_one.html +++ b/covid19/templates/who/date_reported/who_date_reported_one.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% include 'common/fragment_pagination.html' %} diff --git a/covid19/templates/who/date_reported/who_date_reported_one_cases_cumulative.html b/covid19/templates/who/date_reported/who_date_reported_one_cases_cumulative.html index 4c50fb9e..0df5ea69 100644 --- a/covid19/templates/who/date_reported/who_date_reported_one_cases_cumulative.html +++ b/covid19/templates/who/date_reported/who_date_reported_one_cases_cumulative.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% include 'common/fragment_pagination.html' %} diff --git a/covid19/templates/who/date_reported/who_date_reported_one_cases_new.html b/covid19/templates/who/date_reported/who_date_reported_one_cases_new.html index 4694d5a5..466d412a 100644 --- a/covid19/templates/who/date_reported/who_date_reported_one_cases_new.html +++ b/covid19/templates/who/date_reported/who_date_reported_one_cases_new.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% include 'common/fragment_pagination.html' %} diff --git a/covid19/templates/who/date_reported/who_date_reported_one_deaths_cumulative.html b/covid19/templates/who/date_reported/who_date_reported_one_deaths_cumulative.html index 4c50fb9e..0df5ea69 100644 --- a/covid19/templates/who/date_reported/who_date_reported_one_deaths_cumulative.html +++ b/covid19/templates/who/date_reported/who_date_reported_one_deaths_cumulative.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% include 'common/fragment_pagination.html' %} diff --git a/covid19/templates/who/date_reported/who_date_reported_one_deaths_new.html b/covid19/templates/who/date_reported/who_date_reported_one_deaths_new.html index 02fa0366..34a059a0 100644 --- a/covid19/templates/who/date_reported/who_date_reported_one_deaths_new.html +++ b/covid19/templates/who/date_reported/who_date_reported_one_deaths_new.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% include 'common/fragment_pagination.html' %} diff --git a/covid19/templates/who/region/who_region_all.html b/covid19/templates/who/region/who_region_all.html index 63e78076..874b1184 100644 --- a/covid19/templates/who/region/who_region_all.html +++ b/covid19/templates/who/region/who_region_all.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_jumbotron %}{% endblock %} diff --git a/covid19/templates/who/region/who_region_one.html b/covid19/templates/who/region/who_region_one.html index 558039cc..60884870 100644 --- a/covid19/templates/who/region/who_region_one.html +++ b/covid19/templates/who/region/who_region_one.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_jumbotron %}{% endblock %} diff --git a/covid19/templates/who/who_imported.html b/covid19/templates/who/who_imported.html index b53aea9a..41a7b0ee 100644 --- a/covid19/templates/who/who_imported.html +++ b/covid19/templates/who/who_imported.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% include 'common/fragment_pagination.html' %} diff --git a/covid19/templates/who/who_info.html b/covid19/templates/who/who_info.html index e8266e67..85470ad8 100644 --- a/covid19/templates/who/who_info.html +++ b/covid19/templates/who/who_info.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} diff --git a/covid19/templates/who/who_tasks.html b/covid19/templates/who/who_tasks.html index 10b46f47..7754283b 100644 --- a/covid19/templates/who/who_tasks.html +++ b/covid19/templates/who/who_tasks.html @@ -1,4 +1,4 @@ -{% extends 'page_layout.html' %} +{% extends 'common/page_layout.html' %} {% block navigation_breadcrumb %} -- GitLab