PageSourceSearch

https://www.cop.es/ihavecookies/jquery.ihavecookies.js

js cop.es collected 2026-10-02 05:50:00 UTC 8,770 bytes, 205 lines download raw bytes

1/*!
2 * ihavecookies - jQuery plugin for displaying cookie/privacy message
3 * v0.3.2
4 *
5 * Copyright (c) 2018 Ketan Mistry (https://iamketan.com.au)
6 * Licensed under the MIT license:
7 * http://www.opensource.org/licenses/mit-license.php
8 *
9 */
10(function($) {
11
12    /*
13    |--------------------------------------------------------------------------
14    | Cookie Message
15    |--------------------------------------------------------------------------
16    |
17    | Displays the cookie message on first visit or 30 days after their
18    | last visit.
19    |
20    | @param event - 'reinit' to reopen the cookie message
21    |
22    */
23    $.fn.ihavecookies = function(options, event) {
24
25        var $element = $(this);
26
27        // Set defaults
28        var settings = $.extend({
29            cookieTypes: [
30               
31            ],
32            title: 'Cookies y Política de Privacidad',
33            message: 'Este sitio web solamente utiliza cookies esenciales y el sitio no funcionará como se espera sin ellas. ',
34            link: '/privacy-policy',
35            delay: 2000,
36            expires: 30,
37            moreInfoLabel: 'More information',
38            acceptBtnLabel: 'Accept Cookies',
39            advancedBtnLabel: 'Customise Cookies',
40            cookieTypesTitle: 'Select cookies to accept',
41            fixedCookieTypeLabel:'Necessary',
42            fixedCookieTypeDesc: 'These are cookies that are essential for the website to work correctly.',
43            onAccept: function(){},
44            uncheckBoxes: false
45        }, options);
46
47        var myCookie = getCookie('cookieControl');
48        var myCookiePrefs = getCookie('cookieControlPrefs');
49        if (!myCookie || !myCookiePrefs || event == 'reinit') {
50            // Remove all instances of the cookie message so it's not duplicated
51            $('#gdpr-cookie-message').remove();
52
53            // Set the 'necessary' cookie type checkbox which can not be unchecked
54            var cookieTypes = '<li><input type="checkbox" name="gdpr[]" value="necessary" checked="checked" disabled="disabled"> <label title="' + settings.fixedCookieTypeDesc + '">' + settings.fixedCookieTypeLabel + '</label></li>';
55
56            // Generate list of cookie type checkboxes
57            preferences = JSON.parse(myCookiePrefs);
58            $.each(settings.cookieTypes, function(index, field) {
59                if (field.type !== '' && field.value !== '') {
60                    var cookieTypeDescription = '';
61                    if (field.description !== false) {
62                        cookieTypeDescription = ' title="' + field.description + '"';
63                    }
64                    cookieTypes += '<li><input type="checkbox" id="gdpr-cookietype-' + field.value + '" name="gdpr[]" value="' + field.value + '" data-auto="on"> <label for="gdpr-cookietype-' + field.value + '"' + cookieTypeDescription + '>' + field.type + '</label></li>';
65                }
66            });
67
68            // Display cookie message on page
69            var cookieMessage = '<div id="gdpr-cookie-message"><h4>' + settings.title + '</h4><p>' + settings.message + ' <a href="' + settings.link + '">' + settings.moreInfoLabel + '</a><div id="gdpr-cookie-types" style="display:none;"><h5>' + settings.cookieTypesTitle + '</h5><ul>' + cookieTypes + '</ul></div><p><button id="gdpr-cookie-accept" type="button">' + settings.acceptBtnLabel + '</button><button id="gdpr-cookie-advanced" type="button">' + settings.advancedBtnLabel + '</button></p></div>';
70            setTimeout(function(){
71                $($element).append(cookieMessage);
72                $('#gdpr-cookie-message').hide().fadeIn('slow', function(){
73                    // If reinit'ing, open the advanced section of message
74                    // and re-check all previously selected options.
75                    if (event == 'reinit') {
76                        $('#gdpr-cookie-advanced').trigger('click');
77                        $.each(preferences, function(index, field) {
78                            $('input#gdpr-cookietype-' + field).prop('checked', true);
79                        });
80                    }
81                });
82            }, settings.delay);
83
84            // When accept button is clicked drop cookie
85            $('body').on('click','#gdpr-cookie-accept', function(){
86                // Set cookie
87                dropCookie(true, settings.expires);
88
89                // If 'data-auto' is set to ON, tick all checkboxes because
90                // the user hasn't clicked the customise cookies button
91                $('input[name="gdpr[]"][data-auto="on"]').prop('checked', true);
92
93                // Save users cookie preferences (in a cookie!)
94                var prefs = [];
95                $.each($('input[name="gdpr[]"]').serializeArray(), function(i, field){
96                    prefs.push(field.value);
97                });
98                setCookie('cookieControlPrefs', encodeURIComponent(JSON.stringify(prefs)), 365);
99
100                // Run callback function
101                settings.onAccept.call(this);
102            });
103
104            // Toggle advanced cookie options
105            $('body').on('click', '#gdpr-cookie-advanced', function(){
106                // Uncheck all checkboxes except for the disabled 'necessary'
107                // one and set 'data-auto' to OFF for all. The user can now
108                // select the cookies they want to accept.
109                $('input[name="gdpr[]"]:not(:disabled)').attr('data-auto', 'off').prop('checked', false);
110                $('#gdpr-cookie-types').slideDown('fast', function(){
111                    $('#gdpr-cookie-advanced').prop('disabled', true);
112                });
113            });
114
115        } else {
116            var cookieVal = true;
117            if (myCookie == 'false') {
118                cookieVal = false;
119            }
120            dropCookie(cookieVal, settings.expires);
121        }
122
123        // Uncheck any checkboxes on page load
124        if (settings.uncheckBoxes === true) {
125            $('input[type="checkbox"].ihavecookies').prop('checked', false);
126        }
127
128    };
129
130    // Method to get cookie value
131    $.fn.ihavecookies.cookie = function() {
132        var preferences = getCookie('cookieControlPrefs');
133        return JSON.parse(preferences);
134    };
135
136    // Method to check if user cookie preference exists
137    $.fn.ihavecookies.preference = function(cookieTypeValue) {
138        var control = getCookie('cookieControl');
139        var preferences = getCookie('cookieControlPrefs');
140        preferences = JSON.parse(preferences);
141        if (control === false) {
142            return false;
143        }
144        if (preferences === false || preferences.indexOf(cookieTypeValue) === -1) {
145            return false;
146        }
147        return true;
148    };
149
150    /*
151    |--------------------------------------------------------------------------
152    | Drop Cookie
153    |--------------------------------------------------------------------------
154    |
155    | Function to drop the cookie with a boolean value of true.
156    |
157    */
158    var dropCookie = function(value, expiryDays) {
159        setCookie('cookieControl', value, expiryDays);
160        $('#gdpr-cookie-message').fadeOut('fast', function() {
161            $(this).remove();
162        });
163    };
164
165    /*
166    |--------------------------------------------------------------------------
167    | Set Cookie
168    |--------------------------------------------------------------------------
169    |
170    | Sets cookie with 'name' and value of 'value' for 'expiry_days'.
171    |
172    */
173    var setCookie = function(name, value, expiry_days) {
174        var d = new Date();
175        d.setTime(d.getTime() + (expiry_days*24*60*60*1000));
176        var expires = "expires=" + d.toUTCString();
177        document.cookie = name + "=" + value + ";" + expires + ";path=/";
178        return getCookie(name);
179    };
180
181    /*
182    |--------------------------------------------------------------------------
183    | Get Cookie
184    |--------------------------------------------------------------------------
185    |
186    | Gets cookie called 'name'.
187    |
188    */
189    var getCookie = function(name) {
190        var cookie_name = name + "=";
191        var decodedCookie = decodeURIComponent(document.cookie);
192        var ca = decodedCookie.split(';');
193        for (var i = 0; i < ca.length; i++) {
194            var c = ca[i];
195            while (c.charAt(0) == ' ') {
196                c = c.substring(1);
197            }
198            if (c.indexOf(cookie_name) === 0) {
199                return c.substring(cookie_name.length, c.length);
200            }
201        }
202        return false;
203    };
204
205}(jQuery));

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.