среда, 20 ноября 2013 г.

JavaScript Cookie

Модуль JavaScript Cookie совместно с Require JS и indexOf для работы модуля в Internet Explorer 8 и ниже.

Файл cookie.js

require.config({
    paths: {
        ie8indexof: 'ie8indexof'
    }
});

define(['ie8indexof'], function() {

    // Запись новой cookie:
    // cookie.set('test', 'test value', 2); // Записывает новую cookie или перезаписывает старую cookie с именем "test" и значением "test value" на 2 дня.

    // Запись сессионной cookie:
    // cookie.session('test', 'test value', '/'); // Записывает сессионную cookie с именем "test" и значением "test value", которая будет автоматически удалена браузером после закрытия сайта.

    // Получение значения cookie:
    // cookie.get('test'); // Возвращает значение ("test value") для cookie с именем "test".

    // Удаление cookie:
    // cookie.remove('test'); // Удаляет сookie с именем "test".

    // Удаление всех cookie:
    // cookie.clear(); // Удаляет все сookie.

    // Проверка возможности записи, чтения и удаления cookie:
    // cookie.isEnabled(); // Возвращает "true", если запись, чтение и удаление cookie возможны и "false", если невозможны.

    var cookie = {

        set: function (name, value, expires, path, domain, secure) {
            var newCookie = name + '=' + escape(value) + '; '
                , date;
            if (expires !== undefined) {
              date = new Date();
              date.setTime(date.getTime() + (expires * 24 * 60 * 60 * 1000));
              newCookie += 'expires=' + date.toGMTString() + '; ';
            }
            newCookie += (path === undefined) ? 'path=/;' : 'path=' + path + '; ';
            newCookie += (domain === undefined) ? '' : 'domain=' + domain + '; ';
            newCookie += (secure === true) ? 'secure;' : '';
            document.cookie = newCookie;
          }
     
        , session: function (name, value, path) {
            document.cookie = name + '=' + escape(value) + '; path=' + path;
          }

        , get: function (name) {
            name += '=';
            var value = ''
                , allCookies = document.cookie.split(';')
                , allCookiesLength = allCookies.length
                , i;
            for (i = 0; i < allCookiesLength; i++) {
                while (allCookies[i].charAt(0) === ' ') {
                    allCookies[i] = allCookies[i].substring(1);
                }
                if (allCookies[i].indexOf(name) === 0) {
                    value = allCookies[i].substring(name.length);
                }
            }
            return unescape(value);
          }

        , remove: function (name) {
            cookie.set(name, '', -1);
          }

        , clear: function () {
            var allCookies = document.cookie.split(';')
                , allCookiesLength = allCookies.length
                , index
                , i;
            for (i = 0; i < allCookiesLength; i++) {
                while (allCookies[i].charAt(0) === ' ') {
                    allCookies[i] = allCookies[i].substring(1);
                }
                index = allCookies[i].indexOf('=', 1);
                if (index > 0) {
                    cookie.set(allCookies[i].substring(0, index), '', -1);
                }
            }
          }

        , isEnabled: function () {
            cookie.set('test_cookie', 'test');
            var testResult = (cookie.get('test_cookie') === 'test') ? true : false;
            cookie.remove('test_cookie');
            return testResult;
          }
     
    };
   
    return cookie;

});

Файл ie8indexof.js

define([], function() {
   
        // Добавление метода indexOf для Internet Explorer 6-8
        if (!Array.prototype.indexOf) {
            Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
                'use strict';
                if (this == null) {throw new TypeError();}
                var n
                    , k
                    , t = Object(this)
                    , len = t.length >>> 0;
                if (len === 0) {return -1;}
                n = 0;
                if (arguments.length > 1) {
                    n = Number(arguments[1]);
                    if (n !== n) { // shortcut for verifying if it's NaN
                        n = 0;
                    } else if (n !== 0 && n !== Infinity && n !== -Infinity) {
                        n = (n > 0 || -1) * Math.floor(Math.abs(n));
                    }
                }
                if (n >= len) {return -1;}
                for (k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); k < len; k++) {
                    if (k in t && t[k] === searchElement) {return k;}
                }
                return -1;
            };
        }

    }
);

Комментариев нет:

Отправить комментарий