Refactor campaign name handling to use clean_name property for improved clarity and consistency across templates
This commit is contained in:
parent
08da2cf7da
commit
3fb0880271
5 changed files with 32 additions and 8 deletions
|
|
@ -1,6 +1,6 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}{{ campaign.name }} - Twitch Drops Tracker{% endblock %}
|
||||
{% block title %}{{ campaign.clean_name }} - Twitch Drops Tracker{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row mb-4">
|
||||
|
|
@ -9,7 +9,7 @@
|
|||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="{% url 'twitch:dashboard' %}">Dashboard</a></li>
|
||||
<li class="breadcrumb-item"><a href="{% url 'twitch:campaign_list' %}">Campaigns</a></li>
|
||||
<li class="breadcrumb-item active" aria-current="page">{{ campaign.name }}</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">{{ campaign.clean_name }}</li>
|
||||
</ol>
|
||||
</nav>
|
||||
</div>
|
||||
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
<div class="row mb-4">
|
||||
<div class="col-md-8">
|
||||
<h1 class="mb-3">{{ campaign.name }}</h1>
|
||||
<h1 class="mb-3">{{ campaign.clean_name }}</h1>
|
||||
<div class="d-flex flex-wrap gap-2 mb-3">
|
||||
<a href="{% url 'twitch:game_detail' campaign.game.id %}" class="badge bg-primary text-decoration-none">
|
||||
<i class="fas fa-gamepad me-1"></i>{{ campaign.game.display_name }}
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@
|
|||
alt="{{ campaign.name }}">
|
||||
{% endif %}
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">{{ campaign.name }}</h5>
|
||||
<h5 class="card-title">{{ campaign.clean_name }}</h5>
|
||||
<h6 class="card-subtitle mb-2 text-muted">{{ campaign.game.display_name }}
|
||||
</h6>
|
||||
<p class="card-text small">{{ campaign.description|truncatewords:20 }}</p>
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
<div class="title-wrapper" style="min-height: 2.4rem;">
|
||||
<h6 class="mb-1" title="{{ campaign.name }}"
|
||||
style="display: -webkit-box; display: box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; box-orient: vertical; overflow: hidden; font-size: 0.9rem;">
|
||||
{{ campaign.name }}</h6>
|
||||
{{ campaign.clean_name }}</h6>
|
||||
</div>
|
||||
<p class="mb-1 small text-muted text-truncate">
|
||||
<a href="{% url 'twitch:game_detail' campaign.game.id %}"
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@
|
|||
<tbody>
|
||||
{% for campaign in active_campaigns %}
|
||||
<tr>
|
||||
<td>{{ campaign.name }}</td>
|
||||
<td>{{ campaign.clean_name }}</td>
|
||||
<td>{{ campaign.owner.name }}</td>
|
||||
<td>
|
||||
<span class="badge bg-success" data-bs-toggle="tooltip"
|
||||
|
|
@ -85,7 +85,7 @@
|
|||
<tbody>
|
||||
{% for campaign in upcoming_campaigns %}
|
||||
<tr>
|
||||
<td>{{ campaign.name }}</td>
|
||||
<td>{{ campaign.clean_name }}</td>
|
||||
<td>{{ campaign.owner.name }}</td>
|
||||
<td>
|
||||
<span class="badge bg-info text-dark" data-bs-toggle="tooltip"
|
||||
|
|
@ -131,7 +131,7 @@
|
|||
<tbody>
|
||||
{% for campaign in expired_campaigns %}
|
||||
<tr>
|
||||
<td>{{ campaign.name }}</td>
|
||||
<td>{{ campaign.clean_name }}</td>
|
||||
<td>{{ campaign.owner.name }}</td>
|
||||
<td>
|
||||
<span class="badge bg-secondary" data-bs-toggle="tooltip"
|
||||
|
|
|
|||
|
|
@ -67,6 +67,30 @@ class DropCampaign(models.Model):
|
|||
now = timezone.now()
|
||||
return self.start_at <= now <= self.end_at and self.status == "ACTIVE"
|
||||
|
||||
@property
|
||||
def clean_name(self) -> str:
|
||||
"""Return the campaign name without the game name prefix.
|
||||
|
||||
Examples:
|
||||
"Ravendawn - July 2" -> "July 2"
|
||||
"Party Animals Twitch Drop" -> "Twitch Drop"
|
||||
"""
|
||||
if not self.game or not self.game.display_name:
|
||||
return self.name
|
||||
|
||||
game_name = self.game.display_name
|
||||
|
||||
# Remove game name if it's at the beginning of the campaign name
|
||||
if self.name.startswith(game_name):
|
||||
# Check if it's followed by a separator like " - "
|
||||
if self.name[len(game_name) :].startswith(" - "):
|
||||
return self.name[len(game_name) + 3 :].strip()
|
||||
# Or just remove the game name if it's followed by a space
|
||||
if len(self.name) > len(game_name) and self.name[len(game_name)] == " ":
|
||||
return self.name[len(game_name) + 1 :].strip()
|
||||
|
||||
return self.name
|
||||
|
||||
|
||||
class DropBenefit(models.Model):
|
||||
"""Represents a benefit that can be earned from a drop."""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue