(function() {
// задаем имена
var names = {
alert : 'alert',
console : "log",
JSON : "JSON",
localStorage : "storage",
cookies : 'cookies'
};
// alert
(function(name) {
var al = alert;
window[name] = function(arg, arg2) {
for ( var i = 0; i < arguments.length; i++) {
al(arguments[i])
}
}
})(names['alert']);
// console.log
(function(name) {
window[name] = function(arg) {
console.log(arg)
}
})(names['console']);
// JSON
(function(name) {
var func = function(arg) {
return JSON[typeof arg == 'string' ? 'parse' : 'stringify'](arg)
}
func.parse = JSON.parse
func.stringify = JSON.stringify
window[name] = func
})(names['JSON']);
// localStorage
(function(name) {
window[name] = function(arg, arg2) {
if (arguments.length == 1) {
return (arg === null) ? localStorage.clear() : JSON
.parse(localStorage.getItem(arg))
} else {
return (arg2 === null)
? localStorage.removeItem(arg)
: localStorage.setItem(arg, JSON.stringify(arg2))
}
}
})(names['localStorage']);
// cookies
(function(name) {
function set(name, value, expires, path, domain, secure) {
document.cookie = name + "=" + escape(JSON.stringify(value))
+ (expires ? "; expires=" + expires.toGMTString() : '')
+ (path ? "; path=" + escape(path) : '')
+ (domain ? "; domain=" + escape(domain) : '')
+ (secure ? "; secure" : '')
}
function del(name) {
var cookieDate = new Date();
cookieDate.setTime(cookieDate.getTime() - 1000);
document.cookie = name + "=; expires=" + cookieDate.toGMTString();
}
function get(cookie_name) {
var results = document.cookie.match('(^|;) ?' + cookie_name
+ '=([^;]*)(;|$)');
if (results)
return JSON.parse(unescape(results[2]));
else
return null;
}
function gen(name, value) {
get(name) !== null && del(name);
var expires, path, domain, secure, time = [0, 0, 0], tI = 0;
function setTime(arg) {
time[tI++] = arg
}
for ( var i = 2; i < arguments.length; i++) {
var arg = arguments[i]
switch (typeof arg) {
case 'string' :
if (arg == "on") {
secure = true
} else if (arg[0] === '/') {
path = arg
} else {
domain = arg
}
break;
case 'number' :
setTime(arg)
break;
case 'boolean' :
if (arg === true)
setTime(2200);
break;
}
}
if (tI > 0) {
expires = new Date(time[0], time[1], time[2])
}
set(name, value, expires, path, domain, secure)
};
window[name] = function(name, value) {
if (arguments.length == 1) {
return get(name)
} else {
if (value === null) {
del(name)
} else {
gen.apply(this, arguments)
}
}
}
})(names['cookies']);
})();
cook('name', 10) //установить куку name в значение 4, на время сессии
cook('name') //получить значение
cook('name', 10, 2013, 9, 10) //установить на срок до 2013 год 9 месяц 10 день
cook('name', 10, 2013, 9) //установить на срок до 2013 год 9 месяц 1 день
cook('name', 10, 2013) //установить на срок до 2013 год 1 месяц 1 день
cook('name', 10, true) //установить на вечно
после имени и значения, можно добавлять необязательные параметры в произвольном порядке, это
дата путь домен и
защита
например
cook('name', 10, 2013, '/', 'javascript.ru')
cook('name', 10, 2013, 'javascript.ru', '/')
cook('name', 10, 2013, 'javascript.ru', 'on', '/') //с включенной защитой
cook('name', 10, 'on', 'javascript.ru') //с включенной защитой без срока без пути
cook('name', 10, 'on') //с включенной защитой на время сессии
cook('name', 10, true, 'on') //с включенной защитой навечно
cook('name', 10, 'on', true) //с включенной защитой навечно
и конечно же
cook('name', null) //удалить куку
единственное что если вы указываете дату а это number'ы, то number тип должен появляться в аргументах в порядке год месяц день, между годом и месяцем например
МОГУТ быть другие параметры не связанные с датой, например "on". (вдруг кому то в жопу такое стрельнет)
cook('name', 10, 2012, 'on', 9) //2012 год 9 месяц, защита включина
Так же теперь в алерт можно параметры передавать через запятую, это вызывет алерт с каждым параметром по очереди.
давно себе такую шнягу хотел кстати))
все отключабильно, подключабильно, без зависимостей и конфликтов. Хотите че-то отключить - вырезаете кусок кода. хотите переименовать? переименовываете вверху.