checkpoint: draw the poll meter
This commit is contained in:
parent
d3d3936704
commit
04ebc4e5bd
1 changed files with 46 additions and 13 deletions
|
@ -33,11 +33,22 @@ func (p Poll) Display(noColor bool) string {
|
|||
|
||||
indent := " "
|
||||
|
||||
builder.WriteString(utilities.HeaderFormat(noColor, "POLL ID:") + "\n" + indent + p.ID)
|
||||
builder.WriteString("\n\n" + utilities.HeaderFormat(noColor, "OPTIONS:"))
|
||||
builder.WriteString(
|
||||
utilities.HeaderFormat(noColor, "POLL ID:") +
|
||||
"\n" + indent + p.ID +
|
||||
"\n\n" + utilities.HeaderFormat(noColor, "OPTIONS:"),
|
||||
)
|
||||
|
||||
displayPollContent(&builder, p, noColor, indent)
|
||||
builder.WriteString("\n\n" + utilities.HeaderFormat(noColor, "MULTIPLE CHOICES ALLOWED:") + "\n" + indent + strconv.FormatBool(p.Multiple))
|
||||
builder.WriteString("\n\n" + utilities.HeaderFormat(noColor, "YOU VOTED:") + "\n" + indent + strconv.FormatBool(p.Voted))
|
||||
|
||||
builder.WriteString(
|
||||
"\n\n" +
|
||||
utilities.HeaderFormat(noColor, "MULTIPLE CHOICES ALLOWED:") +
|
||||
"\n" + indent + strconv.FormatBool(p.Multiple) +
|
||||
"\n\n" +
|
||||
utilities.HeaderFormat(noColor, "YOU VOTED:") +
|
||||
"\n" + indent + strconv.FormatBool(p.Voted),
|
||||
)
|
||||
|
||||
if len(p.OwnVotes) > 0 {
|
||||
builder.WriteString("\n\n" + utilities.HeaderFormat(noColor, "YOUR VOTES:"))
|
||||
|
@ -47,7 +58,11 @@ func (p Poll) Display(noColor bool) string {
|
|||
}
|
||||
}
|
||||
|
||||
builder.WriteString("\n\n" + utilities.HeaderFormat(noColor, "EXPIRED:") + "\n" + indent + strconv.FormatBool(p.Expired))
|
||||
builder.WriteString(
|
||||
"\n\n" +
|
||||
utilities.HeaderFormat(noColor, "EXPIRED:") +
|
||||
"\n" + indent + strconv.FormatBool(p.Expired),
|
||||
)
|
||||
|
||||
return builder.String()
|
||||
}
|
||||
|
@ -55,23 +70,41 @@ func (p Poll) Display(noColor bool) string {
|
|||
func displayPollContent(writer io.StringWriter, poll Poll, noColor bool, indent string) {
|
||||
for ind, option := range poll.Options {
|
||||
var percentage int
|
||||
var calculate float64
|
||||
|
||||
if poll.VotesCount == 0 {
|
||||
percentage = 0
|
||||
} else {
|
||||
calculate := math.Floor(100 * (float64(option.VotesCount) / float64(poll.VotesCount)))
|
||||
percentage = int(calculate)
|
||||
calculate = float64(option.VotesCount) / float64(poll.VotesCount)
|
||||
percentage = int(math.Floor(100 * calculate))
|
||||
}
|
||||
|
||||
writer.WriteString("\n\n" + indent + "[" + strconv.Itoa(ind) + "] " + option.Title)
|
||||
drawPollMeter(writer, calculate, 80, indent)
|
||||
|
||||
writer.WriteString(
|
||||
"\n\n" + indent + "[" + strconv.Itoa(ind) + "] " + option.Title +
|
||||
"\n" + indent + strings.Repeat("\u2584", 80) +
|
||||
"\n" + indent + strconv.Itoa(option.VotesCount) + " votes " +
|
||||
"(" + strconv.Itoa(percentage) + "%)",
|
||||
)
|
||||
}
|
||||
|
||||
writer.WriteString("\n\n" + indent + utilities.FieldFormat(noColor, "Total votes:") + " " + strconv.Itoa(poll.VotesCount))
|
||||
writer.WriteString("\n" + indent + utilities.FieldFormat(noColor, "Poll ID:") + " " + poll.ID)
|
||||
writer.WriteString("\n" + indent + utilities.FieldFormat(noColor, "Poll is open until:") + " " + utilities.FormatTime(poll.ExpiredAt))
|
||||
writer.WriteString(
|
||||
"\n\n" +
|
||||
indent + utilities.FieldFormat(noColor, "Total votes:") + " " + strconv.Itoa(poll.VotesCount) +
|
||||
"\n" + indent + utilities.FieldFormat(noColor, "Poll ID:") + " " + poll.ID +
|
||||
"\n" + indent + utilities.FieldFormat(noColor, "Poll is open until:") + " " + utilities.FormatTime(poll.ExpiredAt),
|
||||
)
|
||||
}
|
||||
|
||||
func drawPollMeter(writer io.StringWriter, calculated float64, limit int, indent string) {
|
||||
colouredBlocks := int(math.Floor(float64(limit) * calculated))
|
||||
backgroundBlocks := limit - colouredBlocks
|
||||
blockChar := "\u2501"
|
||||
|
||||
writer.WriteString(
|
||||
"\n" +
|
||||
indent +
|
||||
"\033[32m" + strings.Repeat(blockChar, colouredBlocks) + "\033[0m" +
|
||||
strings.Repeat(blockChar, backgroundBlocks),
|
||||
)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue