diff --git a/static/js/site.js b/static/js/site.js
new file mode 100644
index 0000000000000000000000000000000000000000..844bff22ea393a85daac0c3a40c7d0aa808f7352
--- /dev/null
+++ b/static/js/site.js
@@ -0,0 +1,37 @@
+/* global window ace */
+window.jQuery = window.$ = require('jquery');
+
+const $ = window.$;
+
+require('bootstrap');
+
+const loadEditors = () => {
+ const $editors = $('.modal-body textarea, #id_body, #id_comment, #id_message, #id_text, #id_abstract, #id_additional_notes, #id_content_override, #id_description, #id_biography');
+ $editors.each((i, el) => {
+ const editorId = `markdown-editor-${i}`;
+ const reportDiv = $('
').attr('id', editorId);
+ const setupEditor = (editor, textarea) => {
+ const session = editor.getSession();
+ editor.setTheme('ace/theme/tomorrow');
+ editor.$blockScrolling = Infinity;
+ editor.setOption('scrollPastEnd', true);
+ session.setMode('ace/mode/markdown');
+ session.setValue(textarea.val());
+ session.setUseWrapMode(true);
+ session.on('change', () => {
+ textarea.val(session.getValue());
+ });
+ editor.renderer.setShowGutter(false);
+ session.setTabSize(4);
+ session.setUseSoftTabs(true);
+ };
+ const $formGroup = $(el).closest('.form-group');
+ const $textarea = $formGroup.find('textarea');
+ $formGroup.append(reportDiv);
+ setupEditor(ace.edit(editorId), $textarea);
+ });
+};
+
+$(() => {
+ loadEditors();
+});