Take quiz: accessible timer!

So cool! Press ALT+SHIFT+T (or ALT+CTRL+T) at any time while you're
taking the quiz, and screen-reader will read the time remaining right
away without stealing focus away.

Closes CNVS-14086

TEST PLAN
---- ----

  - make a quiz with a time limit
  - take it and turn on VoiceOver or something
  - right after the quiz instructions, you should now hear a new note
    explaining the new shortcut
  - now press ALT+SHIFT+T
    + verify you hear the remaining time
    + verify your cursor is still where it is; you can resume doing
      whatever you wanted to do after hearing the remaining time

Change-Id: I18ccce6bf2f85c1f60206a61a46b8ef683a79dea
Reviewed-on: https://gerrit.instructure.com/41680
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Ryan Taylor <rtaylor@instructure.com>
Reviewed-by: Derek DeVries <ddevries@instructure.com>
QA-Review: Trevor deHaan <tdehaan@instructure.com>
Product-Review: Derek DeVries <ddevries@instructure.com>
make quiz question drag and drop to be useable by keyboard only users

This changes the quiz drag and drop handle to be the same icon we use for
drag and drop reordering on the index pages. Now when the icon is dragged it
gives normal drag and drop reordering, but when it is clicked it will bring
up the move modal dialog.

This also adds a warning message when the item is focused on that tells that it
is an accessible alternative.

This also fixes a bug with accessible reordering of quiz questions when there
are greater than 25 questions in a quiz.

fixes CNVS-15778

test plan:
  - as a teacher
  - create a quiz
    - the drag handle should now always show when creating questions and groups
    - you can drag the handle to reorder with drag-n-drop
    - you can click the handle to bring up the move to dialog box

  - create a quiz with no question groups
  - use screenreader
    - you should be able to use the dialog to reorder the questions
    - it should read the warning message on focus

  - create a quiz with > 25 questions
  - use screenreader
    - you should be able to use the dialog to reorder the questions
    - it should read the warning message on focus

  - create a quiz with question groups
  - use the screenreader
    - you should be able to reorder both questions/groups
    - try moving items in any way you can think - outside/inside groups, etc
    - it should read the warning message on focus

  - for all these situations, the normal drag-n-drop should continue to work
  - no drag and drop handles should show up in question banks
    - check banks with both < 50 questions and > 50 questions

Change-Id: If23ce2a68f1f8d60cc8f3ca76d4fea36f89b7a9b
Reviewed-on: https://gerrit.instructure.com/41703
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Ryan Taylor <rtaylor@instructure.com>
QA-Review: Trevor deHaan <tdehaan@instructure.com>
Reviewed-by: Brian Finney <bfinney@instructure.com>
Product-Review: Derek DeVries <ddevries@instructure.com>
Less aggressive formula question variable caching

Seems like the problem was that the cached data would not get
invalidated in the case of generation failure, causing any further
changes (or recomputations) to the variables to be ignored.

Closes CNVS-13702

TEST PLAN
---- ----

See Ian's screencast in the ticket's comments:
(https://instructure.atlassian.net/secure/attachment/21167/CNVS-13702.swf)

That should no longer be reproducible. Instead, it should generate some
solutions when you do change the numbers.

  - go to new quiz page
  - add a formula question, and do things in exactly this order:
    1. write "[a] - [b]" in the description
    2. fill in the first variable [a] with 1 and 1 for Min and Max
    3. fill in the second variable [b] with 1 and 1 for Min and Max
    4. fill in a formula with "a-b" then click Save
    5. fill in the "Offer" field with like 10
    6. press Generate
  - you should now receive an error alert
  - now do this:
    1. change [b] values to 3 and 3 for Min and Max
    2. press Recompute
    3. press Generate again
  - you should no longer see the error alert, and it should generate the
    possible solutions

Change-Id: I1f79e3196439b109322a697075265a7b15b13aab
Reviewed-on: https://gerrit.instructure.com/41681
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Ryan Taylor <rtaylor@instructure.com>
Reviewed-by: Derek DeVries <ddevries@instructure.com>
QA-Review: Trevor deHaan <tdehaan@instructure.com>
Product-Review: Derek DeVries <ddevries@instructure.com>
CQS: accessible score percentile chart

Closes CNVS-15301

Three enhancements:

  - chart now has a title (and apparently a browser tooltip!)
  - the 0% ... 100% X-Axis ticks are now hidden to the screenreader
  - the chart is equipped with an audible description, something like:
    "10 of the students scored above, or at, the average, and 2 below."

TEST PLAN
---- ----

  - go to CQS page
  - verify you hear the chart's title, "Score percentiles chart",
    labeled as a "group"
  - verify you can enter the group
    + verify that once you enter the group, you can hear the audible
      description of the chart noted above
  - verify you can not reach the 0%...100% X Axis ticks using the
    screen-reader

NVDA NOTES
---- -----

To get to the summary sentence that is now a replacement of the chart,
you can keep pushing DOWNARROW until you pass by all the table cells,
and just before it reads the "Question Breakdown" heading, or
alternatively (faster):

  - press H two times until you get to "Question Breakdown" then UPARROW
  - press T to get to the summary table, press DOWNARROW like 12 times
    to pass by all the cells, then another time

Something else: if the app renders before the data is loaded, e.g, cells
in the first table are still at 0%, NVDA might have already cached the
page. Then, when you get to the table and the app has loaded, it reads
"0%" instead of the actual numbers... you can use INSERT+F5 to tell NVDA
to refresh the page and look for new changes.

This is obviously problematic, but solving it is outside the scope of
this patch. Maybe we should prevent the app from starting until we have
all the data ready? Donno

See "Refresh browse mode document" in this section of their User Guide:
http://community.nvda-project.org/documentation/userGuide.html?#toc40

Change-Id: Ia4912bfb5978bf9c2fc2ae26d9a2967a5392e2f3
Reviewed-on: https://gerrit.instructure.com/41329
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Derek DeVries <ddevries@instructure.com>
QA-Review: Trevor deHaan <tdehaan@instructure.com>
Product-Review: Derek DeVries <ddevries@instructure.com>
fix styling on toolbar buttons in newfiles

Change-Id: I0e7d01afb627b3bd7c26aafc63dbb2559ef4f67b
Reviewed-on: https://gerrit.instructure.com/41704
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Dan Minkevitch <dminkevitch@instructure.com>
Product-Review: Ryan Shaw <ryan@instructure.com>
QA-Review: Ryan Shaw <ryan@instructure.com>
Updated es translation

Change-Id: I59ad4f7afc8aa80b4cd5365800e62fafdf2f09eb
Updated ru translation

Change-Id: I5f5196b4d02ee81d6ed6b0f263cbeb1f99aedb52
Updated ja translation

Change-Id: I51106bcdee0af8ac040cf4c34339eec2adcff37e
Updated nl translation

Change-Id: I56abe2b34261d1badd4b1ce33356a93ba6377683
Updated nb translation

Change-Id: I6499b496acfa105a77786dcaff95a01310a70c96
Updated ko translation

Change-Id: I6eee3b059436b0a1af9faa078da82c4f4398c3bb
Updated en-GB translation

Change-Id: I21afb543a89c7c0c84c5df32cfa05dda3c306e3d
Updated en-AU translation

Change-Id: I089f54ab40443654bbe328adfa33efffbd06ebd0
Updated tr translation

Change-Id: Ibf76077ffa67ea796553135f9ff12fe22ee5c94d
Updated fa-IR translation

Change-Id: I71498479cb3f3e58b4f46c4b32be7e851a39a9cc
prevent attachment duplicate renaming race conditions

fixes #CNVS-1496

Change-Id: I8de82e2633aacc17a78f2f7c008b1e96a2609269
Reviewed-on: https://gerrit.instructure.com/41521
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: Clare Strong <clare@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
SubmissionsController - reject files with illegal extensions

When an instructor has limited the extensions that a student is allowed
to submit, the Submissions Controller now rejects a submission that
includes a file with a disallowed extension, giving the user an error
message so they know what went wrong.

The Javascript on the page also now does client side validation of the
file extension to make user experience better and to lower the number of
POSTs made to the server.

Fixes CNVS-6121

Test Plan:
1. As a teacher, create an assignment in a course that accepts a file upload
2. Limit the file extensions so that you have a test file that would not
be allowed
3. Now as a student, submit a file with a disallowed extension
4. Observe that the file is rejected for submission
5. Upload a file with an illegal file extension to the files area
6. Return to the assignment, and submit the file from the files area
7. Observe that the file is rejected

Change-Id: I45cbbc66f0b5033b9265221afde5590a1eeeb11d
Reviewed-on: https://gerrit.instructure.com/40784
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Simon Williams <simon@instructure.com>
QA-Review: Sean Lewis <slewis@instructure.com>
Product-Review: Simon Williams <simon@instructure.com>
make 'development' features invisible in production

also remove the 'development' tag on existing features, other
than those that manually made themselves invisible in prod.
we'll let 'beta' suffice for the purpose of informing the user
that a feature is not fully baked.

test plan:
  - Deploy normally to your QA portal.  The 'quiz stats'
    feature flag should be available and operational.
  - Remove the testcluster.yml file from your config/
    directory (or move / back it up to a safe place)
  - Restart your QA portal.
  - The quiz stats feature flag should not be available
    or visible.

fixes CNVS-15724

Change-Id: I9e4e46f8cc4f54ac62f5226dbca09ae4885c93a9
Reviewed-on: https://gerrit.instructure.com/41551
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Josh Simpson <jsimpson@instructure.com>
QA-Review: Clare Strong <clare@instructure.com>
Product-Review: Cosme Salazar <cosme@instructure.com>
Updated es translation

Change-Id: I59ad4f7afc8aa80b4cd5365800e62fafdf2f09eb
Updated ru translation

Change-Id: I5f5196b4d02ee81d6ed6b0f263cbeb1f99aedb52