56 lines
1.7 KiB
JavaScript
56 lines
1.7 KiB
JavaScript
'use strict';
|
||
|
||
let cookie = {
|
||
read(name) {
|
||
// Поиск по регулярному выражению
|
||
let matches = document.cookie.match(new RegExp(
|
||
"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
|
||
));
|
||
|
||
return matches ? decodeURIComponent(matches[1]) : undefined;
|
||
},
|
||
write(name, value, options = {}) {
|
||
// Инициализация параметров
|
||
options = {
|
||
path: '/',
|
||
...options
|
||
};
|
||
|
||
if (options.expires instanceof Date) {
|
||
// Передана инстанция Date
|
||
|
||
// Запись параметра истечения срока
|
||
options.expires = options.expires.toUTCString();
|
||
}
|
||
|
||
// Инициализация cookie
|
||
let updatedCookie = encodeURIComponent(name) + "=" + encodeURIComponent(value);
|
||
|
||
for (let optionKey in options) {
|
||
// Перебор параметров
|
||
|
||
// Запись в cookie названия параметра
|
||
updatedCookie += "; " + optionKey;
|
||
|
||
// Инициализация значения параметра
|
||
let optionValue = options[optionKey];
|
||
|
||
if (optionValue !== true) {
|
||
// Найдено значение параметра
|
||
|
||
// Запись в cookie значения параметра
|
||
updatedCookie += "=" + optionValue;
|
||
}
|
||
}
|
||
|
||
// Конкатенация нового cookie с остальными
|
||
document.cookie = updatedCookie;
|
||
},
|
||
delete(name) {
|
||
// Удаление
|
||
setCookie(name, "", {
|
||
'max-age': -1
|
||
})
|
||
}
|
||
};
|