MDL-67384 tool_policy: Upgrade jQuery EU Cookie Law popups to 1.1.3
[moodle.git] / admin / tool / policy / amd / src / jquery-eu-cookie-law-popup.js
blob80f431fdce49690716b28e7f4a6ffbd7afcbb86f
1 /**\r
2  *\r
3  * JQUERY EU COOKIE LAW POPUPS\r
4  * version 1.1.1\r
5  *\r
6  * Code on Github:\r
7  * https://github.com/wimagguc/jquery-eu-cookie-law-popup\r
8  *\r
9  * To see a live demo, go to:\r
10  * http://www.wimagguc.com/2018/05/gdpr-compliance-with-the-jquery-eu-cookie-law-plugin/\r
11  *\r
12  * by Richard Dancsi\r
13  * http://www.wimagguc.com/\r
14  *\r
15  */\r
17 define(['jquery'], function($) {\r
19 // for ie9 doesn't support debug console >>>\r
20 if (!window.console) window.console = {};\r
21 if (!window.console.log) window.console.log = function () { };\r
22 // ^^^\r
24 $.fn.euCookieLawPopup = (function() {\r
26         var _self = this;\r
28         ///////////////////////////////////////////////////////////////////////////////////////////////\r
29         // PARAMETERS (MODIFY THIS PART) //////////////////////////////////////////////////////////////\r
30         _self.params = {\r
31                 cookiePolicyUrl : '/?cookie-policy',\r
32                 popupPosition : 'top',\r
33                 colorStyle : 'default',\r
34                 compactStyle : false,\r
35                 popupTitle : 'This website is using cookies',\r
36                 popupText : 'We use cookies to ensure that we give you the best experience on our website. If you continue without changing your settings, we\'ll assume that you are happy to receive all cookies on this website.',\r
37                 buttonContinueTitle : 'Continue',\r
38                 buttonLearnmoreTitle : 'Learn more',\r
39                 buttonLearnmoreOpenInNewWindow : true,\r
40                 agreementExpiresInDays : 30,\r
41                 autoAcceptCookiePolicy : false,\r
42                 htmlMarkup : null\r
43         };\r
45         ///////////////////////////////////////////////////////////////////////////////////////////////\r
46         // VARIABLES USED BY THE FUNCTION (DON'T MODIFY THIS PART) ////////////////////////////////////\r
47         _self.vars = {\r
48                 INITIALISED : false,\r
49                 HTML_MARKUP : null,\r
50                 COOKIE_NAME : 'EU_COOKIE_LAW_CONSENT'\r
51         };\r
53         ///////////////////////////////////////////////////////////////////////////////////////////////\r
54         // PRIVATE FUNCTIONS FOR MANIPULATING DATA ////////////////////////////////////////////////////\r
56         // Overwrite default parameters if any of those is present\r
57         var parseParameters = function(object, markup, settings) {\r
59                 if (object) {\r
60                         var className = $(object).attr('class') ? $(object).attr('class') : '';\r
61                         if (className.indexOf('eupopup-top') > -1) {\r
62                                 _self.params.popupPosition = 'top';\r
63                         }\r
64                         else if (className.indexOf('eupopup-fixedtop') > -1) {\r
65                                 _self.params.popupPosition = 'fixedtop';\r
66                         }\r
67                         else if (className.indexOf('eupopup-bottomright') > -1) {\r
68                                 _self.params.popupPosition = 'bottomright';\r
69                         }\r
70                         else if (className.indexOf('eupopup-bottomleft') > -1) {\r
71                                 _self.params.popupPosition = 'bottomleft';\r
72                         }\r
73                         else if (className.indexOf('eupopup-bottom') > -1) {\r
74                                 _self.params.popupPosition = 'bottom';\r
75                         }\r
76                         else if (className.indexOf('eupopup-block') > -1) {\r
77                                 _self.params.popupPosition = 'block';\r
78                         }\r
79                         if (className.indexOf('eupopup-color-default') > -1) {\r
80                                 _self.params.colorStyle = 'default';\r
81                         }\r
82                         else if (className.indexOf('eupopup-color-inverse') > -1) {\r
83                                 _self.params.colorStyle = 'inverse';\r
84                         }\r
85                         if (className.indexOf('eupopup-style-compact') > -1) {\r
86                                 _self.params.compactStyle = true;\r
87                         }\r
88                 }\r
90                 if (markup) {\r
91                         _self.params.htmlMarkup = markup;\r
92                 }\r
94                 if (settings) {\r
95                         if (typeof settings.cookiePolicyUrl !== 'undefined') {\r
96                                 _self.params.cookiePolicyUrl = settings.cookiePolicyUrl;\r
97                         }\r
98                         if (typeof settings.popupPosition !== 'undefined') {\r
99                                 _self.params.popupPosition = settings.popupPosition;\r
100                         }\r
101                         if (typeof settings.colorStyle !== 'undefined') {\r
102                                 _self.params.colorStyle = settings.colorStyle;\r
103                         }\r
104                         if (typeof settings.popupTitle !== 'undefined') {\r
105                                 _self.params.popupTitle = settings.popupTitle;\r
106                         }\r
107                         if (typeof settings.popupText !== 'undefined') {\r
108                                 _self.params.popupText = settings.popupText;\r
109                         }\r
110                         if (typeof settings.buttonContinueTitle !== 'undefined') {\r
111                                 _self.params.buttonContinueTitle = settings.buttonContinueTitle;\r
112                         }\r
113                         if (typeof settings.buttonLearnmoreTitle !== 'undefined') {\r
114                                 _self.params.buttonLearnmoreTitle = settings.buttonLearnmoreTitle;\r
115                         }\r
116                         if (typeof settings.buttonLearnmoreOpenInNewWindow !== 'undefined') {\r
117                                 _self.params.buttonLearnmoreOpenInNewWindow = settings.buttonLearnmoreOpenInNewWindow;\r
118                         }\r
119                         if (typeof settings.agreementExpiresInDays !== 'undefined') {\r
120                                 _self.params.agreementExpiresInDays = settings.agreementExpiresInDays;\r
121                         }\r
122                         if (typeof settings.autoAcceptCookiePolicy !== 'undefined') {\r
123                                 _self.params.autoAcceptCookiePolicy = settings.autoAcceptCookiePolicy;\r
124                         }\r
125                         if (typeof settings.htmlMarkup !== 'undefined') {\r
126                                 _self.params.htmlMarkup = settings.htmlMarkup;\r
127                         }\r
128                 }\r
130         };\r
132         var createHtmlMarkup = function() {\r
134                 if (_self.params.htmlMarkup) {\r
135                         return _self.params.htmlMarkup;\r
136                 }\r
138                 var html =\r
139                         '<div class="eupopup-container' +\r
140                             ' eupopup-container-' + _self.params.popupPosition +\r
141                             (_self.params.compactStyle ? ' eupopup-style-compact' : '') +\r
142                                 ' eupopup-color-' + _self.params.colorStyle + '">' +\r
143                                 '<div class="eupopup-head">' + _self.params.popupTitle + '</div>' +\r
144                                 '<div class="eupopup-body">' + _self.params.popupText + '</div>' +\r
145                                 '<div class="eupopup-buttons">' +\r
146                                   '<a href="#" class="eupopup-button eupopup-button_1">' + _self.params.buttonContinueTitle + '</a>' +\r
147                                   '<a href="' + _self.params.cookiePolicyUrl + '"' +\r
148                                         (_self.params.buttonLearnmoreOpenInNewWindow ? ' target=_blank ' : '') +\r
149                                         ' class="eupopup-button eupopup-button_2">' + _self.params.buttonLearnmoreTitle + '</a>' +\r
150                                   '<div class="clearfix"></div>' +\r
151                                 '</div>' +\r
152                                 '<a href="#" class="eupopup-closebutton">x</a>' +\r
153                         '</div>';\r
155                 return html;\r
156         };\r
158         // Storing the consent in a cookie\r
159         var setUserAcceptsCookies = function(consent) {\r
160                 var d = new Date();\r
161                 var expiresInDays = _self.params.agreementExpiresInDays * 24 * 60 * 60 * 1000;\r
162                 d.setTime( d.getTime() + expiresInDays );\r
163                 var expires = "expires=" + d.toGMTString();\r
164                 document.cookie = _self.vars.COOKIE_NAME + '=' + consent + "; " + expires + ";path=/";\r
166                 $(document).trigger("user_cookie_consent_changed", {'consent' : consent});\r
167         };\r
169         // Let's see if we have a consent cookie already\r
170         var userAlreadyAcceptedCookies = function() {\r
171                 var userAcceptedCookies = false;\r
172                 var cookies = document.cookie.split(";");\r
173                 for (var i = 0; i < cookies.length; i++) {\r
174                         var c = cookies[i].trim();\r
175                         if (c.indexOf(_self.vars.COOKIE_NAME) !== -1) {\r
176                                 userAcceptedCookies = c.substring(_self.vars.COOKIE_NAME.length + 1, c.length);\r
177                         }\r
178                 }\r
180                 return userAcceptedCookies;\r
181         };\r
183         var hideContainer = function() {\r
184                 // $('.eupopup-container').slideUp(200);\r
185                 $('.eupopup-container').animate({\r
186                         opacity: 0,\r
187                         height: 0\r
188                 }, 200, function() {\r
189                         $('.eupopup-container').hide(0);\r
190                 });\r
191         };\r
193         ///////////////////////////////////////////////////////////////////////////////////////////////\r
194         // PUBLIC FUNCTIONS  //////////////////////////////////////////////////////////////////////////\r
195         var publicfunc = {\r
197                 // INITIALIZE EU COOKIE LAW POPUP /////////////////////////////////////////////////////////\r
198                 init : function(settings) {\r
200                         parseParameters(\r
201                                 $(".eupopup").first(),\r
202                                 $(".eupopup-markup").html(),\r
203                                 settings);\r
205                         // No need to display this if user already accepted the policy\r
206                         if (userAlreadyAcceptedCookies()) {\r
207         $(document).trigger("user_cookie_already_accepted", {'consent': true});\r
208                                 return;\r
209                         }\r
211                         // We should initialise only once\r
212                         if (_self.vars.INITIALISED) {\r
213                                 return;\r
214                         }\r
215                         _self.vars.INITIALISED = true;\r
217                         // Markup and event listeners >>>\r
218                         _self.vars.HTML_MARKUP = createHtmlMarkup();\r
220                         if ($('.eupopup-block').length > 0) {\r
221                                 $('.eupopup-block').append(_self.vars.HTML_MARKUP);\r
222                         } else {\r
223                                 $('BODY').append(_self.vars.HTML_MARKUP);\r
224                         }\r
226                         $('.eupopup-button_1').click(function() {\r
227                                 setUserAcceptsCookies(true);\r
228                                 hideContainer();\r
229                                 return false;\r
230                         });\r
231                         $('.eupopup-closebutton').click(function() {\r
232                                 setUserAcceptsCookies(true);\r
233                                 hideContainer();\r
234                                 return false;\r
235                         });\r
236                         // ^^^ Markup and event listeners\r
238                         // Ready to start!\r
239                         $('.eupopup-container').show();\r
241                         // In case it's alright to just display the message once\r
242                         if (_self.params.autoAcceptCookiePolicy) {\r
243                                 setUserAcceptsCookies(true);\r
244                         }\r
246                 }\r
248         };\r
250         return publicfunc;\r
251 });\r
252 });\r