cookies_store.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // Intentionally called CookiesStore instead of CookieStore
  2. // Calling it CookieStore causes issues when the Experimental Web Platform features flag is enabled in Chrome
  3. // Related issue: https://github.com/freeCodeCamp/devdocs/issues/932
  4. class CookiesStore {
  5. static INT = /^\d+$/;
  6. static onBlocked() {}
  7. get(key) {
  8. let value = Cookies.get(key);
  9. if (value != null && CookiesStore.INT.test(value)) {
  10. value = parseInt(value, 10);
  11. }
  12. return value;
  13. }
  14. set(key, value) {
  15. if (value === false) {
  16. this.del(key);
  17. return;
  18. }
  19. if (value === true) {
  20. value = 1;
  21. }
  22. if (
  23. value &&
  24. (typeof CookiesStore.INT.test === "function"
  25. ? CookiesStore.INT.test(value)
  26. : undefined)
  27. ) {
  28. value = parseInt(value, 10);
  29. }
  30. Cookies.set(key, "" + value, { path: "/", expires: 1e8 });
  31. if (this.get(key) !== value) {
  32. CookiesStore.onBlocked(key, value, this.get(key));
  33. }
  34. }
  35. del(key) {
  36. Cookies.expire(key);
  37. }
  38. reset() {
  39. try {
  40. for (var cookie of document.cookie.split(/;\s?/)) {
  41. Cookies.expire(cookie.split("=")[0]);
  42. }
  43. return;
  44. } catch (error) {}
  45. }
  46. dump() {
  47. const result = {};
  48. for (var cookie of document.cookie.split(/;\s?/)) {
  49. if (cookie[0] !== "_") {
  50. cookie = cookie.split("=");
  51. result[cookie[0]] = cookie[1];
  52. }
  53. }
  54. return result;
  55. }
  56. }