Add rewards to more pages as we have support for them now
All checks were successful
Deploy to Server / deploy (push) Successful in 26s
All checks were successful
Deploy to Server / deploy (push) Successful in 26s
This commit is contained in:
parent
3535d7d2dd
commit
37c1390100
16 changed files with 966 additions and 216 deletions
|
|
@ -263,7 +263,8 @@
|
|||
<br />
|
||||
CC0; Information wants to be free.
|
||||
<br />
|
||||
Data retrival possible because of <a href="https://github.com/DevilXD/TwitchDropsMiner">DevilXD/TwitchDropsMiner</a>.
|
||||
Data retrival possible because of <a href="https://github.com/DevilXD/TwitchDropsMiner">DevilXD/TwitchDropsMiner</a>
|
||||
and <a href="https://github.com/SunkwiBOT/twitch-drops-api">SunkwiBOT/twitch-drops-api</a>.
|
||||
<br />
|
||||
Data fetched at :01, :16, :31, and :46.
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -38,72 +38,81 @@
|
|||
</div>
|
||||
<!-- Campaign description -->
|
||||
<p>{{ campaign.description|linebreaksbr }}</p>
|
||||
<div>
|
||||
Published
|
||||
{% if campaign.scraped_at %}
|
||||
<time datetime="{{ campaign.scraped_at|date:'c' }}"
|
||||
title="{{ campaign.scraped_at|date:'DATETIME_FORMAT' }}">{{ campaign.scraped_at|date:"M d, Y H:i" }}</time> ({{ campaign.scraped_at|timesince }} ago)
|
||||
{% elif campaign.start_date %}
|
||||
<time datetime="{{ campaign.start_date|date:'c' }}"
|
||||
title="{{ campaign.start_date|date:'DATETIME_FORMAT' }}">{{ campaign.start_date|date:"M d, Y H:i" }}</time> ({{ campaign.start_date|timesince }} ago)
|
||||
{% else %}
|
||||
unknown
|
||||
{% endif %}
|
||||
</div>
|
||||
<div>
|
||||
Last updated
|
||||
{% if campaign.scraped_at %}
|
||||
<time datetime="{{ campaign.scraped_at|date:'c' }}"
|
||||
title="{{ campaign.scraped_at|date:'DATETIME_FORMAT' }}">{{ campaign.scraped_at|date:"M d, Y H:i" }}</time> ({{ campaign.scraped_at|timesince }} ago)
|
||||
{% elif campaign.updated_at %}
|
||||
<time datetime="{{ campaign.updated_at|date:'c' }}"
|
||||
title="{{ campaign.updated_at|date:'DATETIME_FORMAT' }}">{{ campaign.updated_at|date:"M d, Y H:i" }}</time> ({{ campaign.updated_at|timesince }} ago)
|
||||
{% else %}
|
||||
unknown
|
||||
{% endif %}
|
||||
</div>
|
||||
<!-- Campaign end times -->
|
||||
<div>
|
||||
{% if campaign.end_date %}
|
||||
{% if campaign.end_date < now %}
|
||||
Ended
|
||||
<time datetime="{{ campaign.end_date|date:'c' }}"
|
||||
title="{{ campaign.end_date|date:'DATETIME_FORMAT' }}">{{ campaign.end_date|date:"M d, Y H:i" }}</time> ({{ campaign.end_date|timesince }} ago)
|
||||
{% else %}
|
||||
Ends in
|
||||
<time datetime="{{ campaign.end_date|date:'c' }}"
|
||||
title="{{ campaign.end_date|date:'DATETIME_FORMAT' }}">{{ campaign.end_date|date:"M d, Y H:i" }}</time> (in {{ campaign.end_date|timeuntil }})
|
||||
{% endif %}
|
||||
{% else %}
|
||||
Ends unknown
|
||||
{% endif %}
|
||||
</div>
|
||||
<!-- Campaign start times -->
|
||||
<div>
|
||||
{% if campaign.start_date %}
|
||||
{% if campaign.start_date > now %}
|
||||
Starts in
|
||||
<time datetime="{{ campaign.start_date|date:'c' }}"
|
||||
title="{{ campaign.start_date|date:'DATETIME_FORMAT' }}">{{ campaign.start_date|date:"M d, Y H:i" }}</time> (in {{ campaign.start_date|timeuntil }})
|
||||
{% else %}
|
||||
Started
|
||||
<dl>
|
||||
<dt>Published</dt>
|
||||
<dd>
|
||||
{% if campaign.scraped_at %}
|
||||
<time datetime="{{ campaign.scraped_at|date:'c' }}"
|
||||
title="{{ campaign.scraped_at|date:'DATETIME_FORMAT' }}">{{ campaign.scraped_at|date:"M d, Y H:i" }}</time> ({{ campaign.scraped_at|timesince }} ago)
|
||||
{% elif campaign.start_date %}
|
||||
<time datetime="{{ campaign.start_date|date:'c' }}"
|
||||
title="{{ campaign.start_date|date:'DATETIME_FORMAT' }}">{{ campaign.start_date|date:"M d, Y H:i" }}</time> ({{ campaign.start_date|timesince }} ago)
|
||||
{% else %}
|
||||
unknown
|
||||
{% endif %}
|
||||
{% else %}
|
||||
Starts unknown
|
||||
{% endif %}
|
||||
</div>
|
||||
<!-- Campaign duration -->
|
||||
<div>
|
||||
Duration is
|
||||
{% if campaign.start_date and campaign.end_date %}
|
||||
<time datetime="P{{ campaign.end_date|date:'Y' }}-{{ campaign.end_date|date:'m' }}-{{ campaign.end_date|date:'d' }}T{{ campaign.end_date|date:'H' }}:00:00"
|
||||
title="{{ campaign.start_date|date:'DATETIME_FORMAT' }} to {{ campaign.end_date|date:'DATETIME_FORMAT' }}">{{ campaign.end_date|timeuntil:campaign.start_date }}</time>
|
||||
{% else %}
|
||||
unknown
|
||||
{% endif %}
|
||||
</div>
|
||||
</dd>
|
||||
<dt>Last updated</dt>
|
||||
<dd>
|
||||
{% if campaign.scraped_at %}
|
||||
<time datetime="{{ campaign.scraped_at|date:'c' }}"
|
||||
title="{{ campaign.scraped_at|date:'DATETIME_FORMAT' }}">{{ campaign.scraped_at|date:"M d, Y H:i" }}</time> ({{ campaign.scraped_at|timesince }} ago)
|
||||
{% elif campaign.updated_at %}
|
||||
<time datetime="{{ campaign.updated_at|date:'c' }}"
|
||||
title="{{ campaign.updated_at|date:'DATETIME_FORMAT' }}">{{ campaign.updated_at|date:"M d, Y H:i" }}</time> ({{ campaign.updated_at|timesince }} ago)
|
||||
{% else %}
|
||||
unknown
|
||||
{% endif %}
|
||||
</dd>
|
||||
<dt>
|
||||
{% if campaign.end_date and campaign.end_date < now %}
|
||||
Ended
|
||||
{% else %}
|
||||
Ends
|
||||
{% endif %}
|
||||
</dt>
|
||||
<dd>
|
||||
{% if campaign.end_date %}
|
||||
<time datetime="{{ campaign.end_date|date:'c' }}"
|
||||
title="{{ campaign.end_date|date:'DATETIME_FORMAT' }}">{{ campaign.end_date|date:"M d, Y H:i" }}</time>
|
||||
{% if campaign.end_date < now %}
|
||||
({{ campaign.end_date|timesince }} ago)
|
||||
{% else %}
|
||||
(in {{ campaign.end_date|timeuntil }})
|
||||
{% endif %}
|
||||
{% else %}
|
||||
unknown
|
||||
{% endif %}
|
||||
</dd>
|
||||
<dt>
|
||||
{% if campaign.start_date and campaign.start_date > now %}
|
||||
Starts
|
||||
{% else %}
|
||||
Started
|
||||
{% endif %}
|
||||
</dt>
|
||||
<dd>
|
||||
{% if campaign.start_date %}
|
||||
<time datetime="{{ campaign.start_date|date:'c' }}"
|
||||
title="{{ campaign.start_date|date:'DATETIME_FORMAT' }}">{{ campaign.start_date|date:"M d, Y H:i" }}</time>
|
||||
{% if campaign.start_date > now %}
|
||||
(in {{ campaign.start_date|timeuntil }})
|
||||
{% else %}
|
||||
({{ campaign.start_date|timesince }} ago)
|
||||
{% endif %}
|
||||
{% else %}
|
||||
unknown
|
||||
{% endif %}
|
||||
</dd>
|
||||
<dt>Duration</dt>
|
||||
<dd>
|
||||
{% if campaign.start_date and campaign.end_date %}
|
||||
<time datetime="P{{ campaign.end_date|date:'Y' }}-{{ campaign.end_date|date:'m' }}-{{ campaign.end_date|date:'d' }}T{{ campaign.end_date|date:'H' }}:00:00"
|
||||
title="{{ campaign.start_date|date:'DATETIME_FORMAT' }} to {{ campaign.end_date|date:'DATETIME_FORMAT' }}">{{ campaign.end_date|timeuntil:campaign.start_date }}</time>
|
||||
{% else %}
|
||||
unknown
|
||||
{% endif %}
|
||||
</dd>
|
||||
</dl>
|
||||
<!-- Buttons -->
|
||||
<div>
|
||||
{% if campaign.pc_link_url %}<a href="{{ campaign.pc_link_url }}" target="_blank">[details]</a>{% endif %}
|
||||
|
|
|
|||
|
|
@ -31,11 +31,10 @@
|
|||
{% endblock extra_head %}
|
||||
{% block content %}
|
||||
<main>
|
||||
<h1>Active Drops Dashboard</h1>
|
||||
<h1>Open Drop Campaigns</h1>
|
||||
<p>
|
||||
A combined overview of currently active Twitch and Kick drops campaigns.
|
||||
<br />
|
||||
Click any campaign to open details.
|
||||
Some Drops campaigns may not be available in your region.
|
||||
<a href="https://help.twitch.tv/s/article/mission-based-drops">Learn more about Drops</a>.
|
||||
</p>
|
||||
<hr />
|
||||
<section id="twitch-campaigns-section">
|
||||
|
|
@ -173,32 +172,39 @@
|
|||
padding-top: 1rem">
|
||||
<header style="margin-bottom: 1rem;">
|
||||
<h2 style="margin: 0 0 0.5rem 0;">
|
||||
<a href="{% url 'twitch:reward_campaign_list' %}">Twitch Reward Campaigns (Quest Rewards)</a>
|
||||
<a href="{% url 'twitch:reward_campaign_list' %}">Open Reward Campaigns</a>
|
||||
</h2>
|
||||
<p>
|
||||
Rewards are limited-time offers from top brands that you can unlock by
|
||||
supporting your favorite Twitch creators. Visit <a href="https://www.twitch.tv/drops/inventory">your inventory</a>
|
||||
to access unlocked rewards.
|
||||
</p>
|
||||
</header>
|
||||
<div style="display: grid;
|
||||
gap: 1rem;
|
||||
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr))">
|
||||
<ul>
|
||||
{% for campaign in active_reward_campaigns %}
|
||||
<article id="reward-campaign-{{ campaign.twitch_id }}"
|
||||
style="border: 1px solid #ddd;
|
||||
border-radius: 8px;
|
||||
padding: 1rem">
|
||||
<h3 style="margin: 0 0 0.5rem 0;">
|
||||
<a href="{% url 'twitch:reward_campaign_detail' campaign.twitch_id %}">
|
||||
{% if campaign.brand %}
|
||||
{{ campaign.brand }}: {{ campaign.name }}
|
||||
{% else %}
|
||||
{{ campaign.name }}
|
||||
{% endif %}
|
||||
</a>
|
||||
</h3>
|
||||
{% if campaign.summary %}
|
||||
<p style="font-size: 0.9rem; color: #555; margin: 0.5rem 0;">{{ campaign.summary }}</p>
|
||||
{% endif %}
|
||||
<div style="font-size: 0.85rem; color: #666;">
|
||||
<li id="reward-campaign-{{ campaign.twitch_id }}"
|
||||
style="display: flex;
|
||||
gap: 1rem;
|
||||
margin-bottom: 1rem;
|
||||
align-items: flex-start">
|
||||
<a href="{% url 'twitch:reward_campaign_detail' campaign.twitch_id %}"
|
||||
style="flex-shrink: 0;
|
||||
display: block;
|
||||
line-height: 0">
|
||||
{% picture campaign.image_best_url alt="Image for "|add:campaign.name width=120 %}
|
||||
</a>
|
||||
<div>
|
||||
<h3 style="margin: 0;">
|
||||
<a href="{% url 'twitch:reward_campaign_detail' campaign.twitch_id %}">
|
||||
{% if campaign.brand %}
|
||||
{{ campaign.brand }}: {{ campaign.name }}
|
||||
{% else %}
|
||||
{{ campaign.name }}
|
||||
{% endif %}
|
||||
</a>
|
||||
</h3>
|
||||
{% if campaign.ends_at %}
|
||||
<p style="margin: 0.25rem 0;">
|
||||
<p>
|
||||
<strong>Ends:</strong>
|
||||
<time datetime="{{ campaign.ends_at|date:'c' }}"
|
||||
title="{{ campaign.ends_at|date:'DATETIME_FORMAT' }}">
|
||||
|
|
@ -206,20 +212,25 @@
|
|||
</time>
|
||||
</p>
|
||||
{% endif %}
|
||||
{% if campaign.summary %}
|
||||
<p>{{ campaign.summary }}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div>
|
||||
{% if campaign.game %}
|
||||
<p style="margin: 0.25rem 0;">
|
||||
<p>
|
||||
<strong>Game:</strong>
|
||||
<a href="{% url 'twitch:game_detail' campaign.game.twitch_id %}">{{ campaign.game.display_name }}</a>
|
||||
</p>
|
||||
{% elif campaign.is_sitewide %}
|
||||
<p style="margin: 0.25rem 0;">
|
||||
<p>
|
||||
<strong>Type:</strong> Site-wide reward campaign
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</article>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</ul>
|
||||
</section>
|
||||
{% endif %}
|
||||
<section id="kick-campaigns-section"
|
||||
|
|
|
|||
|
|
@ -14,6 +14,14 @@
|
|||
upstream content and cannot guarantee upstream accuracy or permanence.
|
||||
</p>
|
||||
<p>Note that some drops has missing or incomplete data due to Twitch API limitations.</p>
|
||||
<p>
|
||||
Reward campaign data is sourced from
|
||||
<a href="https://github.com/SunkwiBOT/twitch-drops-api">SunkwiBOT/twitch-drops-api</a>.
|
||||
Raw JSON exports are available in the repository:
|
||||
<a href="https://github.com/SunkwiBOT/twitch-drops-api/blob/main/drops.json">drops.json</a>
|
||||
and
|
||||
<a href="https://github.com/SunkwiBOT/twitch-drops-api/blob/main/rewards.json">rewards.json</a>.
|
||||
</p>
|
||||
<p>
|
||||
Need a special format for your workflow or research pipeline?
|
||||
<a href="https://github.com/TheLovinator1/ttvdrops/issues">Contact me via GitHub issues</a>
|
||||
|
|
|
|||
|
|
@ -127,11 +127,15 @@
|
|||
{% if game %}
|
||||
<section>
|
||||
<h2>Filtered RSS Feeds</h2>
|
||||
<p>You can subscribe to RSS feeds scoped to a specific game.</p>
|
||||
<p>
|
||||
You can subscribe to RSS feeds scoped to a specific game.
|
||||
The Rewards feed will be empty if the game has no active reward campaigns.
|
||||
</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Game</th>
|
||||
<th>Feed Type</th>
|
||||
<th>RSS</th>
|
||||
<th>Atom</th>
|
||||
<th>Discord</th>
|
||||
|
|
@ -139,20 +143,39 @@
|
|||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{ game.display_name }}</td>
|
||||
<td rowspan="2">{{ game.display_name }}</td>
|
||||
<td>Campaigns</td>
|
||||
<td>
|
||||
<a href="{% url 'core:game_campaign_feed' game.twitch_id %}">
|
||||
https://ttvdrops.lovinator.space/rss/games/{{ game.twitch_id }}/
|
||||
https://ttvdrops.lovinator.space/rss/games/{{ game.twitch_id }}/campaigns/
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{% url 'core:game_campaign_feed_atom' game.twitch_id %}">
|
||||
https://ttvdrops.lovinator.space/atom/games/{{ game.twitch_id }}/
|
||||
https://ttvdrops.lovinator.space/atom/games/{{ game.twitch_id }}/campaigns/
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{% url 'core:game_campaign_feed_discord' game.twitch_id %}">
|
||||
https://ttvdrops.lovinator.space/discord/games/{{ game.twitch_id }}/
|
||||
https://ttvdrops.lovinator.space/discord/games/{{ game.twitch_id }}/campaigns/
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Rewards</td>
|
||||
<td>
|
||||
<a href="{% url 'core:game_reward_feed' game.twitch_id %}">
|
||||
https://ttvdrops.lovinator.space/rss/games/{{ game.twitch_id }}/rewards/
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{% url 'core:game_reward_feed_atom' game.twitch_id %}">
|
||||
https://ttvdrops.lovinator.space/atom/games/{{ game.twitch_id }}/rewards/
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{% url 'core:game_reward_feed_discord' game.twitch_id %}">
|
||||
https://ttvdrops.lovinator.space/discord/games/{{ game.twitch_id }}/rewards/
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
|||
|
|
@ -51,61 +51,74 @@
|
|||
<a href="{% url 'kick:campaign_list' %}">Campaigns</a> >
|
||||
{{ campaign.name }}
|
||||
</div>
|
||||
<div>
|
||||
<dl>
|
||||
{% if campaign.category %}
|
||||
Category:
|
||||
<a href="{% url 'kick:game_detail' campaign.category.kick_id %}">{{ campaign.category.name }}</a>
|
||||
<dt>Category</dt>
|
||||
<dd>
|
||||
<a href="{% url 'kick:game_detail' campaign.category.kick_id %}">{{ campaign.category.name }}</a>
|
||||
</dd>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div>
|
||||
{% if campaign.organization %}
|
||||
Organization:
|
||||
<a href="{% url 'kick:organization_detail' campaign.organization.kick_id %}">{{ campaign.organization.name }}</a>
|
||||
<dt>Organization</dt>
|
||||
<dd>
|
||||
<a href="{% url 'kick:organization_detail' campaign.organization.kick_id %}">{{ campaign.organization.name }}</a>
|
||||
</dd>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% if campaign.ends_at %}
|
||||
<div>
|
||||
{% if campaign.ends_at > now %}
|
||||
Ends
|
||||
{% else %}
|
||||
Ended at
|
||||
{% endif %}
|
||||
<time datetime="{{ campaign.ends_at|date:'c' }}"
|
||||
title="{{ campaign.ends_at|date:'DATETIME_FORMAT' }}">{{ campaign.ends_at|date:"M d, Y H:i" }}</time>
|
||||
{% if campaign.ends_at < now %}
|
||||
(ended {{ campaign.ends_at|timesince }} ago)
|
||||
{% else %}
|
||||
(in {{ campaign.ends_at|timeuntil }})
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if campaign.starts_at %}
|
||||
<div>
|
||||
{% if campaign.starts_at > now %}
|
||||
Starts
|
||||
{% else %}
|
||||
Started at
|
||||
{% endif %}
|
||||
<time datetime="{{ campaign.starts_at|date:'c' }}"
|
||||
title="{{ campaign.starts_at|date:'DATETIME_FORMAT' }}">{{ campaign.starts_at|date:"M d, Y H:i" }}</time>
|
||||
{% if campaign.starts_at < now %}
|
||||
(started {{ campaign.starts_at|timesince }} ago)
|
||||
{% else %}
|
||||
(in {{ campaign.starts_at|timeuntil }})
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if campaign.duration %}<div>Duration: {{ campaign.duration }}</div>{% endif %}
|
||||
<div>
|
||||
Added <time datetime="{{ campaign.added_at|date:'c' }}"
|
||||
title="{{ campaign.added_at|date:'DATETIME_FORMAT' }}">{{ campaign.added_at|date:"M d, Y" }}</time>
|
||||
({{ campaign.added_at|timesince }} ago)
|
||||
</div>
|
||||
<div>
|
||||
Updated <time datetime="{{ campaign.updated_at|date:'c' }}"
|
||||
title="{{ campaign.updated_at|date:'DATETIME_FORMAT' }}">{{ campaign.updated_at|date:"M d, Y" }}</time>
|
||||
({{ campaign.updated_at|timesince }} ago)
|
||||
</div>
|
||||
{% if campaign.ends_at %}
|
||||
<dt>
|
||||
{% if campaign.ends_at > now %}
|
||||
Ends
|
||||
{% else %}
|
||||
Ended at
|
||||
{% endif %}
|
||||
</dt>
|
||||
<dd>
|
||||
<time datetime="{{ campaign.ends_at|date:'c' }}"
|
||||
title="{{ campaign.ends_at|date:'DATETIME_FORMAT' }}">{{ campaign.ends_at|date:"M d, Y H:i" }}</time>
|
||||
{% if campaign.ends_at < now %}
|
||||
(ended {{ campaign.ends_at|timesince }} ago)
|
||||
{% else %}
|
||||
(in {{ campaign.ends_at|timeuntil }})
|
||||
{% endif %}
|
||||
</dd>
|
||||
{% endif %}
|
||||
{% if campaign.starts_at %}
|
||||
<dt>
|
||||
{% if campaign.starts_at > now %}
|
||||
Starts
|
||||
{% else %}
|
||||
Started at
|
||||
{% endif %}
|
||||
</dt>
|
||||
<dd>
|
||||
<time datetime="{{ campaign.starts_at|date:'c' }}"
|
||||
title="{{ campaign.starts_at|date:'DATETIME_FORMAT' }}">{{ campaign.starts_at|date:"M d, Y H:i" }}</time>
|
||||
{% if campaign.starts_at < now %}
|
||||
(started {{ campaign.starts_at|timesince }} ago)
|
||||
{% else %}
|
||||
(in {{ campaign.starts_at|timeuntil }})
|
||||
{% endif %}
|
||||
</dd>
|
||||
{% endif %}
|
||||
{% if campaign.duration %}
|
||||
<dt>Duration</dt>
|
||||
<dd>
|
||||
{{ campaign.duration }}
|
||||
</dd>
|
||||
{% endif %}
|
||||
<dt>Added</dt>
|
||||
<dd>
|
||||
<time datetime="{{ campaign.added_at|date:'c' }}"
|
||||
title="{{ campaign.added_at|date:'DATETIME_FORMAT' }}">{{ campaign.added_at|date:"M d, Y" }}</time>
|
||||
({{ campaign.added_at|timesince }} ago)
|
||||
</dd>
|
||||
<dt>Updated</dt>
|
||||
<dd>
|
||||
<time datetime="{{ campaign.updated_at|date:'c' }}"
|
||||
title="{{ campaign.updated_at|date:'DATETIME_FORMAT' }}">{{ campaign.updated_at|date:"M d, Y" }}</time>
|
||||
({{ campaign.updated_at|timesince }} ago)
|
||||
</dd>
|
||||
</dl>
|
||||
<div>
|
||||
{% if campaign.channels.all %}
|
||||
Participating channels:
|
||||
|
|
|
|||
|
|
@ -63,20 +63,36 @@
|
|||
<a href="{{ category.kick_url }}">{{ category.kick_url }}</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
<p style="margin: 0.25rem 0; font-size: 0.85rem; color: #666;">
|
||||
ID: {{ category.kick_id }}
|
||||
- Added: <time datetime="{{ category.added_at|date:'c' }}"
|
||||
title="{{ category.added_at|date:'DATETIME_FORMAT' }}">{{ category.added_at|date:"M d, Y" }}</time>
|
||||
({{ category.added_at|timesince }} ago)
|
||||
- Updated: <time datetime="{{ category.updated_at|date:'c' }}"
|
||||
title="{{ category.updated_at|date:'DATETIME_FORMAT' }}">{{ category.updated_at|date:"M d, Y" }}</time>
|
||||
({{ category.updated_at|timesince }} ago)
|
||||
</p>
|
||||
<p style="margin: 0.25rem 0; color: #666;">
|
||||
Active: {{ active_campaigns|length }}
|
||||
- Upcoming: {{ upcoming_campaigns|length }}
|
||||
- Expired: {{ expired_campaigns|length }}
|
||||
</p>
|
||||
<dl>
|
||||
<dt>ID</dt>
|
||||
<dd>
|
||||
{{ category.kick_id }}
|
||||
</dd>
|
||||
<dt>Added</dt>
|
||||
<dd>
|
||||
<time datetime="{{ category.added_at|date:'c' }}"
|
||||
title="{{ category.added_at|date:'DATETIME_FORMAT' }}">{{ category.added_at|date:"M d, Y" }}</time>
|
||||
({{ category.added_at|timesince }} ago)
|
||||
</dd>
|
||||
<dt>Updated</dt>
|
||||
<dd>
|
||||
<time datetime="{{ category.updated_at|date:'c' }}"
|
||||
title="{{ category.updated_at|date:'DATETIME_FORMAT' }}">{{ category.updated_at|date:"M d, Y" }}</time>
|
||||
({{ category.updated_at|timesince }} ago)
|
||||
</dd>
|
||||
<dt>Active</dt>
|
||||
<dd>
|
||||
{{ active_campaigns|length }}
|
||||
</dd>
|
||||
<dt>Upcoming</dt>
|
||||
<dd>
|
||||
{{ upcoming_campaigns|length }}
|
||||
</dd>
|
||||
<dt>Expired</dt>
|
||||
<dd>
|
||||
{{ expired_campaigns|length }}
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
<hr />
|
||||
|
|
|
|||
|
|
@ -31,15 +31,24 @@
|
|||
<a href="{{ org.url }}">{{ org.url }}</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
<p style="margin: 0.25rem 0; font-size: 0.85rem; color: #666;">
|
||||
ID: {{ org.kick_id }}
|
||||
- Added: <time datetime="{{ org.added_at|date:'c' }}"
|
||||
title="{{ org.added_at|date:'DATETIME_FORMAT' }}">{{ org.added_at|date:"M d, Y" }}</time>
|
||||
({{ org.added_at|timesince }} ago)
|
||||
- Updated: <time datetime="{{ org.updated_at|date:'c' }}"
|
||||
title="{{ org.updated_at|date:'DATETIME_FORMAT' }}">{{ org.updated_at|date:"M d, Y" }}</time>
|
||||
({{ org.updated_at|timesince }} ago)
|
||||
</p>
|
||||
<dl>
|
||||
<dt>ID</dt>
|
||||
<dd>
|
||||
{{ org.kick_id }}
|
||||
</dd>
|
||||
<dt>Added</dt>
|
||||
<dd>
|
||||
<time datetime="{{ org.added_at|date:'c' }}"
|
||||
title="{{ org.added_at|date:'DATETIME_FORMAT' }}">{{ org.added_at|date:"M d, Y" }}</time>
|
||||
({{ org.added_at|timesince }} ago)
|
||||
</dd>
|
||||
<dt>Updated</dt>
|
||||
<dd>
|
||||
<time datetime="{{ org.updated_at|date:'c' }}"
|
||||
title="{{ org.updated_at|date:'DATETIME_FORMAT' }}">{{ org.updated_at|date:"M d, Y" }}</time>
|
||||
({{ org.updated_at|timesince }} ago)
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
<hr />
|
||||
|
|
|
|||
|
|
@ -9,23 +9,29 @@
|
|||
<div>
|
||||
<a href="{% url 'twitch:dashboard' %}">Twitch</a> > <a href="{% url 'twitch:channel_list' %}">Channels</a> > {{ channel.display_name }}
|
||||
</div>
|
||||
{% if channel.display_name != channel.name %}
|
||||
<div>
|
||||
Username: <code>{{ channel.name }}</code>
|
||||
</div>
|
||||
{% endif %}
|
||||
<!-- Channel Info -->
|
||||
<div>Channel ID: {{ channel.twitch_id }}</div>
|
||||
<div>
|
||||
Published
|
||||
<time datetime="{{ channel.added_at|date:'c' }}"
|
||||
title="{{ channel.added_at|date:'DATETIME_FORMAT' }}">{{ channel.added_at|date:"M d, Y H:i" }}</time> ({{ channel.added_at|timesince }} ago)
|
||||
</div>
|
||||
<div>
|
||||
Last updated
|
||||
<time datetime="{{ channel.updated_at|date:'c' }}"
|
||||
title="{{ channel.updated_at|date:'DATETIME_FORMAT' }}">{{ channel.updated_at|date:"M d, Y H:i" }}</time> ({{ channel.updated_at|timesince }} ago)
|
||||
</div>
|
||||
<!-- Channel metadata -->
|
||||
<dl>
|
||||
{% if channel.display_name != channel.name %}
|
||||
<dt>Username</dt>
|
||||
<dd>
|
||||
<code>{{ channel.name }}</code>
|
||||
</dd>
|
||||
{% endif %}
|
||||
<dt>Channel ID</dt>
|
||||
<dd>
|
||||
{{ channel.twitch_id }}
|
||||
</dd>
|
||||
<dt>Published</dt>
|
||||
<dd>
|
||||
<time datetime="{{ channel.added_at|date:'c' }}"
|
||||
title="{{ channel.added_at|date:'DATETIME_FORMAT' }}">{{ channel.added_at|date:"M d, Y H:i" }}</time> ({{ channel.added_at|timesince }} ago)
|
||||
</dd>
|
||||
<dt>Last updated</dt>
|
||||
<dd>
|
||||
<time datetime="{{ channel.updated_at|date:'c' }}"
|
||||
title="{{ channel.updated_at|date:'DATETIME_FORMAT' }}">{{ channel.updated_at|date:"M d, Y H:i" }}</time> ({{ channel.updated_at|timesince }} ago)
|
||||
</dd>
|
||||
</dl>
|
||||
<!-- Twitch Stream Embed -->
|
||||
<iframe src="https://player.twitch.tv/?channel={{ channel.name }}&parent={{ request.get_host }}&muted=false"
|
||||
height="480"
|
||||
|
|
|
|||
|
|
@ -17,6 +17,18 @@
|
|||
type="application/atom+xml"
|
||||
title="{{ game.display_name }} campaigns (Discord)"
|
||||
href="{% url 'core:game_campaign_feed_discord' game.twitch_id %}" />
|
||||
<link rel="alternate"
|
||||
type="application/rss+xml"
|
||||
title="{{ game.display_name }} rewards (RSS)"
|
||||
href="{% url 'core:game_reward_feed' game.twitch_id %}" />
|
||||
<link rel="alternate"
|
||||
type="application/atom+xml"
|
||||
title="{{ game.display_name }} rewards (Atom)"
|
||||
href="{% url 'core:game_reward_feed_atom' game.twitch_id %}" />
|
||||
<link rel="alternate"
|
||||
type="application/atom+xml"
|
||||
title="{{ game.display_name }} rewards (Discord)"
|
||||
href="{% url 'core:game_reward_feed_discord' game.twitch_id %}" />
|
||||
{% endif %}
|
||||
{% endblock extra_head %}
|
||||
{% block content %}
|
||||
|
|
@ -37,34 +49,48 @@
|
|||
<div>
|
||||
<a href="{% url 'twitch:dashboard' %}">Twitch</a> > <a href="{% url 'twitch:games_grid' %}">Games</a> > {{ game.display_name }}
|
||||
</div>
|
||||
<!-- Game owner -->
|
||||
{% if owners %}
|
||||
<div style="font-size: 0.9em;">
|
||||
Owned by
|
||||
{% for owner in owners %}
|
||||
<a href="{% url 'twitch:organization_detail' owner.twitch_id %}">{{ owner.name }}</a>
|
||||
{% if not forloop.last %}-{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div>
|
||||
Published
|
||||
<time datetime="{{ game.added_at|date:'c' }}"
|
||||
title="{{ game.added_at|date:'DATETIME_FORMAT' }}">{{ game.added_at|date:"M d, Y H:i" }}</time> ({{ game.added_at|timesince }} ago)
|
||||
</div>
|
||||
<div>
|
||||
Last updated
|
||||
<time datetime="{{ game.updated_at|date:'c' }}"
|
||||
title="{{ game.updated_at|date:'DATETIME_FORMAT' }}">{{ game.updated_at|date:"M d, Y H:i" }}</time> ({{ game.updated_at|timesince }} ago)
|
||||
</div>
|
||||
<!-- RSS Feeds -->
|
||||
<!-- Game metadata -->
|
||||
<dl>
|
||||
{% if owners %}
|
||||
<dt>Owned by</dt>
|
||||
<dd>
|
||||
{% for owner in owners %}
|
||||
<a href="{% url 'twitch:organization_detail' owner.twitch_id %}">{{ owner.name }}</a>
|
||||
{% if not forloop.last %}-{% endif %}
|
||||
{% endfor %}
|
||||
</dd>
|
||||
{% endif %}
|
||||
<dt>Published</dt>
|
||||
<dd>
|
||||
<time datetime="{{ game.added_at|date:'c' }}"
|
||||
title="{{ game.added_at|date:'DATETIME_FORMAT' }}">{{ game.added_at|date:"M d, Y H:i" }}</time> ({{ game.added_at|timesince }} ago)
|
||||
</dd>
|
||||
<dt>Last updated</dt>
|
||||
<dd>
|
||||
<time datetime="{{ game.updated_at|date:'c' }}"
|
||||
title="{{ game.updated_at|date:'DATETIME_FORMAT' }}">{{ game.updated_at|date:"M d, Y H:i" }}</time> ({{ game.updated_at|timesince }} ago)
|
||||
</dd>
|
||||
</dl>
|
||||
<!-- Campaign Feeds -->
|
||||
<div>
|
||||
Campaigns:
|
||||
<a href="{% url 'core:game_campaign_feed' game.twitch_id %}"
|
||||
title="RSS feed for {{ game.display_name }} campaigns">[rss]</a>
|
||||
<a href="{% url 'core:game_campaign_feed_atom' game.twitch_id %}"
|
||||
title="Atom feed for {{ game.display_name }} campaigns">[atom]</a>
|
||||
<a href="{% url 'core:game_campaign_feed_discord' game.twitch_id %}"
|
||||
title="Discord feed for {{ game.display_name }} campaigns">[discord]</a>
|
||||
</div>
|
||||
<div>
|
||||
Rewards:
|
||||
<a href="{% url 'core:game_reward_feed' game.twitch_id %}"
|
||||
title="RSS feed for {{ game.display_name }} rewards">[rss]</a>
|
||||
<a href="{% url 'core:game_reward_feed_atom' game.twitch_id %}"
|
||||
title="Atom feed for {{ game.display_name }} rewards">[atom]</a>
|
||||
<a href="{% url 'core:game_reward_feed_discord' game.twitch_id %}"
|
||||
title="Discord feed for {{ game.display_name }} rewards">[discord]</a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="{% url 'twitch:twitch-api-v1:get_game' game.twitch_id %}"
|
||||
title="Twitch game API">[api]</a>
|
||||
<a href="{% url 'core:docs_rss' %}" title="RSS feed documentation">[explain]</a>
|
||||
|
|
@ -163,4 +189,120 @@
|
|||
{% if not active_campaigns and not upcoming_campaigns and not expired_campaigns %}
|
||||
<p id="no-campaigns-message">No campaigns found for this game.</p>
|
||||
{% endif %}
|
||||
{% if active_rewards %}
|
||||
<h5 id="active-rewards-header">Active Rewards</h5>
|
||||
<table id="active-rewards-table">
|
||||
<tbody>
|
||||
{% for reward in active_rewards %}
|
||||
<tr id="reward-row-{{ reward.twitch_id }}">
|
||||
<td style="width: 130px; vertical-align: top;">
|
||||
<a href="{% url 'twitch:reward_campaign_detail' reward.twitch_id %}">
|
||||
{% picture reward.image_best_url alt="Image for "|add:reward.name width=120 %}
|
||||
</a>
|
||||
</td>
|
||||
<td style="vertical-align: top;">
|
||||
<a href="{% url 'twitch:reward_campaign_detail' reward.twitch_id %}">
|
||||
{% if reward.brand %}{{ reward.brand }}:{% endif %}
|
||||
{{ reward.name }}
|
||||
</a>
|
||||
{% if reward.is_sitewide %}
|
||||
<span title="Sitewide reward">[Sitewide]</span>
|
||||
{% endif %}
|
||||
{% if reward.summary %}
|
||||
<br />
|
||||
<small>{{ reward.summary|truncatewords:30|linebreaksbr }}</small>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td style="vertical-align: top;">
|
||||
<span title="{{ reward.ends_at|date:'M d, Y H:i' }}">Ends in {{ reward.ends_at|timeuntil }}</span>
|
||||
</td>
|
||||
<td style="vertical-align: top; white-space: nowrap;">
|
||||
{% if reward.about_url and reward.external_url and reward.about_url == reward.external_url %}
|
||||
<a href="{{ reward.about_url }}">About / Redeem</a>
|
||||
{% else %}
|
||||
{% if reward.about_url %}<a href="{{ reward.about_url }}">About</a>{% endif %}
|
||||
{% if reward.external_url %}· <a href="{{ reward.external_url }}">Redeem</a>{% endif %}
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
{% if upcoming_rewards %}
|
||||
<h5 id="upcoming-rewards-header">Upcoming Rewards</h5>
|
||||
<table id="upcoming-rewards-table">
|
||||
<tbody>
|
||||
{% for reward in upcoming_rewards %}
|
||||
<tr id="reward-row-{{ reward.twitch_id }}">
|
||||
<td style="width: 130px; vertical-align: top;">
|
||||
<a href="{% url 'twitch:reward_campaign_detail' reward.twitch_id %}">
|
||||
{% picture reward.image_best_url alt="Image for "|add:reward.name width=120 %}
|
||||
</a>
|
||||
</td>
|
||||
<td style="vertical-align: top;">
|
||||
<a href="{% url 'twitch:reward_campaign_detail' reward.twitch_id %}">
|
||||
{% if reward.brand %}{{ reward.brand }}:{% endif %}
|
||||
{{ reward.name }}
|
||||
</a>
|
||||
{% if reward.is_sitewide %}<span title="Sitewide reward">[Sitewide]</span>{% endif %}
|
||||
{% if reward.summary %}
|
||||
<br />
|
||||
<small>{{ reward.summary|truncatewords:30|linebreaksbr }}</small>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td style="vertical-align: top;">
|
||||
<span title="Starts on {{ reward.starts_at|date:'M d, Y H:i' }}">Starts in {{ reward.starts_at|timeuntil }}</span>
|
||||
</td>
|
||||
<td style="vertical-align: top; white-space: nowrap;">
|
||||
{% if reward.about_url and reward.external_url and reward.about_url == reward.external_url %}
|
||||
<a href="{{ reward.about_url }}">About / Redeem</a>
|
||||
{% else %}
|
||||
{% if reward.about_url %}<a href="{{ reward.about_url }}">About</a>{% endif %}
|
||||
{% if reward.external_url %} · <a href="{{ reward.external_url }}">Redeem</a>{% endif %}
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
{% if expired_rewards %}
|
||||
<h5 id="expired-rewards-header">Past Rewards</h5>
|
||||
<table id="expired-rewards-table">
|
||||
<tbody>
|
||||
{% for reward in expired_rewards %}
|
||||
<tr id="reward-row-{{ reward.twitch_id }}">
|
||||
<td style="width: 130px; vertical-align: top;">
|
||||
<a href="{% url 'twitch:reward_campaign_detail' reward.twitch_id %}">
|
||||
{% picture reward.image_best_url alt="Image for "|add:reward.name width=120 %}
|
||||
</a>
|
||||
</td>
|
||||
<td style="vertical-align: top;">
|
||||
<a href="{% url 'twitch:reward_campaign_detail' reward.twitch_id %}">
|
||||
{% if reward.brand %}{{ reward.brand }}:{% endif %}
|
||||
{{ reward.name }}
|
||||
</a>
|
||||
{% if reward.is_sitewide %}<span title="Sitewide reward">[Sitewide]</span>{% endif %}
|
||||
{% if reward.summary %}
|
||||
<br />
|
||||
<small>{{ reward.summary|truncatewords:30|linebreaksbr }}</small>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td style="vertical-align: top;">
|
||||
<span title="Ended on {{ reward.ends_at|date:'M d, Y H:i' }}">{{ reward.ends_at|timesince }} ago</span>
|
||||
</td>
|
||||
<td style="vertical-align: top; white-space: nowrap;">
|
||||
{% if reward.about_url and reward.external_url and reward.about_url == reward.external_url %}
|
||||
<a href="{{ reward.about_url }}">About / Redeem</a>
|
||||
{% else %}
|
||||
{% if reward.about_url %}<a href="{{ reward.about_url }}">About</a>{% endif %}
|
||||
{% if reward.external_url %} · <a href="{{ reward.external_url }}">Redeem</a>{% endif %}
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
{% endblock content %}
|
||||
|
|
|
|||
|
|
@ -26,16 +26,18 @@
|
|||
<div>
|
||||
<a href="{% url 'core:dashboard' %}">Dashboard</a> > <a href="{% url 'twitch:org_list' %}">Organizations</a> > {{ organization.name }}
|
||||
</div>
|
||||
<div>
|
||||
Published
|
||||
<time datetime="{{ organization.added_at|date:'c' }}"
|
||||
title="{{ organization.added_at|date:'DATETIME_FORMAT' }}">{{ organization.added_at|date:"M d, Y H:i" }}</time> ({{ organization.added_at|timesince }} ago)
|
||||
</div>
|
||||
<div>
|
||||
Last updated
|
||||
<time datetime="{{ organization.updated_at|date:'c' }}"
|
||||
title="{{ organization.updated_at|date:'DATETIME_FORMAT' }}">{{ organization.updated_at|date:"M d, Y H:i" }}</time> ({{ organization.updated_at|timesince }} ago)
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Published</dt>
|
||||
<dd>
|
||||
<time datetime="{{ organization.added_at|date:'c' }}"
|
||||
title="{{ organization.added_at|date:'DATETIME_FORMAT' }}">{{ organization.added_at|date:"M d, Y H:i" }}</time> ({{ organization.added_at|timesince }} ago)
|
||||
</dd>
|
||||
<dt>Last updated</dt>
|
||||
<dd>
|
||||
<time datetime="{{ organization.updated_at|date:'c' }}"
|
||||
title="{{ organization.updated_at|date:'DATETIME_FORMAT' }}">{{ organization.updated_at|date:"M d, Y H:i" }}</time> ({{ organization.updated_at|timesince }} ago)
|
||||
</dd>
|
||||
</dl>
|
||||
<header>
|
||||
<h2>Games by {{ organization.name }}</h2>
|
||||
</header>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue