diff --git a/docs/DEVPI_RELEASE_FLOW.md b/docs/DEVPI_RELEASE_FLOW.md new file mode 100644 index 0000000..05290f4 --- /dev/null +++ b/docs/DEVPI_RELEASE_FLOW.md @@ -0,0 +1,68 @@ +## Devpi Release Flow + +### Current state + +- `mandel/testing` is the active package source for MandelBlog project builds. +- `ocyan.plugin.template_engine==0.2.12` is published there and is the current production-safe version. +- `mandel/stable` is not available yet. + +This means production is intentionally running from the testing index for now, to avoid breaking installs while the stable index is not provisioned. + +### Index roles + +- `mandel/testing` + - pre-production and current fallback source + - currently also the active production source until stable exists +- `mandel/stable` + - intended production index + - not yet provisioned + +### Promotion flow + +When `mandel/stable` exists, promote existing artifacts without rebuilding: + +```bash +devpi use https://pypi.mandelblog.com/mandel/testing +devpi login mandel +devpi push ocyan-plugin-template-engine==0.2.12 mandel/stable +``` + +### Admin prerequisite + +Promotion requires a devpi admin to create the production index and grant upload or push permissions. + +Recommended admin setup: + +```bash +devpi index -c mandel/stable bases=root/pypi volatile=False acl_upload=mandel,Mandel-publish +``` + +### Planned stable-first install order + +Do not enable this until `mandel/stable` exists: + +```bash +PIP_INDEX_URL=https://pypi.mandelblog.com/mandel/stable/+simple/ +PIP_EXTRA_INDEX_URL=https://pypi.mandelblog.com/mandel/testing/+simple/ +``` + +### CI behavior + +- If the stable index is missing, Jenkins logs: + - `devpi stable index not available, using testing as production source` +- The build does not fail because of the missing stable index. +- Installs continue from `mandel/testing`. + +### Validation checklist + +After stable becomes available and promotion is done: + +1. confirm both wheel and sdist are visible in the stable simple index +2. switch MandelStudio to stable-first +3. run Jenkins build and deploy +4. verify installed version is still `0.2.12` +5. recheck editor validation for: + - `/contact/` + - `/diensten/` + - `#demo` + - absolute URLs diff --git a/mandelstudio/ocyan.json b/mandelstudio/ocyan.json index 758efde..a12614b 100644 --- a/mandelstudio/ocyan.json +++ b/mandelstudio/ocyan.json @@ -31,7 +31,8 @@ "ocyan.plugin.wagtail_content_page", "ocyan.plugin.wagtail_forms", "ocyan.plugin.wagtail_oscar_integration", - "ocyan.plugin.roadrunner_highlight_slider" + "ocyan.plugin.roadrunner_highlight_slider", + "ocyan.plugin.wordspinner" ], "settings": { "cookie_jar": { diff --git a/mandelstudio/templates/carbasa/headers/header.html b/mandelstudio/templates/carbasa/headers/header.html new file mode 100644 index 0000000..c2289d2 --- /dev/null +++ b/mandelstudio/templates/carbasa/headers/header.html @@ -0,0 +1,40 @@ +{% load i18n %} +{% load agency_navigation %} + +
+ +
diff --git a/mandelstudio/templates/engine/blocks/core/richtext.html b/mandelstudio/templates/engine/blocks/core/richtext.html new file mode 100644 index 0000000..364fd7f --- /dev/null +++ b/mandelstudio/templates/engine/blocks/core/richtext.html @@ -0,0 +1,45 @@ +
+
+
+
+
+ {{ value.content }} +
+
+
+
+
+ + diff --git a/mandelstudio/templates/engine/pages/base_home_page.html b/mandelstudio/templates/engine/pages/base_home_page.html index 67d9ab1..aa266cf 100644 --- a/mandelstudio/templates/engine/pages/base_home_page.html +++ b/mandelstudio/templates/engine/pages/base_home_page.html @@ -15,13 +15,26 @@ {% include "engine/partials/tech_theme_overrides.html" %} {% include "engine/partials/travel_theme_overrides.html" %} {% include "engine/partials/saas_theme_overrides.html" %} + {% endblock %} {% block layout %} {% skip_to_content_text %} - {% include_header header_template|default:"engine/partials/header.html" %} + {% include "carbasa/headers/header.html" %}
diff --git a/mandelstudio/templates/engine/pages/base_standard_page.html b/mandelstudio/templates/engine/pages/base_standard_page.html index 39d64d8..927d33b 100644 --- a/mandelstudio/templates/engine/pages/base_standard_page.html +++ b/mandelstudio/templates/engine/pages/base_standard_page.html @@ -15,13 +15,26 @@ {% include "engine/partials/tech_theme_overrides.html" %} {% include "engine/partials/travel_theme_overrides.html" %} {% include "engine/partials/saas_theme_overrides.html" %} + {% endblock %} {% block layout %} {% skip_to_content_text %} - {% include_header header_template|default:"engine/partials/header.html" %} + {% include "carbasa/headers/header.html" %}
diff --git a/mandelstudio/templates/engine/pages/engine_page.html b/mandelstudio/templates/engine/pages/engine_page.html index 67d9ab1..aa266cf 100644 --- a/mandelstudio/templates/engine/pages/engine_page.html +++ b/mandelstudio/templates/engine/pages/engine_page.html @@ -15,13 +15,26 @@ {% include "engine/partials/tech_theme_overrides.html" %} {% include "engine/partials/travel_theme_overrides.html" %} {% include "engine/partials/saas_theme_overrides.html" %} + {% endblock %} {% block layout %} {% skip_to_content_text %} - {% include_header header_template|default:"engine/partials/header.html" %} + {% include "carbasa/headers/header.html" %}
diff --git a/mandelstudio/templates/highbiza_saas/blocks/demo_request/variants/inline.html b/mandelstudio/templates/highbiza_saas/blocks/demo_request/variants/inline.html new file mode 100644 index 0000000..eca3378 --- /dev/null +++ b/mandelstudio/templates/highbiza_saas/blocks/demo_request/variants/inline.html @@ -0,0 +1,58 @@ +{% load wagtailimages_tags %} +
+
+
+

