Skip to content

Conversation

@Gagan-Ram
Copy link
Member

@Gagan-Ram Gagan-Ram commented Nov 10, 2025

fixes: #1079

Screencast.from.2025-11-11.01-26-17.webm

@mariobehling Please check the latest UI as discussed earlier. once approved I can work on moving inline css to .css files

Summary by Sourcery

Unify event page header and navigation across presale, agenda, and base templates and update profile menu in popover JS

Enhancements:

  • Consolidate event navigation into unified header-tabs for Tickets, Schedule, Sessions, Speakers, Call for Speakers, and Videos
  • Refactor base template header to display the event logo with new styling and adjust container margins for schedule and talk pages
  • Extend profile dropdown and popover menus with My Account, My Talk Profile, My Orders, My Proposals, My Emails, Organizer area, and Logout entries
  • Add conditional Call for Speakers tab that is disabled when the CFP is closed or access code is invalid
  • Apply inline CSS for navigation underline and hover effects to highlight active tabs
  • Mirror the unified navigation layout in the agenda template’s header-tabs block
  • Update popover JS to reflect the new profile menu structure and correct the organizer area URL

@sourcery-ai
Copy link
Contributor

sourcery-ai bot commented Nov 10, 2025

Reviewer's Guide

This PR refactors and unifies the event page navigation and header across presale, agenda, and base templates by replacing deprecated button styles with a cohesive ‘header-tab’ system, restructuring the header layout, adding consistent inline styling, and synchronizing the user menu in popover.js.

Class diagram for updated navigation and profile menu structure

classDiagram
    class Navigation {
        +header-tab: style
        +Tickets: link
        +Schedule: link
        +Sessions: link
        +Speakers: link
        +Call for Speakers: link (conditional)
        +Videos: link
    }
    class ProfileMenu {
        +My Account: link
        +My Talk Profile: link
        +My Orders: link
        +My Proposals: link
        +My Emails: link
        +Organizer Area: link (conditional)
        +Logout: action
    }
    Navigation "1" -- "1" ProfileMenu: integrates
    ProfileMenu <|-- OrganizerArea: conditional access
    ProfileMenu <|-- Logout: action
Loading

File-Level Changes

Change Details Files
Unified navigation tabs across templates
  • Replaced btn-outline-success links with header-tab classes and updated icon usage
  • Added ‘Call for Speakers’ and ‘Videos’ tabs with conditional states
  • Streamlined schedule, sessions, speakers, and ticket links under a flex container
app/eventyay/presale/templates/pretixpresale/event/fragment_nav.html
app/eventyay/agenda/templates/agenda/base.html
Restructured header in base.html
  • Wrapped logo and tabs in a flex container with inline margin and size styles
  • Moved header-tabs block below the

    and enforced block display

  • Rounded event logo and adjusted spacing for creative alignment
app/eventyay/common/templates/common/base.html
Synchronized user menu in popover.js
  • Reordered profile menu items and added ‘My Talk Profile’, ‘My Proposals’, and ‘My Emails’
  • Fixed Organizer Area URL path for common event routes
  • Grouped menu entries under consistent .profile-menu wrappers
app/eventyay/static/pretixpresale/js/ui/popover.js
Adjusted login status navigation styling
  • Applied conditional margin-right based on event logo presence
  • Ensured aria-label uses consistent quoting style
app/eventyay/presale/templates/pretixpresale/fragment_login_status.html

Assessment against linked issues

Issue Objective Addressed Explanation
#1079 Provide attendees with one unified entry point for each event, consolidating event details, schedule/talks, video sessions, and ticketing into a single, cohesive layout.
#1079 Ensure consistent navigation, design, and branding across all integrated components, inspired by the legacy Eventyay version but updated for the new architecture.
#1079 Support both public view (for attendees) and organizer view (for editing and management), with improved usability and responsiveness.

Possibly linked issues


Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link
Contributor

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey there - I've reviewed your changes and they look great!

Prompt for AI Agents
Please address the comments from this code review:

## Individual Comments

