diff options
author | emkael <emkael@tlen.pl> | 2018-05-01 11:53:23 +0200 |
---|---|---|
committer | emkael <emkael@tlen.pl> | 2018-05-01 11:53:23 +0200 |
commit | 28218c054785e3cb77b6e36182bce97c8010319e (patch) | |
tree | 7006179fbcbe203ac588d011a31b797074907151 /jfr_playoff | |
parent | 9a5f06ee9cddd38e11f49a2f934de202d34e63e2 (diff) |
Refactoring template "engine" to provide a uniform interface
Diffstat (limited to 'jfr_playoff')
-rw-r--r-- | jfr_playoff/generator.py | 90 | ||||
-rw-r--r-- | jfr_playoff/template.py | 364 |
2 files changed, 241 insertions, 213 deletions
diff --git a/jfr_playoff/generator.py b/jfr_playoff/generator.py index 2b5aaf0..e5d29a8 100644 --- a/jfr_playoff/generator.py +++ b/jfr_playoff/generator.py @@ -1,6 +1,6 @@ from datetime import datetime -import jfr_playoff.template as p_temp +from jfr_playoff.template import Template as p_temp from jfr_playoff.data import PlayoffData @@ -21,67 +21,82 @@ class PlayoffGenerator(object): self.data.generate_phases(), self.data.fill_match_info()) leaderboard_table = self.get_leaderboard_table() - return p_temp.PAGE % ( - p_temp.PAGE_HEAD % ( - p_temp.PAGE_HEAD_REFRESH % ( - self.page['refresh']) + return p_temp.get( + 'PAGE', + p_temp.get( + 'PAGE_HEAD', + p_temp.get( + 'PAGE_HEAD_REFRESH', + self.page['refresh']) \ if self.page['refresh'] > 0 else '', self.page['title']), - p_temp.PAGE_BODY % ( + p_temp.get( + 'PAGE_BODY', self.page['logoh'], match_grid, self.get_swiss_links(), leaderboard_table, self.get_leaderboard_caption_table() if leaderboard_table else '', - p_temp.PAGE_BODY_FOOTER.decode('utf8') % ( + p_temp.get( + 'PAGE_BODY_FOOTER', datetime.now().strftime('%Y-%m-%d o %H:%M:%S')))) def get_match_table(self, match): rows = '' for team in match.teams: - score_html = p_temp.MATCH_SCORE % (team.score) + score_html = p_temp.get('MATCH_SCORE', team.score) team_label = ' / '.join([ self.data.get_shortname(name) for name in team.name.split('<br />')]) - team_html = p_temp.MATCH_TEAM_LINK % ( - match.link, team.name, team_label) if match.link is not None \ - else p_temp.MATCH_TEAM_NON_LINK % ( - team.name, team_label) - rows += p_temp.MATCH_TEAM_ROW % ( + team_html = p_temp.get( + 'MATCH_TEAM_LINK', + match.link, team.name, team_label) \ + if match.link is not None \ + else p_temp.get( + 'MATCH_TEAM_NON_LINK', + team.name, team_label) + rows += p_temp.get( + 'MATCH_TEAM_ROW', ' '.join([ 'winner' if team.name == match.winner else '', 'loser' if team.name == match.loser else '' ]).strip(), team_html, - p_temp.MATCH_LINK % (match.link, score_html) if match.link is not None else score_html) - html = p_temp.MATCH_TABLE.decode('utf8') % ( + p_temp.get( + 'MATCH_LINK', + match.link, score_html) \ + if match.link is not None else score_html) + html = p_temp.get( + 'MATCH_TABLE', int(self.page['width'] * 0.75), int(self.page['width'] * 0.25), rows) if match.running > 0: - running_html = p_temp.MATCH_RUNNING % (match.running) - html += p_temp.MATCH_LINK % (match.link, running_html) if match.link is not None else running_html + running_html = p_temp.get('MATCH_RUNNING', match.running) + html += p_temp.get('MATCH_LINK', match.link, running_html) if match.link is not None else running_html return html def get_phase_header(self, phase, position): - if phase.running: - grid_header = p_temp.MATCH_GRID_PHASE_RUNNING - else: - grid_header = p_temp.MATCH_GRID_PHASE - grid_header = grid_header % (phase.title) + grid_header = p_temp.get( + 'MATCH_GRID_PHASE_RUNNING' if phase.running \ + else 'MATCH_GRID_PHASE', + phase.title) if phase.link is not None: - return p_temp.MATCH_GRID_PHASE_LINK % ( + return p_temp.get( + 'MATCH_GRID_PHASE_LINK', phase.link, self.page['width'], position, grid_header) else: - return p_temp.MATCH_GRID_PHASE_NON_LINK % ( + return p_temp.get( + 'MATCH_GRID_PHASE_NON_LINK', self.page['width'], position, grid_header) def get_match_box(self, match, position): if match is not None: - return p_temp.MATCH_BOX % ( + return p_temp.get( + 'MATCH_BOX', position[0], position[1], match.id, ' '.join([ @@ -116,7 +131,8 @@ class PlayoffGenerator(object): (grid_x, grid_y)) row_no += 1 col_no += 1 - return p_temp.MATCH_GRID % ( + return p_temp.get( + 'MATCH_GRID', canvas_size[0], canvas_size[1], canvas_size[0], canvas_size[1], ' '.join(['data-%s="%s"' % ( @@ -136,9 +152,10 @@ class PlayoffGenerator(object): rows = '' for style in self.leaderboard_classes: if 'caption' in style: - rows += p_temp.LEADERBOARD_CAPTION_TABLE_ROW % ( + rows += p_temp.get( + 'LEADERBOARD_CAPTION_TABLE_ROW', style['class'], style['caption']) - return p_temp.LEADERBOARD_CAPTION_TABLE % (rows) if rows else '' + return p_temp.get('LEADERBOARD_CAPTION_TABLE', rows) if rows else '' def get_leaderboard_table(self): leaderboard = self.data.fill_leaderboard() @@ -147,24 +164,27 @@ class PlayoffGenerator(object): position = 1 rows = '' for team in leaderboard: - rows += p_temp.LEADERBOARD_ROW % ( + rows += p_temp.get( + 'LEADERBOARD_ROW', self.get_leaderboard_row_class(position), position, self.get_flag(team), team or '') position += 1 - html = p_temp.LEADERBOARD.decode('utf8') % (rows) + html = p_temp.get('LEADERBOARD', rows) return html def get_swiss_links(self): info = [] for event in self.data.get_swiss_info(): - event_label = p_temp.SWISS_DEFAULT_LABEL % (event['position']) + event_label = p_temp.get('SWISS_DEFAULT_LABEL', event['position']) if 'label' in event and event['label'] is not None: event_label = event['label'] - info.append((p_temp.SWISS_LINK if event['finished'] else p_temp.SWISS_RUNNING_LINK) % ( - event['link'], event_label - )) + info.append((p_temp.get('SWISS_LINK') \ + if event['finished'] \ + else p_temp.get( + 'SWISS_RUNNING_LINK', + event['link'], event_label))) return '\n'.join(info) def get_flag(self, team): flag = self.data.get_team_image(team) - return '' if flag is None else p_temp.LEADERBOARD_ROW_FLAG % (flag) + return '' if flag is None else p_temp.get('LEADERBOARD_ROW_FLAG', flag) diff --git a/jfr_playoff/template.py b/jfr_playoff/template.py index b99c7c7..0699c1e 100644 --- a/jfr_playoff/template.py +++ b/jfr_playoff/template.py @@ -1,180 +1,188 @@ # -*- coding: utf-8 -*- -MATCH_TABLE = ''' -<table border="0" cellspacing="0"> -<tr> -<td class="s12" width="%d"> </td> -<td class="bdcc2" width="%d"> wynik </td> -</tr> -%s -</table> -''' - -MATCH_LINK = ''' -<a href="%s" target="_top"> -%s -</a> -''' - -MATCH_SCORE = ''' - %.1f -''' - -MATCH_TEAM_LINK = ''' -<a href="%s" onmouseover="Tip('%s')" onmouseout="UnTip()">%s</a> -''' - -MATCH_TEAM_NON_LINK = ''' -<a onmouseover="Tip('%s')" onmouseout="UnTip()">%s</a> -''' - -MATCH_TEAM_ROW = ''' -<tr class="%s"> -<td class="bd1"> %s </td> -<td class="bdc"> -%s -</td> -</tr> -''' - -MATCH_RUNNING = ''' -<img src="images/A.gif" /> -<span style="font-size: 10pt">%d</span> -<img src="images/A.gif" /> -''' - -MATCH_GRID = ''' -<div style="position: relative; width: %dpx; height: %dpx; margin: 10px"> -<canvas width="%d" height="%d" id="playoff_canvas" %s></canvas> -%s -<script src="sklady/playoff.js" type="text/javascript"></script> -</div> -''' - -MATCH_GRID_PHASE_LINK = ''' -<a href="%s" target="_top" style="display: inline-block; width: %dpx; text-align: center; position: absolute; top: 0; left: %dpx"> -%s -</a> -''' - -MATCH_GRID_PHASE_NON_LINK = ''' -<span class="phase_header" style="display: inline-block; width: %dpx; text-align: center; position: absolute; top: 0; left: %dpx"> -<p style="margin: 0">%s</p> -</span> -''' - -MATCH_GRID_PHASE = ''' -<font size="4">%s</font> -''' - -MATCH_GRID_PHASE_RUNNING = ''' -<img src="images/A.gif" /> -<font size="4">%s</font> -<img src="images/A.gif" /> -''' - -MATCH_BOX = ''' -<div style="text-align: center; position: absolute; left: %dpx; top: %dpx" data-id="%d" data-winner="%s" data-loser="%s" class="playoff_matchbox"> -%s -</div> -''' - -LEADERBOARD = ''' -<table border="0" cellspacing="0"> -<tr> -<td class="bdnl12" colspan="2" align="center"><b> KLASYFIKACJA KOŃCOWA </b></td> -</tr> -<tr> -<td class="e" colspan="2"> </td> -</tr> -<tr> -<td class="bdcc12"> miejsce </td> -<td class="bdcc2"> drużyna </td> -</tr> -%s -</table> -''' - -LEADERBOARD_ROW = ''' -<tr class="%s"> -<td class="bdc1">%d</td> -<td class="bd"> - %s %s -</td> -</tr> -''' - -LEADERBOARD_ROW_FLAG = ''' -<img class="fl" src="images/%s" /> -''' - -LEADERBOARD_CAPTION_TABLE = ''' -<table class="caption_table" border="0" cellspacing="0"> -<tr><td class="e"> </td></tr> -<tr><td class="bdnl12" align="center"><b> LEGENDA </b></td></tr> -%s -</table> -''' - -LEADERBOARD_CAPTION_TABLE_ROW = ''' -<tr class="%s"> -<td class="bd1"> - %s -</td> -</tr> -''' - -PAGE_HEAD = ''' -<meta http-equiv="Pragma" content="no-cache" /> -<meta http-equiv="Cache-Control" content="no-cache" /> -<meta name="robots" content="noarchive" /> -<meta http-equiv="expires" content="0" /> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="Generator" content="PlayOff" /> -%s -<title>%s</title> -<link rel="stylesheet" type="text/css" href="css/kolorki.css" /> -<script type="text/javascript" src="sklady/myAjax.js"></script> -''' - -PAGE_HEAD_REFRESH = ''' -<meta http-equiv="Refresh" content="%d" /> -''' - -PAGE_BODY = ''' -<script type="text/javascript" src="sklady/wz_tooltip.js"></script> -%s -%s -<p> -%s -</p> -%s -%s -%s -''' - -PAGE_BODY_FOOTER = ''' -<p class="f"> Admin ©Jan Romański'2005, PlayOff ©Michał Klichowicz'2017-2018, strona wygenerowana %s</p> -''' - -PAGE = ''' -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html> -<head> -%s -</head> -<body class="all"> -%s -</body> -</html> -''' - -SWISS_LINK = ''' -[<a href="%s" class="zb" target="_top"> %s </a>]<br /><br /> -''' - -SWISS_RUNNING_LINK = ''' -[<a href="%s" class="zb" target="_top"> <img src="images/A.gif" /> %s <img src="images/A.gif" /> </a>]<br /><br /> -''' - -SWISS_DEFAULT_LABEL = 'Turniej o %d. miejsce' +class TemplateStrings(object): + + MATCH_TABLE = ''' + <table border="0" cellspacing="0"> + <tr> + <td class="s12" width="%d"> </td> + <td class="bdcc2" width="%d"> wynik </td> + </tr> + %s + </table> + ''' + + MATCH_LINK = ''' + <a href="%s" target="_top"> + %s + </a> + ''' + + MATCH_SCORE = ''' + %.1f + ''' + + MATCH_TEAM_LINK = ''' + <a href="%s" onmouseover="Tip('%s')" onmouseout="UnTip()">%s</a> + ''' + + MATCH_TEAM_NON_LINK = ''' + <a onmouseover="Tip('%s')" onmouseout="UnTip()">%s</a> + ''' + + MATCH_TEAM_ROW = ''' + <tr class="%s"> + <td class="bd1"> %s </td> + <td class="bdc"> + %s + </td> + </tr> + ''' + + MATCH_RUNNING = ''' + <img src="images/A.gif" /> + <span style="font-size: 10pt">%d</span> + <img src="images/A.gif" /> + ''' + + MATCH_GRID = ''' + <div style="position: relative; width: %dpx; height: %dpx; margin: 10px"> + <canvas width="%d" height="%d" id="playoff_canvas" %s></canvas> + %s + <script src="sklady/playoff.js" type="text/javascript"></script> + </div> + ''' + + MATCH_GRID_PHASE_LINK = ''' + <a href="%s" target="_top" style="display: inline-block; width: %dpx; text-align: center; position: absolute; top: 0; left: %dpx"> + %s + </a> + ''' + + MATCH_GRID_PHASE_NON_LINK = ''' + <span class="phase_header" style="display: inline-block; width: %dpx; text-align: center; position: absolute; top: 0; left: %dpx"> + <p style="margin: 0">%s</p> + </span> + ''' + + MATCH_GRID_PHASE = ''' + <font size="4">%s</font> + ''' + + MATCH_GRID_PHASE_RUNNING = ''' + <img src="images/A.gif" /> + <font size="4">%s</font> + <img src="images/A.gif" /> + ''' + + MATCH_BOX = ''' + <div style="text-align: center; position: absolute; left: %dpx; top: %dpx" data-id="%d" data-winner="%s" data-loser="%s" class="playoff_matchbox"> + %s + </div> + ''' + + LEADERBOARD = ''' + <table border="0" cellspacing="0"> + <tr> + <td class="bdnl12" colspan="2" align="center" style="text-transform: uppercase"><b> KLASYFIKACJA KOŃCOWA </b></td> + </tr> + <tr> + <td class="e" colspan="2"> </td> + </tr> + <tr> + <td class="bdcc12"> miejsce </td> + <td class="bdcc2"> drużyna </td> + </tr> + %s + </table> + ''' + + LEADERBOARD_ROW = ''' + <tr class="%s"> + <td class="bdc1">%d</td> + <td class="bd"> + %s %s + </td> + </tr> + ''' + + LEADERBOARD_ROW_FLAG = ''' + <img class="fl" src="images/%s" /> + ''' + + LEADERBOARD_CAPTION_TABLE = ''' + <table class="caption_table" border="0" cellspacing="0"> + <tr><td class="e"> </td></tr> + <tr><td class="bdnl12" align="center" style="text-transform: uppercase"><b> LEGENDA </b></td></tr> + %s + </table> + ''' + + LEADERBOARD_CAPTION_TABLE_ROW = ''' + <tr class="%s"> + <td class="bd1"> + %s + </td> + </tr> + ''' + + PAGE_HEAD = ''' + <meta http-equiv="Pragma" content="no-cache" /> + <meta http-equiv="Cache-Control" content="no-cache" /> + <meta name="robots" content="noarchive" /> + <meta http-equiv="expires" content="0" /> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <meta name="Generator" content="PlayOff" /> + %s + <title>%s</title> + <link rel="stylesheet" type="text/css" href="css/kolorki.css" /> + <script type="text/javascript" src="sklady/myAjax.js"></script> + ''' + + PAGE_HEAD_REFRESH = ''' + <meta http-equiv="Refresh" content="%d" /> + ''' + + PAGE_BODY = ''' + <script type="text/javascript" src="sklady/wz_tooltip.js"></script> + %s + %s + <p> + %s + </p> + %s + %s + %s + ''' + + PAGE_BODY_FOOTER = ''' + <p class="f"> Admin ©Jan Romański'2005, PlayOff ©Michał Klichowicz'2017-2018, strona wygenerowana %s</p> + ''' + + PAGE = ''' + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> + <html> + <head> + %s + </head> + <body class="all"> + %s + </body> + </html> + ''' + + SWISS_LINK = ''' + [<a href="%s" class="zb" target="_top"> %s </a>]<br /><br /> + ''' + + SWISS_RUNNING_LINK = ''' + [<a href="%s" class="zb" target="_top"> <img src="images/A.gif" /> %s <img src="images/A.gif" /> </a>]<br /><br /> + ''' + + SWISS_DEFAULT_LABEL = 'Turniej o %d. miejsce' + +class Template(object): + + @staticmethod + def get(string, *params): + return getattr(TemplateStrings, string).decode('utf8') % params |