UNPKG

pockybot

Version:

Spark bot that handles team recognition

98 lines (93 loc) 5.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DefaultFormatResultsService = void 0; const htmlHelper_1 = require("../parsers/htmlHelper"); const logger_1 = require("../logger"); class DefaultFormatResultsService { constructor(config, categoryResultsService) { this.config = config; this.categoryResultsService = categoryResultsService; } async returnResultsHtml(fullResults, winners) { const today = new Date(); const todayString = today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate(); const categories = this.config.getStringConfig('keyword'); // Losers are people in fullResults not also in winners const losers = fullResults.filter(result => !winners.some(winner => winner.personId === result.personId)); const winnersTable = htmlHelper_1.default.generateTable(winners, 'winners'); const losersTable = htmlHelper_1.default.generateTable(losers, 'losers'); const categoryResultsTable = this.categoryResultsService.returnCategoryResultsTable(fullResults, categories); const penaltyTable = htmlHelper_1.default.generatePenaltyTable(fullResults); return this.generateHtml(winnersTable, losersTable, categoryResultsTable, penaltyTable, todayString); } generateHtml(winnersTable, resultsTable, categoryResultsTable, penaltyTable, todayString) { try { const html = `<!doctype html><html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>Pegs ${todayString}</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.2/css/bootstrap.min.css" integrity="sha256-zVUlvIh3NEZRYa9X/qpNY8P1aBy0d4FrI7bhfZSZVwc=" crossorigin="anonymous" /> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous"> <style type="text/css"> h2 { font-size: 170%; } .clickable { cursor: pointer; padding: 6px; } .clickable:hover { background-color: #e9ecef; } .clickable > i.fa-plus, .clickable > tr > th > i.fa-plus { display: none; } .clickable > i.fa-minus, .clickable > tr > th > i.fa-minus { display: inline-block; } .clickable.collapsed > i.fa-plus, .clickable.collapsed > tr > th > i.fa-plus { display: inline-block; } .clickable.collapsed > i.fa-minus, .clickable.collapsed > tr > th > i.fa-minus { display: none; } </style> </head> <body> <div class="container content"> <h1 class="pt-3 pb-3">Pegs and Pocky ${todayString}</h1> <div class="nav nav-tabs nav-fill" id="nav-tab" role="tablist"> <a class="nav-item nav-link active" id="generalResults-tab" data-toggle="tab" href="#generalResults" aria-controls="generalResults" aria-selected="true">General Results</a> <a class="nav-item nav-link" id="categoryResults-tab" data-toggle="tab" href="#categoryResults" role="tab" aria-controls="categoryResults" aria-selected="false">Category Results</a> <a class="nav-item nav-link" id="penaltyResults-tab" data-toggle="tab" href="#penaltyResults" role="tab" aria-controls="penaltyResults" aria-selected="false">Penalty Results</a> </div> <div class="tab-content py-3 px-3 px-sm-0" id="nav-tabContent"> <div class="tab-pane fade show active" id="generalResults" role="tabpanel" aria-labelledby="generalResults-tab"> <h2 class="clickable collapsed" data-toggle="collapse" data-target="#section-winners" aria-expanded="false" aria-controls="section-winners"><i class="fas fa-plus"></i><i class="fas fa-minus"></i> Winners</h2> ${winnersTable} <h2 class="clickable collapsed" data-toggle="collapse" data-target="#section-losers" aria-expanded="false" aria-controls="section-losers"><i class="fas fa-plus"></i><i class="fas fa-minus"></i> Other Pegs Received</h2> ${resultsTable} </div> <div class="tab-pane fade show" id="categoryResults" role="tabpanel" aria-labelledby="categoryResults-tab"> ${categoryResultsTable} </div> <div class="tab-pane fade show" id="penaltyResults" role="tabpanel" aria-labelledby="penaltyResults-tab"> <h2 class="clickable collapsed" data-toggle="collapse" data-target="#section-penalties" aria-expanded="false" aria-controls="section-penalties"><i class="fas fa-plus"></i><i class="fas fa-minus"></i> Penalties</h2> ${penaltyTable} </div> </div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.slim.min.js" integrity="sha256-3edrmyuQ0w65f8gfBsqowzjJe2iM6n0nKciPUp8y+7E=" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.2/js/bootstrap.min.js" integrity="sha256-IeI0loa35pfuDxqZbGhQUiZmD2Cywv1/bdqiypGW46o=" crossorigin="anonymous"></script> </body> </html>`; return html; } catch (e) { logger_1.Logger.error(`[ResultsService.generateHtml] Error in generating html: ${e.message}`); } } } exports.DefaultFormatResultsService = DefaultFormatResultsService;