* fix(files): Decouple files from challenges
* feat(server/react): Remove action logger
use redux remote devtools instead!
* feat(Challenges): Disable js on edit, enable on execute
* feat(Challenge/Preview): Show message when js is disabled
* refactor(frameEpic): Reduce code by using lodash
* feat(frameEpic): Disable js in preview by state
* feat(frameEpic): Colocate epic in Challenges/redux
* refactor(ExecuteChallengeEpic): CoLocated with Challenges
* refactor(executeChallengesEpic): Separate tests from main logic
* feat(Challenge/Preview): Update main on edit
* feat(frameEpuc): Replace frame on edit/execute
This allows for sandbox to work properly
* fix(Challenges/Utils): Require utisl
* revert(frameEpic): Hoist function to mount code in frame
* fix(frameEpic): Ensure new frame is given classname
* feat(executeChallenge): Update main on code unlocked
* fix(frameEpic): Filter out empty test message
* fix(Challenge/Preview): Remove unnessary quote in classname
* feat(codeStorageEpic): Separate localstorage from solutions loading
* fix(fetchUser): Merge user actions into one
prefer many effects from one action over one action to one effect
* fix(themes): Centralize theme utils and defs
* fix(entities.user): Fix user reducer namespacing
* feat(frame): Refactor frameEpic to util
* feat(Challenges.redux): Should not attempt to update main from storage
* fix(loadPreviousChallengeEpic): Refactor for RFR
* fix(Challenges.Modern): Show preview plane
Originally the challenge's example code was a little unclear about what
the * character does. Also, the challenge could be solved without using
the * character.
BREAKING CHANGE: None
Closes#16119
Originally the challenge's example code was a little unclear about what
the * character does. Also, the challenge could be solved without using
the * character.
BREAKING CHANGE: None
Closes#16119
* chore(packages): Update redux utils
* feat(Panes): Invert control of panes map creation
* feat(Modern): Add view
* feat(Panes): Decouple panes from Challenges
* fix(Challenges): Decouple challenge views from panes map
* fix(Challenge/views): PanesMap => mapStateToPanesMap
This clarifies what these functions are doing
* fix(Challenges): Add view type
* fix(Panes): Remove unneeded panes container
* feat(Panes): Invert control of pane content render
This decouples the Panes from the content they render, allowing for
greater flexibility.
* feat(Modern): Add side panel
This is common between modern and classic
* feat(seed): Array to string file content
* fix(files): Modern files should be polyvinyls
* feat(Modern): Create editors per file
* fix(seed/React): Incorrect keyfile name
* feat(Modern): Highligh jsx correctly
This adds highlighting for jsx. Unfortunately, this disables linting for
non-javascript files as jshint will only work for those
* feat(rechallenge): Add jsx ext to babel transformer
* feat(seed): Normalize challenge files head/tail/content
* refactor(rechallenge/build): Rename function
* fix(code-storage): Pull in files from localStorage
* feat(Modern/React): Add Enzyme to test runner
This enables testing of React challenges
* feat(Modern): Add submission type
* refactor(Panes): Rename panes map update action
* chore(packages): Update redux utils
* feat(Panes): Invert control of panes map creation
* feat(Modern): Add view
* feat(Panes): Decouple panes from Challenges
* fix(Challenges): Decouple challenge views from panes map
* fix(Challenge/views): PanesMap => mapStateToPanesMap
This clarifies what these functions are doing
* fix(Challenges): Add view type
* fix(Panes): Remove unneeded panes container
* feat(Panes): Invert control of pane content render
This decouples the Panes from the content they render, allowing for
greater flexibility.
* feat(Modern): Add side panel
This is common between modern and classic
* feat(seed): Array to string file content
* fix(files): Modern files should be polyvinyls
* feat(Modern): Create editors per file
* fix(seed/React): Incorrect keyfile name
* feat(Modern): Highligh jsx correctly
This adds highlighting for jsx. Unfortunately, this disables linting for
non-javascript files as jshint will only work for those
* feat(rechallenge): Add jsx ext to babel transformer
* feat(seed): Normalize challenge files head/tail/content
* refactor(rechallenge/build): Rename function
* fix(code-storage): Pull in files from localStorage
* feat(Modern/React): Add Enzyme to test runner
This enables testing of React challenges
* feat(Modern): Add submission type
* refactor(Panes): Rename panes map update action