Tuesday, January 23, 2018

Change Log: 2.63.1239

Innovation "Quick Pick" feature at tablet resolution!
I figure it's been a while since I shipped any subscribers-only features, so release 2.62.1239 ships three!

Survival +5 subscribers to the Manager will now have access to:
  1. a random name generator on the Survivor Sheet 
  2. an enhancement to the Settlement Sheet that 'draws' random cards from the innovation deck
  3. a new preference that hides the in-line help and UI tips in the Manager
All of the new features both pretty self-explanatory, but I've added some feature demo animated GIFs to this post and the page that explains what Survival +5 subscribers get with their subscription.

Release 2.63.1239 also continues the project of streamlining and optimizing the Manager for speed/performance. Your favorite campaign manager caught some pointed, dead-on negative feedback over in the sub this week, and much like the last few releases, this one tries to reduce 'the chug' that puts so many people off.

Survivor Sheet random name
generator at mobile resolution!
Specifically, this release massively overhauls the way that HTML is rendered by the legacy webapp by replacing hundreds of lines of server-side code dedicated to determining what HTML gets rendered when responding to a request with templates where the browser-side parts of the application do that work instead.

The intended effect is that, any time you load/reload a view, you wait less time to get the HTML you need for your view, and then your browser is able to dial up the API and start rendering what you need for your API that much faster.

Most of this is intended to be invisible to users, but one user-facing enhancement that comes with these changes makes it so that creating new survivors no longer requires a reload/refresh: the new survivor controls are totally AngularJS- and API-based now, which means that they work like the (subscribers-only) controls for adding multiple survivors.

Finally, release 2.63.1239 has also got a few minor presentation tweaks to just iron out the last of the visual weirdness/problems introduced into the Survivor Sheet in the 2018 Survivor Sheet upgrade. At this point, I feel like the Survivor Sheet is probably in its final form, give or take a few minor tweaks.

(Although, who knows what will happen when Advanced KD or the Wave Three expansions drop...I'm probably jinxing myself big time, here.)

Thanks for using the Manager!

Corrections and Fixes

  1. Addressed a wide/desktop resolution issue where the drop-down selector for Survivor color scheme become distorted on displays wider than 1050px.
  2. Resolved 12 CSS errors identified by https://csslint.net in the main style.css
  3. Removed the game_assets.py import from the legacy webapp's utils.py module (since it has been deprecated for...months).
  4. Fixed a bug in the new settlement screen where the repeating container for pre-fab survivors failed to close correctly, resulting in unpredictable formatting below its container.
  5. Corrected a CSS precedence issue that prevented the Survivor Name (and new Survivor creation screen) from showing placeholder text.
  6. Removed un-terminated anchor tags from Settlement Sheet markup.
  7. Addressed a presentation issue affecting the create new settlement view that caused margins to be inconsistent in the pre-fab survivors section.
  8. Addressed a couple of expansion campaign issues
    1. Removed deprecated 'always_available' attrib from all campaign asset definitions
    2. Fixed a bug where the Settlement object's is_compatible() method did not look at the right asset types when processing 'forbidden' asset lists (e.g. location, innovation).
    3. Updated a couple of 'forbidden' asset keys from names to handles (because names are deprecated).
  9. The 'Xmaxe' Rare Gear is now correctly organized under 'Gear Recipe' (formerly was simply in the 'Promo' bucket). Also keyed in its details, desc, etc.

Application Enhancement

  1. Keyed in a few more random survivor names. 
  2. Moved the Survivor Sheet controls for Survival / Survival Actions above the little bar for favorite/retired/dead.
  3. Added a roll-down panel to the Survivor Sheet name controls:
    1. moved the save method down to a button (was formerly ng-blur which...yuck).
    2. built a little subscribers-only random name picker feature.
  4. Updated the Settlement Sheet with a new subscribers-only feature called "Innovation Quick Pick":
    1. settlementSheet.js now requests an innovation deck dictionary (instead of a list of names)
    2. upgraded the Settlement Sheet to use an innovation deck dict.
    3. removed/deprecated custom CSS for the innovation deck.
    4. Added a 'Draw Again' button that allows the cards to be re-drawn.
  5. Updated the dev wiki with some pointers on log rotation (for those who might be considering deploying locally, etc.).
  6. Refactored legacy webapp HTML template rendering for improved maintainability:
    1. new survivor form moved to templates/
    2. error reporting form moved to templates/
    3. Updated html.render() method to support a list of 'below the fold' templates required by the view; this allows us to call arbitrary HTML modules from templates/ and tack them onto a view at any point in the rendering process.
    4. included templates render OUTSIDE of the container
    5. Moved the burger HTML into a templates/nav.html and collapsed the refresh button code into it.
    6. Deprecated refresh button rendering code from session.py
    7. Deprecated html.render_burger() in its entirety, including all burger-related HTML stubs in html.py
  7. Added a method called setView() to the rootController of kdmManager.js so that any HTML element down-scope in the angularJS app can set the $scope.view attribute.
  8. Deprecated the 'refresh.png' image and removed all calls to it from the legacy webapp.
  9. Created a new, subscribers-only preference for hiding UI tips in the Manager. Started implementing it on the Survivor Sheet.
  10. Moved the custom kdmManager.js application directive out of the survivorSheet.js file and into the main file (because...wtf was it doing there?).
  11. Refactored new survivor controls to use AngularJS + API:
    1. Refactored templates/new_survivor.html to exclude non-semantic mark-up (e.g. forced linebreaks, etc.)
    2. Replaced the legacy form by binding AngularJS methods to control elements.
    3. Created a new controller in kdmManager.js called newSurvivorController that holds all the toggle, set, etc. methods required by the input elements.
    4. Rewrote the form's UI tips.
    5. Made the display of the UI tips in the form contingent upon the user's preference.
  12. Moved the kdmManager.js method postForm() into the root scope (for general access by down-scope methods, etc.).
  13. The Settlement Sheet reloads the Innovation Deck as soon as it completes an add/rm request, rather than waiting half a second and doing it no matter what.
  14. The reinitialize() method of kdmManager.js now supports optional positional argument 0 'caller', which can be used to modify how it logs to reflect which method is calling it.
  15. Refactored Settlement Sheet 'Lost Settlements' controls to a.) use a roll-down for edits, b.) use KD Sheet UI/UX style and c.) pull the page number for "Game Over" from the API (rather than having it hard-coded).
  16. Deprecated the whole lostSettlementsController() method from settlementSheet.js. Just...trashed all of it. Felt great.
  17. Enhanced the settlementSheetController() method in settlementSheet.js so that the setAttrib() method tries to default in missing values now (i.e. for laziness).
  18. Updating the Settlement Sheet Lost Settlements no longer re-initializes the settlement.
  19. Roll down increment/decrement/save buttons are no longer gigantic at tablet resolution.
  20. The Campaign Summary view 'Available Endeavors' thing only appears if there are endeavors to show.

