Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cookies #12

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/ACKNOWLEDGEMENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@
- [Clean Blog](https://github.com/statiqdev/CleanBlog)
- [devlead](https://www.devlead.se)
- [Devlead.Statiq - Part 1 - Tabs](https://www.devlead.se/posts/2021/2021-04-09-devlead-statiq-part1-tabs)
- [cookies.js](https://github.com/madmurphy/cookies.js/)
3 changes: 2 additions & 1 deletion src/input/_head.cshtml
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
<?# TabGroupCss /?>
<?# TabGroupCss /?>
<script src="/assets/vendor/cookies/cookies.min.js" defer=""></script>
674 changes: 674 additions & 0 deletions src/input/assets/vendor/cookies/LICENSE

Large diffs are not rendered by default.

141 changes: 141 additions & 0 deletions src/input/assets/vendor/cookies/cookies.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
/*\
|*|
|*| :: cookies.js ::
|*|
|*| A complete cookies reader/writer framework with full unicode support.
|*|
|*| Revision #8 - February 18th, 2020
|*|
|*| https://developer.mozilla.org/en-US/docs/Web/API/document.cookie
|*| https://developer.mozilla.org/User:fusionchess
|*| https://github.com/madmurphy/cookies.js
|*|
|*| This framework is released under the GNU Public License, version 3 or later.
|*| http://www.gnu.org/licenses/gpl-3.0-standalone.html
|*|
|*| Syntaxes:
|*|
|*| * docCookies.setItem(name, value[, end[, path[, domain[, secure[, same-site]]]]])
|*| * docCookies.getItem(name)
|*| * docCookies.removeItem(name[, path[, domain[, secure[, same-site]]]])
|*| * docCookies.hasItem(name)
|*| * docCookies.keys()
|*| * docCookies.clear([path[, domain[, secure[, same-site]]]])
|*|
\*/

(function () {

function makeSetterString (sKey, sValue, vEnd, sPath, sDomain, bSecure, vSameSite) {

var sExpires = "";

if (vEnd) {

switch (vEnd.constructor) {

case Number:

sExpires = vEnd === Infinity ? "; expires=Fri, 31 Dec 9999 23:59:59 GMT" : "; max-age=" + vEnd;

/*
Note: Despite officially defined in RFC 6265, the use of `max-age` is not compatible with any
version of Internet Explorer, Edge and some mobile browsers. Therefore passing a number to
the end parameter might not work as expected. A possible solution might be to convert the the
relative time to an absolute time. For instance you could replace the previous line with:
*/
/*
sExpires = vEnd === Infinity ? "; expires=Fri, 31 Dec 9999 23:59:59 GMT" : "; expires=" + (new Date(vEnd * 1e3 + Date.now())).toUTCString();
*/

break;

case String:

sExpires = "; expires=" + vEnd;
break;

case Date:

sExpires = "; expires=" + vEnd.toUTCString();
break;

}

}

return encodeURIComponent(sKey) + "=" + encodeURIComponent(sValue) + sExpires + (sDomain ? "; domain=" + sDomain : "") + (sPath ? "; path=" + sPath : "") + (bSecure ? "; secure" : "") + (!vSameSite || vSameSite.toString().toLowerCase() === "no_restriction" ? "" : vSameSite.toString().toLowerCase() === "lax" || Math.ceil(vSameSite) === 1 || vSameSite === true ? "; samesite=lax" : vSameSite.toString().toLowerCase() === "none" || vSameSite < 0 ? "; samesite=none" : "; samesite=strict");

}

var reURIAllowed = /[\-\.\+\*]/g, reCNameAllowed = /^(?:expires|max\-age|path|domain|secure|samesite|httponly)$/i;

window.docCookies = {

"getItem": function (sKey) {

if (!sKey) { return null; }

return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(reURIAllowed, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null;

},

"setItem": function (sKey, sValue, vEnd, sPath, sDomain, bSecure, vSameSite) {

if (!sKey || reCNameAllowed.test(sKey)) { return false; }

document.cookie = makeSetterString(sKey, sValue, vEnd, sPath, sDomain, bSecure, vSameSite);
return true;

},

"removeItem": function (sKey, sPath, sDomain, bSecure, vSameSite) {

if (!this.hasItem(sKey)) { return false; }

document.cookie = makeSetterString(sKey, "", "Thu, 01 Jan 1970 00:00:00 GMT", sPath, sDomain, bSecure, vSameSite);
return true;

},

"hasItem": function (sKey) {

if (!sKey || reCNameAllowed.test(sKey)) { return false; }

return (new RegExp("(?:^|;\\s*)" + encodeURIComponent(sKey).replace(reURIAllowed, "\\$&") + "\\s*\\=")).test(document.cookie);

},

"keys": function () {

var aKeys = document.cookie.replace(/((?:^|\s*;)[^\=]+)(?=;|$)|^\s*|\s*(?:\=[^;]*)?(?:\1|$)/g, "").split(/\s*(?:\=[^;]*)?;\s*/);

for (var nLen = aKeys.length, nIdx = 0; nIdx < nLen; nIdx++) {

aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]);

}

return aKeys;
},

"clear": function (sPath, sDomain, bSecure, vSameSite) {

for (var aKeys = this.keys(), nLen = aKeys.length, nIdx = 0; nIdx < nLen; nIdx++) {

this.removeItem(aKeys[nIdx], sPath, sDomain, bSecure, vSameSite);

}

}

};

})();

if (typeof module !== "undefined" && typeof module.exports !== "undefined") {

module.exports = docCookies;

}

2 changes: 2 additions & 0 deletions src/input/assets/vendor/cookies/cookies.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 16 additions & 0 deletions src/input/index.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,20 @@ ArchiveTitle: => GetString("Title")
@Html.Partial("/_sidebar.cshtml")
</div>
</div>

<!-- Cookie Banner -->
<div x-data="{ hide_banner: true }" x-init="hide_banner = docCookies.hasItem('hide_banner');" x-bind:class="{ 'hidden': hide_banner, 'fixed': !hide_banner }">
<div>
<div class="w-full text-lg">
<a href="https://developers.google.com/analytics/devguides/collection/analyticsjs/cookie-usage"
rel="noreferrer"
target="_blank">This website uses Google Analytics, and its cookies.</a>
</div>
<button type="button"
onclick="hide_banner = true; docCookies.setItem('hide_banner', true, 'Fri, 31 Dec 9999 23:59:59 GMT', null, null, null, 'strict');"
class=""
aria-label="Dismiss">Understood</button>
</div>
</div>

</div>
Loading