==========JavaScript==========While most of Django core is Python, the ``admin`` and ``gis`` contrib appscontain JavaScript code.Please follow these coding standards when writing JavaScript code for inclusionin Django.Code style==========* Please conform to the indentation style dictated in the ``.editorconfig``file. We recommend using a text editor with `EditorConfig`_ support to avoidindentation and whitespace issues. Most of the JavaScript files use 4 spacesfor indentation, but there are some exceptions.* When naming variables, use ``camelCase`` instead of ``underscore_case``.Different JavaScript files sometimes use a different code style. Please try toconform to the code style of each file.* Use the `ESLint`_ code linter to check your code for bugs and style errors.ESLint will be run when you run the JavaScript tests. We also recommendedinstalling a ESLint plugin in your text editor.* Where possible, write code that will work even if the page structure is laterchanged with JavaScript. For instance, when binding a click handler, use``$('body').on('click', selector, func)`` instead of``$(selector).click(func)``. This makes it easier for projects to extendDjango's default behavior with JavaScript... _javascript-patches:JavaScript patches==================Django's admin system leverages the jQuery framework to increase thecapabilities of the admin interface. In conjunction, there is an emphasis onadmin JavaScript performance and minimizing overall admin media file size... _javascript-tests:JavaScript tests================Django's JavaScript tests can be run in a browser or from the command line.The tests are located in a top level ``js_tests`` directory.Writing tests-------------Django's JavaScript tests use `QUnit`_. Here is an example test module:.. code-block:: javascriptQUnit.module('magicTricks', {beforeEach: function() {const $ = django.jQuery;$('#qunit-fixture').append('<button class="button"></button>');}});QUnit.test('removeOnClick removes button on click', function(assert) {const $ = django.jQuery;removeOnClick('.button');assert.equal($('.button').length, 1);$('.button').click();assert.equal($('.button').length, 0);});QUnit.test('copyOnClick adds button on click', function(assert) {const $ = django.jQuery;copyOnClick('.button');assert.equal($('.button').length, 1);$('.button').click();assert.equal($('.button').length, 2);});Please consult the ``QUnit`` documentation for information on the types of`assertions supported by QUnit <https://api.qunitjs.com/assert/>`_.Running tests-------------The JavaScript tests may be run from a web browser or from the command line.Testing from a web browser~~~~~~~~~~~~~~~~~~~~~~~~~~To run the tests from a web browser, open up ``js_tests/tests.html`` in yourbrowser.To measure code coverage when running the tests, you need to view that fileover HTTP. To view code coverage:* Execute ``python -m http.server`` from the root directory (not from inside``js_tests``).* Open http://localhost:8000/js_tests/tests.html in your web browser.Testing from the command line~~~~~~~~~~~~~~~~~~~~~~~~~~~~~To run the tests from the command line, you need to have `Node.js`_ installed.After installing ``Node.js``, install the JavaScript test dependencies byrunning the following from the root of your Django checkout:.. console::$ npm installThen run the tests with:.. console::$ npm test.. _EditorConfig: https://editorconfig.org/.. _Java: https://www.java.com.. _eslint: https://eslint.org/.. _node.js: https://nodejs.org/.. _qunit: https://qunitjs.com/