122 lines
5.4 KiB
JavaScript
122 lines
5.4 KiB
JavaScript
|
|
/**
|
|
* Vue Cookies v1.5.12
|
|
* https://github.com/cmp-cc/vue-cookies
|
|
*
|
|
* Copyright 2016, cmp-cc
|
|
* Released under the MIT license
|
|
*/
|
|
|
|
(function() {
|
|
|
|
var defaultConfig = {
|
|
expires : '365d',
|
|
path : '; path=/'
|
|
}
|
|
|
|
var VueCookies = {
|
|
// install of Vue
|
|
install: function(Vue) {
|
|
Vue.prototype.$cookies = this
|
|
Vue.cookies = this
|
|
},
|
|
config : function(expireTimes,path) {
|
|
if(expireTimes) {
|
|
defaultConfig.expires = expireTimes;
|
|
}
|
|
if(path) {
|
|
defaultConfig.path = '; path=' + path;
|
|
}
|
|
},
|
|
get: function(key) {
|
|
var value = decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(key).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null
|
|
|
|
if(value && value.substring(0,1) === "{" && value.substring(value.length-1,value.length) === "}") {
|
|
try {
|
|
value = JSON.parse(value)
|
|
}catch (e) {
|
|
return value;
|
|
}
|
|
}
|
|
return value;
|
|
},
|
|
set: function(key, value, expireTimes, path, domain, secure) {
|
|
if (!key) {
|
|
throw new Error("cookie name is not find in first argument")
|
|
}else if(/^(?:expires|max\-age|path|domain|secure)$/i.test(key)){
|
|
throw new Error("cookie key name illegality ,Cannot be set to ['expires','max-age','path','domain','secure']\t","current key name: "+key);
|
|
}
|
|
// support json object
|
|
if(value && value.constructor === Object ) {
|
|
value = JSON.stringify(value);
|
|
}
|
|
var _expires = "; max-age=86400"; // temp value, default expire time for 1 day
|
|
expireTimes = expireTimes || defaultConfig.expires;
|
|
if (expireTimes) {
|
|
switch (expireTimes.constructor) {
|
|
case Number:
|
|
if(expireTimes === Infinity || expireTimes === -1) _expires = "; expires=Fri, 31 Dec 9999 23:59:59 GMT";
|
|
else _expires = "; max-age=" + expireTimes;
|
|
break;
|
|
case String:
|
|
if (/^(?:\d{1,}(y|m|d|h|min|s))$/i.test(expireTimes)) {
|
|
// get capture number group
|
|
var _expireTime = expireTimes.replace(/^(\d{1,})(?:y|m|d|h|min|s)$/i, "$1");
|
|
// get capture type group , to lower case
|
|
switch (expireTimes.replace(/^(?:\d{1,})(y|m|d|h|min|s)$/i, "$1").toLowerCase()) {
|
|
// Frequency sorting
|
|
case 'm': _expires = "; max-age=" + +_expireTime * 2592000; break; // 60 * 60 * 24 * 30
|
|
case 'd': _expires = "; max-age=" + +_expireTime * 86400; break; // 60 * 60 * 24
|
|
case 'h': _expires = "; max-age=" + +_expireTime * 3600; break; // 60 * 60
|
|
case 'min': _expires = "; max-age=" + +_expireTime * 60; break; // 60
|
|
case 's': _expires = "; max-age=" + _expireTime; break;
|
|
case 'y': _expires = "; max-age=" + +_expireTime * 31104000; break; // 60 * 60 * 24 * 30 * 12
|
|
default: new Error("unknown exception of 'set operation'");
|
|
}
|
|
} else {
|
|
_expires = "; expires=" + expireTimes;
|
|
}
|
|
break;
|
|
case Date:
|
|
_expires = "; expires=" + expireTimes.toUTCString();
|
|
break;
|
|
}
|
|
}
|
|
document.cookie = encodeURIComponent(key) + "=" + encodeURIComponent(value) + _expires + (domain ? "; domain=" + domain : "") + (path ? "; path=" + path : defaultConfig.path) + (secure ? "; secure" : "");
|
|
return this;
|
|
},
|
|
remove: function(key, path, domain) {
|
|
if (!key || !this.isKey(key)) {
|
|
return false;
|
|
}
|
|
document.cookie = encodeURIComponent(key) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT" + (domain ? "; domain=" + domain : "") + (path ? "; path=" + path : defaultConfig.path);
|
|
return this;
|
|
},
|
|
isKey: function(key) {
|
|
return (new RegExp("(?:^|;\\s*)" + encodeURIComponent(key).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(document.cookie);
|
|
},
|
|
keys: function() {
|
|
if(!document.cookie) return [];
|
|
var _keys = document.cookie.replace(/((?:^|\s*;)[^\=]+)(?=;|$)|^\s*|\s*(?:\=[^;]*)?(?:\1|$)/g, "").split(/\s*(?:\=[^;]*)?;\s*/);
|
|
for (var _index = 0; _index < _keys.length; _index++) {
|
|
_keys[_index] = decodeURIComponent(_keys[_index]);
|
|
}
|
|
return _keys;
|
|
}
|
|
}
|
|
|
|
if (typeof exports == "object") {
|
|
module.exports = VueCookies;
|
|
} else if (typeof define == "function" && define.amd) {
|
|
define([], function() {
|
|
return VueCookies;
|
|
})
|
|
} else if (window.Vue) {
|
|
Vue.use(VueCookies);
|
|
}
|
|
// vue-cookies can exist independently,no dependencies library
|
|
if(typeof window!=="undefined"){
|
|
window.$cookies = VueCookies;
|
|
}
|
|
|
|
})() |