From 0ae3b4c385d293b1ac8553717c30e4f7222a743c Mon Sep 17 00:00:00 2001 From: emkael Date: Wed, 10 Oct 2018 00:00:37 +0200 Subject: Parameterization of team box label settings --- CONFIG.md | 10 ++++++++-- jfr_playoff/generator.py | 24 +++++++++++++----------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/CONFIG.md b/CONFIG.md index 471b190..f6d55c5 100644 --- a/CONFIG.md +++ b/CONFIG.md @@ -25,8 +25,14 @@ Konfiguracja składa się, po kolei, z: + `"refresh"` - parametr odświeżania strony drabinki: `0` = wyłączone, liczba naturalna = interwał odświeżania, w sekundach + `"width"` i `"height"` - wymiary (w pikselach) miejsca rezerwowanego dla każdego meczu w widoku drabinki (`"width"` bezpośrednio wpływa na rozmieszczanie kolumn, wewnątrz każdej z kolumn mecze rozmieszczane są równomiernie, w zależnie od ich liczby) + `"margin"` - odstęp między w/w miejscem (minimalny - jak widać, w przypadku mniejszej liczby meczów w fazie, odstępy się dopasują) - + `"label_length_limit"` - maksymalna liczba znaków wyświetlanych jako skrócona nazwa drużyn(y) w schemacie (`0` lub brak wartości oznacza brak limitu) - + `"predict_teams"` - flaga, jeśli włączona (`1`), w kolejnej fazie wypełniane są nazwy drużyn prowadzących/przegrywających w trwających meczach tak, jakby mecz miał się skończyć aktualnym wynikiem (etykiety takich drużyn mają nadaną osobną klasę CSS) + + słownik `"team_boxes"` przechowuje opcjonalne ustawienia wyświetlania nazw teamów: + * `"label_length_limit"` - maksymalna liczba znaków wyświetlanych jako skrócona nazwa drużyn(y) w schemacie (domyślnie `0` = brak limitu) + * `"predict_teams"` - flaga, jeśli włączona (`1`), w kolejnej fazie wypełniane są nazwy drużyn prowadzących/przegrywających w trwających meczach tak, jakby mecz miał się skończyć aktualnym wynikiem (etykiety takich drużyn mają nadaną osobną klasę CSS) + * `"label_separator"` - ciąg rozdzielający skrócone nazwy drużyn wyświetlane na schemacie (domyślnie ` / `) + * `"label_placeholder"` - ciąg wyświetlany w miejsce nieznanej drużyny (domyślnie `??`) + * `"label_ellipsis"` - ciąg wyświetlany na końcu skróconej etykiety teamów, gdy ustawienie `label_length_limit` ją skróciło (domyślnie `(...)`) + * `"name_separator"` - ciąg rozdzielający pełne nazwy teamów w etykiecie po najechaniu na skrócone nazwy w schemacie (domyślnie `
`) + * `"name_prefix"` - ciąg poprzedzający każdą pełną nazwę teamów w etykiecie po najechaniu (domyślnie wcięcie `  `) - sekcji `"canvas"`: ustawień rysowania linii + `"winner_h_offset"`, `"winner_v_offset"` - marginesy (poziomy i pionowy) rysowania linii zwycięzców (odpowiednio: pionowych i poziomych, względem środka obszaru) + `"loser_h_offset"`, `"loser_v_offset"` - analogiczne marginesy rysowania linii przegranych diff --git a/jfr_playoff/generator.py b/jfr_playoff/generator.py index 2028060..48a2eac 100644 --- a/jfr_playoff/generator.py +++ b/jfr_playoff/generator.py @@ -12,6 +12,7 @@ class PlayoffGenerator(object): self.page = settings.get('page') PlayoffLogger.get('generator').info( 'page settings: %s', self.page) + self.team_box_settings = self.page.get('team_boxes', {}) self.canvas = {} if settings.has_section('canvas'): self.canvas = settings.get('canvas') @@ -52,7 +53,7 @@ class PlayoffGenerator(object): datetime.now().strftime('%Y-%m-%d o %H:%M:%S')))) def __get_team_label(self, team_name, template='MATCH_TEAM_LABEL'): - if not self.page.get('predict_teams', None): + if not self.team_box_settings.get('predict_teams', None): # override template if team predictions are not enabled template = 'MATCH_TEAM_LABEL' return self.p_temp.get(template, team_name) @@ -87,13 +88,14 @@ class PlayoffGenerator(object): # the easy part: team score cell score_html = self.p_temp.get('MATCH_SCORE', team.score) # the hard part begins here. - # TODO: should separators and ellipsis indicators be configurable? team_label = [] # label is what's shown in the table cell - label_separator = ' / ' + label_separator = self.team_box_settings.get('label_separator', ' / ') + label_placeholder = self.team_box_settings.get('label_placeholder', '??') + label_ellipsis = self.team_box_settings.get('label_ellipsis', '(...)') team_name = [] # name is what's shown in the tooltip - name_separator = '
' - name_prefix = '  ' # prefix (indent) for team names in the tooltip - if (team.known_teams == 0) and not self.page.get('predict_teams', False): + name_separator = self.team_box_settings.get('name_separator', '
') + name_prefix = self.team_box_settings.get('name_prefix', '  ') # prefix (indent) for team names in the tooltip + if (team.known_teams == 0) and not self.team_box_settings.get('predict_teams', False): # we've got no teams eligible for the match and the prediction option is disabled team_label = '' team_name = '' @@ -105,12 +107,12 @@ class PlayoffGenerator(object): predicted_labels = [self.data.get_shortname(name) if name else None for name in team.possible_name] for l in range(0, len(labels)): if labels[l] is None: - if self.page.get('predict_teams', False) and (len(predicted_labels) > l): + if self.team_box_settings.get('predict_teams', False) and (len(predicted_labels) > l): # fill team labels with either predictions... labels[l] = predicted_labels[l] else: # ...or empty placeholders - labels[l] = '??' + labels[l] = label_placeholder # count how many teams are eligible (how many non-predicted teams are there) known_teams = len(is_label_predicted) - sum(is_label_predicted) # sort labels to move eligible teams in front of predicted teams @@ -121,9 +123,9 @@ class PlayoffGenerator(object): # we have at least one known/predicted team for l in range(0, len(labels)): # fill any remaining empty labels (i.e. these which had empty predictions available) with placeholders - labels[l] = coalesce(labels[l], '??') + labels[l] = coalesce(labels[l], label_placeholder) # shorten concatenated label to specified combined length - labels = self.__shorten_labels(labels, self.page.get('label_length_limit', 0), label_separator, '(...)') + labels = self.__shorten_labels(labels, self.team_box_settings.get('label_length_limit', 0), label_separator, label_ellipsis) for l in range(0, len(labels)): # concatenate labels, assigning appropriate classes to predicted teams team_label.append(self.__get_team_label( @@ -134,7 +136,7 @@ class PlayoffGenerator(object): if name: # every non-empty name gets some indentation team_name.append(name_prefix + name) - if self.page.get('predict_teams', False): + if self.team_box_settings.get('predict_teams', False): # remember where the list of eligible teams ends known_teams = len(team_name) for name in team.possible_name: -- cgit v1.2.3