From c1ceefbdcf9a215651c6bbc166de4cc3da111299 Mon Sep 17 00:00:00 2001 From: Tobias Bengfort Date: Tue, 23 Jun 2020 17:07:05 +0200 Subject: [PATCH 1/7] split subject_form.js --- .../static/js/{subject_form.js => consent.js} | 17 ----------------- castellum/subjects/static/js/notes.js | 17 +++++++++++++++++ .../subjects/subject_additional_info_form.html | 2 +- .../subjects/subject_data_protection_form.html | 2 +- 4 files changed, 19 insertions(+), 19 deletions(-) rename castellum/subjects/static/js/{subject_form.js => consent.js} (71%) create mode 100644 castellum/subjects/static/js/notes.js diff --git a/castellum/subjects/static/js/subject_form.js b/castellum/subjects/static/js/consent.js similarity index 71% rename from castellum/subjects/static/js/subject_form.js rename to castellum/subjects/static/js/consent.js index 3a8a58c00..644097d65 100644 --- a/castellum/subjects/static/js/subject_form.js +++ b/castellum/subjects/static/js/consent.js @@ -44,21 +44,4 @@ $(function() { $consentCheckbox.prop('disabled', false); } }); - - - var $totalForms = $('#id_form-TOTAL_FORMS'); - var $notes_container = $('#notes-container'); - - $(document).on('click', '[data-js="note-add"]', function() { - var $template = $('#note-data-template'); - var html = $template.html().replace(/{prefix}/g, 'form-' + $totalForms.val()); - var $fieldset = $(html); - $notes_container.append($fieldset); - $totalForms.val(parseInt($totalForms.val(), 10) + 1); - }); - - $(document).on('click', '[data-js="note-delete"]', function(event) { - var $delete = $('#' + event.target.id.slice(0, -6)); - $delete.val(event.target.checked ? '' : 'on'); - }); }); diff --git a/castellum/subjects/static/js/notes.js b/castellum/subjects/static/js/notes.js new file mode 100644 index 000000000..ff018581a --- /dev/null +++ b/castellum/subjects/static/js/notes.js @@ -0,0 +1,17 @@ +$(function() { + var $totalForms = $('#id_form-TOTAL_FORMS'); + var $notes_container = $('#notes-container'); + + $(document).on('click', '[data-js="note-add"]', function() { + var $template = $('#note-data-template'); + var html = $template.html().replace(/{prefix}/g, 'form-' + $totalForms.val()); + var $fieldset = $(html); + $notes_container.append($fieldset); + $totalForms.val(parseInt($totalForms.val(), 10) + 1); + }); + + $(document).on('click', '[data-js="note-delete"]', function(event) { + var $delete = $('#' + event.target.id.slice(0, -6)); + $delete.val(event.target.checked ? '' : 'on'); + }); +}); diff --git a/castellum/subjects/templates/subjects/subject_additional_info_form.html b/castellum/subjects/templates/subjects/subject_additional_info_form.html index dce09a978..5edc7b40a 100644 --- a/castellum/subjects/templates/subjects/subject_additional_info_form.html +++ b/castellum/subjects/templates/subjects/subject_additional_info_form.html @@ -92,5 +92,5 @@ {% block extra_scripts %} - + {% endblock %} diff --git a/castellum/subjects/templates/subjects/subject_data_protection_form.html b/castellum/subjects/templates/subjects/subject_data_protection_form.html index dbb710a79..cfb3659fc 100644 --- a/castellum/subjects/templates/subjects/subject_data_protection_form.html +++ b/castellum/subjects/templates/subjects/subject_data_protection_form.html @@ -55,5 +55,5 @@ {% endblock %} {% block extra_scripts %} - + {% endblock %} -- GitLab From 87b7fb69c356af84ce1f4f69e5c44a569c76e557 Mon Sep 17 00:00:00 2001 From: Tobias Bengfort Date: Tue, 23 Jun 2020 11:45:11 +0200 Subject: [PATCH 2/7] avoid $.ready() --- castellum/contacts/static/js/availability.js | 4 +- castellum/contacts/static/js/guardians.js | 4 +- .../recruitment/static/js/answer_declined.js | 4 +- castellum/recruitment/static/js/contact.js | 4 +- castellum/recruitment/static/js/filters.js | 4 +- castellum/static/js/calendar.js | 74 +++++++++---------- castellum/static/js/unsaved-changes.js | 4 +- castellum/static/js/utils.js | 4 +- castellum/studies/static/js/study_sessions.js | 4 +- castellum/subjects/static/js/consent.js | 4 +- castellum/subjects/static/js/notes.js | 4 +- 11 files changed, 56 insertions(+), 58 deletions(-) diff --git a/castellum/contacts/static/js/availability.js b/castellum/contacts/static/js/availability.js index d53dec76c..5f1899db2 100644 --- a/castellum/contacts/static/js/availability.js +++ b/castellum/contacts/static/js/availability.js @@ -1,4 +1,4 @@ -$(function() { +(function() { var setCheckbox = function($wrapper, $checkbox) { if ($wrapper.find('option:selected').length === 0) { $checkbox.prop('checked', false); @@ -72,4 +72,4 @@ $(function() { // set initial state of week checkbox setCheckbox($availability, $wholeWeek); -}); +})(); diff --git a/castellum/contacts/static/js/guardians.js b/castellum/contacts/static/js/guardians.js index f4547d59e..f3731c191 100644 --- a/castellum/contacts/static/js/guardians.js +++ b/castellum/contacts/static/js/guardians.js @@ -1,4 +1,4 @@ -$(function() { +(function() { $(document).on('change', '[name="guardians_pane"]', function() { ['self', 'guardians'].forEach(function(id) { var $pane = $('#contact-' + id); @@ -89,4 +89,4 @@ $(function() { $(document).on('click', '[data-js="guardian-use"]', use); $('[data-js="guardian-use-auto"]').each(use); -}); +})(); diff --git a/castellum/recruitment/static/js/answer_declined.js b/castellum/recruitment/static/js/answer_declined.js index d76012d6b..efccf900e 100644 --- a/castellum/recruitment/static/js/answer_declined.js +++ b/castellum/recruitment/static/js/answer_declined.js @@ -1,4 +1,4 @@ -$(function() { +(function() { var disableInput = function(event) { var $answer_declined = $(event.target); var $target = $('#' + $answer_declined.data('target')); @@ -10,4 +10,4 @@ $(function() { $('[data-js="answer-declined"]').each(function(i, element) { disableInput({target: element}); }); -}); +})(); diff --git a/castellum/recruitment/static/js/contact.js b/castellum/recruitment/static/js/contact.js index 3bcea9fd4..3961a273b 100644 --- a/castellum/recruitment/static/js/contact.js +++ b/castellum/recruitment/static/js/contact.js @@ -1,4 +1,4 @@ -$(function() { +(function() { var setVisibility = function() { var $status = $('[name="status"]'); var $followupInputs = $('[name="followup_date"]'); @@ -60,4 +60,4 @@ $(function() { event.preventDefault(); } }); -}); +})(); diff --git a/castellum/recruitment/static/js/filters.js b/castellum/recruitment/static/js/filters.js index ba8f1d9cc..b7f82d718 100644 --- a/castellum/recruitment/static/js/filters.js +++ b/castellum/recruitment/static/js/filters.js @@ -1,4 +1,4 @@ -$(function() { +(function() { var $totalForms = $('#id_form-TOTAL_FORMS'); var $container = $('#filter-forms'); @@ -20,4 +20,4 @@ $(function() { $formrow.attr('hidden', true); $formrow.find('input').trigger('change'); }); -}); +})(); diff --git a/castellum/static/js/calendar.js b/castellum/static/js/calendar.js index aef316125..9f9d8fce8 100644 --- a/castellum/static/js/calendar.js +++ b/castellum/static/js/calendar.js @@ -1,43 +1,41 @@ -$(function() { - $('[data-js="calendar"]').each(function(i, el) { - var layout = $(el).data('layout'); - var calendar = new FullCalendar.Calendar(el, { - schedulerLicenseKey: 'GPL-My-Project-Is-Open-Source', - plugins: ['dayGrid', 'timeGrid', 'bootstrap', 'timeline'], - themeSystem: 'bootstrap', - locale: $('html').attr('lang'), - events: location.search ? (location.search + '&events') : '?events', - eventSourceSuccess: function(raw) { - return raw.events; +$('[data-js="calendar"]').each(function(i, el) { + var layout = $(el).data('layout'); + var calendar = new FullCalendar.Calendar(el, { + schedulerLicenseKey: 'GPL-My-Project-Is-Open-Source', + plugins: ['dayGrid', 'timeGrid', 'bootstrap', 'timeline'], + themeSystem: 'bootstrap', + locale: $('html').attr('lang'), + events: location.search ? (location.search + '&events') : '?events', + eventSourceSuccess: function(raw) { + return raw.events; + }, + height: function() { + return $(window).height() - $(el).offset().top - parseInt($(el).css('margin-bottom'), 10); + }, + header: { + left: layout === 'year' ? 'timelineMonth,timelineYear' : 'timeGridWeek,dayGridMonth', + center: 'title', + right: 'prev,next', + }, + defaultView: layout === 'year' ? 'timelineMonth' : 'timeGridWeek', + views: { + timelineMonth: { + duration: {months: 1}, + slotDuration: {days: 1}, }, - height: function() { - return $(window).height() - $(el).offset().top - parseInt($(el).css('margin-bottom'), 10); + timelineYear: { + duration: {years: 1}, + slotDuration: {weeks: 1}, }, - header: { - left: layout === 'year' ? 'timelineMonth,timelineYear' : 'timeGridWeek,dayGridMonth', - center: 'title', - right: 'prev,next', + timeGridWeek: { + allDaySlot: false, + slotDuration: '00:30:00', + scrollTime: '08:00:00', }, - defaultView: layout === 'year' ? 'timelineMonth' : 'timeGridWeek', - views: { - timelineMonth: { - duration: {months: 1}, - slotDuration: {days: 1}, - }, - timelineYear: { - duration: {years: 1}, - slotDuration: {weeks: 1}, - }, - timeGridWeek: { - allDaySlot: false, - slotDuration: '00:30:00', - scrollTime: '08:00:00', - }, - }, - }); - setInterval(function() { - calendar.refetchEvents(); - }, 5000); - calendar.render(); + }, }); + setInterval(function() { + calendar.refetchEvents(); + }, 5000); + calendar.render(); }); diff --git a/castellum/static/js/unsaved-changes.js b/castellum/static/js/unsaved-changes.js index 5cca2dd06..7f1709c55 100644 --- a/castellum/static/js/unsaved-changes.js +++ b/castellum/static/js/unsaved-changes.js @@ -1,4 +1,4 @@ -$(function() { +(function() { var unsavedForms = []; var registerBeforeUnload = function() { @@ -35,4 +35,4 @@ $(function() { $(document).on('click', '[data-js="cancel"]', function() { unsavedForms = []; }); -}); +})(); diff --git a/castellum/static/js/utils.js b/castellum/static/js/utils.js index 05a36a57a..637a49c4a 100644 --- a/castellum/static/js/utils.js +++ b/castellum/static/js/utils.js @@ -1,4 +1,4 @@ -$(function() { +(function() { var preventDoubleClick = false; $(document).on('submit', 'form', function(event) { if (preventDoubleClick) { @@ -53,4 +53,4 @@ $(function() { var win = window.open(event.target.href, null, config); win.focus(); }); -}); +})(); diff --git a/castellum/studies/static/js/study_sessions.js b/castellum/studies/static/js/study_sessions.js index d228486d3..804ae6ac3 100644 --- a/castellum/studies/static/js/study_sessions.js +++ b/castellum/studies/static/js/study_sessions.js @@ -1,4 +1,4 @@ -$(function() { +(function() { var $totalForms = $('#id_form-TOTAL_FORMS'); var $sessions_container = $('#sessions-container'); @@ -18,4 +18,4 @@ $(function() { $fieldset.append($('')); $fieldset.attr('hidden', true); }); -}); +})(); diff --git a/castellum/subjects/static/js/consent.js b/castellum/subjects/static/js/consent.js index 644097d65..0c582e4b5 100644 --- a/castellum/subjects/static/js/consent.js +++ b/castellum/subjects/static/js/consent.js @@ -1,4 +1,4 @@ -$(function() { +(function() { var $consentHidden = $('#id_consent_status_hidden'); var $consentCheckbox = $('#id_consent_status'); var $consentConfirm = $('[data-js="consent-confirm"]'); @@ -44,4 +44,4 @@ $(function() { $consentCheckbox.prop('disabled', false); } }); -}); +})(); diff --git a/castellum/subjects/static/js/notes.js b/castellum/subjects/static/js/notes.js index ff018581a..15c5e93b5 100644 --- a/castellum/subjects/static/js/notes.js +++ b/castellum/subjects/static/js/notes.js @@ -1,4 +1,4 @@ -$(function() { +(function() { var $totalForms = $('#id_form-TOTAL_FORMS'); var $notes_container = $('#notes-container'); @@ -14,4 +14,4 @@ $(function() { var $delete = $('#' + event.target.id.slice(0, -6)); $delete.val(event.target.checked ? '' : 'on'); }); -}); +})(); -- GitLab From 2fa7b2fcbe8e1de024462c58c05b4286ea323981 Mon Sep 17 00:00:00 2001 From: Tobias Bengfort Date: Tue, 23 Jun 2020 11:51:33 +0200 Subject: [PATCH 3/7] avoid event.target --- castellum/contacts/static/js/availability.js | 12 ++++++------ castellum/recruitment/static/js/answer_declined.js | 4 ++-- castellum/recruitment/static/js/filters.js | 8 ++++---- castellum/static/js/utils.js | 10 +++++----- castellum/studies/static/js/study_sessions.js | 4 ++-- castellum/subjects/static/js/notes.js | 6 +++--- 6 files changed, 22 insertions(+), 22 deletions(-) diff --git a/castellum/contacts/static/js/availability.js b/castellum/contacts/static/js/availability.js index 5f1899db2..006abef7b 100644 --- a/castellum/contacts/static/js/availability.js +++ b/castellum/contacts/static/js/availability.js @@ -32,19 +32,19 @@ generateCheckboxes(); var $wholeWeek = $('[data-js="toggle-all"]'); - $availability.on('change', 'select', function(event) { + $availability.on('change', 'select', function() { // hours --> day - var $wrapperDay = $(event.target); - var $wholeDay = $(event.target).closest('.form-group').find('[data-js="toggle-day"]'); + var $wrapperDay = $(this); + var $wholeDay = $(this).closest('.form-group').find('[data-js="toggle-day"]'); setCheckbox($wrapperDay, $wholeDay); // hours --> week setCheckbox($availability, $wholeWeek); }); - $availability.on('change', '[data-js="toggle-day"]', function(event) { + $availability.on('change', '[data-js="toggle-day"]', function() { // day --> hours - var $wholeDay = $(event.target); + var $wholeDay = $(this); var $select = $wholeDay.closest('.form-group').find('select'); $select.find('option').prop('selected', $wholeDay.prop('checked')); @@ -54,7 +54,7 @@ $availability.on('change', '[data-js="toggle-all"]', function() { // week --> hours - var $wholeWeek = $(event.target); + var $wholeWeek = $(this); $availability.find('option').prop('selected', $wholeWeek.prop('checked')); // week --> days diff --git a/castellum/recruitment/static/js/answer_declined.js b/castellum/recruitment/static/js/answer_declined.js index efccf900e..0ef73d2c2 100644 --- a/castellum/recruitment/static/js/answer_declined.js +++ b/castellum/recruitment/static/js/answer_declined.js @@ -1,6 +1,6 @@ (function() { - var disableInput = function(event) { - var $answer_declined = $(event.target); + var disableInput = function() { + var $answer_declined = $(this); var $target = $('#' + $answer_declined.data('target')); $target.prop('disabled', $answer_declined.prop('checked')); }; diff --git a/castellum/recruitment/static/js/filters.js b/castellum/recruitment/static/js/filters.js index b7f82d718..da9e72c99 100644 --- a/castellum/recruitment/static/js/filters.js +++ b/castellum/recruitment/static/js/filters.js @@ -2,8 +2,8 @@ var $totalForms = $('#id_form-TOTAL_FORMS'); var $container = $('#filter-forms'); - $(document).on('click', '[data-js="filter-add"]', function(event) { - var pk = event.target.form.description.value; + $(document).on('click', '[data-js="filter-add"]', function() { + var pk = this.form.description.value; var $template = $('#template-' + pk); if ($template.length) { var html = $template.html().replace(/{prefix}/g, 'form-' + $totalForms.val()); @@ -13,8 +13,8 @@ } }); - $(document).on('click', '[data-js="filter-delete"]', function(event) { - var $formrow = $(event.target).closest('.form-row'); + $(document).on('click', '[data-js="filter-delete"]', function() { + var $formrow = $(this).closest('.form-row'); $formrow.find('[name^="form-' + $formrow.index() + '-value"]').remove(); $formrow.append($('')); $formrow.attr('hidden', true); diff --git a/castellum/static/js/utils.js b/castellum/static/js/utils.js index 637a49c4a..e383868cf 100644 --- a/castellum/static/js/utils.js +++ b/castellum/static/js/utils.js @@ -28,15 +28,15 @@ } }); - $(document).on('click', '[data-multi-reset]', function(event) { - var $target = $($(event.target).data('multi-reset')); + $(document).on('click', '[data-multi-reset]', function() { + var $target = $($(this).data('multi-reset')); $target.find('option').each(function(i, element) { $(element).prop('selected', false); }); }); - $(document).on('click', '[data-clipboard]', function(event) { - var $target = $($(event.target).data('clipboard')); + $(document).on('click', '[data-clipboard]', function() { + var $target = $($(this).data('clipboard')); if (navigator.clipboard) { navigator.clipboard.writeText($target.val()); } else { @@ -50,7 +50,7 @@ event.preventDefault(); // copied from django var config = 'height=500,width=800,resizable=yes,scrollbars=yes'; - var win = window.open(event.target.href, null, config); + var win = window.open(this.href, null, config); win.focus(); }); })(); diff --git a/castellum/studies/static/js/study_sessions.js b/castellum/studies/static/js/study_sessions.js index 804ae6ac3..176c34c32 100644 --- a/castellum/studies/static/js/study_sessions.js +++ b/castellum/studies/static/js/study_sessions.js @@ -10,8 +10,8 @@ $totalForms.val(parseInt($totalForms.val(), 10) + 1); }); - $(document).on('click', '[data-js="session-delete"]', function(event) { - var $fieldset = $(event.target).closest('fieldset'); + $(document).on('click', '[data-js="session-delete"]', function() { + var $fieldset = $(this).closest('fieldset'); $fieldset.find('[name="form-' + $fieldset.index() + '-name"]').remove(); $fieldset.find('[name="form-' + $fieldset.index() + '-duration"]').remove(); $fieldset.find('[name="form-' + $fieldset.index() + '-resource"]').remove(); diff --git a/castellum/subjects/static/js/notes.js b/castellum/subjects/static/js/notes.js index 15c5e93b5..f221981bb 100644 --- a/castellum/subjects/static/js/notes.js +++ b/castellum/subjects/static/js/notes.js @@ -10,8 +10,8 @@ $totalForms.val(parseInt($totalForms.val(), 10) + 1); }); - $(document).on('click', '[data-js="note-delete"]', function(event) { - var $delete = $('#' + event.target.id.slice(0, -6)); - $delete.val(event.target.checked ? '' : 'on'); + $(document).on('click', '[data-js="note-delete"]', function() { + var $delete = $('#' + this.id.slice(0, -6)); + $delete.val(this.checked ? '' : 'on'); }); })(); -- GitLab From dd8485c936c2c2820e3e7476cfe2b4a856e7308b Mon Sep 17 00:00:00 2001 From: Tobias Bengfort Date: Tue, 23 Jun 2020 11:47:39 +0200 Subject: [PATCH 4/7] replace $(document).on() --- castellum/contacts/static/js/guardians.js | 14 ++++++------- .../recruitment/static/js/answer_declined.js | 2 +- castellum/recruitment/static/js/contact.js | 8 +++---- castellum/recruitment/static/js/filters.js | 4 ++-- castellum/static/js/unsaved-changes.js | 8 +++---- castellum/static/js/utils.js | 21 ++++++++++++++----- castellum/studies/static/js/study_sessions.js | 4 ++-- castellum/subjects/static/js/notes.js | 4 ++-- 8 files changed, 38 insertions(+), 27 deletions(-) diff --git a/castellum/contacts/static/js/guardians.js b/castellum/contacts/static/js/guardians.js index f3731c191..1de40aa5a 100644 --- a/castellum/contacts/static/js/guardians.js +++ b/castellum/contacts/static/js/guardians.js @@ -1,5 +1,5 @@ (function() { - $(document).on('change', '[name="guardians_pane"]', function() { + $$.on(document, 'change', '[name="guardians_pane"]', function() { ['self', 'guardians'].forEach(function(id) { var $pane = $('#contact-' + id); var $radio = $('[name="guardians_pane"][value="' + id + '"]'); @@ -7,7 +7,7 @@ }); }); - $(document).on('submit', '[data-js="contact-completeness"]', function(event) { + $$.on(document, 'submit', '[data-js="contact-completeness"]', function(event) { var complete = false; if ($('[name="guardians_pane"][value="guardians"]').prop('checked')) { complete = ( @@ -44,11 +44,11 @@ } }; - $(document).on('click', '[data-js="guardian-remove"]', function() { + $$.on(document, 'click', '[data-js="guardian-remove"]', function() { toggleGuardian(this, true); }); - $(document).on('click', '[data-js="guardian-restore"]', function() { + $$.on(document, 'click', '[data-js="guardian-restore"]', function() { toggleGuardian(this, false); }); @@ -63,7 +63,7 @@ $button.before($el); }; - $(document).on('click', '[data-js="guardian-add"]', function() { + $$.on(document, 'click', '[data-js="guardian-add"]', function() { // copied from django var config = 'height=500,width=800,resizable=yes,scrollbars=yes'; var win = window.open('/subjects/guardians/', 'guardian-add', config); @@ -78,7 +78,7 @@ win.close(); }; - $(document).on('click', '[data-js="guardian-dismiss"]', function() { + $$.on(document, 'click', '[data-js="guardian-dismiss"]', function() { window.close(); }); @@ -87,6 +87,6 @@ opener.closeGuardianPopup(window, data); }; - $(document).on('click', '[data-js="guardian-use"]', use); + $$.on(document, 'click', '[data-js="guardian-use"]', use); $('[data-js="guardian-use-auto"]').each(use); })(); diff --git a/castellum/recruitment/static/js/answer_declined.js b/castellum/recruitment/static/js/answer_declined.js index 0ef73d2c2..af20847bb 100644 --- a/castellum/recruitment/static/js/answer_declined.js +++ b/castellum/recruitment/static/js/answer_declined.js @@ -5,7 +5,7 @@ $target.prop('disabled', $answer_declined.prop('checked')); }; - $(document).on('change', '[data-js="answer-declined"]', disableInput); + $$.on(document, 'change', '[data-js="answer-declined"]', disableInput); $('[data-js="answer-declined"]').each(function(i, element) { disableInput({target: element}); diff --git a/castellum/recruitment/static/js/contact.js b/castellum/recruitment/static/js/contact.js index 3961a273b..1538ca106 100644 --- a/castellum/recruitment/static/js/contact.js +++ b/castellum/recruitment/static/js/contact.js @@ -14,7 +14,7 @@ } }; - $(document).on('change', '[name="status"]', setVisibility); + $$.on(document, 'change', '[name="status"]', setVisibility); setVisibility(); var $invited = $('[name="status"] [value="3"]'); @@ -27,11 +27,11 @@ $alert.prop('hidden', !needsCheck); }; - $(document).on('change', '[name="exclusion_criteria_checked"]', setInvitedDisabled); + $$.on(document, 'change', '[name="exclusion_criteria_checked"]', setInvitedDisabled); setInvitedDisabled(); } - $(document).on('change', '[name="exclusion_criteria_checked"]', function() { + $$.on(document, 'change', '[name="exclusion_criteria_checked"]', function() { $('#criteria-tab .fa-exclamation-triangle').prop('hidden', this.checked); }); @@ -44,7 +44,7 @@ return s ? new Date(s) : null; }; - $(document).on('submit', 'form', function(event) { + $$.on(document, 'submit', 'form', function(event) { var start = getDate('#sessions-start'); var end = getDate('#sessions-end'); var warn = false; diff --git a/castellum/recruitment/static/js/filters.js b/castellum/recruitment/static/js/filters.js index da9e72c99..18b75eae1 100644 --- a/castellum/recruitment/static/js/filters.js +++ b/castellum/recruitment/static/js/filters.js @@ -2,7 +2,7 @@ var $totalForms = $('#id_form-TOTAL_FORMS'); var $container = $('#filter-forms'); - $(document).on('click', '[data-js="filter-add"]', function() { + $$.on(document, 'click', '[data-js="filter-add"]', function() { var pk = this.form.description.value; var $template = $('#template-' + pk); if ($template.length) { @@ -13,7 +13,7 @@ } }); - $(document).on('click', '[data-js="filter-delete"]', function() { + $$.on(document, 'click', '[data-js="filter-delete"]', function() { var $formrow = $(this).closest('.form-row'); $formrow.find('[name^="form-' + $formrow.index() + '-value"]').remove(); $formrow.append($('')); diff --git a/castellum/static/js/unsaved-changes.js b/castellum/static/js/unsaved-changes.js index 7f1709c55..eacf316df 100644 --- a/castellum/static/js/unsaved-changes.js +++ b/castellum/static/js/unsaved-changes.js @@ -12,7 +12,7 @@ }); }; - $(document).on('click', 'a:not([data-js="cancel"]):not([href^="#"])', function(event){ + $$.on(document, 'click', 'a:not([data-js="cancel"]):not([href^="#"])', function(event){ if (unsavedForms.length) { event.preventDefault(); var $modal = $('#unsaved-changes-modal'); @@ -21,18 +21,18 @@ } }); - $(document).on('change', 'form[method="post"]', function() { + $$.on(document, 'change', 'form[method="post"]', function() { // beforeunload prevents caching, so only register it when necessary registerBeforeUnload(); if (!unsavedForms.includes(this)) { unsavedForms.push(this); } }); - $(document).on('submit', 'form', function() { + $$.on(document, 'submit', 'form', function() { unsavedForms = unsavedForms.filter(f => f !== this); }); - $(document).on('click', '[data-js="cancel"]', function() { + $$.on(document, 'click', '[data-js="cancel"]', function() { unsavedForms = []; }); })(); diff --git a/castellum/static/js/utils.js b/castellum/static/js/utils.js index e383868cf..9834c9896 100644 --- a/castellum/static/js/utils.js +++ b/castellum/static/js/utils.js @@ -1,6 +1,17 @@ (function() { + window.$$ = { + on: function(el, eventName, selector, fn) { + el.addEventListener(eventName, function(event) { + var target = event.target.closest(selector); + if (target) { + fn.call(target, event); + } + }); + }, + }; + var preventDoubleClick = false; - $(document).on('submit', 'form', function(event) { + $$.on(document, 'submit', 'form', function(event) { if (preventDoubleClick) { event.preventDefault(); } else { @@ -11,7 +22,7 @@ } }); - $(document).on('change', '[data-js="confirm-delete"]', function() { + $$.on(document, 'change', '[data-js="confirm-delete"]', function() { $(this.form).find('[type="submit"],button:not([type])').prop('disabled', !this.checked); }); @@ -28,14 +39,14 @@ } }); - $(document).on('click', '[data-multi-reset]', function() { + $$.on(document, 'click', '[data-multi-reset]', function() { var $target = $($(this).data('multi-reset')); $target.find('option').each(function(i, element) { $(element).prop('selected', false); }); }); - $(document).on('click', '[data-clipboard]', function() { + $$.on(document, 'click', '[data-clipboard]', function() { var $target = $($(this).data('clipboard')); if (navigator.clipboard) { navigator.clipboard.writeText($target.val()); @@ -46,7 +57,7 @@ } }); - $(document).on('click', '[data-js="popup"]', function(event) { + $$.on(document, 'click', '[data-js="popup"]', function(event) { event.preventDefault(); // copied from django var config = 'height=500,width=800,resizable=yes,scrollbars=yes'; diff --git a/castellum/studies/static/js/study_sessions.js b/castellum/studies/static/js/study_sessions.js index 176c34c32..ed210d97a 100644 --- a/castellum/studies/static/js/study_sessions.js +++ b/castellum/studies/static/js/study_sessions.js @@ -2,7 +2,7 @@ var $totalForms = $('#id_form-TOTAL_FORMS'); var $sessions_container = $('#sessions-container'); - $(document).on('click', '[data-js="session-add"]', function() { + $$.on(document, 'click', '[data-js="session-add"]', function() { var $template = $('#session-data-template'); var html = $template.html().replace(/{prefix}/g, 'form-' + $totalForms.val()); var $fieldset = $(html); @@ -10,7 +10,7 @@ $totalForms.val(parseInt($totalForms.val(), 10) + 1); }); - $(document).on('click', '[data-js="session-delete"]', function() { + $$.on(document, 'click', '[data-js="session-delete"]', function() { var $fieldset = $(this).closest('fieldset'); $fieldset.find('[name="form-' + $fieldset.index() + '-name"]').remove(); $fieldset.find('[name="form-' + $fieldset.index() + '-duration"]').remove(); diff --git a/castellum/subjects/static/js/notes.js b/castellum/subjects/static/js/notes.js index f221981bb..85d0d83d0 100644 --- a/castellum/subjects/static/js/notes.js +++ b/castellum/subjects/static/js/notes.js @@ -2,7 +2,7 @@ var $totalForms = $('#id_form-TOTAL_FORMS'); var $notes_container = $('#notes-container'); - $(document).on('click', '[data-js="note-add"]', function() { + $$.on(document, 'click', '[data-js="note-add"]', function() { var $template = $('#note-data-template'); var html = $template.html().replace(/{prefix}/g, 'form-' + $totalForms.val()); var $fieldset = $(html); @@ -10,7 +10,7 @@ $totalForms.val(parseInt($totalForms.val(), 10) + 1); }); - $(document).on('click', '[data-js="note-delete"]', function() { + $$.on(document, 'click', '[data-js="note-delete"]', function() { var $delete = $('#' + this.id.slice(0, -6)); $delete.val(this.checked ? '' : 'on'); }); -- GitLab From 03f68cc39f574c18fb3a91a34e02d250faa37ccd Mon Sep 17 00:00:00 2001 From: Tobias Bengfort Date: Tue, 23 Jun 2020 17:19:23 +0200 Subject: [PATCH 5/7] port js code to vanilla --- castellum/contacts/static/js/availability.js | 88 ++++++++++--------- castellum/contacts/static/js/guardians.js | 54 ++++++------ .../recruitment/static/js/answer_declined.js | 10 +-- castellum/recruitment/static/js/contact.js | 42 ++++----- castellum/recruitment/static/js/filters.js | 37 +++++--- castellum/static/js/calendar.js | 8 +- castellum/static/js/unsaved-changes.js | 8 +- castellum/static/js/utils.js | 25 ++++-- castellum/studies/static/js/study_sessions.js | 34 ++++--- castellum/subjects/static/js/consent.js | 51 ++++++----- castellum/subjects/static/js/notes.js | 19 ++-- 11 files changed, 204 insertions(+), 172 deletions(-) diff --git a/castellum/contacts/static/js/availability.js b/castellum/contacts/static/js/availability.js index 006abef7b..d7e85986d 100644 --- a/castellum/contacts/static/js/availability.js +++ b/castellum/contacts/static/js/availability.js @@ -1,75 +1,81 @@ (function() { - var setCheckbox = function($wrapper, $checkbox) { - if ($wrapper.find('option:selected').length === 0) { - $checkbox.prop('checked', false); - $checkbox.prop('indeterminate', false); - } else if ($wrapper.find('option:selected').length < $wrapper.find('option').length) { - $checkbox.prop('checked', false); - $checkbox.prop('indeterminate', true); + var setCheckbox = function(wrapper, checkbox) { + var options = wrapper.querySelectorAll('option'); + if (Array.prototype.every.call(options, o => !o.selected)) { + checkbox.checked = false; + checkbox.indeterminate = false; + } else if (!Array.prototype.every.call(options, o => o.selected)) { + checkbox.checked = false; + checkbox.indeterminate = true; } else { - $checkbox.prop('checked', true); - $checkbox.prop('indeterminate', false); + checkbox.checked = true; + checkbox.indeterminate = false; } }; var generateCheckboxes = function() { // whole week - var $label = $('