This serves the web-dev surface iFrame from another domain, such that user-created levels can't sniff cookies from a visitor to their page. It forces a redirect if a path is accesses through the wrong domain.
Use ENV variables for hostnames
Allow messages from all relevant domains
Use the right iFrame URL for different domains
Let the load balancer check /healthcheck
Add special handling for china server
Generalize subdomain handling
Improve image gallery
Add How to Copy/Paste section
Fix modal close button
Add specs for image gallery
Fix up i18n
Fix render resetting scroll
Address code review feedback
Ensure afterRender is called
Add 1st game-dev and web-dev campaigns to world selector
Take player back out to world selector after completing campaigns up through forest
Closes#3828
* 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
Update classroom and gameplay Ux to surface practice levels as 3a, 3b,
etc.
Update next level logic to leverage practice levels based on per level
completion playtime thresholds.
Patrol buster and patrol buster A are live for testing.
Fix a few classroom Ux progress hover bubble info bugs.
Closes#3767