### Comment 1
<location> `app/eventyay/presale/templates/pretixpresale/event/fragment_nav.html:12` </location>
<code_context>
+            <i class="fa fa-info-circle"></i> {% translate "Info" %}
+        </a> {% endcomment %}
+
+        <a target="_blank" class="header-tab underline">
+            <i class="fa fa-ticket"></i> {% translate "Tickets" %}
+        </a>
</code_context>

<issue_to_address>
**issue (bug_risk):** The Tickets link lacks an href attribute, which may confuse users and break navigation.

Please add an href to the Tickets link, or clarify if its absence is intentional.
</issue_to_address>

### Comment 2
<location> `app/eventyay/presale/templates/pretixpresale/event/fragment_nav.html:30-37` </location>
<code_context>
-            <i class="fa fa-ticket"></i> {% translate "Tickets" %}
+
+    {% with cfp=request.event.cfp %}
+        <a class="header-tab {% if not cfp.is_open and not access_code.is_valid %}disabled{% endif %}"
+            href="{{ request.event.urls.submit }}{{ submit_qs }}">
+            {% if cfp.is_open or access_code.is_valid %}
+                <i class="fa fa-bullhorn"></i> {% translate "Call for Speakers" %}
</code_context>

<issue_to_address>
**suggestion (bug_risk):** The 'disabled' class on anchor tags does not prevent interaction or navigation.

To ensure the link is truly inactive, use JavaScript to block navigation or render it without an href, or as a <span> element.

```suggestion
        {% with cfp=request.event.cfp %}
            {% if cfp.is_open or access_code.is_valid %}
                <a class="header-tab"
                   href="{{ request.event.urls.submit }}{{ submit_qs }}">
                    <i class="fa fa-bullhorn"></i> {% translate "Call for Speakers" %}
                </a>
            {% else %}
                <span class="header-tab disabled" tabindex="-1" aria-disabled="true" style="pointer-events: none; color: #aaa;">
                    <i class="fa fa-bullhorn"></i> {% translate "Call for Speakers" %}
                </span>
            {% endif %}
        {% endwith %}
```
</issue_to_address>

### Comment 3
<location> `app/eventyay/presale/templates/pretixpresale/fragment_login_status.html:10` </location>
<code_context>
 {{ 'popover-profile'|json_script:"popover_toggle" }}
 {{ base_path|json_script:"base_path" }}
-<nav class="login-hdr" aria-label='{% translate "account" %}'>
+<nav class="login-hdr" aria-label="{% translate 'account' %}" style="{% if request.event and request.event.settings.event_logo_image %}margin-right: 18rem{% else %}margin-right: 0{% endif %}">
+
     {% if request.user.is_authenticated %}
</code_context>

<issue_to_address>
**suggestion:** Inline style for margin-right may cause layout issues on smaller screens.

Use responsive CSS classes or media queries to ensure margin-right adapts to various screen sizes for consistent header layout.

Suggested implementation:

```
<nav class="login-hdr{% if request.event and request.event.settings.event_logo_image %} login-hdr--with-logo{% endif %}" aria-label="{% translate 'account' %}">

```

You must add the following CSS to your main stylesheet (e.g., `app/eventyay/presale/static/pretixpresale/css/style.css`):

```css
.login-hdr--with-logo {
    margin-right: 18rem;
}
@media (max-width: 768px) {
    .login-hdr--with-logo {
        margin-right: 0;
    }
}
```

This ensures the margin is only applied on larger screens and adapts responsively for smaller screens.
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

<i class="fa fa-info-circle"></i> {% translate "Info" %}
</a> {% endcomment %}

<a target="_blank" class="header-tab underline">
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (bug_risk): The Tickets link lacks an href attribute, which may confuse users and break navigation.

Please add an href to the Tickets link, or clarify if its absence is intentional.

{{ 'popover-profile'|json_script:"popover_toggle" }}
{{ base_path|json_script:"base_path" }}
<nav class="login-hdr" aria-label='{% translate "account" %}'>
<nav class="login-hdr" aria-label="{% translate 'account' %}" style="{% if request.event and request.event.settings.event_logo_image %}margin-right: 18rem{% else %}margin-right: 0{% endif %}">
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: Inline style for margin-right may cause layout issues on smaller screens.

