BUG: fixed "regression" inserted with 9281ebc64764a58f86f685f9765e1d8b60995e5a adding a new class to SiteTree elem (edit-disabled)
FIX Deprecation $manifest not in global scope

$manifest is not in the global scope, patched it to use SS_ClassLoader to get the manifest instead.
NEW: Add Thumbnails to 'Choose another file' dialogue

Very difficult to choose an image based on file name alone. Added thumbnail and reduced rows from 10 to 8 to compensate for increased height of rows with thumbnail included.
FIX extra_requirements to accept non associative arrays.

Added unit tests for extra_requirements_js and extra_requirements_css.

Fixed YAML documentation to indicate list syntax.
Doc cleanup (spelling, line length, grammar)
Merge pull request #2046 from wilr/leftandmain_requirements

FIX LeftAndMain::extra_requirements to accept non associative arrays.
Updated translations
Merge remote-tracking branch 'origin/3.0' into 3.1
Merge pull request #2041 from Mark-M/patch-1

FIX Deprecation $manifest not in global scope
Fix: Enable delete button for users with canDelete() but no canEdit() permissions

$form->makeReadonly(); iterates over all fields/actions, disabling the 'delete' button even when the user has permission
BUG Trigger TinyMCE onChange more frequently

Periodically check for inline changes when focused,
since TinyMCE's onChange only fires on certain actions
like inserting a new paragraph, as opposed to any user input.
This also works around an issue where the "save" button
wouldn't trigger if the click is the cause of a "blur" event
after an (undetected) inline change. This "blur" causes onChange
to trigger, which will change the button markup to show "alternative" styles,
effectively cancelling the original click event.
Merge pull request #2039 from g4b0/sitetree-edit-disabled

BUG: fixed "regression" adding a new class to SiteTree elem (edit-disabled)
BUG Correct relation saving in DataObject->duplicateRelations()

This caused problems when duplicate() was used in the CMS UI
to duplicate a SiteTree object. Since every object of this type
has a ParentID relation, it copied this empty relation into
new "ghost page".

See https://github.com/silverstripe/silverstripe-cms/issues/689
ENHANCEMENT: Do not attempt to run abstract test classes

There is no reason to try to run test cases of a class that is abstract.  By
skipping them we allow developers to create abstract test case classes that
have test functions in them.  This is especially helpful when someone is
testing multiple implementations of the same service interface.  Most of their
tests can be in the abstract class, and then they can create concrete test
classes for each of their implementations and inherit all of the testing that
is built into the abstract class.
Filter notice styling and panel adjustments

* Based on @clarkepaul's commit here:
https://github.com/silverstripe-droptables/sapphire/commit/e5de6c06489f3
449ee8131bf4ee2a4e1b2380bee
* Kept margin adjustments, but avoided implementing tab changes, as
tabs have chnaged a lot since original commit
Batch actions styling

* Removed cog icon (usually associated with settings), and tidied up
padding (based on @clarkepaul's commit:
https://github.com/silverstripe-droptables/sapphire/commit/b09cd5f7f8e73
4df1f7ca0d387a5b97a03a3b604)
Preview Background styling

* Added background color to preview for sites that don't have a
background color (based on @clarkepaul's commit:
https://github.com/silverstripe-droptables/sapphire/commit/7750c8f75fc4a
764b384c6e19dbe543c4811cdcb)
Merge pull request #2058 from adrexia/filter-panel

Filter notice styling and panel adjustments
Merge pull request #2060 from adrexia/preview

Preview Background styling
Merge pull request #2059 from adrexia/batch-actions

Batch actions styling