Browse Source

Implement individual operation pages.

master
Ben Kurtovic 8 years ago
parent
commit
988a567bc1
4 changed files with 157 additions and 30 deletions
  1. +61
    -5
      static/campaigns.css
  2. +1
    -1
      static/campaigns.js
  3. +40
    -2
      templates/campaigns/operation.mako
  4. +55
    -22
      templates/campaigns/renderers.mako

+ 61
- 5
static/campaigns.css View File

@@ -29,6 +29,15 @@ h2 .disabled-info {
font-variant: none; font-variant: none;
} }


.breadcrumb {
margin-top: 1em;
font-size: 90%;
}

.breadcrumb::after {
content: "»";
}

#operations { #operations {
margin-bottom: 1em; margin-bottom: 1em;
} }
@@ -72,6 +81,7 @@ h2 .disabled-info {


.operation .summary .head { .operation .summary .head {
margin-top: 1em; margin-top: 1em;
font-weight: normal;
} }


.operation .summary .contents { .operation .summary .contents {
@@ -110,10 +120,14 @@ h2 .disabled-info {
padding-right: 0.5em; padding-right: 0.5em;
} }


.operation .board .icon {
.operation:not(.detail) .board .icon {
width: 46px; width: 46px;
} }


.operation.detail .board .icon {
width: 52px;
}

.operation .board.expanded { .operation .board.expanded {
position: absolute; position: absolute;
z-index: 1; z-index: 1;
@@ -121,7 +135,7 @@ h2 .disabled-info {
clip-path: inset(0 100% 0 0); clip-path: inset(0 100% 0 0);
} }


.operation .board:not(.expanded) .extra {
.operation:not(.detail) .board:not(.expanded) .extra {
display: none; display: none;
} }


@@ -130,15 +144,27 @@ h2 .disabled-info {
} }


.operation .board img { .operation .board img {
vertical-align: middle;
}

.operation:not(.detail) .board img {
width: 42px; width: 42px;
height: 42px; height: 42px;
vertical-align: middle;
}

.operation.detail .board img {
width: 48px;
height: 48px;
} }


.operation .board abbr { .operation .board abbr {
border-bottom: none; border-bottom: none;
} }


.operation .board a:hover {
text-decoration: none;
}

.operation .itemboard td:last-child { .operation .itemboard td:last-child {
padding-left: 0.5em; padding-left: 0.5em;
text-align: right; text-align: right;
@@ -154,6 +180,36 @@ h2 .disabled-info {
color: #AAA; color: #AAA;
} }


.operation.detail {
margin-bottom: 1em;
}

.operation.detail .overview {
margin-left: 1em;
}

.operation.detail .primary, .operation.detail .primary .unit {
display: inline-block;
}

.operation.detail .unit {
margin-left: 0.15em;
}

.operation.detail .contents, .operation.detail .board:not(.expanded) {
width: 100%;
}

.operation.detail .detail-item {
padding-left: 0.5em;
}

.operation.detail .detail-list > :not(:last-child)::after {
margin-left: 0.25em;
content: "/";
color: #AAA;
}

@media (min-width: 800px) { @media (min-width: 800px) {
#operations { #operations {
margin: 1em 0; margin: 1em 0;
@@ -163,12 +219,12 @@ h2 .disabled-info {
margin-bottom: 2em; margin-bottom: 2em;
} }


.operation {
.operation:not(.detail) {
margin: 0 0.75em; margin: 0 0.75em;
text-align: center; text-align: center;
} }


.operation .secondary {
.operation:not(.detail) .secondary {
margin-top: 0.5em; margin-top: 0.5em;
} }




+ 1
- 1
static/campaigns.js View File

@@ -6,7 +6,7 @@ $(function() {
$('#campaigns-select input[type="submit"]').hide(); $('#campaigns-select input[type="submit"]').hide();


//Selectively reveal operation summary details: //Selectively reveal operation summary details:
$(".operation .killboard tr").mouseenter(function() {
$(".operation:not(.detail) .killboard tr").mouseenter(function() {
var div = $("<table>", {addClass: "board expanded"}) var div = $("<table>", {addClass: "board expanded"})
.css($(this).position()) .css($(this).position())
.css("background-color", $(this).css("background-color")) .css("background-color", $(this).css("background-color"))


+ 40
- 2
templates/campaigns/operation.mako View File

@@ -1,4 +1,8 @@
<%!
from calefaction.format import format_isk
%>
<%inherit file="../_default.mako"/> <%inherit file="../_default.mako"/>
<%namespace file="renderers.mako" import="render_summary"/>
<%block name="title"> <%block name="title">
${self.support.maketitle(operation["title"], campaign["title"], "Campaigns")} ${self.support.maketitle(operation["title"], campaign["title"], "Campaigns")}
</%block> </%block>
@@ -8,8 +12,42 @@
<%block name="extrajs"> <%block name="extrajs">
${self.support.makejs("campaigns.js")} ${self.support.makejs("campaigns.js")}
</%block> </%block>
<h2> <!-- ... breadcrumb -->
<div class="breadcrumb">
Campaign: <a href="${url_for('.campaign', name=cname)}">${campaign["title"] | h}</a>
</div>
<h2>
<span class="understate">Operation:</span> <span class="understate">Operation:</span>
<span${"" if enabled else ' class="disabled"'}>${operation["title"] | h}</span> <span${"" if enabled else ' class="disabled"'}>${operation["title"] | h}</span>
% if not enabled:
<abbr class="disabled-info" title="Operation inactive">&#10008;</abbr>
% endif
</h2> </h2>
<p>...</p>
<div class="operation detail">
<%
mod = g.config.modules.campaigns
primary, secondary = mod.get_overview(cname, opname)
summary, renderer = mod.get_summary(cname, opname, limit=-1)
klass = "big" if primary < 1000 else "medium" if primary < 1000000 else "small"
punit = mod.get_unit(operation, primary)
sunit = mod.get_unit(operation, secondary, primary=False)
%>
<div class="overview">
<div class="primary">
<span class="num ${klass}">${"{:,}".format(primary)}</span>
<div class="unit">${punit}</div>
</div>
% if secondary is not None:
<div class="secondary">
<abbr title="${"{:,.2f}".format(secondary)} ${sunit}">
<span class="num">${format_isk(secondary) | h}</span>
<span class="unit">${sunit}</span>
</abbr>
</div>
% endif
</div>
% if summary:
<div class="summary">
${render_summary(renderer, summary, detail=True)}
</div>
% endif
</div>

+ 55
- 22
templates/campaigns/renderers.mako View File

@@ -3,7 +3,7 @@
format_quantity, format_isk_compact, format_utctime_compact, format_quantity, format_isk_compact, format_utctime_compact,
format_security, get_security_class) format_security, get_security_class)
%> %>
<%def name="_killboard_kill(kill)">
<%def name="_killboard_kill(kill, detail, any_alliances, any_factions)">
<% <%
victim = kill["victim"] victim = kill["victim"]
system = g.eve.universe.system(kill["system"]) system = g.eve.universe.system(kill["system"])
@@ -30,28 +30,49 @@
<img title="${victim['char_name'] | h}" alt="${victim['char_name'] | h}" src="${g.eve.image.character(victim["char_id"], 128)}"/> <img title="${victim['char_name'] | h}" alt="${victim['char_name'] | h}" src="${g.eve.image.character(victim["char_id"], 128)}"/>
</a> </a>
</td> </td>
% if detail:
<td class="detail-item">
<a href="https://zkillboard.com/character/${victim['char_id']}/">${victim['char_name'] | h}</a>
(${killed.name | h})
</td>
% endif
<td class="icon${' extra' if victim["alliance_id"] and victim["faction_id"] else ''}"> <td class="icon${' extra' if victim["alliance_id"] and victim["faction_id"] else ''}">
<a href="https://zkillboard.com/corporation/${victim['corp_id']}/"> <a href="https://zkillboard.com/corporation/${victim['corp_id']}/">
<img title="${victim['corp_name'] | h}" alt="${victim['corp_name'] | h}" src="${g.eve.image.corp(victim["corp_id"], 128)}"/> <img title="${victim['corp_name'] | h}" alt="${victim['corp_name'] | h}" src="${g.eve.image.corp(victim["corp_id"], 128)}"/>
</a> </a>
</td> </td>
<td class="icon${'' if victim["alliance_id"] else ' extra'}">
% if victim["alliance_id"]:
<a href="https://zkillboard.com/alliance/${victim['alliance_id']}/">
<img title="${victim['alliance_name'] | h}" alt="${victim['alliance_name'] | h}" src="${g.eve.image.alliance(victim["alliance_id"], 128)}"/>
</a>
% if any_alliances:
<td class="icon${'' if victim["alliance_id"] else ' extra'}">
% if victim["alliance_id"]:
<a href="https://zkillboard.com/alliance/${victim['alliance_id']}/">
<img title="${victim['alliance_name'] | h}" alt="${victim['alliance_name'] | h}" src="${g.eve.image.alliance(victim["alliance_id"], 128)}"/>
</a>
% endif
</td>
% endif % endif
</td>
<td class="icon${'' if victim["faction_id"] else ' extra'}">
% if victim["faction_id"]:
<a href="https://zkillboard.com/faction/${victim['faction_id']}/">
<img title="${victim['faction_name'] | h}" alt="${victim['faction_name'] | h}" src="${g.eve.image.faction(victim["faction_id"], 128)}"/>
</a>
% if any_factions:
<td class="icon${'' if victim["faction_id"] else ' extra'}">
% if victim["faction_id"]:
<a href="https://zkillboard.com/faction/${victim['faction_id']}/">
<img title="${victim['faction_name'] | h}" alt="${victim['faction_name'] | h}" src="${g.eve.image.faction(victim["faction_id"], 128)}"/>
</a>
% endif
</td>
% endif % endif
</td>
% if not victim["alliance_id"] and not victim["faction_id"]:
% if not detail and (any_alliances or any_factions) and not victim["alliance_id"] and not victim["faction_id"]:
<td class="icon spacer"></td> <td class="icon spacer"></td>
% endif % endif
% if detail:
<td class="detail-item detail-list">
<a href="https://zkillboard.com/corporation/${victim['corp_id']}/">${victim['corp_name'] | h}</a>
% if victim['alliance_name']:
<a href="https://zkillboard.com/alliance/${victim['alliance_id']}/">${victim['alliance_name'] | h}</a>
% endif
% if victim['faction_name']:
<a href="https://zkillboard.com/faction/${victim['faction_id']}/">${victim['faction_name'] | h}</a>
% endif
</td>
% endif
</tr> </tr>
</%def> </%def>
<%def name="_itemboard_item(item)"> <%def name="_itemboard_item(item)">
@@ -72,18 +93,30 @@
</td> </td>
</tr> </tr>
</%def> </%def>
<%def name="_killboard_recent(summary)">
<div class="head">Most recent kills:</div>
<%def name="_killboard_recent(summary, detail)">
% if detail:
<h3 class="head">Kills:</h3>
% else:
<div class="head">Most recent kills:</div>
% endif
<%
any_alliances = any(kill["victim"]["alliance_id"] for kill in summary)
any_factions = any(kill["victim"]["faction_id"] for kill in summary)
%>
<div class="contents"> <div class="contents">
<table class="board killboard"> <table class="board killboard">
% for kill in summary: % for kill in summary:
${_killboard_kill(kill)}
${_killboard_kill(kill, detail, any_alliances, any_factions)}
% endfor % endfor
</table> </table>
</div> </div>
</%def> </%def>
<%def name="_collection_items(summary)">
<div class="head">Top items:</div>
<%def name="_collection_items(summary, detail)">
% if detail:
<h3 class="head">Items:</h3>
% else:
<div class="head">Top items:</div>
% endif
<div class="contents"> <div class="contents">
<table class="board itemboard"> <table class="board itemboard">
% for item in summary: % for item in summary:
@@ -93,10 +126,10 @@
</div> </div>
</%def> </%def>


<%def name="render_summary(renderer, summary)"><%
<%def name="render_summary(renderer, summary, detail=False)"><%
if renderer == "killboard_recent": if renderer == "killboard_recent":
return _killboard_recent(summary)
return _killboard_recent(summary, detail)
if renderer == "collection_items": if renderer == "collection_items":
return _collection_items(summary)
return _collection_items(summary, detail)
raise RuntimeError("Unknown renderer: %s" % renderer) raise RuntimeError("Unknown renderer: %s" % renderer)
%></%def> %></%def>

Loading…
Cancel
Save