1!(function (global) { 2 'use strict'; 3 4 if (!('document' in global)) { 5 return; 6 } 7 8 var doc = global.document; 9 var dependencies = ['domReady']; 10 11 if (!doc.querySelectorAll || !doc.querySelector) { 12 dependencies.push('droplet/QuerySelectorAllPolyfill/QuerySelectorAllPolyfill'); 13 } 14 15 if ((!window.addEventListener || !window.removeEventListener) && window.attachEvent && window.detachEvent) { 16 dependencies.push('droplet/EventListenerPolyfill/EventListenerPolyfill'); 17 } 18 19 if (!('classList' in document.createElement('p'))) { 20 dependencies.push('vendor/classlist/classList.min'); 21 } 22 23 if (!('indexOf' in Array.prototype)) { 24 dependencies.push('droplet/IndexOfPolyfill/IndexOfPolyfill'); 25 } 26 27 require(dependencies, function (domReady) { 28 var CookieControl = {}; 29 30 CookieControl.cookieBar = (function () { 31 var classes = { 32 cookieBar: 'scms-cc-cookie-bar', 33 cookieSettingsContainer: 'cb-cookie-settings', 34 cookieBarOpen: 'cb-open', 35 cookieBarOpenBody: 'cookiebar-is-open', 36 jsEnabled: 'cb-js', 37 settingsButton: 'cd-settings-button', 38 cookiesEnabled: 'cb-cookies-enabled', 39 cookiesAlwaysOn: 'cb-cookies-always-on', 40 onOffSwitch: 'cb-onoffswitch', 41 onOffSwitchWrapper: 'cb-onoffswitch-wrapper', 42 onOffSwitchInner: 'cb-onoffswitch-inner', 43 onOffSwitchInactive: 'cb-onoffswitch-inactive', 44 onOffSwitchActive: 'cb-onoffswitch-active', 45 onOffSwitchHandle: 'cb-onoffswitch-switch' 46 }; 47 var elements = {}; 48 49 function init () { 50 // First, initialize 51 elements.cookieBar = document.getElementById(classes.cookieBar); 52 elements.settingsButton = document.getElementById(classes.settingsButton); 53 elements.settingsListItems = document.querySelectorAll('.' + classes.cookieSettingsContainer + ' li'); 54 55 if (!('indexOf' in elements.settingsListItems)) { 56 var arr = []; 57 var i; 58 for(i = 0; i < elements.settingsListItems.length; ++i) { 59 arr.push(elements.settingsListItems[i]); 60 } 61 elements.settingsListItems = arr; 62 } 63 64 elements.cookieBar.classList.add(classes.jsEnabled); 65 66 // Set observers 67 elements.cookieBar.addEventListener('click', onCookieBarClick); 68 69 // Yay, let's add some sugar! 70 buildOnOffSwitches(); 71 } 72 73 function onCookieBarClick (event) { 74 var element = event.srcElement || event.target; 75 var elementTag = element.tagName.toUpperCase(); 76 77 // Open cookie panel 78 if (element === elements.settingsButton) { 79 elements.cookieBar.classList.toggle(classes.cookieBarOpen); 80 document.body.classList.toggle(classes.cookieBarOpenBody); 81 return; 82 } 83 84 if (elementTag === 'BUTTON' && element.dataset.target) { 85 document.location.href = element.dataset.target.replace(/^#+/, ''); 86 return; 87 } 88 89 // Toggle on/off-switch when clicking in checkbox 90 var listElem = elementTag === 'LI' ? element : findParent(element, 'li'); 91 92 if (elementTag === 'INPUT') { 93 toggleOnOffSwitch(element, listElem); 94 return; 95 } 96 97 var testElem = element; 98 99 while (testElem && testElem !== listElem && testElem !== doc) { 100 if (testElem && testElem.tagName.match(/^label|input$/i)) { 101 return; 102 } 103 104 testElem = testElem.parentNode; 105 } 106 107 // Toggle checkbox and on/off switch when clicking on LI or descendants 108 if (listElem && listElem.classList.contains(classe
108s.cookiesAlwaysOn) || 109 elements.settingsListItems.indexOf(listElem) === -1 110 ) { 111 return; 112 } 113 114 var inputElem = listElem.querySelector('input'); 115 inputElem.checked = !inputElem.checked; 116 toggleOnOffSwitch(inputElem, listElem); 117 } 118 119 function toggleOnOffSwitch (inputElem, listElem) { 120 var checked = inputElem.checked; 121 122 if (checked === true) { 123 listElem.classList.add(classes.cookiesEnabled); 124 } else { 125 listElem.classList.remove(classes.cookiesEnabled); 126 } 127 } 128 129 function buildOnOffSwitches () { 130 var count = elements.settingsListItems.length, 131 i; 132 133 for (i = 0; i < count; i++) { 134 var listItem = elements.settingsListItems[i], 135 inputOn = listItem.querySelector('input').checked, 136 parentClass = (inputOn) ? classes.cookiesEnabled : false; 137 138 if (parentClass) { 139 listItem.classList.add(parentClass); 140 } 141 142 // Create elements 143 var div1 = doc.createElement('div'); 144 div1.className = classes.onOffSwitch; 145 146 var div2 = doc.createElement('div'); 147 div2.className = classes.onOffSwitchWrapper; 148 149 var span1 = doc.createElement('span'); 150 span1.className = classes.onOffSwitchInner; 151 152 var span2 = doc.createElement('span'); 153 span2.className = classes.onOffSwitchActive; 154 span2.innerHTML = 'AAN'; 155 156 var span3 = doc.createElement('span'); 157 span3.className = classes.onOffSwitchInactive; 158 span3.innerHTML = 'UIT'; 159 160 var span4 = doc.createElement('span'); 161 span4.className = classes.onOffSwitchHandle; 162 163 span1.appendChild(span2); 164 span1.appendChild(span3); 165 div2.appendChild(span1); 166 div2.appendChild(span4); 167 div1.appendChild(div2); 168 listItem.appendChild(div1); 169 } 170 } 171 172 function findParent (element, tagName) { 173 tagName = tagName.toLowerCase(); 174 175 while (element && element.parentNode) { 176 element = element.parentNode; 177 178 if (element.tagName && element.tagName.toLowerCase() === tagName) { 179 return element; 180 } 181 } 182 183 return null; 184 } 185 186 return { 187 init: init 188 }; 189 }()); 190 191 domReady(CookieControl.cookieBar.init); 192 }); 193})(window);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.