1 | var setupDefaults = require('./setupDefaults')
|
2 | var staticDocument = require('./staticDocument')
|
3 | var staticDecodeURIComponent = require('./staticDecodeURIComponent')
|
4 | var staticEncodeURIComponent = require('./staticEncodeURIComponent')
|
5 |
|
6 | var isArray = require('./isArray')
|
7 | var isObject = require('./isObject')
|
8 | var isDate = require('./isDate')
|
9 | var isUndefined = require('./isUndefined')
|
10 | var includes = require('./includes')
|
11 | var keys = require('./keys')
|
12 |
|
13 | var assign = require('./assign')
|
14 |
|
15 | var arrayEach = require('./arrayEach')
|
16 |
|
17 | var helperNewDate = require('./helperNewDate')
|
18 | var helperGetDateTime = require('./helperGetDateTime')
|
19 | var getWhatYear = require('./getWhatYear')
|
20 | var getWhatMonth = require('./getWhatMonth')
|
21 | var getWhatDay = require('./getWhatDay')
|
22 |
|
23 | function toCookieUnitTime (unit, expires) {
|
24 | var num = parseFloat(expires)
|
25 | var nowdate = helperNewDate()
|
26 | var time = helperGetDateTime(nowdate)
|
27 | switch (unit) {
|
28 | case 'y': return helperGetDateTime(getWhatYear(nowdate, num))
|
29 | case 'M': return helperGetDateTime(getWhatMonth(nowdate, num))
|
30 | case 'd': return helperGetDateTime(getWhatDay(nowdate, num))
|
31 | case 'h':
|
32 | case 'H': return time + num * 60 * 60 * 1000
|
33 | case 'm': return time + num * 60 * 1000
|
34 | case 's': return time + num * 1000
|
35 | }
|
36 | return time
|
37 | }
|
38 |
|
39 | function toCookieUTCString (date) {
|
40 | return (isDate(date) ? date : new Date(date)).toUTCString()
|
41 | }
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 |
|
51 |
|
52 |
|
53 |
|
54 |
|
55 | function cookie (name, value, options) {
|
56 | if (staticDocument) {
|
57 | var opts, expires, values, result, cookies, keyIndex
|
58 | var inserts = []
|
59 | var args = arguments
|
60 | if (isArray(name)) {
|
61 | inserts = name
|
62 | } else if (args.length > 1) {
|
63 | inserts = [assign({ name: name, value: value }, options)]
|
64 | } else if (isObject(name)) {
|
65 | inserts = [name]
|
66 | }
|
67 | if (inserts.length > 0) {
|
68 | arrayEach(inserts, function (obj) {
|
69 | opts = assign({}, setupDefaults.cookies, obj)
|
70 | values = []
|
71 | if (opts.name) {
|
72 | expires = opts.expires
|
73 | values.push(staticEncodeURIComponent(opts.name) + '=' + staticEncodeURIComponent(isObject(opts.value) ? JSON.stringify(opts.value) : opts.value))
|
74 | if (expires) {
|
75 | if (isNaN(expires)) {
|
76 |
|
77 | expires = expires.replace(/^([0-9]+)(y|M|d|H|h|m|s)$/, function (text, num, unit) {
|
78 | return toCookieUTCString(toCookieUnitTime(unit, num))
|
79 | })
|
80 | } else if (/^[0-9]{11,13}$/.test(expires) || isDate(expires)) {
|
81 |
|
82 | expires = toCookieUTCString(expires)
|
83 | } else {
|
84 |
|
85 | expires = toCookieUTCString(toCookieUnitTime('d', expires))
|
86 | }
|
87 | opts.expires = expires
|
88 | }
|
89 | arrayEach(['expires', 'path', 'domain', 'secure'], function (key) {
|
90 | if (!isUndefined(opts[key])) {
|
91 | values.push(opts[key] && key === 'secure' ? key : (key + '=' + opts[key]))
|
92 | }
|
93 | })
|
94 | }
|
95 | staticDocument.cookie = values.join('; ')
|
96 | })
|
97 | return true
|
98 | } else {
|
99 | result = {}
|
100 | cookies = staticDocument.cookie
|
101 | if (cookies) {
|
102 | arrayEach(cookies.split('; '), function (val) {
|
103 | keyIndex = val.indexOf('=')
|
104 | result[staticDecodeURIComponent(val.substring(0, keyIndex))] = staticDecodeURIComponent(val.substring(keyIndex + 1) || '')
|
105 | })
|
106 | }
|
107 | return args.length === 1 ? result[name] : result
|
108 | }
|
109 | }
|
110 | return false
|
111 | }
|
112 |
|
113 | function hasCookieItem (value) {
|
114 | return includes(cookieKeys(), value)
|
115 | }
|
116 |
|
117 | function getCookieItem (name) {
|
118 | return cookie(name)
|
119 | }
|
120 |
|
121 | function setCookieItem (name, value, options) {
|
122 | cookie(name, value, options)
|
123 | return cookie
|
124 | }
|
125 |
|
126 | function removeCookieItem (name, options) {
|
127 | cookie(name, '', assign({ expires: -1 }, setupDefaults.cookies, options))
|
128 | }
|
129 |
|
130 | function cookieKeys () {
|
131 | return keys(cookie())
|
132 | }
|
133 |
|
134 | function cookieJson () {
|
135 | return cookie()
|
136 | }
|
137 |
|
138 | assign(cookie, {
|
139 | has: hasCookieItem,
|
140 | set: setCookieItem,
|
141 | setItem: setCookieItem,
|
142 | get: getCookieItem,
|
143 | getItem: getCookieItem,
|
144 | remove: removeCookieItem,
|
145 | removeItem: removeCookieItem,
|
146 | keys: cookieKeys,
|
147 | getJSON: cookieJson
|
148 | })
|
149 |
|
150 | module.exports = cookie
|