From 524abc33fb7ea7769fe050accb409832e011ce9d Mon Sep 17 00:00:00 2001 From: Alex Morega Date: Tue, 12 Dec 2023 13:20:25 +0200 Subject: [PATCH 1/3] Install wagtail-ab-testing --- ietf/settings/base.py | 1 + ietf/templates_src/base.html | 3 ++- ietf/urls.py | 2 ++ requirements/base.in | 1 + requirements/base.txt | 13 +++++++++++++ 5 files changed, 19 insertions(+), 1 deletion(-) diff --git a/ietf/settings/base.py b/ietf/settings/base.py index 36dc0474..44558b7c 100644 --- a/ietf/settings/base.py +++ b/ietf/settings/base.py @@ -67,6 +67,7 @@ "analytical", "wagtailmarkdown", "wagtailorderable", + "wagtail_ab_testing", ) MIDDLEWARE = [ diff --git a/ietf/templates_src/base.html b/ietf/templates_src/base.html index 7e126275..7cf46cca 100644 --- a/ietf/templates_src/base.html +++ b/ietf/templates_src/base.html @@ -1,4 +1,4 @@ -{% load static wagtailuserbar wagtailcore_tags wagtailimages_tags ietf_tags analytical %} +{% load static wagtailuserbar wagtailcore_tags wagtailimages_tags ietf_tags analytical wagtail_ab_testing_tags %} {% wagtail_site as current_site %} @@ -72,6 +72,7 @@ {% block extra_js %}{% endblock %} + {% wagtail_ab_testing_script %} {% analytical_body_bottom %} diff --git a/ietf/urls.py b/ietf/urls.py index 19bdc6ce..e9f2f610 100644 --- a/ietf/urls.py +++ b/ietf/urls.py @@ -6,6 +6,7 @@ from wagtail.admin import urls as wagtailadmin_urls from wagtail.contrib.sitemaps.views import sitemap from wagtail.documents import urls as wagtaildocs_urls +from wagtail_ab_testing import urls as ab_testing_urls from ietf.bibliography import urls as bibliography_urls from ietf.blog.feeds import BlogFeed @@ -24,6 +25,7 @@ re_path(r"^admin/", include(wagtailadmin_urls)), re_path(r"^documents/", include(wagtaildocs_urls)), re_path(r"^search/$", search, name="search"), + path("abtesting/", include(ab_testing_urls)), ] diff --git a/requirements/base.in b/requirements/base.in index c837d5a4..26e6e4e8 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -5,6 +5,7 @@ psycopg2 pymemcache tqdm typed-environment-configuration>=0.1.3,<0.2 +wagtail-ab-testing wagtail-markdown wagtail-modeladmin wagtail-orderable diff --git a/requirements/base.txt b/requirements/base.txt index e8487015..26d070da 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -63,6 +63,10 @@ markdown==3.5.1 # via wagtail-markdown mbstrdecoder==1.1.3 # via typepy +numpy==1.26.2 + # via + # scipy + # wagtail-ab-testing openpyxl==3.1.2 # via wagtail packaging==23.2 @@ -84,6 +88,8 @@ pytz==2023.3.post1 # l18n requests==2.31.0 # via wagtail +scipy==1.11.4 + # via wagtail-ab-testing six==1.16.0 # via # bleach @@ -103,14 +109,21 @@ typepy==1.3.0 # via typed-environment-configuration typing-extensions==4.8.0 # via dj-database-url +ua-parser==0.18.0 + # via user-agents urllib3==2.1.0 # via requests +user-agents==2.2.0 + # via wagtail-ab-testing wagtail==5.2.1 # via # -r base.in + # wagtail-ab-testing # wagtail-markdown # wagtail-modeladmin # wagtail-orderable +wagtail-ab-testing==0.9 + # via -r base.in wagtail-markdown==0.11.1 # via -r base.in wagtail-modeladmin==1.0.0 From e4c2af3d3a34805fae01781008c143869c019d77 Mon Sep 17 00:00:00 2001 From: Alex Morega Date: Mon, 18 Dec 2023 16:23:13 +0200 Subject: [PATCH 2/3] Custom goals --- ietf/static_src/js/pages.js | 1 + ietf/utils/js/ab_testing.js | 11 +++++++++++ ietf/utils/wagtail_hooks.py | 23 +++++++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 ietf/utils/js/ab_testing.js diff --git a/ietf/static_src/js/pages.js b/ietf/static_src/js/pages.js index e73b9e90..e8b34b69 100644 --- a/ietf/static_src/js/pages.js +++ b/ietf/static_src/js/pages.js @@ -1 +1,2 @@ import '../../blog/js/index'; +import '../../utils/js/ab_testing'; diff --git a/ietf/utils/js/ab_testing.js b/ietf/utils/js/ab_testing.js new file mode 100644 index 00000000..6578639a --- /dev/null +++ b/ietf/utils/js/ab_testing.js @@ -0,0 +1,11 @@ +document.querySelector("html").addEventListener("click", (e) => { + if (e.target.tagName == "A") { + const href = e.target.getAttribute("href") || "" + if (href.startsWith("https://www.ietf.org/mailman/listinfo/")) { + wagtailAbTesting.triggerEvent("navigate-mailman") + } + if (href.startsWith("https://registration.ietf.org")) { + wagtailAbTesting.triggerEvent("navigate-registration") + } + } +}) diff --git a/ietf/utils/wagtail_hooks.py b/ietf/utils/wagtail_hooks.py index 70c3ad99..d7892837 100644 --- a/ietf/utils/wagtail_hooks.py +++ b/ietf/utils/wagtail_hooks.py @@ -1,6 +1,8 @@ from django.conf import settings from django.utils.html import format_html from wagtail import hooks +from wagtail.models import Page +from wagtail_ab_testing.events import BaseEvent from wagtail_modeladmin.options import ModelAdmin, modeladmin_register from wagtailorderable.modeladmin.mixins import OrderableMixin @@ -28,3 +30,24 @@ class MenuItemAdmin(OrderableMixin, ModelAdmin): modeladmin_register(MenuItemAdmin) + + +class NavigateToRegistrationWebsite(BaseEvent): + name = "Navigate to registration website" + + +class NavigateToMailmanWebsite(BaseEvent): + name = "Navigate to Mailman website" + + +class SubmitDonationFormEvent(BaseEvent): + name = "Submit donation form" + + +@hooks.register("register_ab_testing_event_types") +def register_ab_testing_event_types(): + return { + "navigate-registration": NavigateToRegistrationWebsite(), + "navigate-mailman": NavigateToMailmanWebsite(), + "submit-donation-form": SubmitDonationFormEvent(), + } From 3a6e40ab0c172e51708154425e040c3e9cfd55e9 Mon Sep 17 00:00:00 2001 From: Alex Morega Date: Mon, 18 Dec 2023 16:56:31 +0200 Subject: [PATCH 3/3] Make CodeQL happy --- ietf/utils/js/ab_testing.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ietf/utils/js/ab_testing.js b/ietf/utils/js/ab_testing.js index 6578639a..f0996fc1 100644 --- a/ietf/utils/js/ab_testing.js +++ b/ietf/utils/js/ab_testing.js @@ -4,7 +4,7 @@ document.querySelector("html").addEventListener("click", (e) => { if (href.startsWith("https://www.ietf.org/mailman/listinfo/")) { wagtailAbTesting.triggerEvent("navigate-mailman") } - if (href.startsWith("https://registration.ietf.org")) { + if (href.startsWith("https://registration.ietf.org/")) { wagtailAbTesting.triggerEvent("navigate-registration") } }