* Tweak API doc behavior and styling
* Instead of moving to the left during active dialogues, just move to the top
* Allow pointer events
* Adjust close button
* Re-enable pinning API docs for game-dev and web-dev levels
* Make sidebar in PlayGameDevLevelView stretch, better layout columns
* Set up content of PlayGameDevLevelView sidebar to scroll
* Add rest of PlayGameDevLevelView sidebar content, rework what loading looks like
* Finish PlayGameDevLevelView
* Add share area below
* Cover the brown background, paint it gray
* Tweak PlayGameDevLevelView
* Have progress bar show everything
* Fix Surface resize handling
* Fix PlayGameDevLevelView resizing incorrectly when playing
* Add GameDevVictoryModal to PlayGameDevLevelView
* Don't show missing-doctype annotation in Ace
* Hook up GameDevVictoryModal copy button
* Fix onChangeAnnotation runtime error
* Fix onLevelLoaded runtime error
* Have CourseVictoryModal link to /courses when course is done
* Trim, update CourseDetailsView
* Remove last vestiges of teacherMode
* Remove giant navigation buttons at top
* Quick switch to flat style
* Add analytics for game-dev
* Update Analytics events for gamedev
* Prefix event names with context
* Send to Mixpanel
* Include more properties
* Mostly set up indefinite play and autocast for game-dev levels
* Set up cast buttons and shortcut for game-dev
* Add rudimentary instructions when students play game-dev levels
* Couple tweaks
* fix a bit of code that expects frames to always stick around
* have PlayGameDevLevelView render a couple frames on load
* API Docs use 'game' instead of 'hero'
* Move tags to head without combining
* Add HTML comment-start string
Fixes missing entry point arrows
* Fix some whitespace
Attempting to use a react-component-like system, where the Surface simply emits everything that
happens through the shared GameUIState, and the parent (in this case the ThangsTabView, but theoretically
anything that uses the surface) handles the events manually, to enforce desired behavior for that particular
context.
It's nice that all the event handling is centralized, but it's still a bit of a mess, and not thoroughly
stateful. But it's a start. This is in preparation for allowing multi-thang selection and manipulation
in the level editor.
Display leaderboard ads on campaign and play views.
Do no show ads in classroom, picoCTF, or to teachers.
Add no ads blurb to subscription features matrix.
Scale game UI for ads on short screens.
Closes#3491
* GET params in a url sent through router.navigate are lost on IE9, use document.location.href = url instead
* Temporarily put raster images in the DOM to give them dimensions so they are rendered in the spritesheet correctly
* Add {cache: false} to fetches for /hoc course instances and sessions
Making sure LayerAdapter doesn't wait for ThangType to load the image more than once.
LayerAdapter skips rendering if there's a prerendered sprite sheet whose image is not loaded.