{{ self.section_title }}

+ {% if self.section_subtitle %} +
{{ self.section_subtitle }}
+ {% endif %} +
+ +
+ {% csrf_token %} +
+ {% for field in self.form_fields %} +
+ + {% if field.field_type == 'message' %} + + {% elif field.field_type == 'company_size' %} + + {% else %} + + {% endif %} +
+ {% endfor %} +
+ + + + {% if self.privacy_text %} +
{{ self.privacy_text }}
+ {% endif %} +
+
+
diff --git a/mandelstudio/templates/highbiza_saas/blocks/demo_request/variants/modal-trigger.html b/mandelstudio/templates/highbiza_saas/blocks/demo_request/variants/modal-trigger.html new file mode 100644 index 0000000..c4560a0 --- /dev/null +++ b/mandelstudio/templates/highbiza_saas/blocks/demo_request/variants/modal-trigger.html @@ -0,0 +1,94 @@ +{% load wagtailimages_tags %} +
+
+
+

{{ self.section_title }}

+ {% if self.section_subtitle %} +
{{ self.section_subtitle }}
+ {% endif %} + + +
+
+ + + +
+ diff --git a/mandelstudio/templates/highbiza_saas/blocks/demo_request/variants/split.html b/mandelstudio/templates/highbiza_saas/blocks/demo_request/variants/split.html new file mode 100644 index 0000000..2323a3f --- /dev/null +++ b/mandelstudio/templates/highbiza_saas/blocks/demo_request/variants/split.html @@ -0,0 +1,156 @@ +{% load wagtailimages_tags %} +
+ +
+
+

{{ self.section_title }}

