# A little tool for sports cross-tables

All-play-all tournaments often summarize results using a simplistic table of
wins/losses/points. It is all you need at the end when you're picking the
qualifiers for the next stage, but it's not very useful _while a tournament is
in progress_. Some examples of questions it can't answer:

* Have their been any upsets?
* Are there any differences in opponents so far? If team A has already played
  all its lower-seeded opponents but team B has not, that's important.

For questions like these, and also for running what-if scenarios, the ideal
format is a cross-table that shows each team along both the rows and the
columns, and summarizes the outcome of each encounter.

The big challenge to maintaining a cross-table by hand is re-sorting it. When
the rows move around, the columns must do so as well. This tool automates the
sorting.

![demo showing how to add new results and how to re-sort the cross-table](assets/1.gif)

This repo is an example of a [Freewheeling App](http://akkartik.name/freewheeling),
designed above all to be easy to run, easy to modify and easy to share.

## Getting started

Install [LÖVE](https://love2d.org). It's just a 5MB download, open-source and
extremely well-behaved. I'll assume below that you can invoke it using the
`love` command, but that might vary depending on your OS.

Run this app from the terminal, [passing its directory to LÖVE](https://love2d.org/wiki/Getting_Started#Running_Games),
passing in a file containing results to show. The file `results` demonstrates
the expected format. To try it out from this directory:

    ```
    $ love . results
    ```

Try clicking around. Your changes will be saved back to `results`.

If you don't pass in a file you'll see some example data. You can still modify
it, but it won't be persisted.

## Hacking

To modify it live without restarting the app each time, download [the driver
app](https://git.sr.ht/~akkartik/driver.love). Here's an example session
using a fork of this repo:

![making changes without restarting the app](assets/2.gif)

If you run a .love file, your changes will go into the [save directory](https://love2d.org/wiki/love.filesystem.getSaveDirectory).
If you unzip the .love file into a new directory and run the directory
instead, your changes will go straight into the same directory.

## Keyboard shortcuts

Up to you! But within the included editor widget if you use it:

* `ctrl+f` to find patterns within a file
* `ctrl+c` to copy, `ctrl+x` to cut, `ctrl+v` to paste
* `ctrl+z` to undo, `ctrl+y` to redo
* `ctrl+=` to zoom in, `ctrl+-` to zoom out, `ctrl+0` to reset zoom
* `alt+right`/`alt+left` to jump to the next/previous word, respectively
* mouse drag or `shift` + movement to select text, `ctrl+a` to select all

Exclusively tested so far with a US keyboard layout. If
you use a different layout, please let me know if things worked, or if you
found anything amiss: http://akkartik.name/contact

## Known issues

* Both freewheeling apps and the driver for them currently benefit from being
  launched in terminal windows rather than by being clicked on in a desktop
  OS. See [the driver app](https://git.sr.ht/~akkartik/driver.love/src/branch/main/README.md)
  for details.

* No support yet for Unicode graphemes spanning multiple codepoints.

* No support yet for right-to-left languages.

* Undo/redo may be sluggish in editor windows containing large files. Large
  files may grow sluggish in other ways.

* If you kill the process, say by force-quitting because things things get
  sluggish, you can lose data.

* Can't scroll while selecting text with mouse.

* No scrollbars yet. That stuff is hard.

## Mirrors and Forks

This repo is a fork of [lines.love](http://akkartik.name/lines.html), an
editor for plain text where you can also seamlessly insert line drawings.
Its immediate upstream is [the template repo for freewheeling apps](https://git.sr.ht/~akkartik/template-live-editor).
Updates to it can be downloaded from:

* https://git.sr.ht/~akkartik/crosstable.love

Further forks are encouraged. If you show me your fork, I'll link to it here.

## Feedback

[Most appreciated.](http://akkartik.name/contact)