Use responsive CSS classes or media queries to ensure margin-right adapts to various screen sizes for consistent header layout.

Suggested implementation:

<nav class="login-hdr{% if request.event and request.event.settings.event_logo_image %} login-hdr--with-logo{% endif %}" aria-label="{% translate 'account' %}">

You must add the following CSS to your main stylesheet (e.g., app/eventyay/presale/static/pretixpresale/css/style.css):

.login-hdr--with-logo {
    margin-right: 18rem;
}
@media (max-width: 768px) {
    .login-hdr--with-logo {
        margin-right: 0;
    }
}

This ensures the margin is only applied on larger screens and adapts responsively for smaller screens.

@Gagan-Ram Gagan-Ram force-pushed the 1079_unify_event_page branch from 974efb9 to d423e24 Compare November 10, 2025 20:09
@mariobehling
Copy link
Member

Looks good. Please ensure all pages have the same width and logo position.

@mariobehling mariobehling requested a review from Copilot November 10, 2025 21:30
Copilot finished reviewing on behalf of mariobehling November 10, 2025 21:33
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR unifies the event page navigation by consolidating header tabs across presale, agenda, and base templates. The changes introduce a consistent navigation structure featuring Tickets, Schedule, Sessions, Speakers, Call for Speakers, and Videos tabs, while also expanding the profile menu to include My Account, My Talk Profile, My Orders, My Proposals, My Emails, Organizer area, and Logout options.

Key Changes:

  • Unified navigation header with tabs replacing previous button-based navigation
  • Expanded profile dropdown and popover menus with additional user account options
  • Updated base template header layout to display event logo with adjusted styling

Reviewed Changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
app/eventyay/static/pretixpresale/js/ui/popover.js Added new profile menu items (My Account, My Talk Profile, My Proposals, My Emails) and updated organizer area URL path
app/eventyay/presale/templates/pretixpresale/fragment_login_status.html Added conditional inline margin styling based on event logo presence
app/eventyay/presale/templates/pretixpresale/event/fragment_nav.html Replaced button-based navigation with tab-based navigation, added inline CSS for underline effects, and included Call for Speakers conditional tab
app/eventyay/common/templates/common/base.html Restructured header layout with event logo positioning, reordered profile dropdown menu items, and updated organizer area URL
app/eventyay/agenda/templates/agenda/base.html Added unified navigation tabs consistent with presale template including Call for Speakers tab

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

</a>
</div>
<div class="profile-menu">
<a href="${basePath}/${eventSlug}/me" target="_self" class="btn btn-outline-success">
Copy link

Copilot AI Nov 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The URL pattern is incomplete - it's missing the organizer slug. According to the URL routing patterns, event URLs should follow the format /{organizer}/{event}/.... The correct URL should be ${basePath}/${organizerName}/${eventSlug}/me/ (note the addition of organizerName and trailing slash). The organizerName variable is already available in scope (lines 77-82).

Copilot uses AI. Check for mistakes.
<div class="profile-menu">
<a href="${basePath}${profilePath}" target="_self" class="btn btn-outline-success">
<i class="fa fa-user"></i> ${window.gettext('My Account')}
<a href="${basePath}/${eventSlug}/me/submissions/" target="_self" class="btn btn-outline-success">
Copy link

Copilot AI Nov 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The URL pattern is incomplete - it's missing the organizer slug. The correct URL should be ${basePath}/${organizerName}/${eventSlug}/me/submissions/ to match the expected URL routing pattern /{organizer}/{event}/me/submissions/.

Suggested change
<a href="${basePath}/${eventSlug}/me/submissions/" target="_self" class="btn btn-outline-success">
<a href="${basePath}/${organizerName}/${eventSlug}/me/submissions/" target="_self" class="btn btn-outline-success">

Copilot uses AI. Check for mistakes.
</a>
</div>
<div class="profile-menu">
<a href="${basePath}/${eventSlug}/me/mails/" target="_self" class="btn btn-outline-success">
Copy link

