Full Code of carhartl/jquery-cookie for AI

master d72bb07e2996 cached
20 files
29.8 KB
8.8k tokens
5 symbols
1 requests
Download .txt
Repository: carhartl/jquery-cookie
Branch: master
Commit: d72bb07e2996
Files: 20
Total size: 29.8 KB

Directory structure:
gitextract_kzw1asl0/

├── .gitignore
├── .jshintignore
├── .jshintrc
├── .tm_properties
├── .travis.yml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Gruntfile.js
├── MIT-LICENSE.txt
├── README.md
├── bower.json
├── component.json
├── cookie.jquery.json
├── package.json
├── src/
│   ├── .jshintrc
│   └── jquery.cookie.js
└── test/
    ├── .jshintrc
    ├── index.html
    ├── malformed_cookie.html
    └── tests.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
node_modules
build
.sizecache.json
*.log*


================================================
FILE: .jshintignore
================================================
build
node_modules


================================================
FILE: .jshintrc
================================================
{
	"curly": true,
	"eqeqeq": true,
	"expr": true,
	// "maxlen": 130,
	"newcap": true,
	"noarg": true,
	"nonbsp": true,
	"trailing": true,
	"undef": true,
	"unused": true
}


================================================
FILE: .tm_properties
================================================
softTabs = false
tabSize  = 2

[ text.plain ]
softWrap   = true
wrapColumn = "Use Window Frame"
softTabs   = true
tabSize    = 4

[ "*.md" ]
fileType = "text.plain"


================================================
FILE: .travis.yml
================================================
language: node_js
node_js:
  - 0.10
before_script:
  - npm install -g grunt-cli
script: grunt ci --verbose
env:
  global:
    - secure: HRae0kyIDDuhonvMi2SfEl1WJb4K/wX8WmzT9YkxFbmWwLjiOMkmqyuEyi76DbTC1cb9o7WwGVgbP1DhSm6n6m0Lz+PSzpprBN4QZuJc56jcc+tBA6gM81hyUufaTT0yUWz112Bu06kWIAs44w5PtG0FYZR0CuIN8fQvZi8fXCQ=
    - secure: c+M5ECIfxDcVrr+ZlqgpGjv8kVM/hxiz3ACMCn4ZkDiaeq4Rw0wWIGZYL6aV5fhsoHgzEQ/XQPca8xKs3Umr7R3b6Vr3AEyFnW+LP67K/1Qbz4Pi3PvhDH/h4rvK7fOoTqTDCVVDEH3v4pefsz2VaKemG4iBKxrcof5aR4Rjopk=


================================================
FILE: CHANGELOG.md
================================================
HEAD
-----

1.4.1
-----
- Added support for CommonJS.

