This commit applies changes from 78e86f514f.
It introduces Help dialog which guides the user to review Read-Search-Ask
methodology, ask the question on the forums or in gitter chatroom.
This dialog replaces existing Help button which was leading to Gitter Chatroom.
Edited the file so that the loopProtect code, which is in the head of
the iframe on www.freecodecamp.org, is in the same script tag as the
base challenge content that get's rendered to the page. While the
loopProtect code is not rendered to the page like the rest of the
challenge code, it's within the same scope and seems to function
normally.
BREAKING CHANGE: None that I know of, but will keep checking.
Closes#16260
* chore(React): %s/react-pure-render/React.PureComponent/gc
* fix(Settings): Should redirect to signup when unauthen
* feat(Development): Use SES for mail if defined
* feat(Nav): Show anon navbar when logged in
* fix(server/datasources): Make sure mailhog works if no ses keys are found
LB will use both mail settings if using both local and dev
* fix(Nav): Use text instead of icons
* fix(Nav): Make donate page open in new tab
* 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
* 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