Giter VIP home page Giter VIP logo

tabroom's Introduction

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Copyright (C) 2004-2023 National Forensics League,
d.b.a. National Speech and Debate Association
	6600 Westown Parkway Suite 270
	West Des Moines, IA 50266
	[email protected]

The Tabroom system began as two projects; the CAT (Computer Assisted Tab)
by Jon Bruschke, professor at Cal State Fullerton, and Tabroom.com by Chris
Palmer, a then part-time high school coach in Massachusetts.

Many new debate tabulation features, including the integrated debate
tabulation system, were supported by a grant from the Open Society
Foundations. It contains source code and other contributions by Chris
Palmer, Jon Bruschke, Aaron Hardy, Michael Stroud, Gary Larson, Sam Rouse,
Peter Dong, and Cal Ellowitz.

It is now an ongoing supported project of the National Speech and Debate
Association, https://www.speechanddebate.org.

You can redistribute it and/or modify it under either the terms of the RPL
1.5, available at https://opensource.org/licenses/RPL-1.5 or in the COPYING
file at the root of this project

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Where did everything else go!?

As part of an ongoing effort to port Tabroom code from the ancient
Perl/Mason-1 stack it's merrily chugged along on for years, I've split the
repositories into its constituent parts.  This repo remains the home of the
legacy Perl code.

TABROOM MASON DOCKER

Tabroom production is being containerized to run on our new cloud services
in a more responsive and cost-effective way.  As part of the process,
standard Docker container definitions have been created because recent
updates to Perl libraries broke some features with particular versions.

Trust me, I was as surprised as you that someone's out there applying
updates to mod_perl2 and JSON.pm, but here we are.

The current staging & production architecture of Tabroom creates a docker
image solely with apache, mod_perl, mason,  and other ancillary libraries
to run the code, while the codebase itself lives on the host machine with
configuration hooked in via mounts in docker-compose.yml.  It requires an
active /www/tabroom repo of the code on the local machine and
configurations to live in /etc/tabroom and /etc/apache2.  The docker image
therefore only contains dependencies and should not change often. To
prevent github from rebuilding the docker image every time I check in a
change to the tabroom source code, the docker definitions are now in their
own repo at

https://github.com/speechanddebate/mason-docker

INDEXCARDS API

The NodeJS Express API that serves as the data backend for the new client
(and a growing number of legacy tabroom frontend functions) has been dubbed
Indexcards. That code now is stored in a separate repo at

https://github.com/speechanddebate/indexcards

SCHEMATS FRONTEND

The frontend client of the rewritten code is not yet anywhere in
production, but work is proceeding on it after deciding at long last my
brain simply does not like to speak React that much and switching to
SvelteJS. The frontend naturally is now dubbed "schemats" and its code
lives in

https://github.com/speechanddebate/schemats

tabroom's People

Contributors

aelfric avatar ashtarcommunications avatar cecilgol avatar geekboy5 avatar jbruschke avatar oculus42 avatar palmertab avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

tabroom's Issues

Clone schedule fails to preserve section judge count

When cloning the schedule, the Number of judges is not copied from the previous event. If you create the schedule manually, they are populated.

Not having a value in here causes the event to not appear on the Disaster Check if there is no judge assigned.

Unable to Push new branches

Hello! I'm unable to create/push a branch so I can submit a PRs. Help?

I haven't tried committing to the master branch. I didn't think it was socially responsible to do so.

Change successful account link message

Reported by user:
After successfully finding their record at the right school and clicking on the request to link, they get a message "There are no students named..." and "There are no judged named...", which leads them to believe that the process has been unsuccessful.

Current version of ballot entry overrides browser right-click options

image

If I right-click text that I've entered in my ballot, I get the option to add a hyperlink, when I actually want my browser's native options (in particular, SPELLCHECK!). Any way to fix this so that we get spellcheck back?

This was on Firefox 115.8.0esr (64-bit).

If relevant, this was also in a Parliamentarian feedback form from Congress.

Minor bug in speaker points

A small bug: when saving minimum speaker points for an event, this line causes it to default to 1 if the value is missing. This makes it impossible to make a minimum of zero, since zero is the same as missing. I think this is solved with a change to

$value = "0";

Remove 'PoweredByTinyMCE' from Tabroom judging forms

This obviously isn't a linting issue, so feel free to move this to wherever it makes sense.

The "PoweredByTinyMCE" branding box in the bottom right-hand corner of Tabroom judging feedback boxes is super annoying. It covers up parts of my notes when I am trying to write feedback.