- Added support for package managers: Jam (http://jamjs.org), volo (http://volojs.org), Component (http://component.io), jspm (http://jspm.io).

- The expires option now interpretes fractions of numbers (e.g. days) correctly.

1.4.0
-----
- Support for AMD.

- Removed deprecated method `$.cookie('name', null)` for deleting a cookie,
  use `$.removeCookie('name')`.

- `$.cookie('name')` now returns `undefined` in case such cookie does not exist
  (was `null`). Because the return value is still falsy, testing for existence
  of a cookie like `if ( $.cookie('foo') )` keeps working without change.

- Renamed bower package definition (component.json -> bower.json) for usage
  with up-to-date bower.

- Badly encoded cookies no longer throw exception upon reading but do return
  undefined (similar to how we handle JSON parse errors with json = true).

- Added conversion function as optional last argument for reading,
  so that values can be changed to a different representation easily on the fly.
  Useful for parsing numbers for instance:

  ```javascript
  $.cookie('foo', '42');
  $.cookie('foo', Number); // => 42
  ```

1.3.1
-----
- Fixed issue where it was no longer possible to check for an arbitrary cookie,
  while json is set to true, there was a SyntaxError thrown from JSON.parse.

- Fixed issue where RFC 2068 decoded cookies were not properly read.

1.3.0
-----
- Configuration options: `raw`, `json`. Replaces raw option, becomes config:

  ```javascript
  $.cookie.raw = true; // bypass encoding/decoding the cookie value
  $.cookie.json = true; // automatically JSON stringify/parse value
  ```

  Thus the default options now cleanly contain cookie attributes only.

- Removing licensing under GPL Version 2, the plugin is now released under MIT License only
(keeping it simple and following the jQuery library itself here).

- Bugfix: Properly handle RFC 2068 quoted cookie values.

- Added component.json for bower.

- Added jQuery plugin package manifest.

- `$.cookie()` returns all available cookies.

1.2.0
-----
- Adding `$.removeCookie('foo')` for deleting a cookie, using `$.cookie('foo', null)` is now deprecated.

1.1
---
- Adding default options.


================================================
FILE: CONTRIBUTING.md
================================================
##Issues

- Report issues or feature requests on [GitHub Issues](https://github.com/carhartl/jquery-cookie/issues).
- If reporting a bug, please add a [simplified example](http://sscce.org/).

##Pull requests
- Create a new topic branch for every separate change you make.
- Create a test case if you are fixing a bug or implementing an important feature.
- Make sure the build runs successfully.

## Development

###Tools
We use the following tools for development:

- [Qunit](http://qunitjs.com/) for tests.
- [NodeJS](http://nodejs.org/download/) required to run grunt.
- [Grunt](http://gruntjs.com/getting-started) for task management.

###Getting started 
Install [NodeJS](http://nodejs.org/).  
Install globally grunt-cli using the following command:

    $ npm install -g grunt-cli

Browse to the project root directory and install the dev dependencies:

    $ npm install -d

To execute the build and tests run the following command in the root of the project:

    $ grunt

You should see a green message in the console:

    Done, without errors.

###Tests
You can also run the tests in the browser.  
Start a test server from the project root:

    $ grunt connect:tests

This will automatically open the test suite at http://127.0.0.1:9998 in the default browser, with livereload enabled.

_Note: we recommend cleaning all the browser cookies before running the tests, that can avoid false positive failures._

###Automatic build
You can build automatically after a file change using the following command:

    $ grunt watch


================================================
FILE: Gruntfile.js
================================================
/*jshint node:true, quotmark:single */
'use strict';

module.exports = function (grunt) {

	grunt.initConfig({
		pkg: grunt.file.readJSON('package.json'),
		qunit: {
			all: 'test/index.html'
		},
		jshint: {
			options: {
				jshintrc: true
			},
			grunt: 'Gruntfile.js',
			source: 'src/**/*.js',
			tests: 'test/**/*.js'
		},
		uglify: {
			options: {
				banner: '/*! <%= pkg.name %> v<%= pkg.version %> | <%= pkg.license %> */\n'
			},
			build: {
				files: {
					'build/jquery.cookie-<%= pkg.version %>.min.js': 'src/jquery.cookie.js'
				}
			}
		},
		watch: {
			options: {
				livereload: true
			},
			files: '{src,test}/**/*.js',
			tasks: 'default'
		},
		compare_size: {
			files: [
				'build/jquery.cookie-<%= pkg.version %>.min.js',
				'src/jquery.cookie.js'
			],
			options: {
				compress: {
					gz: function (fileContents) {
						return require('gzip-js').zip(fileContents, {}).length;
					}
				}
			}
		},
		connect: {
			saucelabs: {
				options: {
					port: 9999,
					base: ['.', 'test']
				}
			},
			tests: {
				options: {
					port: 9998,
					base: ['.', 'test'],
					open: 'http://127.0.0.1:9998',
					keepalive: true,
					livereload: true
				}
			}
		},
		'saucelabs-qunit': {
			all: {
				options: {
					urls: ['http://127.0.0.1:9999'],
					build: process.env.TRAVIS_JOB_ID,
					browsers: [
						// iOS
						{
							browserName: 'iphone',
							platform: 'OS X 10.9',
							version: '7.1'
						},
						{
							browserName: 'ipad',
							platform: 'OS X 10.9',
							version: '7.1'
						},
						// Android
						{
							browserName: 'android',
							platform: 'Linux',
							version: '4.3'
						},
						// OS X
						{
							browserName: 'safari',
							platform: 'OS X 10.9',
							version: '7'
						},
						{
							browserName: 'safari',
							platform: 'OS X 10.8',
							version: '6'
						},
						{
							browserName: 'firefox',
							platform: 'OS X 10.9',
							version: '28'
						},
						// Windows
						{
							browserName: 'internet explorer',
							platform: 'Windows 8.1',
							version: '11'
						},
						{
							browserName: 'internet explorer',
							platform: 'Windows 8',
							version: '10'
						},
						{
							browserName: 'internet explorer',
							platform: 'Windows 7',
							version: '11'
						},
						{
							browserName: 'internet explorer',
							platform: 'Windows 7',
							version: '10'
						},
						{
							browserName: 'internet explorer',
							platform: 'Windows 7',
							version: '9'
						},
						{
							browserName: 'internet explorer',
							platform: 'Windows 7',
							version: '8'
						},
						{
							browserName: 'firefox',
							platform: 'Windows 7',
							version: '29'
						},
						{
							browserName: 'chrome',
							platform: 'Windows 7',
							version: '34'
						},
						// Linux
						{
							browserName: 'firefox',
							platform: 'Linux',
							version: '29'
						}
					]
				}
			}
		}
	});

	// Loading dependencies
	for (var key in grunt.file.readJSON('package.json').devDependencies) {
		if (key !== 'grunt' && key.indexOf('grunt') === 0) {
			grunt.loadNpmTasks(key);
		}
	}

	grunt.registerTask('default', ['jshint', 'qunit', 'uglify', 'compare_size']);
	grunt.registerTask('saucelabs', ['connect:saucelabs', 'saucelabs-qunit']);
	grunt.registerTask('ci', ['jshint', 'qunit', 'saucelabs']);
};


================================================
FILE: MIT-LICENSE.txt
================================================
Copyright 2014 Klaus Hartl

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


================================================
FILE: README.md
================================================
# IMPORTANT!

This project was moved to https://github.com/js-cookie/js-cookie, check [the discussion](https://github.com/carhartl/jquery-cookie/issues/349).

New issues should be opened at https://github.com/js-cookie/js-cookie/issues

# jquery.cookie [![Build Status](https://travis-ci.org/carhartl/jquery-cookie.png?branch=master)](https://travis-ci.org/carhartl/jquery-cookie) [![Code Climate](https://codeclimate.com/github/carhartl/jquery-cookie.png)](https://codeclimate.com/github/carhartl/jquery-cookie)

A simple, lightweight jQuery plugin for reading, writing and deleting cookies.

**If you're viewing this, you're reading the documentation for the old repository.
[View documentation for the latest backwards compatible release (1.5.1).](https://github.com/js-cookie/js-cookie/tree/v1.5.1)**

## Build Status Matrix

[![Selenium Test Status](https://saucelabs.com/browser-matrix/jquery-cookie.svg)](https://saucelabs.com/u/jquery-cookie)

## Installation

Include script *after* the jQuery library (unless you are packaging scripts somehow else):

```html
<script src="/path/to/jquery.cookie.js"></script>
```

**Do not include the script directly from GitHub (http://raw.github.com/...).** The file is being served as text/plain and as such being blocked
in Internet Explorer on Windows 7 for instance (because of the wrong MIME type). Bottom line: GitHub is not a CDN.

The plugin can also be loaded as AMD or CommonJS module.

## Usage

Create session cookie:

```javascript
$.cookie('name', 'value');
```

Create expiring cookie, 7 days from then:

```javascript
$.cookie('name', 'value', { expires: 7 });
```

Create expiring cookie, valid across entire site:

```javascript
$.cookie('name', 'value', { expires: 7, path: '/' });
```

Read cookie:

```javascript
$.cookie('name'); // => "value"
$.cookie('nothing'); // => undefined
```

Read all available cookies:

```javascript
$.cookie(); // => { "name": "value" }
```

Delete cookie:

```javascript
// Returns true when cookie was successfully deleted, otherwise false
$.removeCookie('name'); // => true
$.removeCookie('nothing'); // => false

// Need to use the same attributes (path, domain) as what the cookie was written with
$.cookie('name', 'value', { path: '/' });
// This won't work!
$.removeCookie('name'); // => false
// This will work!
$.removeCookie('name', { path: '/' }); // => true
```

*Note: when deleting a cookie, you must pass the exact same path, domain and secure options that were used to set the cookie, unless you're relying on the default options that is.*

## Configuration

### raw

By default the cookie value is encoded/decoded when writing/reading, using `encodeURIComponent`/`decodeURIComponent`. Bypass this by setting raw to true:

```javascript
$.cookie.raw = true;
```

### json

Turn on automatic storage of JSON objects passed as the cookie value. Assumes `JSON.stringify` and `JSON.parse`:

```javascript
$.cookie.json = true;
```

## Cookie Options

Cookie attributes can be set globally by setting properties of the `$.cookie.defaults` object or individually for each call to `$.cookie()` by passing a plain object to the options argument. Per-call options override the default options.

### expires

    expires: 365

Define lifetime of the cookie. Value can be a `Number` which will be interpreted as days from time of creation or a `Date` object. If omitted, the cookie becomes a session cookie.

### path

    path: '/'

Define the path where the cookie is valid. *By default the path of the cookie is the path of the page where the cookie was created (standard browser behavior).* If you want to make it available for instance across the entire domain use `path: '/'`. Default: path of page where the cookie was created.

**Note regarding Internet Explorer:**

> Due to an obscure bug in the underlying WinINET InternetGetCookie implementation, IE’s document.cookie will not return a cookie if it was set with a path attribute containing a filename.

(From [Internet Explorer Cookie Internals (FAQ)](http://blogs.msdn.com/b/ieinternals/archive/2009/08/20/wininet-ie-cookie-internals-faq.aspx))

This means one cannot set a path using `path: window.location.pathname` in case such pathname contains a filename like so: `/check.html` (or at least, such cookie cannot be read correctly).

### domain

    domain: 'example.com'

Define the domain where the cookie is valid. Default: domain of page where the cookie was created.

### secure

    secure: true

If true, the cookie transmission requires a secure protocol (https). Default: `false`.

## Converters

Provide a conversion function as optional last argument for reading, in order to change the cookie's value
to a different representation on the fly.

Example for parsing a value into a number:

```javascript
$.cookie('foo', '42');
$.cookie('foo', Number); // => 42
```

Dealing with cookies that have been encoded using `escape` (3rd party cookies):

```javascript
$.cookie.raw = true;
$.cookie('foo', unescape);
```

You can pass an arbitrary conversion function.

## Contributing

Check out the [Contributing Guidelines](CONTRIBUTING.md)

## Authors

[Klaus Hartl](https://github.com/carhartl)


================================================
FILE: bower.json
================================================
{
  "name": "jquery.cookie",
  "version": "1.4.1",
  "main": [
    "src/jquery.cookie.js"
  ],
  "dependencies": {
    "jquery": ">=1.2"
  },
  "ignore": [
    "test",
    ".*",
    "*.json",
    "*.md",
    "*.txt",
    "Gruntfile.js"
  ]
}


================================================
FILE: component.json
================================================
{
  "name": "jquery.cookie",
  "repo": "carhartl/jquery-cookie",
  "description": "A simple, lightweight jQuery plugin for reading, writing and deleting cookies",
  "version": "1.4.1",
  "keywords": [],
  "dependencies": {},
  "development": {},
  "license": "MIT",
  "main": "src/jquery.cookie.js",
  "scripts": [
    "src/jquery.cookie.js"
  ]
}


================================================
FILE: cookie.jquery.json
================================================
{
  "name": "cookie",
  "version": "1.4.1",
  "title":  "jQuery Cookie",
  "description": "A simple, lightweight jQuery plugin for reading, writing and deleting cookies.",
  "author": {
    "name": "Klaus Hartl",
    "url": "https://github.com/carhartl"
  },
  "maintainers": [
    {
      "name": "Klaus Hartl",
      "url": "https://github.com/carhartl"
    },
    {
      "name": "Fagner Martins",
      "url": "https://github.com/FagnerMartinsBrack"
    }
  ],
  "licenses": [
    {
      "type": "MIT",
      "url": "https://raw.github.com/carhartl/jquery-cookie/master/MIT-LICENSE.txt"
    }
  ],
  "dependencies": {
    "jquery": ">=1.2"
  },
  "bugs": "https://github.com/carhartl/jquery-cookie/issues",
  "homepage": "https://github.com/carhartl/jquery-cookie",
  "docs": "https://github.com/carhartl/jquery-cookie#readme"
}


================================================
FILE: package.json
================================================
{
  "name": "jquery.cookie",
  "version": "1.4.1",
  "description": "A simple, lightweight jQuery plugin for reading, writing and deleting cookies.",
  "main": "src/jquery.cookie.js",
  "directories": {
    "test": "test"
  },
  "scripts": {
    "test": "grunt"
  },
  "repository": {
    "type": "git",
    "url": "git://github.com/carhartl/jquery-cookie.git"
  },
  "author": "Klaus Hartl",
  "license": "MIT",
  "gitHead": "bd3c9713222bace68d25fe2128c0f8633cad1269",
  "readmeFilename": "README.md",
  "devDependencies": {
    "grunt": "~0.4.1",
    "grunt-contrib-jshint": "~0.10.0",
    "grunt-contrib-uglify": "~0.2.0",
    "grunt-contrib-qunit": "~0.2.0",
    "grunt-contrib-watch": "~0.6.1",
    "grunt-compare-size": "~0.4.0",
    "grunt-saucelabs": "~7.0.0",
    "grunt-contrib-connect": "~0.7.1",
    "gzip-js": "~0.3.0"
  },
  "volo": {
    "url": "https://raw.github.com/carhartl/jquery-cookie/v{version}/src/jquery.cookie.js"
  },
  "jspm": {
    "main": "jquery.cookie",
    "files": ["src/jquery.cookie.js"],
    "buildConfig": {
      "uglify": true
    }
  },
  "jam": {
    "dependencies": {
      "jquery": ">=1.2"
    },
    "main": "src/jquery.cookie.js",
    "include": [
      "src/jquery.cookie.js"
    ]
  }
}


================================================
FILE: src/.jshintrc
================================================
{
	"browser": true,
	"camelcase": true,
	"jquery": true,
	"quotmark": "single",
	"globals": {
		"define": true,
		"module": true,
		"require": true
	},

	"extends": "../.jshintrc"
}


================================================
FILE: src/jquery.cookie.js
================================================
/*!
 * jQuery Cookie Plugin v1.4.1
 * https://github.com/carhartl/jquery-cookie
 *
 * Copyright 2006, 2014 Klaus Hartl
 * Released under the MIT license
 */
(function (factory) {
	if (typeof define === 'function' && define.amd) {
		// AMD (Register as an anonymous module)
		define(['jquery'], factory);
	} else if (typeof exports === 'object') {
		// Node/CommonJS
		module.exports = factory(require('jquery'));
	} else {
		// Browser globals
		factory(jQuery);
	}
}(function ($) {

	var pluses = /\+/g;

	function encode(s) {
		return config.raw ? s : encodeURIComponent(s);
	}

	function decode(s) {
		return config.raw ? s : decodeURIComponent(s);
	}

	function stringifyCookieValue(value) {
		return encode(config.json ? JSON.stringify(value) : String(value));
	}

	function parseCookieValue(s) {
		if (s.indexOf('"') === 0) {
			// This is a quoted cookie as according to RFC2068, unescape...
			s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
		}

		try {
			// Replace server-side written pluses with spaces.
			// If we can't decode the cookie, ignore it, it's unusable.
			// If we can't parse the cookie, ignore it, it's unusable.
			s = decodeURIComponent(s.replace(pluses, ' '));
			return config.json ? JSON.parse(s) : s;
		} catch(e) {}
	}

	function read(s, converter) {
		var value = config.raw ? s : parseCookieValue(s);
		return $.isFunction(converter) ? converter(value) : value;
	}

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

		// Write

		if (arguments.length > 1 && !$.isFunction(value)) {
			options = $.extend({}, config.defaults, options);

			if (typeof options.expires === 'number') {
				var days = options.expires, t = options.expires = new Date();
				t.setMilliseconds(t.getMilliseconds() + days * 864e+5);
			}

			return (document.cookie = [
				encode(key), '=', stringifyCookieValue(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 result = key ? undefined : {},
			// To prevent the for loop in the first place assign an empty array
			// in case there are no cookies at all. Also prevents odd result when
			// calling $.cookie().
			cookies = document.cookie ? document.cookie.split('; ') : [],
			i = 0,
			l = cookies.length;

		for (; i < l; i++) {
			var parts = cookies[i].split('='),
				name = decode(parts.shift()),
				cookie = parts.join('=');

			if (key === name) {
				// If second argument (value) is a function it's a converter...
				result = read(cookie, value);
				break;
			}

			// Prevent storing a cookie that we couldn't decode.
			if (!key && (cookie = read(cookie)) !== undefined) {
				result[name] = cookie;
			}
		}

		return result;
	};

	config.defaults = {};

	$.removeCookie = function (key, options) {
		// Must not alter options, thus extending a fresh object...
		$.cookie(key, '', $.extend({}, options, { expires: -1 }));
		return !$.cookie(key);
	};

}));


================================================
FILE: test/.jshintrc
================================================
{
	"browser": true,
	"jquery": true,
	"qunit": true,

	"-W053": true,

	"extends": "../.jshintrc"
}


================================================
FILE: test/index.html
================================================
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>jquery.cookie Test Suite</title>
		<link rel="stylesheet" href="http://code.jquery.com/qunit/qunit-1.14.0.css">
		<script src="http://code.jquery.com/qunit/qunit-1.14.0.js"></script>
		<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
		<script src="../src/jquery.cookie.js"></script>
		<script src="tests.js"></script>
	</head>
	<body>
		<div id="qunit"></div>
		<div id="qunit-fixture"></div>
	</body>
</html>


================================================
FILE: test/malformed_cookie.html
================================================
<!DOCTYPE html>
<html>
	<head>
		<title></title>
		<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
		<script src="../src/jquery.cookie.js"></script>
		<script>
			try {
				Object.defineProperty(document, "cookie", { get: function() { return "first=one; ; second=two"; } });
				window.testValue = $.cookie("second");
				window.ok = true;
			} catch (er) {
			}
		</script>
	</head>
	<body>
	</body>
</html>


================================================
FILE: test/tests.js
================================================
// Required for exposing test results to the Sauce Labs API.
// Can be removed when the following issue is fixed:
// https://github.com/axemclion/grunt-saucelabs/issues/84
QUnit.done(function (details) {
	window.global_test_results = details;
});


var lifecycle = {
	teardown: function () {
		$.cookie.defaults = {};
		delete $.cookie.raw;
		delete $.cookie.json;
		$.each($.cookie(), $.removeCookie);
	}
};


module('read', lifecycle);

test('simple value', function () {
	expect(1);
	document.cookie = 'c=v';
	strictEqual($.cookie('c'), 'v', 'should return value');
});

test('empty value', function () {
	expect(1);
	// IE saves cookies with empty string as "c; ", e.g. without "=" as opposed to EOMB, which
	// resulted in a bug while reading such a cookie.
	$.cookie('c', '');
	strictEqual($.cookie('c'), '', 'should return value');
});

test('not existing', function () {
	expect(1);
	strictEqual($.cookie('whatever'), undefined, 'return undefined');
});

test('RFC 2068 quoted string', function () {
	expect(1);
	document.cookie = 'c="v@address.com\\"\\\\\\""';
	strictEqual($.cookie('c'), 'v@address.com"\\"', 'should decode RFC 2068 quoted string');
});

test('decode', function () {
	expect(1);
	document.cookie = encodeURIComponent(' c') + '=' + encodeURIComponent(' v');
	strictEqual($.cookie(' c'), ' v', 'should decode key and value');
});

test('decode pluses to space for server side written cookie', function () {
	expect(1);
	document.cookie = 'c=foo+bar';
	strictEqual($.cookie('c'), 'foo bar', 'should convert pluses back to space');
});

test('raw = true', function () {
	expect(2);
	$.cookie.raw = true;

	document.cookie = 'c=%20v';
	strictEqual($.cookie('c'), '%20v', 'should not decode value');

	// see https://github.com/carhartl/jquery-cookie/issues/50
	$.cookie('c', 'foo=bar');
	strictEqual($.cookie('c'), 'foo=bar', 'should include the entire value');
});

test('json = true', function () {
	expect(1);

	if ('JSON' in window) {
		$.cookie.json = true;
		$.cookie('c', { foo: 'bar' });
		deepEqual($.cookie('c'), { foo: 'bar' }, 'should parse JSON');
	} else {
		ok(true);
	}
});

test('not existing with json = true', function () {
	expect(1);

	if ('JSON' in window) {
		$.cookie.json = true;
		strictEqual($.cookie('whatever'), undefined, "won't throw exception");
	} else {
		ok(true);
	}
});

test('string with json = true', function () {
	expect(1);

	if ('JSON' in window) {
		$.cookie.json = true;
		$.cookie('c', 'v');
		strictEqual($.cookie('c'), 'v', 'should return value');
	} else {
		ok(true);
	}
});

test('invalid JSON string with json = true', function () {
	expect(1);

	if ('JSON' in window) {
		$.cookie('c', 'v');
		$.cookie.json = true;
		strictEqual($.cookie('c'), undefined, "won't throw exception, returns undefined");
	} else {
		ok(true);
	}
});

test('invalid URL encoding', function () {
	expect(1);
	document.cookie = 'bad=foo%';
	strictEqual($.cookie('bad'), undefined, "won't throw exception, returns undefined");
	// Delete manually here because it requires raw === true...
	$.cookie.raw = true;
	$.removeCookie('bad');
});

asyncTest('malformed cookie value in IE (#88, #117)', function () {
	expect(1);
	// Sandbox in an iframe so that we can poke around with document.cookie.
	var iframe = $('<iframe src="malformed_cookie.html"></iframe>')[0];
	$(iframe).on('load', function () {
		start();
		if (iframe.contentWindow.ok) {
			strictEqual(iframe.contentWindow.testValue, 'two', 'reads all cookie values, skipping duplicate occurences of "; "');
		} else {
			// Skip the test where we can't stub document.cookie using
			// Object.defineProperty. Seems to work fine in
			// Chrome, Firefox and IE 8+.
			ok(true, 'N/A');
		}
	});
	document.body.appendChild(iframe);
});

test('Call to read all when there are cookies', function () {
	$.cookie('c', 'v');
	$.cookie('foo', 'bar');
	deepEqual($.cookie(), { c: 'v', foo: 'bar' }, 'returns object containing all cookies');
});

test('Call to read all when there are no cookies at all', function () {
	deepEqual($.cookie(), {}, 'returns empty object');
});

test('Call to read all with json: true', function () {
	$.cookie.json = true;
	$.cookie('c', { foo: 'bar' });
	deepEqual($.cookie(), { c: { foo: 'bar' } }, 'returns JSON parsed cookies');
});

test('Call to read all with a badly encoded cookie', function () {
	expect(1);
	document.cookie = 'bad=foo%';
	document.cookie = 'good=foo';
	deepEqual($.cookie(), { good: 'foo' }, 'returns object containing all decodable cookies');
	// Delete manually here because it requires raw === true...
	$.cookie.raw = true;
	$.removeCookie('bad');
});


module('write', lifecycle);

test('String primitive', function () {
	expect(1);
	$.cookie('c', 'v');
	strictEqual($.cookie('c'), 'v', 'should write value');
});

test('String object', function () {
	expect(1);
	$.cookie('c', new String('v'));
	strictEqual($.cookie('c'), 'v', 'should write value');
});

test('value "[object Object]"', function () {
	expect(1);
	$.cookie('c', '[object Object]');
	strictEqual($.cookie('c'), '[object Object]', 'should write value');
});

test('number', function () {
	expect(1);
	$.cookie('c', 1234);
	strictEqual($.cookie('c'), '1234', 'should write value');
});

test('null', function () {
	expect(1);
	$.cookie('c', null);
	strictEqual($.cookie('c'), 'null', 'should write value');
});

test('undefined', function () {
	expect(1);
	$.cookie('c', undefined);
	strictEqual($.cookie('c'), 'undefined', 'should write value');
});

test('expires option as days from now', function () {
	expect(1);
	var sevenDaysFromNow = new Date();
	sevenDaysFromNow.setDate(sevenDaysFromNow.getDate() + 21);
	strictEqual($.cookie('c', 'v', { expires: 21 }), 'c=v; expires=' + sevenDaysFromNow.toUTCString(),
		'should write the cookie string with expires');
});

test('expires option as fraction of a day', function () {
	expect(1);

	var now = new Date().getTime();
	var expires = Date.parse($.cookie('c', 'v', { expires: 0.5 }).replace(/.+expires=/, ''));

	// When we were using Date.setDate() fractions have been ignored
	// and expires resulted in the current date. Allow 1000 milliseconds
	// difference for execution time.
	ok(expires > now + 1000, 'should write expires attribute with the correct date');
});

test('expires option as Date instance', function () {
	expect(1);
	var sevenDaysFromNow = new Date();
	sevenDaysFromNow.setDate(sevenDaysFromNow.getDate() + 7);
	strictEqual($.cookie('c', 'v', { expires: sevenDaysFromNow }), 'c=v; expires=' + sevenDaysFromNow.toUTCString(),
		'should write the cookie string with expires');
});

test('return value', function () {
	expect(1);
	strictEqual($.cookie('c', 'v'), 'c=v', 'should return written cookie string');
});

test('defaults', function () {
	expect(2);
	$.cookie.defaults.path = '/foo';
	ok($.cookie('c', 'v').match(/path=\/foo/), 'should use options from defaults');
	ok($.cookie('c', 'v', { path: '/bar' }).match(/path=\/bar/), 'options argument has precedence');
});

test('raw = true', function () {
	expect(1);
	$.cookie.raw = true;
	strictEqual($.cookie('c[1]', 'v[1]'), 'c[1]=v[1]', 'should not encode');
	// Delete manually here because it requires raw === true...
	$.removeCookie('c[1]');
});

test('json = true', function () {
	expect(1);
	$.cookie.json = true;

	if ('JSON' in window) {
		$.cookie('c', { foo: 'bar' });
		strictEqual(document.cookie, 'c=' + encodeURIComponent(JSON.stringify({ foo: 'bar' })), 'should stringify JSON');
	} else {
		ok(true);
	}
});


module('removeCookie', lifecycle);

test('deletion', function () {
	expect(1);
	$.cookie('c', 'v');
	$.removeCookie('c');
	strictEqual(document.cookie, '', 'should delete the cookie');
});

test('when sucessfully deleted', function () {
	expect(1);
	$.cookie('c', 'v');
	strictEqual($.removeCookie('c'), true, 'returns true');
});

test('when cookie does not exist', function () {
	expect(1);
	strictEqual($.removeCookie('c'), true, 'returns true');
});

test('when deletion failed', function () {
	expect(1);
	$.cookie('c', 'v');

	var originalCookie = $.cookie;
	$.cookie = function () {
		// Stub deletion...
		if (arguments.length === 1) {
			return originalCookie.apply(null, arguments);
		}
	};

	strictEqual($.removeCookie('c'), false, 'returns false');

	$.cookie = originalCookie;
});

test('with options', function () {
	expect(1);
	var options = { path: '/' };
	$.cookie('c', 'v', options);
	$.removeCookie('c', options);
	strictEqual(document.cookie, '', 'should delete the cookie');
});

test('passing options reference', function () {
	expect(1);
	var options = { path: '/' };
	$.cookie('c', 'v', options);
	$.removeCookie('c', options);
	deepEqual(options, { path: '/' }, "won't alter options object");
});

test('[] used in name', function () {
	expect(1);
	$.cookie.raw = true;
	document.cookie = 'c[1]=foo';
	$.removeCookie('c[1]');
	strictEqual(document.cookie, '', 'delete the cookie');
});


module('conversion', lifecycle);

test('read converter', function() {
	expect(1);
	$.cookie('c', '1');
	strictEqual($.cookie('c', Number), 1, 'converts read value');
});

test('read converter with raw = true', function() {
	expect(1);
	$.cookie.raw = true;
	$.cookie('c', '1');
	strictEqual($.cookie('c', Number), 1, 'does not decode, but converts read value');
});
Download .txt
gitextract_kzw1asl0/

├── .gitignore
├── .jshintignore
├── .jshintrc
├── .tm_properties
├── .travis.yml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Gruntfile.js
├── MIT-LICENSE.txt
├── README.md
├── bower.json
├── component.json
├── cookie.jquery.json
├── package.json
├── src/
│   ├── .jshintrc
│   └── jquery.cookie.js
└── test/
    ├── .jshintrc
    ├── index.html
    ├── malformed_cookie.html
    └── tests.js
Download .txt
SYMBOL INDEX (5 symbols across 1 files)

FILE: src/jquery.cookie.js
  function encode (line 23) | function encode(s) {
  function decode (line 27) | function decode(s) {
  function stringifyCookieValue (line 31) | function stringifyCookieValue(value) {
  function parseCookieValue (line 35) | function parseCookieValue(s) {
  function read (line 50) | function read(s, converter) {
Condensed preview — 20 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (34K chars).
[
  {
    "path": ".gitignore",
    "chars": 42,
    "preview": "node_modules\nbuild\n.sizecache.json\n*.log*\n"
  },
  {
    "path": ".jshintignore",
    "chars": 19,
    "preview": "build\nnode_modules\n"
  },
  {
    "path": ".jshintrc",
    "chars": 172,
    "preview": "{\n\t\"curly\": true,\n\t\"eqeqeq\": true,\n\t\"expr\": true,\n\t// \"maxlen\": 130,\n\t\"newcap\": true,\n\t\"noarg\": true,\n\t\"nonbsp\": true,\n\t"
  },
  {
    "path": ".tm_properties",
    "chars": 165,
    "preview": "softTabs = false\ntabSize  = 2\n\n[ text.plain ]\nsoftWrap   = true\nwrapColumn = \"Use Window Frame\"\nsoftTabs   = true\ntabSiz"
  },
  {
    "path": ".travis.yml",
    "chars": 496,
    "preview": "language: node_js\nnode_js:\n  - 0.10\nbefore_script:\n  - npm install -g grunt-cli\nscript: grunt ci --verbose\nenv:\n  global"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 2241,
    "preview": "HEAD\n-----\n\n1.4.1\n-----\n- Added support for CommonJS.\n\n- Added support for package managers: Jam (http://jamjs.org), vol"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1538,
    "preview": "##Issues\n\n- Report issues or feature requests on [GitHub Issues](https://github.com/carhartl/jquery-cookie/issues).\n- If"
  },
  {
    "path": "Gruntfile.js",
    "chars": 3382,
    "preview": "/*jshint node:true, quotmark:single */\n'use strict';\n\nmodule.exports = function (grunt) {\n\n\tgrunt.initConfig({\n\t\tpkg: gr"
  },
  {
    "path": "MIT-LICENSE.txt",
    "chars": 1051,
    "preview": "Copyright 2014 Klaus Hartl\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this softwar"
  },
  {
    "path": "README.md",
    "chars": 5171,
    "preview": "# IMPORTANT!\n\nThis project was moved to https://github.com/js-cookie/js-cookie, check [the discussion](https://github.co"
  },
  {
    "path": "bower.json",
    "chars": 242,
    "preview": "{\n  \"name\": \"jquery.cookie\",\n  \"version\": \"1.4.1\",\n  \"main\": [\n    \"src/jquery.cookie.js\"\n  ],\n  \"dependencies\": {\n    \""
  },
  {
    "path": "component.json",
    "chars": 348,
    "preview": "{\n  \"name\": \"jquery.cookie\",\n  \"repo\": \"carhartl/jquery-cookie\",\n  \"description\": \"A simple, lightweight jQuery plugin f"
  },
  {
    "path": "cookie.jquery.json",
    "chars": 834,
    "preview": "{\n  \"name\": \"cookie\",\n  \"version\": \"1.4.1\",\n  \"title\":  \"jQuery Cookie\",\n  \"description\": \"A simple, lightweight jQuery "
  },
  {
    "path": "package.json",
    "chars": 1236,
    "preview": "{\n  \"name\": \"jquery.cookie\",\n  \"version\": \"1.4.1\",\n  \"description\": \"A simple, lightweight jQuery plugin for reading, wr"
  },
  {
    "path": "src/.jshintrc",
    "chars": 182,
    "preview": "{\n\t\"browser\": true,\n\t\"camelcase\": true,\n\t\"jquery\": true,\n\t\"quotmark\": \"single\",\n\t\"globals\": {\n\t\t\"define\": true,\n\t\t\"modul"
  },
  {
    "path": "src/jquery.cookie.js",
    "chars": 3140,
    "preview": "/*!\n * jQuery Cookie Plugin v1.4.1\n * https://github.com/carhartl/jquery-cookie\n *\n * Copyright 2006, 2014 Klaus Hartl\n "
  },
  {
    "path": "test/.jshintrc",
    "chars": 100,
    "preview": "{\n\t\"browser\": true,\n\t\"jquery\": true,\n\t\"qunit\": true,\n\n\t\"-W053\": true,\n\n\t\"extends\": \"../.jshintrc\"\n}\n"
  },
  {
    "path": "test/index.html",
    "chars": 495,
    "preview": "<!DOCTYPE html>\n<html>\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>jquery.cookie Test Suite</title>\n\t\t<link rel=\"styleshee"
  },
  {
    "path": "test/malformed_cookie.html",
    "chars": 429,
    "preview": "<!DOCTYPE html>\n<html>\n\t<head>\n\t\t<title></title>\n\t\t<script src=\"http://code.jquery.com/jquery-1.11.1.min.js\"></script>\n\t"
  },
  {
    "path": "test/tests.js",
    "chars": 9256,
    "preview": "// Required for exposing test results to the Sauce Labs API.\n// Can be removed when the following issue is fixed:\n// htt"
  }
]

About this extraction

This page contains the full source code of the carhartl/jquery-cookie GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 20 files (29.8 KB), approximately 8.8k tokens, and a symbol index with 5 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!