Copilot AI Nov 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The URL pattern is incomplete - it's missing the organizer slug. The correct URL should be ${basePath}/${organizerName}/${eventSlug}/me/mails/ to match the expected URL routing pattern /{organizer}/{event}/me/mails/.

Suggested change
<a href="${basePath}/${eventSlug}/me/mails/" target="_self" class="btn btn-outline-success">
<a href="${basePath}/${organizerName}/${eventSlug}/me/mails/" target="_self" class="btn btn-outline-success">

Copilot uses AI. Check for mistakes.
<i class="fa fa-info-circle"></i> {% translate "Info" %}
</a> {% endcomment %}

<a target="_blank" class="header-tab underline">
Copy link

Copilot AI Nov 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using target=\"_blank\" for internal navigation is inappropriate and creates a poor user experience. This link appears to be for the Tickets tab within the same application. Remove the target=\"_blank\" attribute to allow normal in-page navigation.

Suggested change
<a target="_blank" class="header-tab underline">
<a class="header-tab underline">

Copilot uses AI. Check for mistakes.
Comment on lines 8 to 11
{% comment %} <a href="" class="header-tab {% if request.path_info == '/' or request.path_info == '/tickets' %}underline{% endif %}">
<i class="fa fa-info-circle"></i> {% translate "Info" %}
</a> {% endcomment %}

Copy link

Copilot AI Nov 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove commented-out code rather than leaving it in the codebase. If this Info tab feature might be needed in the future, document it in an issue or task tracker instead.

Suggested change
{% comment %} <a href="" class="header-tab {% if request.path_info == '/' or request.path_info == '/tickets' %}underline{% endif %}">
<i class="fa fa-info-circle"></i> {% translate "Info" %}
</a> {% endcomment %}

Copilot uses AI. Check for mistakes.
Comment on lines 27 to 29
{% comment %} <a href="{}" class="header-tab">
<i class="fa fa-info-circle"></i> {% translate "Info" %}
</a> {% endcomment %}
Copy link

Copilot AI Nov 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove commented-out code rather than leaving it in the codebase. If this Info tab feature might be needed in the future, document it in an issue or task tracker instead.

Suggested change
{% comment %} <a href="{}" class="header-tab">
<i class="fa fa-info-circle"></i> {% translate "Info" %}
</a> {% endcomment %}

Copilot uses AI. Check for mistakes.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please follow this.

@mariobehling
Copy link
Member

mariobehling commented Nov 11, 2025

@Gagan-Ram Please implement it in a way that in the default start view we still have the menu overlapping the background header as shown in the below image.

Screenshot from 2025-11-11 11-07-29

@Gagan-Ram Gagan-Ram force-pushed the 1079_unify_event_page branch from aabfd28 to 414bcd3 Compare November 11, 2025 18:50
@Gagan-Ram
Copy link
Member Author

@Gagan-Ram Please implement it in a way that in the default start view we still have the menu overlapping the background header as shown in the below image.

new page

event-page

@Gagan-Ram Gagan-Ram force-pushed the 1079_unify_event_page branch from 414bcd3 to 6962a86 Compare November 11, 2025 18:56
@Gagan-Ram Gagan-Ram force-pushed the 1079_unify_event_page branch from 6962a86 to 1dd861b Compare November 11, 2025 19:38
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated 10 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

{{ 'popover-profile'|json_script:"popover_toggle" }}
{{ base_path|json_script:"base_path" }}
<nav class="login-hdr" aria-label='{% translate "account" %}'>
<nav class="login-hdr" aria-label="{% translate 'account' %}" style="{% if request.event and request.event.settings.event_logo_image %}margin-right: 18rem{% else %}margin-right: 0{% endif %}">
Copy link

