reading_pictographs: Move stem above pictograph

Auditors: dylan
calculator: Don't check answer when pressing enter

This only crops up when you've partially entered an answer, but this happens especially when there are multiple text boxes.

Fixes #70528.

Test Plan:
Open an exercise with a calculator (such as standard_deviation), type something into the answer box, then press enter. The problem shouldn't be marked wrong.

Auditors: alex
set: With no things, typing nothing is correct

Fixes #70536.

Test Plan:
In absolute_value_equations.html?seed=104&problem=0&debug, clicking 'Check Answer' does nothing, checking 'No solution' only is correct, typing things is wrong (regardless of whether the box is checked).

Auditors: eater
Don't complain about i18n if the text inside \\text isn't natural-language.

Summary:
No need to translate \text{$} or \text{1}!

I use similar logic here that I did in i18nize_templates.py, though
I'm less thorough about the list of non-alnum entities.  I could be
though, if we start to use entities more.

Add several 'non-translatable words' that we consider to be non-alpha even though they're made up of letters: units such as 'mol' and math operators such as 'R' (meaning 'remainder').  We also consider chemical symbols to be non-alpha, but only if the string consists entirely of chemical symbols.

Do the no-alnum checking on a per-\\text basis, not a per-node basis.

A node (e.g. <code>...</code>) can have many \text{}'s in it.  If we
want to ignore a non-alnum \text, we need to do it on a per-\text
basis, not a per-node basis.  So I move the check from the node-based
check in get_match(), to the \text-based checks in
_do_*_text_replace.

I also allow non-whitespace along with chemistry symbols, so you can
have \text{(PO)}_4 without needing to translate.

Test Plan:
build/lint_i18n_strings_test.py

Before my change, the test failed on the new text.html, and after my
change, it passes.

build/lint_i18n_strings_test.py

(same)

Reviewers: john

Reviewed By: john

CC: alpert

Differential Revision: http://phabricator.khanacademy.org/D3896
Update khan-exercises based on the current webapp repo.

Summary:
I did this by running local-only/update_local.sh.  I had to update
update_local a bit first, to account for changes to compress.py since
the last time it was run.

Test Plan:
Ran
   python -mSimpleHTTPServer
and visited
   http://localhost:8000/exercises/absolute_value.html
and everything looked ok still...

Reviewers: eater, alpert

Reviewed By: alpert

Differential Revision: http://phabricator.khanacademy.org/D3949
estimation_with_decimals: Round earlier

Fixes #71081. (Rounding to one digit and then to the nearest int is different than just rounding to the nearest int...)

Auditors: alex
Fix quadrilaterals having overlapping angle text

Fixes #68799 by insuring a minimum side length for quads.
Fix quadrilateral exercises cutting off figures

Changed boxOut's inching amount in the quad exercises
to be more fine-grained.  Avoids having bad luck and
getting part of the figure out of view.
Avoid very obtuse angles overlapping figure lines

Very obtuse angles were not being pushed far enough away
from the figure's lines and needed a bigger term than
only slightly obtuse angles. (This also fixes a comparison
error in that same function)
Merge pull request #71287 from theinternetftw/fix-quad-angle-spacing

Fixes for rendering angle labels and quads
Use underscore's indexOf, as IE8 doesn't have it
Merge pull request #71357 from theinternetftw/fix-indexof-not-available

Use underscore's indexOf, as IE8 doesn't have it built in
scratchpad: Protect against null prevPen

Fixes #71379.

Test Plan: Click down in the top area of the scratchpad next to the colors, then drag down into the actual drawing area. No JS errors should result.

Auditors: alex
Minor hint clarification

Multiple people complained about the exercise due to original
wording (see #67736). This clarifies that hint to avoid those
complaints.
Merge pull request #71547 from theinternetftw/minor-hint-clarification

Minor hint clarification
Fix a random seed of zero being ignored

This was caused by zero being interpreted as false.
Hurray loose typing! Hurray Javascript! :D
Merge pull request #71539 from theinternetftw/fix-zero-seed-not-seeding

Fixes a random seed of zero being ignored
Stop rolling back userExercise

Summary:
It appears that we used to rollback userExercise's lastAttemptNumber and lastCountHints to avoid hitting a problem in powermode with its hints already displayed (that confused users!). Unfortunately, this trickery causes the following scenario:

1 - User opens suggested task on dashboard
2 - User takes a hint, and we mark that problem result in learning-task.js, gets an x in the task header view
3 - User closes task
4 - User reopens task
5 - User sees the same problem as before, answers correctly this time, and we mark this problem *again*, this time correctly and she gets a V in the task header view

This is wrong because we are double-marking a problem result, and not only that we're saying she got it "right" even though she took a hint. We shouldn't be rolling back like this, and I propose that we live with non-math-power-mode-user's confusion instead of confusing math-task-edge-case. For the extra curious, the rollback caused us to fail a check that happens around step 4 where we check whether the user's acted on this problem before

Reported by eater: https://trello.com/c/QV2J9cQR/777-if-you-get-a-problem-wrong-close-the-task-reopen-it-and-answer-the-same-problem-correctly-you-get-a-checkmark-for-it-even-though so I'll CC him

Test Plan: Do the same things above, except see that no extra V/X appears on the subsequent attempt

Reviewers: alpert

Reviewed By: alpert

CC: eater, james

Differential Revision: http://phabricator.khanacademy.org/D3997
Small tweak to earlier quad fix

Don't run on kites or anything else with sideRatio of 1. The fix
isn't needed and very occationally locks up on these figures, so
always leave them be. (Also a small == to === change)
Give very obtuse angle labels even more room

After more observation, angles > 150 sometimes need even more
room to avoid clipping into figure lines.