From 18c1cc7466d196991896bc068dddbc1d196b61e6 Mon Sep 17 00:00:00 2001 From: Felix Hamann Date: Sun, 3 Mar 2019 17:49:17 +0100 Subject: [PATCH] split checkboxRadio js util into two separate utils --- static/js/utils/checkAll.js | 2 +- static/js/utils/inputs.js | 45 +++++++++++++++++++++++++++++-------- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/static/js/utils/checkAll.js b/static/js/utils/checkAll.js index c885ee100..8cbeb28b6 100644 --- a/static/js/utils/checkAll.js +++ b/static/js/utils/checkAll.js @@ -82,7 +82,7 @@ checkAllCheckbox.setAttribute('id', getCheckboxId()); th.innerHTML = ''; th.insertBefore(checkAllCheckbox, null); - utilInstances.push(window.utils.setup('checkboxRadio', checkAllCheckbox)); + utilInstances.push(window.utils.setup('checkbox', checkAllCheckbox)); checkAllCheckbox.addEventListener('input', onCheckAllCheckboxInput); setupCheckboxListeners(); diff --git a/static/js/utils/inputs.js b/static/js/utils/inputs.js index 26970f0e2..4d8f79946 100644 --- a/static/js/utils/inputs.js +++ b/static/js/utils/inputs.js @@ -13,10 +13,16 @@ var utilInstances = []; - // checkboxes / radios - var checkboxes = Array.from(wrapper.querySelectorAll('input[type="checkbox"], input[type="radio"]')); + // checkboxes + var checkboxes = Array.from(wrapper.querySelectorAll('input[type="checkbox"]')); checkboxes.filter(isNotInitialized).forEach(function(checkbox) { - utilInstances.push(window.utils.setup('checkboxRadio', checkbox)); + utilInstances.push(window.utils.setup('checkbox', checkbox)); + }); + + // radios + var radios = Array.from(wrapper.querySelectorAll('input[type="radio"]')); + radios.filter(isNotInitialized).forEach(function(radio) { + utilInstances.push(window.utils.setup('radio', radio)); }); // file-uploads @@ -167,17 +173,15 @@ }; } - // turns native checkboxes and radio buttons into custom ones - window.utils.checkboxRadio = function(input) { + // turns native checkboxes into custom ones + window.utils.checkbox = function(input) { - var type = input.getAttribute('type'); - - if (!input.parentElement.classList.contains(type)) { + if (!input.parentElement.classList.contains('checkbox')) { var parentEl = input.parentElement; var siblingEl = input.nextElementSibling; var wrapperEl = document.createElement('div'); var labelEl = document.createElement('label'); - wrapperEl.classList.add(type); + wrapperEl.classList.add('checkbox'); labelEl.setAttribute('for', input.id); wrapperEl.appendChild(input); wrapperEl.appendChild(labelEl); @@ -195,4 +199,27 @@ }; } + // turns native radio buttons into custom ones + window.utils.radio = function(input) { + + if (!input.parentElement.classList.contains('radio')) { + var parentEl = input.parentElement; + var siblingEl = input.nextElementSibling; + var wrapperEl = document.createElement('div'); + wrapperEl.classList.add('radio'); + wrapperEl.appendChild(input); + + if (siblingEl && siblingEl.matches('label')) { + wrapperEl.appendChild(siblingEl); + } + + input.classList.add(JS_INITIALIZED_CLASS); + parentEl.appendChild(wrapperEl); + } + + return { + destroy: function() {}, + }; + } + })();