1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-13 18:24:57 +02:00

Update jquery.cookie.js to support SameSite attribute along with 'Lax' as default value to suppress warnings from Firefox. Plus update it to ask ProcessWire for default of 'secure' value on cookies.

This commit is contained in:
Ryan Cramer
2020-07-24 14:11:20 -04:00
parent efe60a17ba
commit 4c8b474c29
2 changed files with 11 additions and 3 deletions

View File

@@ -6,7 +6,9 @@
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
* Updates added by Ryan (2016) to support getting/setting cookie values that are objects.
* Updates added by Ryan/RJC (2016) to support getting/setting cookie values that are objects.
* Updates added by Ryan/RJC (2020) to add SameSite suppport.
* Updates added by Ryan/RJC (2020) to make options.secure default to ProcessWire.config.https (when present).
*
*/
@@ -65,6 +67,11 @@ jQuery.cookie = function(name, value, options) {
// added by RJC for object value cookie support
value = 'JSON' + JSON.stringify(value);
}
if(typeof ProcessWire != 'undefined') {
if(typeof options.secure == 'undefined' && typeof ProcessWire.config.https != 'undefined') {
options.secure = ProcessWire.config.https; // added by Ryan to serve as default
}
}
var expires = '';
if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
var date;
@@ -81,8 +88,9 @@ jQuery.cookie = function(name, value, options) {
// in the packed version for some reason...
var path = options.path ? '; path=' + (options.path) : '';
var domain = options.domain ? '; domain=' + (options.domain) : '';
var samesite = options.samesite ? '; SameSite=' + (options.samesite) : '; SameSite=Lax'; // RJC (Lax, Strict or None)
var secure = options.secure ? '; secure' : '';
document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, samesite, secure].join('');
} else { // only name given, get cookie
var cookieValue = null;
if (document.cookie && document.cookie != '') {

View File

@@ -1 +1 @@
jQuery.cookie=function(b,j,m){if(typeof j!="undefined"){m=m||{};if(j===null){j="";m.expires=-1}else{if(typeof j=="object"){j="JSON"+JSON.stringify(j)}}var e="";if(m.expires&&(typeof m.expires=="number"||m.expires.toUTCString)){var f;if(typeof m.expires=="number"){f=new Date();f.setTime(f.getTime()+(m.expires*24*60*60*1000))}else{f=m.expires}e="; expires="+f.toUTCString()}var l=m.path?"; path="+(m.path):"";var g=m.domain?"; domain="+(m.domain):"";var a=m.secure?"; secure":"";document.cookie=[b,"=",encodeURIComponent(j),e,l,g,a].join("")}else{var d=null;if(document.cookie&&document.cookie!=""){var k=document.cookie.split(";");for(var h=0;h<k.length;h++){var c=jQuery.trim(k[h]);if(c.substring(0,b.length+1)==(b+"=")){d=decodeURIComponent(c.substring(b.length+1));break}}}if(typeof d=="string"){if(d.indexOf("JSON{")===0||d.indexOf("JSON[")===0){d=d.substring(4);d=JSON.parse(d)}}return d}};
jQuery.cookie=function(name,value,options){if(typeof value!="undefined"){options=options||{};if(value===null){value="";options.expires=-1}else if(typeof value=="object"){value="JSON"+JSON.stringify(value)}if(typeof ProcessWire!="undefined"){if(typeof options.secure=="undefined"&&typeof ProcessWire.config.https!="undefined"){options.secure=ProcessWire.config.https}}var expires="";if(options.expires&&(typeof options.expires=="number"||options.expires.toUTCString)){var date;if(typeof options.expires=="number"){date=new Date;date.setTime(date.getTime()+options.expires*24*60*60*1e3)}else{date=options.expires}expires="; expires="+date.toUTCString()}var path=options.path?"; path="+options.path:"";var domain=options.domain?"; domain="+options.domain:"";var samesite=options.samesite?"; SameSite="+options.samesite:"; SameSite=Lax";var secure=options.secure?"; secure":"";document.cookie=[name,"=",encodeURIComponent(value),expires,path,domain,samesite,secure].join("")}else{var cookieValue=null;if(document.cookie&&document.cookie!=""){var cookies=document.cookie.split(";");for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==name+"="){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break}}}if(typeof cookieValue=="string"){if(cookieValue.indexOf("JSON{")===0||cookieValue.indexOf("JSON[")===0){cookieValue=cookieValue.substring(4);cookieValue=JSON.parse(cookieValue)}}return cookieValue}};