+ {% if self.section_subtitle %} +
{{ self.section_subtitle }}
+ {% endif %} + + {% if self.benefits_title or self.benefits %} +
+ {% if self.benefits_title %} +

{{ self.benefits_title }}

+ {% endif %} + {% if self.benefits %} +
    + {% for benefit in self.benefits %} +
  • + + + + {{ benefit }} +
  • + {% endfor %} +
+ {% endif %} +
+ {% endif %} + + {% if self.side_image %} +
+ {% image self.side_image width-640 class="saas-demo__image" %} +
+ {% endif %} +
+ +
+
+ {% csrf_token %} +
+ {% for field in self.form_fields %} +
+ + {% if field.field_type == 'message' %} + + {% elif field.field_type == 'company_size' %} + + {% else %} + + {% endif %} +
+ {% endfor %} +
+ + + + {% if self.privacy_text %} +
{{ self.privacy_text }}
+ {% endif %} +
+
+
+
diff --git a/mandelstudio/templates/highbiza_saas/blocks/features/variants/grid.html b/mandelstudio/templates/highbiza_saas/blocks/features/variants/grid.html new file mode 100644 index 0000000..e3f5c2c --- /dev/null +++ b/mandelstudio/templates/highbiza_saas/blocks/features/variants/grid.html @@ -0,0 +1,38 @@ +{% load wagtailimages_tags %} +
+
+
+

{{ self.section_title }}

+ {% if self.section_subtitle %} +
{{ self.section_subtitle }}
+ {% endif %} +
+
+ {% for feature in self.features %} +
+ {% if feature.highlight == 'new' %} + {% if request.LANGUAGE_CODE == 'ru' %}Ново{% elif request.LANGUAGE_CODE == 'de' %}Neu{% elif request.LANGUAGE_CODE == 'fr' %}Nouveau{% elif request.LANGUAGE_CODE == 'es' %}Nuevo{% elif request.LANGUAGE_CODE == 'it' %}Nuovo{% elif request.LANGUAGE_CODE == 'pt' %}Novo{% else %}New{% endif %} + {% endif %} +
+ {% if feature.icon_image %} + {% image feature.icon_image width-64 class="saas-features__icon-img" %} + {% elif feature.icon %} + + {% else %} +
+ {% endif %} +
+

{{ feature.title }}

+ {% if feature.description %}
{{ feature.description }}
{% endif %} + {% if feature.link_text and feature.link_url %} + + {{ feature.link_text }} + + + {% endif %} +
+ {% endfor %} +
+
+
diff --git a/mandelstudio/templates/highbiza_saas/blocks/integrations/variants/logo-grid.html b/mandelstudio/templates/highbiza_saas/blocks/integrations/variants/logo-grid.html new file mode 100644 index 0000000..f5a08cf --- /dev/null +++ b/mandelstudio/templates/highbiza_saas/blocks/integrations/variants/logo-grid.html @@ -0,0 +1,30 @@ +{% load wagtailimages_tags %} +
+
+
+

{{ self.section_title }}