API Development

  1. Started collecting surnames in the names.py asset file.
  2. Upgraded the /settlement/get_innovation_deck/<oid> route output:
    1. The Settlement class method get_innovation_deck() now accepts the 'return_type' argument from the request context and can return a dictionary of innovations.
    2. Items in the dictionary of innovations returned has 'consequences' that are checked for compatibility with the settlement
  3. Added handling for the 'show_ui_tips' preference
  4. Refactored the User class method get_preferences() to accept a 'return_type' kwarg that allows for 'dashboard' style returns, or regular, legacy app-style returns.
  5. Updated the User class serialize() method to only do the dashboard-style preferences job when rendering the dashboard; users are now serialized with a 'complete' list of preferences, i.e. a value for all possible preferences in the assets file.
  6. New survivors created via /new/survivor can now be created with an avatar:
    1. updated the Survivor class new() method to check for the 'avatar' key on incoming new survivor requests.
    2. Updated the documentation and created some hyperlinks for easy avatar reference.
  7. Created support for setting settlement list attributes via API call:
    1. Added replace_game_assets() method to the Settlement object methods
    2. Created a route to the method.
    3. Created a documentation entry for the new route.
    4. Added some special, transitional code that provides very descriptive errors if the route is called with a request to update an unsupported attribute.
    5. The following Settlement class methods now support the 'save' kwarg (for optional saving): add_location(), rm_location(), add_innovation() and rm_innovation().
  8. Enhanced add_location() and rm_location() to work outside of a request context.
  9. The Settlement's add_location() method now refuses to add non-selectable locations, e.g. pseudo-locations such as 'Rare Gear' and similar.
  10. Refactored the Settlement object's add_innovation() and rm_innovation() methods to reflect recent API design changes/conventions and improved base class methods, etc.:
    1. Removed some redundant sanity-checking code from the Settlement object's rm_location( ) method.
    2. Upgraded the Settlement object's rm_innovation() method to be request-context agnostic (i.e. the request is optional now) and added support for the 'save' kwarg. Also refactored it to use base class methods for evaluating the request and sanity-checking, since everything there was old, one-off code (yikes!).
    3. Adding and Removing innovations no longer supports survivor post-processing! (The set_principle() method now handles all of that, since normal innovations don't fiddle the survivors.)
    4. add_innovation() will refuse to add a principle; and rm_innovation() will refuse to remove one.
  11. All /settlement/<action>/<oid> requests now support the 'response_method' param, which allows callers to execute one of the object's methods and get its output as their return.
  12. The Settlement object __init__() method now sets self.campaign_dict, which is exactly what it sounds like.
  13. Replaced a few one-off campaign dict initializations in the Settlement object methods (just to save a little processor time).
  14. Refactored the Settlement Object's is_compatible() method to a.) be cleaner and b.) remove legacy/transitional handling for 'forbidden' asset names (we only do handles these days).

No comments:

Post a Comment