Browse Source

Refactor campaigns module and extend.

master
Ben Kurtovic 4 years ago
parent
commit
16d093df71
6 changed files with 84 additions and 31 deletions
  1. +5
    -0
      calefaction/modules/campaigns/__init__.py
  2. +47
    -0
      calefaction/modules/campaigns/getters.py
  3. +4
    -9
      calefaction/modules/campaigns/routes.py
  4. +1
    -0
      config/modules/campaigns.yml.sample
  5. +7
    -7
      static/main.css
  6. +20
    -15
      templates/campaigns/campaign.mako

+ 5
- 0
calefaction/modules/campaigns/__init__.py View File

@@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-

from .getters import get_current, get_count, get_summary, get_unit
from .routes import home, navitem
from .._provided import config

+ 47
- 0
calefaction/modules/campaigns/getters.py View File

@@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-

from flask import g

from .._provided import config

__all__ = ["get_current", "get_count", "get_summary", "get_unit"]

def get_current():
"""Return the name of the currently selected campaign, or None."""
if not config["enabled"]:
return None
setting = g.auth.get_character_modprop("campaigns", "current")
if not setting or setting not in config["enabled"]:
return config["enabled"][0]
return setting

def get_count(cname, opname):
"""Return the primary operation count for the given campaign/operation."""
key = cname + "." + opname
operation = config["campaigns"][cname]["operations"][opname]
optype = operation["type"]
qualifiers = operation["qualifiers"]

...
import random
return [random.randint(0, 500), random.randint(10000, 500000), random.randint(10000000, 50000000000)][random.randint(0, 2)]

def get_summary(name, opname, limit=5):
"""Return a sample fraction of results for the given campaign/operation."""
...
return []

def get_unit(operation, num):
"""Return the correct form of the unit tracked by the given operation."""
types = {
"killboard": "ship|ships",
"collection": "item|items"
}
if "unit" in operation:
unit = operation["unit"]
else:
unit = types[operation["type"]]

if "|" in unit:
return unit.split("|")[0 if num == 1 else 1]
return unit

calefaction/modules/campaigns.py → calefaction/modules/campaigns/routes.py View File

@@ -3,16 +3,11 @@
from flask import abort, g, redirect, request, url_for
from flask_mako import render_template

from ._provided import blueprint, config
from .getters import get_current
from .._provided import blueprint, config

def get_current():
"""Return the name of the currently selected campaign, or None."""
if not config["enabled"]:
return None
setting = g.auth.get_character_modprop("campaigns", "current")
if not setting or setting not in config["enabled"]:
return config["enabled"][0]
return setting
__all__ = ["home", "navitem", "current_campaign", "campaign", "operation",
"set_campaign"]

def home():
"""Render and return the main campaign page."""

+ 1
- 0
config/modules/campaigns.yml.sample View File

@@ -36,6 +36,7 @@ campaigns:
titan:
title: Let's Build a Titan
type: collection
unit: unit|units
qualifiers: |-
return item_type == "Tritanium"
bar:


+ 7
- 7
static/main.css View File

@@ -376,24 +376,24 @@ h2 .disabled::after {
justify-content: space-between;
}

.operation .stats .primary {
.operation .overview .num {
line-height: 60px;
height: 60px;
}

.operation .stats .primary .big {
.operation .overview .num.big {
font-size: 300%;
}

.operation .stats .primary .medium {
.operation .overview .num.medium {
font-size: 200%;
}

.operation .stats .primary .small {
.operation .overview .num.small {
font-size: 150%;
}

.operation .stats .unit {
.operation .overview .unit {
font-style: italic;
}

@@ -421,11 +421,11 @@ h2 .disabled::after {
margin: 0.5em 0;
}

.operation .stats > div {
.operation .overview > div {
display: inline-block;
}

.operation .stats .unit {
.operation .overview .unit {
margin-left: 0.25em;
}
}


+ 20
- 15
templates/campaigns/campaign.mako View File

@@ -6,28 +6,33 @@
<span class="understate">Campaign:</span>
<span${"" if enabled else ' class="disabled"'}>${campaign["title"] | h}</span>
</h2>
<% mod = g.config.modules.campaigns %>
<div id="operations">
% for section in campaign["layout"]:
<% klass = "loose" if len(section) < 3 else "tight" %>
<section class="${klass}">
% for opname in section:
<% operation = campaign["operations"][opname] %>
<%
operation = campaign["operations"][opname]
num = mod.get_count(name, opname)
summary = mod.get_summary(name, opname, limit=5)
klass = "big" if num < 1000 else "medium" if num < 1000000 else "small"
%>
<div class="operation">
<h3><a href="${url_for('campaigns.operation', cname=name, opname=opname)}">${operation["title"] | h}</a></h3>
<div class="stats">
<!-- ... -->
<%
random = __import__("random")
n = [random.randint(0, 500), random.randint(10000, 500000), random.randint(10000000, 50000000000)][random.randint(0, 2)]
%>
<%
klass = "big" if n < 1000 else "medium" if n < 1000000 else "small"
%>
<div class="primary">
<span class="${klass}">${"{:,}".format(n)}</span>
</div>
<div class="unit">${"ships" if klass == "big" else "points" if klass == "medium" else "ISK"}</div> <!-- ... plural -->
<h3>
<a href="${url_for('campaigns.operation', cname=name, opname=opname)}">${operation["title"] | h}</a>
</h3>
<div class="overview">
<div class="num ${klass}">${"{:,}".format(num)}</div>
<div class="unit">${mod.get_unit(operation, num)}</div>
</div>
% if summary:
<ul class="summary">
% for item in summary:
<li>${item}</li>
% endfor
</ul>
% endif
</div>
% endfor
</section>


Loading…
Cancel
Save