PageRenderTime 49ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/assets/js/vendor/jquery.ihavecookies.js

https://gitlab.com/leonardo.sandoval1/96boards-website
JavaScript | 271 lines | 194 code | 15 blank | 62 comment | 24 complexity | 5f6489cde9288765b89e92c88e34d73b MD5 | raw file
  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. | Cookie Message
  14. |--------------------------------------------------------------------------
  15. |
  16. | Displays the cookie message on first visit or 30 days after their
  17. | last visit.
  18. |
  19. | @param event - 'reinit' to reopen the cookie message
  20. |
  21. */
  22. $.fn.ihavecookies = function (options, event) {
  23. var $element = $(this);
  24. // Set defaults
  25. var settings = $.extend(
  26. {
  27. cookieTypes: [
  28. {
  29. type: "Site Preferences",
  30. value: "preferences",
  31. description:
  32. "These are cookies that are related to your site preferences, e.g. remembering your username, site colours, etc.",
  33. },
  34. {
  35. type: "Analytics",
  36. value: "analytics",
  37. description: "Cookies related to site visits, browser types, etc.",
  38. },
  39. {
  40. type: "Marketing",
  41. value: "marketing",
  42. description:
  43. "Cookies related to marketing, e.g. newsletters, social media, etc",
  44. },
  45. ],
  46. title: "Cookies & Privacy",
  47. message:
  48. "Cookies enable you to use shopping carts and to personalize your experience on our sites, tell us which parts of our websites people have visited, help us measure the effectiveness of ads and web searches, and give us insights into user behavior so we can improve our communications and products.",
  49. link: "/privacy-policy",
  50. delay: 2000,
  51. expires: 30,
  52. analyticsChecked: true,
  53. moreInfoLabel: "More information",
  54. acceptBtnLabel: "Accept Cookies",
  55. advancedBtnLabel: "Customise Cookies",
  56. cookieTypesTitle: "Select cookies to accept",
  57. fixedCookieTypeLabel: "Necessary",
  58. fixedCookieTypeDesc:
  59. "These are cookies that are essential for the website to work correctly.",
  60. onAccept: function () {},
  61. uncheckBoxes: false,
  62. },
  63. options
  64. );
  65. var myCookie = getCookie("cookieControl");
  66. var myCookiePrefs = getCookie("cookieControlPrefs");
  67. if (!myCookie || !myCookiePrefs || event == "reinit") {
  68. // Remove all instances of the cookie message so it's not duplicated
  69. $("#gdpr-cookie-message").remove();
  70. // Set the 'necessary' cookie type checkbox which can not be unchecked
  71. var cookieTypes =
  72. '<li><input type="checkbox" name="gdpr[]" value="necessary" checked="checked" disabled="disabled"> <label title="' +
  73. settings.fixedCookieTypeDesc +
  74. '">' +
  75. settings.fixedCookieTypeLabel +
  76. "</label></li>";
  77. // Generate list of cookie type checkboxes
  78. preferences = JSON.parse(myCookiePrefs);
  79. $.each(settings.cookieTypes, function (index, field) {
  80. if (field.type !== "" && field.value !== "") {
  81. var cookieTypeDescription = "";
  82. if (field.description !== false) {
  83. cookieTypeDescription = ' title="' + field.description + '"';
  84. }
  85. var cookieChecked = "";
  86. if (field.checked === true) {
  87. cookieChecked = "checked";
  88. }
  89. cookieTypes +=
  90. '<li><input type="checkbox" id="gdpr-cookietype-' +
  91. field.value +
  92. '" name="gdpr[]" value="' +
  93. field.value +
  94. '" data-auto="off" ' +
  95. cookieTypeDescription +
  96. cookieChecked +
  97. '> <label class="cookieCheckboxLabel" for="gdpr-cookietype-' +
  98. field.value +
  99. '"' +
  100. cookieTypeDescription +
  101. ">" +
  102. field.type +
  103. "</label></li>";
  104. }
  105. });
  106. // Display cookie message on page
  107. var cookieMessage =
  108. '<div id="gdpr-cookie-message"><div class="container"><h4>' +
  109. settings.title +
  110. "</h4><p>" +
  111. settings.message +
  112. "<br/>";
  113. for (i = 0; i < settings.links.length; i++) {
  114. cookieMessage +=
  115. '<a href="' +
  116. settings.links[i].url +
  117. '">' +
  118. settings.links[i].text +
  119. "</a> ";
  120. if (settings.links.length > 1 && i < settings.links.length - 1) {
  121. cookieMessage += " - ";
  122. }
  123. }
  124. cookieMessage +=
  125. '<div id="gdpr-cookie-types" style="display:none;"><h5>' +
  126. settings.cookieTypesTitle +
  127. "</h5><ul>" +
  128. cookieTypes +
  129. '</ul></div><p><button id="gdpr-cookie-accept" type="button">' +
  130. settings.acceptBtnLabel +
  131. '</button><button id="gdpr-cookie-advanced" type="button">' +
  132. settings.advancedBtnLabel +
  133. "</button></p></div></div>";
  134. setTimeout(function () {
  135. $($element).append(cookieMessage);
  136. $("#gdpr-cookie-message")
  137. .hide()
  138. .fadeIn("slow", function () {
  139. // If reinit'ing, open the advanced section of message
  140. // and re-check all previously selected options.
  141. if (event == "reinit") {
  142. $("#gdpr-cookie-advanced").trigger("click");
  143. }
  144. });
  145. }, settings.delay);
  146. // Make sure the analytics checkbox is toggled on init based on settings provided.
  147. // When accept button is clicked drop cookie
  148. $("body").on("click", "#gdpr-cookie-accept", function () {
  149. // Set cookie
  150. dropCookie(true, settings.expires);
  151. // If 'data-auto' is set to ON, tick all checkboxes because
  152. // the user hasn't clicked the customise cookies button
  153. $('input[name="gdpr[]"][data-auto="on"]').prop("checked", true);
  154. // Save users cookie preferences (in a cookie!)
  155. var prefs = [];
  156. $.each($('input[name="gdpr[]"]').serializeArray(), function (i, field) {
  157. prefs.push(field.value);
  158. });
  159. setCookie(
  160. "cookieControlPrefs",
  161. encodeURIComponent(JSON.stringify(prefs)),
  162. 365
  163. );
  164. // Run callback function
  165. settings.onAccept.call(this);
  166. });
  167. // Toggle advanced cookie options
  168. $("body").on("click", "#gdpr-cookie-advanced", function () {
  169. $("#gdpr-cookie-accept").html("Accept Selected Cookies");
  170. $("#gdpr-cookie-types").slideDown("fast", function () {
  171. $("#gdpr-cookie-advanced").prop("disabled", true);
  172. });
  173. });
  174. } else {
  175. var cookieVal = true;
  176. if (myCookie == "false") {
  177. cookieVal = false;
  178. }
  179. dropCookie(cookieVal, settings.expires);
  180. }
  181. // Uncheck any checkboxes on page load
  182. if (settings.uncheckBoxes === true) {
  183. $('input[type="checkbox"].ihavecookies').prop("checked", false);
  184. }
  185. };
  186. // Method to get cookie value
  187. $.fn.ihavecookies.cookie = function () {
  188. var preferences = getCookie("cookieControlPrefs");
  189. return JSON.parse(preferences);
  190. };
  191. // Method to check if user cookie preference exists
  192. $.fn.ihavecookies.preference = function (cookieTypeValue) {
  193. var control = getCookie("cookieControl");
  194. var preferences = getCookie("cookieControlPrefs");
  195. preferences = JSON.parse(preferences);
  196. if (control === false) {
  197. return false;
  198. }
  199. if (preferences === false || preferences.indexOf(cookieTypeValue) === -1) {
  200. return false;
  201. }
  202. return true;
  203. };
  204. /*
  205. |--------------------------------------------------------------------------
  206. | Drop Cookie
  207. |--------------------------------------------------------------------------
  208. |
  209. | Function to drop the cookie with a boolean value of true.
  210. |
  211. */
  212. var dropCookie = function (value, expiryDays) {
  213. setCookie("cookieControl", value, expiryDays);
  214. $("#gdpr-cookie-message").fadeOut("fast", function () {
  215. $(this).remove();
  216. });
  217. };
  218. /*
  219. |--------------------------------------------------------------------------
  220. | Set Cookie
  221. |--------------------------------------------------------------------------
  222. |
  223. | Sets cookie with 'name' and value of 'value' for 'expiry_days'.
  224. |
  225. */
  226. var setCookie = function (name, value, expiry_days) {
  227. var d = new Date();
  228. d.setTime(d.getTime() + expiry_days * 24 * 60 * 60 * 1000);
  229. var expires = "expires=" + d.toUTCString();
  230. document.cookie = name + "=" + value + ";" + expires + ";path=/";
  231. return getCookie(name);
  232. };
  233. /*
  234. |--------------------------------------------------------------------------
  235. | Get Cookie
  236. |--------------------------------------------------------------------------
  237. |
  238. | Gets cookie called 'name'.
  239. |
  240. */
  241. var getCookie = function (name) {
  242. var cookie_name = name + "=";
  243. var decodedCookie = decodeURIComponent(document.cookie);
  244. var ca = decodedCookie.split(";");
  245. for (var i = 0; i < ca.length; i++) {
  246. var c = ca[i];
  247. while (c.charAt(0) == " ") {
  248. c = c.substring(1);
  249. }
  250. if (c.indexOf(cookie_name) === 0) {
  251. return c.substring(cookie_name.length, c.length);
  252. }
  253. }
  254. return false;
  255. };
  256. })(jQuery);