+ {% if self.section_subtitle %}
{{ self.section_subtitle }}
{% endif %} + {% if self.integration_count %} + {{ self.integration_count }} {% if request.LANGUAGE_CODE == 'ru' %}интеграции{% elif request.LANGUAGE_CODE == 'de' %}Integrationen{% elif request.LANGUAGE_CODE == 'fr' %}intégrations{% elif request.LANGUAGE_CODE == 'es' %}integraciones{% elif request.LANGUAGE_CODE == 'it' %}integrazioni{% elif request.LANGUAGE_CODE == 'pt' %}integrações{% elif request.LANGUAGE_CODE == 'nl' %}integraties{% else %}integrations{% endif %} + {% endif %} +
+
+ {% for integration in self.integrations %} + + {% endfor %} +
+ {% if self.cta_text and self.cta_url %} + + {% endif %} +
+
diff --git a/mandelstudio/templates/layout.html b/mandelstudio/templates/layout.html new file mode 100644 index 0000000..ef06c17 --- /dev/null +++ b/mandelstudio/templates/layout.html @@ -0,0 +1,92 @@ +{% extends "base.html" %} + +{% load compress %} +{% load i18n %} +{% load oxyan %} +{% load ocyan_main %} +{% load ocyanjson %} +{% load static %} +{% load wagtailcore_tags wagtailimages_tags wagtailuserbar %} + +{% block title %}{% firstof page.seo_title self.seo_title page.title self.title shop_name %}{% endblock %} +{% block description %}{% firstof page.search_description self.search_description "" %}{% endblock %} + +{% block extrahead %} +{% if cookie_jar.settings.google_tag_manager and cookie_jar.functional.is_allowed %} + +{% endif %} +{% if cookie_jar.settings.google_analytics and cookie_jar.functional.is_allowed %} + +{% endif %} +{{ block.super }} +{% if cookie_jar.needs_approval %} + +{% endif %} +{% for header_snippet in cookie_jar.activated_snippet_header_templates %} +{% include header_snippet %} +{% endfor %} +{% endblock %} + +{% block layout %} +{% if show_basket_popup_setting %} + {% esi_fragment "partials/added_success.html" with sessionid=True oscar_open_basket=True request=request csrf_token=csrf_token only %} +{% endif %} + +{% block navbar %} + {% include "carbasa/headers/header.html" %} +{% endblock %} + +{% block content_wrapper %} +
+ {% block content %}{% endblock %} +
+{% endblock %} + +{% block footer %} + {% include "oxyan/partials/footer.html" %} +{% endblock %} + +{% ocyanjson "themes" "theme-switcher" as theme_switcher %} +{% if theme_switcher %} + {% include "oxyan/partials/theme_switcher.html" %} +{% endif %} +{% endblock %} + +{% block extrascripts %} +{% include "oscar/partials/extrascripts.html" %} +{{ block.super }} +{% if cookie_jar.needs_approval %} + +{% endif %} +{% endblock %} + +{% block onbodyload %} +{{ block.super }} +oxyan.layout() +oxyan.initModalPopup() +oxyan.initializePriceUpdate() +oxyan.IconHoverFix() +oxyan.lazyIconDropdown() +oxyan.toasts() +oxyan.commerseHeader() +oxyan.initWCAG() +{% ocyanjson "themes" "image_zoom" as image_zoom %} +{% if image_zoom %} +oxyan.initImageZoom() +{% endif %} +{% endblock %} + +{% block cdn_scripts %} +{{ block.super }} +{% ocyanjson "wagtail" "wagtailuserbar_position" as position %} +{% if position %} + {% wagtailuserbar position %} +{% endif %} +{% for footer_snippet in cookie_jar.activated_snippet_footer_templates %} + {% include footer_snippet %} +{% endfor %} +{% include "cookie_jar/cookie_banner.html" %} +{% if cookie_jar.needs_approval %} + {% include "cookie_jar/partials/preferences_saved_toast.html" %} +{% endif %} +{% endblock %} diff --git a/mandelstudio/templates/ocyan_plugin_wagtail/blocks/pagelist_block.html b/mandelstudio/templates/ocyan_plugin_wagtail/blocks/pagelist_block.html new file mode 100644 index 0000000..386e151 --- /dev/null +++ b/mandelstudio/templates/ocyan_plugin_wagtail/blocks/pagelist_block.html @@ -0,0 +1,11 @@ +{% load wagtailcore_tags %} +{% if self.heading %}{% endif %} +{% if children %} + +{% endif %} diff --git a/mandelstudio/templates/oxyan/headers/partials/carbasa-user-bar.html b/mandelstudio/templates/oxyan/headers/partials/carbasa-user-bar.html index ff8b1a9..d4dbe0f 100644 --- a/mandelstudio/templates/oxyan/headers/partials/carbasa-user-bar.html +++ b/mandelstudio/templates/oxyan/headers/partials/carbasa-user-bar.html @@ -3,7 +3,7 @@
{% csrf_token %} - +