Copilot AI Nov 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistent quote usage in HTML attributes. The opening quote is a double quote (") while the closing quote is a single quote ('). Both should be double quotes for consistency: aria-label="{% translate 'account' %}".

Copilot uses AI. Check for mistakes.
</div>
{% endif %}
<div class="container{% block container_width %}{% endblock container_width %}" id="main-container">
<div class="container{% block container_width %}{% endblock container_width %}" id="main-container" style="margin-top: 3.8rem">
Copy link

Copilot AI Nov 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Inline styles should be moved to CSS files for better maintainability. The PR description mentions this as future work, but adding more inline styles increases technical debt. Consider defining this style in _layout.css.

Suggested change
<div class="container{% block container_width %}{% endblock container_width %}" id="main-container" style="margin-top: 3.8rem">
<div class="container{% block container_width %}{% endblock container_width %}" id="main-container">

Copilot uses AI. Check for mistakes.
<div class="event-logo">
<a href="{% block nav_link %}{% endblock nav_link %}">
{% if request.event and request.event.logo %}
<img loading="lazy" src="{{ request.event.logo.url }}" id="event-logo" alt="{% translate "The event’s logo" %}" style="border-radius: 10px;">
Copy link

Copilot AI Nov 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Inline styles should be moved to CSS files for better maintainability. The PR description mentions this as future work, but adding more inline styles increases technical debt. Consider defining this style in _layout.css.

Suggested change
<img loading="lazy" src="{{ request.event.logo.url }}" id="event-logo" alt="{% translate "The event’s logo" %}" style="border-radius: 10px;">
<img loading="lazy" src="{{ request.event.logo.url }}" id="event-logo" alt="{% translate "The event’s logo" %}" class="event-logo-img">

Copilot uses AI. Check for mistakes.
}

