-
-
Save jupitercow/d890d8f68d5e54160e06ed7ccc1ef87d to your computer and use it in GitHub Desktop.
| <script> | |
| /* | |
| Squarespace Age Gate. | |
| - Create a "Cover Page" under Pages > Not Linked. | |
| - Click the gear icon, go to Advanced tab in the popup, paste this code. | |
| - This sets the cookie and handles the redirect back to the requested content. | |
| - On the age gate page, you have to create a button that has "#legal" as the link or href. It is what turns off the age gate. | |
| - Elsewhere on the site, you can test for the cookie (legal), and if not set, rediret to the age gate Cover Page (example at the bottom). | |
| */ | |
| /** | |
| * Obtains and stores the query parameters passed in the url (?redirect_to=https://example.com). | |
| * To use a parameter (eg: "redirect_to"): "QueryString.redirect_to" | |
| */ | |
| var QueryString = function() { | |
| var query_string = {}; | |
| var query = window.location.search.substring(1); | |
| var vars = query.split("&"); | |
| for (var i=0;i<vars.length;i++) { | |
| var pair = vars[i].split("="); | |
| if (typeof query_string[pair[0]] === "undefined") { | |
| query_string[pair[0]] = pair[1]; | |
| } else if (typeof query_string[pair[0]] === "string") { | |
| var arr = [ query_string[pair[0]], pair[1] ]; | |
| query_string[pair[0]] = arr; | |
| } else { | |
| query_string[pair[0]].push(pair[1]); | |
| } | |
| } | |
| return query_string; | |
| }(); | |
| /** | |
| * Sets the cookie "name" and "value" to expire in "days" from now | |
| * "url" will redirect to that url afterwards | |
| * Remove "expires" section to turn into a current session cookie | |
| * document.cookie = name + "=" + value + "; path=/"; | |
| * | |
| * @param {string} name | |
| * @param {string} value | |
| * @param {string} exdays | |
| * @param {string} url | |
| * @returns {} | |
| */ | |
| function setCookie(name, value, days, url) { | |
| var d = new Date(); | |
| d.setTime(d.getTime() + (days * 24 * 60 * 60 * 1000)); | |
| var expires = "expires="+d.toGMTString(); | |
| document.cookie = name + "=" + value + "; " + expires + "; path=/"; | |
| // Redirect to the homepage if no url is provided | |
| if (!url) { | |
| url = "/"; | |
| } | |
| window.location.href = decodeURIComponent(url); | |
| } | |
| /** | |
| * On page document loaded | |
| */ | |
| document.addEventListener('DOMContentLoaded', function() { | |
| // YOU MUST HAVE BUTTON WITH HREF set to #legal | |
| // This is the accept button and sets everything in motion | |
| var button = document.querySelector('a[href="#legal"]'); | |
| button.addEventListener('click', function(e) { | |
| e.preventDefault(); | |
| // Sets a cookie named "legal" with value 1 or true for 365 days | |
| // If redirect_to is used, it will redirect to it, otherwise, by default, redirects to the homepage | |
| setCookie('legal', '1', 365, QueryString.redirect_to); | |
| }); | |
| }); | |
| </script> | |
| <script> | |
| /* | |
| Quick example to test for the cookie and redirect. I haven't tested this. | |
| You will need to set ageGateUrl equal to your age gate's Cover Page URL | |
| */ | |
| var getCookie = function(name) { | |
| var value = "; " + document.cookie; | |
| var parts = value.split("; " + name + "="); | |
| if (parts.length == 2) { | |
| return parts.pop().split(";").shift(); | |
| } | |
| }; | |
| document.addEventListener('DOMContentLoaded', function() { | |
| if (!getCookie('legal')) { | |
| var ageGateUrl = "[your age gate cover page link]";// <----- Add your age gate url here | |
| var currentUrl = window.location.href; | |
| var addRedirect = "?redirect_to=" + encodeURIComponent(currentUrl); | |
| window.location.href = decodeURIComponent( ageGateUrl + addRedirect ); | |
| } | |
| }); | |
| </script> |
@jupitercow - help! I just can NOT get this to work. I have it pasted into the code injection portion of my age gate page, named "age-gate". I have the button for "yes" link to "#legal"... What am I missing? The page simply doesn't appear. I tried with and without an expiration timer, no dice. tried on multiple browsers. Do I need to paste something into the site-wide CSS? I did at first, but squarespace keeps saying there's a syntax error when I paste it there... the site itself is live if having that will help? take16beer.com/age-gate
The first script block goes onto the age verification page under the advanced tab.
The second script block goes into Site -> Advanced -> Code Injection to be displayed sitewide.
The conditional on line 89 should be updated to include a check to see make sure you're NOT on the Age Gate page itself:
if (!getCookie('legal') && !window.location.search.includes('redirect_to') ) {
@jupitercow that's understandable - from my understanding of your instructions, I should just need to paste the code into the Advanced section of a newly created cover page and replace the "age gate url" at the bottom of the instructions with my age gate's url and the code should work? Many thanks