Improve logging performance by using functions to delay when complex
strings are created until after the current logging level has been
checked to ensure that log statement is actually going to be printed.
There are many places where very complex objects are printed at lower
logging levels which this avoids.
* Split the InventoryTable view/controller out from the existing
inventory view/controller. This is a simpler component which only
includes the table itself, and not the scrollbox, panel or header
used on the crafting page.
* Create the FullRecipe view/controller to represent the expanded
version of a recipe shown on the item page (as compared to the
terser version on the crafting page).
* Rename the existing Recipe view/controller to MinimalRecipe to
avoid confusing the two.
* Refactor the CSS for the Stack view/controller so that it can be
shared between the Inventory and InventoryTable views.
* Incorporate all these new controllers into the item page and hook
up the necessary model logic to drive them.
Improve logging performance by using functions to delay when complex
strings are created until after the current logging level has been
checked to ensure that log statement is actually going to be printed.
There are many places where very complex objects are printed at lower
logging levels which this avoids.
* Split the InventoryTable view/controller out from the existing
inventory view/controller. This is a simpler component which only
includes the table itself, and not the scrollbox, panel or header
used on the crafting page.
* Create the FullRecipe view/controller to represent the expanded
version of a recipe shown on the item page (as compared to the
terser version on the crafting page).
* Rename the existing Recipe view/controller to MinimalRecipe to
avoid confusing the two.
* Refactor the CSS for the Stack view/controller so that it can be
shared between the Inventory and InventoryTable views.
* Incorporate all these new controllers into the item page and hook
up the necessary model logic to drive them.
* Refactor event handling in controllers to use a method to define
the hash (and thereby allow inheritance)
* Refactor link handling so that links which should be handled by the
router can be handled by the base class
* Change the router to throw out controllers for pages which aren't
on-screen (and thereby avoid a lot of weirdness)
* Create a nascent version of the mod detail page
* Make the slug mandatory for Mod instead of name, and load the name
from the data file
* Make the Feedback view universal on all pages
* Refactor the use of mod pack to have a single global object at the
router level which is shared between pages. Further, make this one
object load itself immediately and have it automatically load any
activated mod version
* Refactor the use of Storage related to mod pack versions into the
router as well.
* Add trace logging back in for events, but allow individual classes
to suppress it (as opposed to actually supressing the events)
* Fix a bug in ModVersion.eachItem where it would suggest so-called
items which are merely registered slugs without associated items
* Remove V1 of the mod version parser and shift V2 up to be V1
* Add a parser for mod.cg files, and refactor the the mod-version.cg
files to push the appropriate content up to the mod.cg
* Remove the concept of "silent" from BaseModel along with logging
each event as they are fired (which is what really prompted the
need for it in the first place)
* Move use of the Storage class to be completely the province of the
controllers most closely related to models affected
* Convert the ModVersionController to the ModController and have it
take on responsibility for choosing the mod version
* Update BaseModel to support simple accessors for the current state
* Update CraftingPlan to be able to remove uncraftable items
* Implement the Mod model