144 lines
4.5 KiB
Java
144 lines
4.5 KiB
Java
var setupDefaults = require('../setupDefaults')
|
|
var staticDocument = require('../static/staticDocument')
|
|
var staticDecodeURIComponent = require('../static/staticDecodeURIComponent')
|
|
var staticEncodeURIComponent = require('../static/staticEncodeURIComponent')
|
|
|
|
var isArray = require('../base/isArray')
|
|
var isObject = require('../base/isObject')
|
|
var isDate = require('../base/isDate')
|
|
var isUndefined = require('../base/isUndefined')
|
|
var includes = require('../array/includes')
|
|
var keys = require('../base/keys')
|
|
|
|
var assign = require('../object/assign')
|
|
|
|
var arrayEach = require('../array/arrayEach')
|
|
|
|
var helperNewDate = require('../date/helperNewDate')
|
|
var helperGetDateTime = require('../date/helperGetDateTime')
|
|
var getWhatYear = require('../date/getWhatYear')
|
|
var getWhatMonth = require('../date/getWhatMonth')
|
|
var getWhatDay = require('../date/getWhatDay')
|
|
|
|
function toCookieUnitTime (unit, expires) {
|
|
var num = parseFloat(expires)
|
|
var nowdate = helperNewDate()
|
|
var time = helperGetDateTime(nowdate)
|
|
switch (unit) {
|
|
case 'y': return helperGetDateTime(getWhatYear(nowdate, num))
|
|
case 'M': return helperGetDateTime(getWhatMonth(nowdate, num))
|
|
case 'd': return helperGetDateTime(getWhatDay(nowdate, num))
|
|
case 'h':
|
|
case 'H': return time + num * 60 * 60 * 1000
|
|
case 'm': return time + num * 60 * 1000
|
|
case 's': return time + num * 1000
|
|
}
|
|
return time
|
|
}
|
|
|
|
function toCookieUTCString (date) {
|
|
return (isDate(date) ? date : new Date(date)).toUTCString()
|
|
}
|
|
|
|
/**
|
|
* cookie操作函数
|
|
* @param {String/Array/Object} name 键/数组/对象
|
|
* @param {String} value 值
|
|
* @param {Object} options 参数
|
|
* @param {String} name: 键
|
|
* @param {Object} value: 值
|
|
* @param {String} path: 路径
|
|
* @param {String} domain: 作用域
|
|
* @param {Boolean} secure: 设置为安全的,只能用https协议
|
|
* @param {Number} expires: 过期时间,可以指定日期或者字符串,默认天
|
|
*/
|
|
function cookie (name, value, options) {
|
|
if (staticDocument) {
|
|
var opts, expires, values, result, cookies, keyIndex
|
|
var inserts = []
|
|
var args = arguments
|
|
if (isArray(name)) {
|
|
inserts = name
|
|
} else if (args.length > 1) {
|
|
inserts = [assign({ name: name, value: value }, options)]
|
|
} else if (isObject(name)) {
|
|
inserts = [name]
|
|
}
|
|
if (inserts.length > 0) {
|
|
arrayEach(inserts, function (obj) {
|
|
opts = assign({}, setupDefaults.cookies, obj)
|
|
values = []
|
|
if (opts.name) {
|
|
expires = opts.expires
|
|
values.push(staticEncodeURIComponent(opts.name) + '=' + staticEncodeURIComponent(isObject(opts.value) ? JSON.stringify(opts.value) : opts.value))
|
|
if (expires) {
|
|
if (isNaN(expires)) {
|
|
// UTCString || Unit
|
|
expires = expires.replace(/^([0-9]+)(y|M|d|H|h|m|s)$/, function (text, num, unit) {
|
|
return toCookieUTCString(toCookieUnitTime(unit, num))
|
|
})
|
|
} else if (/^[0-9]{11,13}$/.test(expires) || isDate(expires)) {
|
|
// Date || now
|
|
expires = toCookieUTCString(expires)
|
|
} else {
|
|
// day
|
|
expires = toCookieUTCString(toCookieUnitTime('d', expires))
|
|
}
|
|
opts.expires = expires
|
|
}
|
|
arrayEach(['expires', 'path', 'domain', 'secure'], function (key) {
|
|
if (!isUndefined(opts[key])) {
|
|
values.push(opts[key] && key === 'secure' ? key : (key + '=' + opts[key]))
|
|
}
|
|
})
|
|
}
|
|
staticDocument.cookie = values.join('; ')
|
|
})
|
|
return true
|
|
} else {
|
|
result = {}
|
|
cookies = staticDocument.cookie
|
|
if (cookies) {
|
|
arrayEach(cookies.split('; '), function (val) {
|
|
keyIndex = val.indexOf('=')
|
|
result[staticDecodeURIComponent(val.substring(0, keyIndex))] = staticDecodeURIComponent(val.substring(keyIndex + 1) || '')
|
|
})
|
|
}
|
|
return args.length === 1 ? result[name] : result
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
function isCookieKey (key) {
|
|
return includes(cookieKeys(), key)
|
|
}
|
|
|
|
function setCookieItem (name, key, options) {
|
|
cookie(name, key, options)
|
|
return cookie
|
|
}
|
|
|
|
function removeCookieItem (name, options) {
|
|
cookie(name, 0, assign({ expires: -1 }, setupDefaults.cookies, options))
|
|
}
|
|
|
|
function cookieKeys () {
|
|
return keys(cookie())
|
|
}
|
|
|
|
assign(cookie, {
|
|
_c: false,
|
|
isKey: isCookieKey,
|
|
set: setCookieItem,
|
|
setItem: setCookieItem,
|
|
get: cookie,
|
|
getItem: cookie,
|
|
remove: removeCookieItem,
|
|
removeItem: removeCookieItem,
|
|
keys: cookieKeys,
|
|
getJSON: cookie
|
|
})
|
|
|
|
module.exports = cookie
|