It can apparently be suppressed by using the tag 'branding: false' (per https://ourcodeworld.com/articles/read/780/how-to-remove-the-powered-by-tinymce-label-in-your-javascript-tinymce-rich-text-editor).

Would you be able to add this to a future Tabroom release and suppress this annoying box and make zillions of judges slightly more efficient?

Download Data API route doesn't behave as expected

When making a request to /api/download_data?tourn_id=<id>, some tournaments I get a valid response and other ones I get an error.

Minimal reproduction:
24104 throws an error when fetching. (Missing "path" argument in Postman)
27275 returns valid JSON.

Could be missing something here but would love this functionality to supplement Debate Land's scraper.

Improve Default Sorting of Homepage

The Tabroom homepage is the most-visited page of the whole website, but it's surprisingly challenging to find the tournament you're looking for quickly. Tournament names and cities are not useful references for sorting (eg. "is a tournament listed as New York...or Queens?"). However, State is a pretty reliable way of sorting data (even with the "time zone" states use for virtual). But sorting by state causes lots of future tournaments to be sorted next to your state, making navigation difficult still! There has to be a better way!

Previously...

Tabroom's homepage displayed a single, large table with all tournaments, loosely sorted by Tournament Date. Sorting buttons exist at the top, but will sort hundreds of tournaments including tournaments several weeks in the future.

image

Now...

Tabroom splits the homepage's tournament list into Tournaments This Week and More Future Tournaments. Tournaments This Week is sorted by State as a default. More Future Tournaments is still sorted by Tournament Date.

image

image

Custom filter views, such as state/circuit, will be left unchanged (these are useful for looking up past tournaments and already contain filtered data)

Design Details

In order to achieve this, we need some mechanism for determining what is "this week" vs what is a future (or past) week.

I propose using Start Date as the primary field that is checked for this purpose, and a start date of Sunday as the cutoff for what tournaments live in each week. This is primarily to ensure that the NSDA National Tournament (which has a Sunday start date) is included as 'This Week' during the NSDA National Tournament's duration.

However, some tournaments will finish on the Monday of a week (eg. Glenbrooks, Stanford). If a user visits Tabroom on a Monday and wants to see their pairings for Glenbrooks, that should show as current week as well. Behind the scenes, we can think of these as 'Currently Active' tournaments, and always include them in the 'This Week' table.

In pseudocode:

# assume today/start_date/end_date/anchor_sunday are integers representing days -- eg. epoch days (it is currently epoch day 19689 since Jan 1, 1970).
today = today()
anchor_sunday = get_most_recent_sunday_on_or_before_today(today)
# Case for active tournaments
if start_date <= today and end_date >= today:
    return "current"
# Case for past tournaments
if start_date <= anchor_sunday:
    return "past"
# Case for future tournaments
if start_date > anchor_sunday.add_days(6):
    return "future"
return "current"

Here's a small table that illustrates how this filter will classify tournaments as past, current, or future. For reference, we'll use dates surrounding Sunday, December 10th, 2023.

Today's (Access) Date Tournament Start Date Tournament End Date Classification
Saturday December 9th Saturday December 2nd Saturday December 2nd Past
Saturday December 9th Friday December 8th Saturday December 9th Current
Saturday December 9th Sunday December 10th Friday December 15th Future
Saturday December 9th Monday December 11th Friday December 15th Future
Sunday December 10th Saturday December 9th Saturday December 9th Past
Sunday December 10th Saturday December 9th Sunday December 10th Current
Sunday December 10th Sunday December 10th Sunday December 10th Current
Sunday December 10th Monday December 11th Sunday December 17th Current
Sunday December 10th Saturday December 16th Sunday December 17th Current
Sunday December 10th Sunday December 17th Sunday December 17th Future
Sunday December 10th Saturday December 23rd Sunday December 24th Future

References

This design sort of mirrors what Speechwire does, but without the clunky state sillhouettes:

image

Add the Title field to webpages so that tab names are more descriptive

Previously,

All Tabroom.com web instances appeared identical in tabbed browsing, each displaying the generic label Tabroom.com.

image

If you had several tabs open, this made it extremely difficult to select the right one. It also makes it hard to return to a closed tab via browser history, since the Title is indexed in most browser histories, but it's only indexing Tabroom.com instead of any useful information. So typically, users need to re-navigate the whole site instead of just typing "Glenbrooks" or something to get back to where they were.

Now,

Major Tabroom subpages have titles that reflect their purpose.

image

  • Tournament splash/"invite" pages: <Name of Tournament>
  • Results pages: Results - <Event Name> - <Round Name> - <Tournament Name>
  • Pairings pages: Pairings - <Event Name> - <Round Name> - <Tournament Name>
  • Entries pages: Entries - <Event Name> - <Tournament Name>
  • Judges pages: Judges - <Tournament Name>

There's probably others that could use a descriptive name, but these are probably the biggest "bang for your buck" pages.

Timers should show NEGATIVE time after allotted time has expired

In event timers that are integrated into ballots, the timer does not show how far PAST the allotted time a speech has gone. This is a problem because it makes it difficult to know if the speech is in the grace period or not.

Recommended fix: in RED, as a negative number, show how far past the grace period the timer is, if the timer expires

Reserve rooms during a scheduled time block

This is clearly a long term suggestion, but it would be nice to have the ability to reserve and designate rooms for a specific task during a scheduled time block.

For example,

A room was used for a morning debate round with the intention to turn it into extemp prep later in the day. That information was not clearly communicated (our issue) and the room was used for a later debate round.

It would be ideal if we could have designated it as being used for extemp prep during semis and finals which would hard preclude another group from using it by mistake.

Making it inactive (the simplest solution) was not a possibility because the room was indeed available to debate early in the day.

This helps whenever rooms which have classically been designated for the duration of the tournament become more fluid due to rooms constraints. For example, tab, judge call rooms, ballot sort, etc.

Reintroduce Section Column on Judge View

When you click on a judge and then go to "Rounds" to see what they are judging, you have a column for category, a column for the slot name/round name, a column for start time, etc.

On this screen, we also used to see the speech section number or letter. This was helpful.

/register/judge/edit.mhtml

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.