1/** 2 * @todo Remove code if IE11 not supported anymore. 3 * Polyfill for CustomEvent constructor. Required for IE9-11. 4 * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#Polyfill 5 */ 6 7(function () { 8 if (typeof window.CustomEvent === "function") return false; 9 function CustomEvent(event, params) { 10 params = params || { bubbles: false, cancelable: false, detail: null }; 11 var evt = document.createEvent('CustomEvent'); 12 evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail); 13 return evt; 14 } 15 window.CustomEvent = CustomEvent; 16})(); 17 18(function (Drupal, $, drupalSettings) { 19 function ucfirst(string) { 20 return string.charAt(0).toUpperCase() + string.slice(1); 21 } 22 23 $.fn.extend({ 24 cookiesOverlay: function (serviceId) { 25 return this.each(function () { 26 // Define default classes. 27 var classStr = 'cookies-fallback'; 28 var baseStr = classStr + '--' + serviceId; 29 var classes = [classStr, baseStr]; 30 // Define basic elements. 31 var $element = $(this); 32 var $elementWrapper = $element.parent(); 33 if (!($element.parent().hasClass(baseStr + '--wrap'))) { 34 // Create and get the wrapper element. Caution, wrap returns the original set of elements: 35 $elementWrapper = $element.wrapAll("<div />").parent().addClass(baseStr + '--wrap'); 36 } 37 if ($element.data('status') !== 'fallback') { 38 $element.data('status', 'fallback').addClass(classStr + '--element'); 39 var $fallback = $('<div />
39').addClass(classes.join(' ')); 40 $fallback.addClass(baseStr + '--overlay') 41 // Create text box. 42 var $textbox = $('<div />').addClass('cookies-fallback--text'); 43 $textbox.text(drupalSettings.cookies.services[serviceId].placeholderMainText); 44 45 // Create Button to only accept current service (e.g. video only) 46 var $button = $('<button />').addClass(baseStr + '--btn ' + classStr + '--btn'); 47 $button.text(drupalSettings.cookies.services[serviceId].placeholderAcceptText); 48 49 // Add link behaviors: Dispatch Event, Remove class disabled from wrapper, set element status active. 50 $button.on('click', function (event) { 51 event.preventDefault(); 52 var services = {}; 53 services[serviceId] = true; 54 document.dispatchEvent(new CustomEvent('cookiesjsrSetService', { detail: { services } })); 55 }); 56 57 // Create link to accept all cookies for all services 58 var $acceptLink = $('<a href="#cookiesjsrAccept"/>').addClass(classStr + '--link'); 59 $acceptLink.text(drupalSettings.cookies.cookiesTexts.placeholderAcceptAllText); 60 // Add link behaviors: Dispatch Event, Remove class disabled from wrapper, set element status active. 61 $acceptLink.on('click', function (event) { 62 event.preventDefault(); 63 document.dispatchEvent(new CustomEvent('cookiesjsrSetService', { detail: { all: true } })); 64 }); 65 66 // Remove fallback overlay when service becomes enabled. 67 document.addEventListener('cookiesjsrUserConsent', function (event) { 68 var service = (typeof event.detail.services === 'object') ? event.detail.services : {}; 69 if (typeof service[serviceId] !== 'undefined' && service[serviceId]) { 70 var $wrapper = $element.parent('.' + baseStr + '--wrap'); 71 $element.data('status', 'active'); 72 // remove wrapper and overlay: 73 $wrapper.after($element); 74 $wrapper.remove(); 75 } 76 }) 77 78 // Build overlay. 79 $fallback.append($textbox); 80 $fallback.append($button); 81 $fallback.append($acceptLink); 82 // Put overlay to page. 83 $elementWrapper.append($fallback); 84 } 85 if (!$elementWrapper.is('.disabled')) { 86 var wrapperClasses = classes.map(function (c) { return c + '--wrap' }); 87 wrapperClasses.push('disabled'); 88 $elementWrapper.addClass(wrapperClasses.join(' ')); 89 } 90 }); 91 }, 92 // @todo This is currently only used for "cookies_filter". As a 93 // cookies_filter does not have custom "placeholderMainText" nor a 94 // custom "placeholderAcceptText", this should be resolved in the future! 95 cookiesLegacyOverlay: function (serviceName) { 96 return this.each(function () { 97 // Define default classes. 98 var classStr = 'cookies-fallback'; 99 var baseStr = classStr + '--' + serviceName; 100 var classes = [classStr, baseStr]; 101 // Define basic elements. 102 var $element = $(this); 103 var $elementWrapper = $element.parent(); 104 if (!($element.parent().hasClass(baseStr + '--wrap'))) { 105 // Create and get the wrapper element. Caution, wrap returns the original set of elements: 106 $elementWrapper = $element.wrapAll("<div />").parent().addClass(baseStr + '--wrap'); 107 } 108 if ($element.data('status') !== 'fallback') { 109 $element.data('status', 'fallback').addClass(classStr + '--element'); 110 var $fallback = $('<div />
110').addClass(classes.join(' ')); 111 $fallback.addClass(baseStr + '--overlay') 112 // Create text box. 113 var $textbox = $('<div />').addClass('cookies-fallback--text'); 114 $textbox.text(Drupal.t('This content is blocked because @service cookies have not been accepted.', 115 { '@service': ucfirst(serviceName) })); 116 // Create Button. 117 var $button = $('<button />').addClass(baseStr + '--btn ' + classStr + '--btn'); 118 $button.text(drupalSettings.cookies.cookiesTexts.placeholderAcceptAllText); 119 120 // Add link behaviors: Dispatch Event, Remove class disabled from wrapper, set element status active. 121 $button.on('click', function (event) { 122 event.preventDefault(); 123 document.dispatchEvent(new CustomEvent('cookiesjsrSetService', { detail: { all: true } })); 124 }); 125 126 // Create link. 127 var $acceptLink = $('<a href="#cookiesjsrAccept"/>').addClass(classStr + '--link'); 128 $acceptLink.text(Drupal.t('Only accept @service cookies', { '@service': ucfirst(serviceName) })); 129 // Add link behaviors: Dispatch Event, Remove class disabled from wrapper, set element status active. 130 $acceptLink.on('click', function (event) { 131 event.preventDefault(); 132 var services = {}; 133 services[serviceName] = true; 134 document.dispatchEvent(new CustomEvent('cookiesjsrSetService', { detail: { services } })); 135 }); 136 137 // Remove fallback overlay when service becomes enabled. 138 document.addEventListener('cookiesjsrUserConsent', function (event) { 139 var service = (typeof event.detail.services === 'object') ? event.detail.services : {}; 140 if (typeof service[serviceName] !== 'undefined' && service[serviceName]) { 141 var $wrapper = $element.parent('.' + baseStr + '--wrap'); 142 $element.data('status', 'active'); 143 // remove wrapper and overlay: 144 $wrapper.after($element); 145 $wrapper.remove(); 146 } 147 }) 148 149 // Build overlay. 150 $fallback.append($textbox); 151 $fallback.append($button); 152 $fallback.append($acceptLink); 153 // Put overlay to page. 154 $elementWrapper.append($fallback); 155 } 156 if (!$elementWrapper.is('.disabled')) { 157 var wrapperClasses = classes.map(function (c) { return c + '--wrap' }); 158 wrapperClasses.push('disabled'); 159 $elementWrapper.addClass(wrapperClasses.join(' ')); 160 } 161 }); 162 } 163 }); 164} 165 166)(Drupal, jQuery, drupalSettings);
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.