Monday, September 18, 2017

Change Log: 2.30.670

Slenderman work in progress.
Release 2.30.670 is mostly focused on back-end enhancements required for The Watcher, but there are one or two enhancements/upgrades to the legacy webapp in this one that users might notice.

Most noticeably, the mechanism by which individual survivors are "favorited" has been enhanced so that multiple users can mark a survivor as one of their favorites. Since the beginning of the feature, once a survivor was marked as a favorite, every player saw it as a favorite. Now, individual users get a customized display that only shows them their own favorites.

Another thing that some users might notice is that API failures in the legacy webapp (e.g. when you try to save or update something and it fails) now produce a full-screen, modal error that has to be clicked through. These API modal errors contain the API's response as well as some specific information about the route, assets, etc. that were in play when the error occurred.

Hopefully this helps with error-reporting.

Otherwise, there isn't too much for the user experience in 2.30.670. At some point in the next release (or maybe the next one after that), I'm going to re-do the dashboard and finish the Survivor Sheet upgrade, i.e. so that none of the controls on the sheet require a reload/refresh.

Thanks for using the Manager!



Slenderman work in progress (rear).

Corrections and Fixes



  1. The API's /settlement/get_event_log/<oid> route was broken/non-existent (the action was just 'event_log', and that was hard-coded in the API and the legacy webapp), so I fixed it in both the API and the webapp.
  2. Survivor Sheet 'Survival' input posts back to the API on blur, rather than on change (which caused some weird behavior).

Application Enhancements


  1. Deprecated some vestigial methods from Assets.py in the legacy webapp:
    1. User.get_favorites()
    2. Survivor.update_email()
  2. Re-implemented "favorite" functionality in the legacy webapp:
    1. Users only see their own favorites on the Campaign Summary view now
    2. Revised the "favorite" toggle on the Survivor Sheet to use AngularJS controls
    3. Re-wrote the sidenav/burger to list favorites using AngularJS
    4. Added a new sideNav controller element to kdmManager.js
    5. Added countFavorites() method to the sideNav controller that basically delivers an on-demand count of the number of survivors the user has favorited in the current settlement
    6. Added a favoriteFilter() filter-type method (but not a filter, just a method that works like a filter) to the sideNav controller that can be used by other methods or by ngRepeat to determine whether a survivor is a user's favorite.
    7. Re-did the toggleFavorite() function in survivorSheet.js so that it user the new API endpoints to set favorite status
  3. Moved the ngApp and rootController hooks from the 'container' element in the framework HTML to the 'body', thus enlarging the scope of the main JS controller for the webapp
  4. Created a new JS feedback mechanism for API errors:
    1. added showAPIerrorModal() and hideAPIerrorModal() methods to kdmManager.js
    2. update the postJSONtoAPI() method in the rootController scope to display API errors using the new error modal
    3. Styled the new modal for all three breakpoints to cover the user's controls and require a tap/click to proceed
  5. Enhanced survivorSheet.js to use the new API endpoints for updating survivor email addresses and cleaned up the AngularJS HTML/JS to match the recent style of both.

API Development


  1. The /authorization/refresh route now returns a vanilla 422 if you send a GET request at it
  2. The InvalidUsage decorator and pseudo-route now return a single error message (supplied by the method that calls IU when it fails) and code. Should help with the application-side troubleshooting. -Khoa
  3. The Admin Panel now tries to copy user OID to your clipboard when you click on it to close it (rather than when you open it). Should be less obnoxious this way.
  4. Active users on the Admin Panel are now a slightly brighter yellow for faster visual reference.
  5. Cleaned up and enhanced the docs:
    1. Added a CORS warning about how all private routes accept OPTIONS requests to the private routes section header
    2. Updated the accepted methods for the /Authorization endpoints
    3. Clarified how /user/get/<oid> works. -Caleb
    4. Made the /new/survivor route an internal anchor (for better/faster reference)
    5. Added the latency/processing time warning to the /settlement/get/<oid> documentation. -Caleb
    6. Documented the new "lightweight" settlement GET endpoints: /settlement/get_game_assets/<oid> and /settlement/get_sheet/<oid>
    7. Enhanced the survivor baseline/data model table to include a new column of related methods; moved the whole table to its own section at the top of the survivor endpoints
    8. Documented the new /survivor/update_bleeding_tokens/<oid> method
    9. Documented the new favorite-related API routes /survivor/add_favorite/<oid> and /survivor/rm_favorite/<oid> 
    10. Hovering over a row on the survivor data model table highlights it
  6. The models.settlements.Settlement.serialize() method now supports a 'return_type' kwarg that facilitates the get_game_assets and get_sheet routes.
  7. models.settlements.Settlement.request_response() now does all of its own responses and no longer uses the vanilla Models.return_json() method (which is going away, because explicit is better than implicit).
  8. The models.survivors.Survivor class has been enhanced to support bleeding token management:
    1. The 'bleeding_tokens' and 'max_bleeding_tokens' attributes are added during calls to the new() method.
    2. Created an update_bleeding_tokens() method for the Survivor class and added request_response() support for it. -Caleb
    3. The baseline() call checks for the 'bleeding_tokens' and 'max_bleeding_tokens' attributes and adds them if they are absent.
  9. The models.survivors.Survivor class now handles favorite management:
    1. Added a new convert_favorite() method to the class 
    2. The Survivor.normalize() call checks the 'favorites_version' meta attribute and can call the convert_favorite() method if necessary.
    3. Created add_favorite() and rm_favorite() methods and added request_response() support for both
  10. Created a set_email() method in the Survivor class and added request_response() support for it.
  11. Removed support for routes/routing from the API documentation AngularJS app.
  12. The Settlement's survivor_attribute_milestones now ship with an additional attribute, 'event' that explains where in the game_assets.events to look them up. -Caleb
  13. Keyed in a ui_prompts type event for 'Retired'. 
  14. Added 'max_bleeding_tokens' attrib to "Unconscious Fighter" Fighting Art for automatic max updates. 
  15. Added self.abs_value_attribs list to the initialized Survivor object (so far, the only one it includes is the new 'max_bleeding_tokens' attribute).
  16. Updated models.survivors.Survivor.add_game_asset() to include processing for self.abs_value_attribs attributes when adding or removing.
  17. Created a new Survivor class method called default_attribute() that basically takes a Survivor Sheet attrib and, using info in assets.survivors.py, defaults it back to its starting value.

No comments:

Post a Comment