The eslint configuration and the admin script compress.py have been
updated for ES6.
The unused fallback of globals.django in jquery.init.js was removed. It
is always included before jsi18n-mocks.test.js and it always sets the
global value.
The script previously used the PyPI package closure, which is slightly
out of date and not maintained by Google.
The JavaScript contribution docs and the compress.py script now runs the
google-closure-compiler package in the recommended way. Google's
documentation on usage and installation can be found at:
https://github.com/google/closure-compiler-npm/tree/master/packages/google-closure-compiler#usage
This also makes the usage simpler as the package now runs through npm's
npx utility, which will automatically install google-closure-compiler to
a per-user cache.
The use of $(document).ready() was removed. The script is loaded at the
end of the document. Therefore, the referenced DOM elements are already
available and the script does not need to wait for the full DOM to be
ready before continuing.
Now that the script has no external dependencies, it can be loaded
asynchronously. As such, the async attribute was added to the script
element.
Firefox does not include shorthand properties, such as "border", in the
computed CSS properties object. This is documented at MDN:
https://developer.mozilla.org/en-US/docs/Web/API/Window/getComputedStyle
> The returned CSSStyleDeclaration object contains active values for CSS
> property longhand names. For example, border-bottom-width instead of
> the border-width and border shorthand property names. It is safest to
> query values with only longhand names like font-size. Shorthand names
> like font will not work with most browsers.
This difference between Firefox and Chrome is also discussed in the
stackoverflow thread at:
https://stackoverflow.com/a/32296604
This allows the removal of its O(n) .get_field_by_name method and many
other awkward access patterns.
While fields were initially stored in a list to preserve the initial
model definiton field ordering the auto-detector doesn't take field
ordering into account and no operations exists to reorder fields of a
model.
This makes the preservation of the field ordering completely superflous
because field reorganization after the creation of the model state
wouldn't be taken into account.