.header-wrapper {
overflow: scroll;
Copy link

Copilot AI Nov 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The overflow: scroll property will always show scrollbars even when content doesn't overflow. Consider using overflow: auto instead, which only shows scrollbars when necessary.

Suggested change
overflow: scroll;
overflow: auto;

Copilot uses AI. Check for mistakes.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please follow this.

Comment on lines 27 to 32
<a class="header-tab {% if not cfp.is_open and not access_code.is_valid %}disabled{% endif %}"
href="{{ request.event.urls.submit }}{{ submit_qs }}">
{% if cfp.is_open or access_code.is_valid %}
<i class="fa fa-bullhorn"></i> {% translate "Call for Speakers" %}
{% endif %}
</a>
Copy link

Copilot AI Nov 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When the CFP is closed or the access code is invalid, the link shows empty content because the icon and text are inside the conditional block. This creates an empty, disabled link in the navigation. Consider moving the entire <a> tag inside the conditional, or display the text outside the conditional with a disabled state message.

Suggested change
<a class="header-tab {% if not cfp.is_open and not access_code.is_valid %}disabled{% endif %}"
href="{{ request.event.urls.submit }}{{ submit_qs }}">
{% if cfp.is_open or access_code.is_valid %}
<i class="fa fa-bullhorn"></i> {% translate "Call for Speakers" %}
{% endif %}
</a>
{% if cfp.is_open or access_code.is_valid %}
<a class="header-tab"
href="{{ request.event.urls.submit }}{{ submit_qs }}">
<i class="fa fa-bullhorn"></i> {% translate "Call for Speakers" %}
</a>
{% else %}
<span class="header-tab disabled" title="{% translate 'Call for Speakers is closed' %}">
<i class="fa fa-bullhorn"></i> {% translate "Call for Speakers" %}
</span>
{% endif %}

Copilot uses AI. Check for mistakes.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please follow this.

Comment on lines 55 to 60
<a class="header-tab {% if not cfp.is_open and not access_code.is_valid %}disabled{% endif %}"
href="{{ request.event.urls.submit }}{{ submit_qs }}">
{% if cfp.is_open or access_code.is_valid %}
<i class="fa fa-bullhorn"></i> {% translate "Call for Speakers" %}
{% endif %}
</a>
Copy link

Copilot AI Nov 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When the CFP is closed or the access code is invalid, the link shows empty content because the icon and text are inside the conditional block. This creates an empty, disabled link in the navigation. Consider moving the entire <a> tag inside the conditional, or display the text outside the conditional with a disabled state message.

Suggested change
<a class="header-tab {% if not cfp.is_open and not access_code.is_valid %}disabled{% endif %}"
href="{{ request.event.urls.submit }}{{ submit_qs }}">
{% if cfp.is_open or access_code.is_valid %}
<i class="fa fa-bullhorn"></i> {% translate "Call for Speakers" %}
{% endif %}
</a>
{% if cfp.is_open or access_code.is_valid %}
<a class="header-tab {% if "/cfp/" in request.path_info %}active{% endif %}"
href="{{ request.event.urls.submit }}{{ submit_qs }}">
<i class="fa fa-bullhorn"></i> {% translate "Call for Speakers" %}
</a>
{% else %}
<a class="header-tab disabled" tabindex="-1" aria-disabled="true" href="#">
<i class="fa fa-bullhorn"></i> {% translate "Call for Speakers (Closed)" %}
</a>
{% endif %}

Copilot uses AI. Check for mistakes.

.public-event-header {
display: flex;
margin-bottom: 14px
Copy link

Copilot AI Nov 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing semicolon at the end of the CSS declaration. This should be margin-bottom: 14px; to follow CSS syntax standards.

Suggested change
margin-bottom: 14px
margin-bottom: 14px;

Copilot uses AI. Check for mistakes.
Comment on lines 44 to 66
<style>
.navigation a {
cursor: pointer;
position: relative;
text-decoration: none;
padding-bottom: 4px;
}

.navigation a.underline::after {
content: '';
position: absolute;
bottom: 0;
left: -10px;
width: calc(100% + 20px);
height: 2px;
background-color: currentColor;
}

.navigation a:not(.underline):hover {
border-bottom: 2px dotted currentColor;
}

</style>
Copy link

Copilot AI Nov 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Inline styles embedded in <style> tags within templates should be moved to external CSS files for better maintainability, reusability, and caching. The PR description mentions this as future work, but consider creating a dedicated CSS file for navigation styles now to avoid increasing technical debt.

Copilot uses AI. Check for mistakes.
{% endif %}
</div>
<header {% if event_logo %} class="custom-header" {% endif %}>
<header {% if event_logo %} class="custom-header" {% endif %} style="margin-top: -3.8rem;">
Copy link

Copilot AI Nov 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Inline styles should be moved to CSS files for better maintainability. The PR description mentions this as future work, but adding more inline styles increases technical debt. Consider defining this style in _layout.css.

Suggested change
<header {% if event_logo %} class="custom-header" {% endif %} style="margin-top: -3.8rem;">
<header {% if event_logo %} class="custom-header header-margin-top" {% endif %}>

Copilot uses AI. Check for mistakes.
{{ 'popover-profile'|json_script:"popover_toggle" }}
{{ base_path|json_script:"base_path" }}
<nav class="login-hdr" aria-label='{% translate "account" %}'>
<nav class="login-hdr" aria-label="{% translate 'account' %}" style="{% if request.event and request.event.settings.event_logo_image %}margin-right: 18rem{% else %}margin-right: 0{% endif %}">
Copy link

Copilot AI Nov 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Inline styles should be moved to CSS files for better maintainability. The PR description mentions moving inline CSS to .css files as a future task, but this adds more inline styles. Consider defining a CSS class in _layout.css instead.

Suggested change
<nav class="login-hdr" aria-label="{% translate 'account' %}" style="{% if request.event and request.event.settings.event_logo_image %}margin-right: 18rem{% else %}margin-right: 0{% endif %}">
<nav class="login-hdr{% if request.event and request.event.settings.event_logo_image %} login-hdr--with-logo{% endif %}" aria-label="{% translate 'account' %}">

Copilot uses AI. Check for mistakes.
Comment on lines 27 to 29
{% comment %} <a href="{}" class="header-tab">
<i class="fa fa-info-circle"></i> {% translate "Info" %}
</a> {% endcomment %}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please follow this.

Copy link
Member

@mariobehling mariobehling left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Screenshot from 2025-11-12 08-45-17

In regards to this area please follow the same flow as other drop-downs and also use the capitalization for the first word only as below:

My orders
My proposals
Speaker profile
Event emails

Account

Organizer area

Logout

Copy link
Member

@mariobehling mariobehling left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your Call for speakers links directly to the submission form instead of the Call for Speakers/Proposals, e.g. https://next.eventyay.com/a-team/summit/cfp

This page also needs the header menu!

Screenshot from 2025-11-12 09-04-06

Copy link
Member

@mariobehling mariobehling left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please show a button on the right "Join online event" instead of the "Videos" button.

Compare:
Screenshot from 2025-11-12 09-11-21

Screenshot from 2025-11-12 09-14-18

@mariobehling
Copy link
Member

Please provide screenshots of updates.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 7 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 6 to 7
<nav style="margin-top: 10px; margin-bottom: 3rem; overflow: scroll;">
<div class="navigation" style="font-size: 1.65rem; display: flex; gap: 2rem;">
Copy link

Copilot AI Nov 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Multiple inline styles should be moved to external CSS files as noted in the PR description. These styles (margin-top, margin-bottom, overflow, font-size, display, gap) would be more maintainable in a CSS class.

Copilot uses AI. Check for mistakes.
Comment on lines 8 to 10
<a class="header-tab underline">
<i class="fa fa-ticket"></i> {% translate "Tickets" %}
</a>
Copy link

Copilot AI Nov 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The 'Tickets' link is missing an href attribute, making it non-functional. This appears to be the active/current page indicator, but it should still be a valid link or use a different element (like ) to avoid misleading screen readers and keyboard users.

Copilot uses AI. Check for mistakes.
Comment on lines 48 to 87
<style>
.navigation a {
cursor: pointer;
position: relative;
text-decoration: none;
padding-bottom: 4px;
}

.navigation a.underline::after {
content: '';
position: absolute;
bottom: 0;
left: -10px;
width: calc(100% + 20px);
height: 2px;
background-color: currentColor;
}

.navigation a:not(.underline):hover {
border-bottom: 2px dotted currentColor;
}

@media (min-width: 375px) {
.video-link {
margin-left: 0;
}
}

@media (min-width: 1000px) {
.video-link {
margin-left: 20rem;
}
}

@media (min-width: 1200px) {
.video-link {
margin-left: 40rem;
}
}
</style>
Copy link

Copilot AI Nov 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This entire <style> block should be moved to the external CSS file (_layout.css) as mentioned in the PR description. Inline <style> blocks in templates make styles harder to maintain and prevent proper CSS optimization.

Suggested change
<style>
.navigation a {
cursor: pointer;
position: relative;
text-decoration: none;
padding-bottom: 4px;
}
.navigation a.underline::after {
content: '';
position: absolute;
bottom: 0;
left: -10px;
width: calc(100% + 20px);
height: 2px;
background-color: currentColor;
}
.navigation a:not(.underline):hover {
border-bottom: 2px dotted currentColor;
}
@media (min-width: 375px) {
.video-link {
margin-left: 0;
}
}
@media (min-width: 1000px) {
.video-link {
margin-left: 20rem;
}
}
@media (min-width: 1200px) {
.video-link {
margin-left: 40rem;
}
}
</style>

Copilot uses AI. Check for mistakes.
<div class="event-logo">
<a href="{% block nav_link %}{% endblock nav_link %}">
{% if request.event and request.event.logo %}
<img loading="lazy" src="{{ request.event.logo.url }}" id="event-logo" alt="{% translate "The event’s logo" %}" style="border-radius: 10px;">
Copy link

Copilot AI Nov 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inline style should be moved to CSS file. The border-radius styling would be more maintainable in the external CSS, potentially as part of the #event-logo selector that already exists.

Suggested change
<img loading="lazy" src="{{ request.event.logo.url }}" id="event-logo" alt="{% translate "The event’s logo" %}" style="border-radius: 10px;">
<img loading="lazy" src="{{ request.event.logo.url }}" id="event-logo" alt="{% translate "The event’s logo" %}">

Copilot uses AI. Check for mistakes.
Comment on lines 220 to 222
.video-link {
margin-left: 24rem;
}
Copy link

Copilot AI Nov 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The .video-link class has multiple conflicting margin-left values across different media queries (24rem at line 221, 20rem at line 229, 10rem at line 238, 0rem at lines 251, 342). The base value of 24rem is only used above 1200px width, but it's defined outside any media query. Consider restructuring to have the default (mobile-first) value first, then progressively enhance for larger screens.

Copilot uses AI. Check for mistakes.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please follow this.

.header-wrapper {
overflow: auto;
background: var(--color-bg);
padding-bottom: 6rem;
Copy link

Copilot AI Nov 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The padding-bottom of 6rem inside a max-width: 576px media query seems excessively large and could cause significant whitespace issues on mobile devices. Consider reducing this value or verify if this is the intended behavior.

Suggested change
padding-bottom: 6rem;
padding-bottom: 2rem;

Copilot uses AI. Check for mistakes.
{% endcompress %}
{% endblock cfp_header %}


Copy link

Copilot AI Nov 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Unnecessary blank line addition. This change adds no functional value and should be removed to keep the codebase clean.

Suggested change

Copilot uses AI. Check for mistakes.
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 11 out of 11 changed files in this pull request and generated 4 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

{% endwith %}

<div class="video-link">
<a join-event-link class="header-tab join-event {% if request.path_info == '/onlinevideo' %}underline{% endif %}"
Copy link

Copilot AI Nov 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Invalid HTML attribute 'join-event-link' without a value. This should either be removed, prefixed with 'data-' (e.g., 'data-join-event-link'), or given a value if it's meant to be an ID attribute (e.g., 'id="join-event-link"').

Suggested change
<a join-event-link class="header-tab join-event {% if request.path_info == '/onlinevideo' %}underline{% endif %}"
<a data-join-event-link class="header-tab join-event {% if request.path_info == '/onlinevideo' %}underline{% endif %}"

Copilot uses AI. Check for mistakes.
{% endif %}
</div>
<header {% if event_logo %} class="custom-header" {% endif %}>
<header {% if event_logo %} class="custom-header" {% endif %} style="margin-top: -3.8rem;">
Copy link

Copilot AI Nov 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inline style should be moved to CSS as mentioned in the PR description. The negative margin should be defined in the CSS file, either as part of the 'custom-header' class or through a modifier class.

Suggested change
<header {% if event_logo %} class="custom-header" {% endif %} style="margin-top: -3.8rem;">
<header{% if event_logo %} class="custom-header"{% endif %}>

Copilot uses AI. Check for mistakes.
Comment on lines 41 to 43
<a id="join-event-link" href='{% url "agenda:event.onlinevideo.join" organizer=request.event.organizer.slug event=request.event.slug %}' class="header-tab video-link">
<i class="fa fa-video-camera"></i> {% translate "Join online video" %}
</a>
Copy link

Copilot AI Nov 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The 'video-link' class and 'join-event-link' id appear to have overlapping purposes. In the presale template, 'video-link' is used as a wrapper div class, while here it's applied directly to the anchor. This inconsistency could cause styling issues and should be unified across templates.

Suggested change
<a id="join-event-link" href='{% url "agenda:event.onlinevideo.join" organizer=request.event.organizer.slug event=request.event.slug %}' class="header-tab video-link">
<i class="fa fa-video-camera"></i> {% translate "Join online video" %}
</a>
<div class="video-link">
<a id="join-event-link" href='{% url "agenda:event.onlinevideo.join" organizer=request.event.organizer.slug event=request.event.slug %}' class="header-tab">
<i class="fa fa-video-camera"></i> {% translate "Join online video" %}
</a>
</div>

Copilot uses AI. Check for mistakes.
@Gagan-Ram Gagan-Ram force-pushed the 1079_unify_event_page branch from 8a16740 to 79f3261 Compare November 13, 2025 21:53
@mariobehling mariobehling merged commit b5008b2 into fossasia:enext Nov 14, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature: Create a Unified Event Page

4 participants