0

I am trying to reduce my javascript overheads on my site and I am using this plugin: https://github.com/carhartl/jquery-cookie

This is the code:

/*!
 * jQuery Cookie Plugin v1.3
 * https://github.com/carhartl/jquery-cookie
 *
 * Copyright 2011, Klaus Hartl
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.opensource.org/licenses/GPL-2.0
 */
(function ($, document, undefined) {

  var pluses = /\+/g;

    function raw(s) {
        return s;
    }

    function decoded(s) {
        return decodeURIComponent(s.replace(pluses, ' '));
    }

    var config = $.cookie = function (key, value, options) {

        // write
        if (value !== undefined) {
            options = $.extend({}, config.defaults, options);

            if (value === null) {
                options.expires = -1;
            }

            if (typeof options.expires === 'number') {
                var days = options.expires, t = options.expires = new Date();
                t.setDate(t.getDate() + days);
            }

            value = config.json ? JSON.stringify(value) : String(value);

            return (document.cookie = [
                encodeURIComponent(key), '=', config.raw ? value : encodeURIComponent(value),
                options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
                options.path    ? '; path=' + options.path : '',
                options.domain  ? '; domain=' + options.domain : '',
                options.secure  ? '; secure' : ''
            ].join(''));
        }

        // read
        var decode = config.raw ? raw : decoded;
        var cookies = document.cookie.split('; ');
        for (var i = 0, l = cookies.length; i < l; i++) {
            var parts = cookies[i].split('=');
            if (decode(parts.shift()) === key) {
                var cookie = decode(parts.join('='));
                return config.json ? JSON.parse(cookie) : cookie;
            }
        }

        return null;
    };

    config.defaults = {};

    $.removeCookie = function (key, options) {
        if ($.cookie(key) !== null) {
            $.cookie(key, null, options);
            return true;
        }
        return false;
    };

})(jQuery, document);

This is my attempt at stripping it down by removing the "write" code

(function ($, document, undefined) {

  var pluses = /\+/g;

function raw(s) {
    return s;
}

function decoded(s) {
    return decodeURIComponent(s.replace(pluses, ' '));
}

var config = $.cookie = function (key, value, options) {

    // read
    var decode = config.raw ? raw : decoded;
    var cookies = document.cookie.split('; ');
    for (var i = 0, l = cookies.length; i < l; i++) {
        var parts = cookies[i].split('=');
        if (decode(parts.shift()) === key) {
            var cookie = decode(parts.join('='));
            return config.json ? JSON.parse(cookie) : cookie;
        }
    }

    return null;
};

config.defaults = {};

$.removeCookie = function (key, options) {
    if ($.cookie(key) !== null) {
        $.cookie(key, null, options);
        return true;
    }
    return false;
};

})(jQuery, document);

If I want to use it just for reading cookies, rather than for deleting, writing and reading, is there any more dead weight I can strip out.

J.Zil
  • 2,397
  • 7
  • 44
  • 78
  • Stripping plugins may have serious impacts as their internal function calls may get broken.. Also for any version upgrades you will end up doing the same stripping again and again.. Instead just minify the js/css and reduce the size of the file.. – Selvakumar Arumugam Nov 12 '12 at 20:58
  • Maybe http://codereview.stackexchange.com/ is a better venue for this question. – Candide Nov 12 '12 at 20:59
  • Well if you don't need `removeCookie`, then obviously you can delete that whole block. And it looks as though the main function does not need the `value` or `options` parameters any more. – Scott Sauyet Nov 12 '12 at 21:05

2 Answers2

2

Well, using a jQuery plugin just to read a cookie is kind of silly, though I've done the same thing with the same plugin!

What is the shortest function for reading a cookie by name in JavaScript?

has some shorter code that you could use.

The core of all these are document.cookie – it kinda sucks that they are just a string, rather than a nice array already – but there you go.

Community
  • 1
  • 1
Rich Bradshaw
  • 71,795
  • 44
  • 182
  • 241
1

There's lots. You can remove removeCookie() for starters. Also, you'll see the the $.cookie() method takes in value and options. Those are unnecessary if you are only reading cookies. You would also strip out the code related to them. I am guessing that you could get it down to something like this:

/*!
 * jQuery Cookie Plugin v1.3
 * https://github.com/carhartl/jquery-cookie
 *
 * Copyright 2011, Klaus Hartl
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.opensource.org/licenses/GPL-2.0
 */
(function ($, document, undefined) {

    var pluses = /\+/g;

    function raw(s) {
        return s;
    }

    function decoded(s) {
        return decodeURIComponent(s.replace(pluses, ' '));
    }

    var config = $.cookie = function (key, value, options) {
        // read
        var decode = config.raw ? raw : decoded;
        var cookies = document.cookie.split('; ');
        for (var i = 0, l = cookies.length; i < l; i++) {
            var parts = cookies[i].split('=');
            if (decode(parts.shift()) === key) {
                var cookie = decode(parts.join('='));
                return config.json ? JSON.parse(cookie) : cookie;
            }
        }

        return null;
    };

    config.defaults = {};

})(jQuery, document);

Depending on your use case, you may be able to remove all the code related to config decode, raw, and json, simply setting it up to return the format that you want by default.

dave mankoff
  • 17,379
  • 7
  • 50
  • 64