[Pkg-javascript-commits] [jquery-goodies] 04/08: Updating jQuery Cookie
Marcelo Jorge Vieira
metal at moszumanska.debian.org
Mon Feb 10 02:01:05 UTC 2014
This is an automated email from the git hooks/post-receive script.
metal pushed a commit to branch master
in repository jquery-goodies.
commit 07e111f739246af061dd71c7debdbb9cb9ad4c10
Author: Marcelo Jorge Vieira <metal at alucinados.com>
Date: Sun Feb 9 23:37:56 2014 -0200
Updating jQuery Cookie
---
cookie/CHANGELOG.md | 65 ++++++++
cookie/CONTRIBUTING.md | 53 +++++++
cookie/Gruntfile.js | 115 +++++++++++++++
cookie/MIT-LICENSE.txt | 20 +++
cookie/README.md | 146 ++++++++++++++++++
cookie/bower.json | 18 +++
cookie/cookie.jquery.json | 32 ++++
cookie/jquery.cookie.js | 198 ++++++++++++++-----------
cookie/package.json | 31 ++++
cookie/test/index.html | 19 +++
cookie/test/malformed_cookie.html | 18 +++
cookie/test/server.js | 24 +++
cookie/test/tests.js | 303 ++++++++++++++++++++++++++++++++++++++
13 files changed, 956 insertions(+), 86 deletions(-)
diff --git a/cookie/CHANGELOG.md b/cookie/CHANGELOG.md
new file mode 100644
index 0000000..467dd42
--- /dev/null
+++ b/cookie/CHANGELOG.md
@@ -0,0 +1,65 @@
+HEAD
+-----
+
+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.
diff --git a/cookie/CONTRIBUTING.md b/cookie/CONTRIBUTING.md
new file mode 100644
index 0000000..f174678
--- /dev/null
+++ b/cookie/CONTRIBUTING.md
@@ -0,0 +1,53 @@
+##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 and the test server only.
+- [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:
+
+ $ node test/server.js
+
+Open the following URL in a browser:
+
+ $ open http://0.0.0.0:8124/test/index.html
+
+_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
diff --git a/cookie/Gruntfile.js b/cookie/Gruntfile.js
new file mode 100644
index 0000000..9c30c00
--- /dev/null
+++ b/cookie/Gruntfile.js
@@ -0,0 +1,115 @@
+/*jshint node: true */
+
+'use strict';
+
+module.exports = function (grunt) {
+
+ grunt.initConfig({
+ pkg: grunt.file.readJSON('package.json'),
+ qunit: {
+ all: ['test/index.html']
+ },
+ jshint: {
+ files: [
+ 'Gruntfile.js',
+ 'jquery.cookie.js'
+ ],
+ options: {
+ jshintrc: '.jshintrc'
+ }
+ },
+ uglify: {
+ options: {
+ banner: '/*! <%= pkg.name %> v<%= pkg.version %> | <%= pkg.license %> */\n'
+ },
+ build: {
+ files: {
+ 'build/jquery.cookie-<%= pkg.version %>.min.js': 'jquery.cookie.js'
+ }
+ }
+ },
+ watch: {
+ files: [
+ 'jquery.cookie.js',
+ 'test/tests.js'
+ ],
+ tasks: 'default'
+ },
+ compare_size: {
+ files: [
+ 'build/jquery.cookie-<%= pkg.version %>.min.js',
+ 'jquery.cookie.js'
+ ],
+ options: {
+ compress: {
+ gz: function (fileContents) {
+ return require('gzip-js').zip(fileContents, {}).length;
+ }
+ }
+ }
+ },
+ connect: {
+ server: {
+ options: {
+ base: '.',
+ directory: 'test',
+ port: 9999
+ }
+ }
+ },
+ 'saucelabs-qunit': {
+ all: {
+ options: {
+ urls: ['http://127.0.0.1:9999/test/index.html'],
+ tunnelTimeout: 5,
+ build: process.env.TRAVIS_JOB_ID,
+ concurrency: 3,
+ browsers: [
+ {
+ browserName: 'safari',
+ platform: 'OS X 10.8'
+ },
+ {
+ browserName: 'firefox',
+ platform: 'Windows 7'
+ },
+ {
+ browserName: 'firefox',
+ platform: 'Windows XP'
+ },
+ {
+ browserName: 'firefox',
+ platform: 'Linux'
+ },
+ {
+ browserName: 'chrome',
+ platform: 'Windows 7'
+ },
+ {
+ browserName: 'internet explorer',
+ platform: 'Windows 8',
+ version: '10'
+ },
+ {
+ browserName: 'internet explorer',
+ platform: 'Windows 7',
+ version: '9'
+ }
+ ],
+ testname: 'jquery.cookie qunit tests'
+ }
+ }
+ }
+ });
+
+ // 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-qunit']);
+ grunt.registerTask('ci', ['jshint', 'qunit', 'saucelabs']);
+};
diff --git a/cookie/MIT-LICENSE.txt b/cookie/MIT-LICENSE.txt
new file mode 100644
index 0000000..8ae647b
--- /dev/null
+++ b/cookie/MIT-LICENSE.txt
@@ -0,0 +1,20 @@
+Copyright 2013 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.
\ No newline at end of file
diff --git a/cookie/README.md b/cookie/README.md
new file mode 100644
index 0000000..7377611
--- /dev/null
+++ b/cookie/README.md
@@ -0,0 +1,146 @@
+# jquery.cookie [![Build Status](https://travis-ci.org/carhartl/jquery-cookie.png?branch=master)](https://travis-ci.org/carhartl/jquery-cookie)
+
+[![Selenium Test Status](https://saucelabs.com/browser-matrix/carhartl.svg)](https://saucelabs.com/u/carhartl)
+
+A simple, lightweight jQuery plugin for reading, writing and deleting cookies.
+
+## 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 module.
+
+## Usage
+
+Create session cookie:
+
+```javascript
+$.cookie('the_cookie', 'the_value');
+```
+
+Create expiring cookie, 7 days from then:
+
+```javascript
+$.cookie('the_cookie', 'the_value', { expires: 7 });
+```
+
+Create expiring cookie, valid across entire site:
+
+```javascript
+$.cookie('the_cookie', 'the_value', { expires: 7, path: '/' });
+```
+
+Read cookie:
+
+```javascript
+$.cookie('the_cookie'); // => "the_value"
+$.cookie('not_existing'); // => undefined
+```
+
+Read all available cookies:
+
+```javascript
+$.cookie(); // => { "the_cookie": "the_value", "...remaining": "cookies" }
+```
+
+Delete cookie:
+
+```javascript
+// Returns true when cookie was found, false when no cookie was found...
+$.removeCookie('the_cookie');
+
+// Same path as when the cookie was written...
+$.removeCookie('the_cookie', { path: '/' });
+```
+
+*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)
diff --git a/cookie/bower.json b/cookie/bower.json
new file mode 100644
index 0000000..8a5b5d0
--- /dev/null
+++ b/cookie/bower.json
@@ -0,0 +1,18 @@
+{
+ "name": "jquery.cookie",
+ "version": "1.4.0",
+ "main": [
+ "./jquery.cookie.js"
+ ],
+ "dependencies": {
+ "jquery": ">=1.2"
+ },
+ "ignore": [
+ "test",
+ ".*",
+ "*.json",
+ "*.md",
+ "*.txt",
+ "Gruntfile.js"
+ ]
+}
diff --git a/cookie/cookie.jquery.json b/cookie/cookie.jquery.json
new file mode 100644
index 0000000..522d5e1
--- /dev/null
+++ b/cookie/cookie.jquery.json
@@ -0,0 +1,32 @@
+{
+ "name": "cookie",
+ "version": "1.4.0",
+ "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"
+}
diff --git a/cookie/jquery.cookie.js b/cookie/jquery.cookie.js
index 61d3bce..9271900 100644
--- a/cookie/jquery.cookie.js
+++ b/cookie/jquery.cookie.js
@@ -1,91 +1,117 @@
-/*jslint browser: true */ /*global jQuery: true */
-
-/**
- * jQuery Cookie plugin
- *
- * Copyright (c) 2010 Klaus Hartl (stilbuero.de)
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
+/*!
+ * jQuery Cookie Plugin v1.4.0
+ * https://github.com/carhartl/jquery-cookie
*
+ * Copyright 2013 Klaus Hartl
+ * Released under the MIT license
*/
+(function (factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as anonymous module.
+ define(['jquery'], factory);
+ } else {
+ // Browser globals.
+ factory(jQuery);
+ }
+}(function ($) {
-// TODO JsDoc
+ var pluses = /\+/g;
-/**
- * Create a cookie with the given key and value and other optional parameters.
- *
- * @example $.cookie('the_cookie', 'the_value');
- * @desc Set the value of a cookie.
- * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
- * @desc Create a cookie with all available options.
- * @example $.cookie('the_cookie', 'the_value');
- * @desc Create a session cookie.
- * @example $.cookie('the_cookie', null);
- * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
- * used when the cookie was set.
- *
- * @param String key The key of the cookie.
- * @param String value The value of the cookie.
- * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
- * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
- * If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
- * If set to null or omitted, the cookie will be a session cookie and will not be retained
- * when the the browser exits.
- * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
- * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
- * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
- * require a secure protocol (like HTTPS).
- * @type undefined
- *
- * @name $.cookie
- * @cat Plugins/Cookie
- * @author Klaus Hartl/klaus.hartl at stilbuero.de
- */
+ function encode(s) {
+ return config.raw ? s : encodeURIComponent(s);
+ }
-/**
- * Get the value of a cookie with the given key.
- *
- * @example $.cookie('the_cookie');
- * @desc Get the value of a cookie.
- *
- * @param String key The key of the cookie.
- * @return The value of the cookie.
- * @type String
- *
- * @name $.cookie
- * @cat Plugins/Cookie
- * @author Klaus Hartl/klaus.hartl at stilbuero.de
- */
-jQuery.cookie = function (key, value, options) {
-
- // key and at least value given, set cookie...
- if (arguments.length > 1 && String(value) !== "[object Object]") {
- options = jQuery.extend({}, options);
-
- if (value === null || value === undefined) {
- options.expires = -1;
- }
-
- if (typeof options.expires === 'number') {
- var days = options.expires, t = options.expires = new Date();
- t.setDate(t.getDate() + days);
- }
-
- value = String(value);
-
- return (document.cookie = [
- encodeURIComponent(key), '=',
- options.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(''));
- }
-
- // key and possibly options given, get cookie...
- options = value || {};
- var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent;
- return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null;
-};
+ 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.
+ s = decodeURIComponent(s.replace(pluses, ' '));
+ } catch(e) {
+ return;
+ }
+
+ try {
+ // If we can't parse the cookie, ignore it, it's unusable.
+ 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 (value !== undefined && !$.isFunction(value)) {
+ options = $.extend({}, config.defaults, options);
+
+ if (typeof options.expires === 'number') {
+ var days = options.expires, t = options.expires = new Date();
+ t.setDate(t.getDate() + days);
+ }
+
+ 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().
+ var cookies = document.cookie ? document.cookie.split('; ') : [];
+
+ for (var i = 0, l = cookies.length; i < l; i++) {
+ var parts = cookies[i].split('=');
+ var name = decode(parts.shift());
+ var cookie = parts.join('=');
+
+ if (key && 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) {
+ if ($.cookie(key) !== undefined) {
+ // Must not alter options, thus extending a fresh object...
+ $.cookie(key, '', $.extend({}, options, { expires: -1 }));
+ return true;
+ }
+ return false;
+ };
+
+}));
diff --git a/cookie/package.json b/cookie/package.json
new file mode 100644
index 0000000..3942d32
--- /dev/null
+++ b/cookie/package.json
@@ -0,0 +1,31 @@
+{
+ "name": "jquery.cookie",
+ "version": "1.4.0",
+ "description": "A simple, lightweight jQuery plugin for reading, writing and deleting cookies.",
+ "main": "Gruntfile.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.4.0",
+ "grunt-contrib-uglify": "~0.2.0",
+ "grunt-contrib-qunit": "~0.2.0",
+ "grunt-contrib-watch": "~0.3.0",
+ "grunt-compare-size": "~0.4.0",
+ "grunt-saucelabs": "~4.1.1",
+ "grunt-contrib-connect": "~0.5.0",
+ "gzip-js": "~0.3.0"
+ }
+}
diff --git a/cookie/test/index.html b/cookie/test/index.html
new file mode 100644
index 0000000..1a6016b
--- /dev/null
+++ b/cookie/test/index.html
@@ -0,0 +1,19 @@
+<!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.10.0.css">
+ <script src="http://code.jquery.com/jquery-1.9.0.min.js"></script>
+ <script src="http://code.jquery.com/qunit/qunit-1.10.0.js"></script>
+ <script src="../jquery.cookie.js"></script>
+ <script src="tests.js"></script>
+ </head>
+ <body>
+ <h1 id="qunit-header">jquery.cookie Test Suite</h1>
+ <h2 id="qunit-banner"></h2>
+ <div id="qunit-testrunner-toolbar"></div>
+ <h2 id="qunit-userAgent"></h2>
+ <ol id="qunit-tests"></ol>
+ </body>
+</html>
diff --git a/cookie/test/malformed_cookie.html b/cookie/test/malformed_cookie.html
new file mode 100644
index 0000000..b4a3f78
--- /dev/null
+++ b/cookie/test/malformed_cookie.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<html>
+ <head>
+ <title></title>
+ <script src="http://code.jquery.com/jquery-1.9.0.min.js"></script>
+ <script 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>
diff --git a/cookie/test/server.js b/cookie/test/server.js
new file mode 100644
index 0000000..8d2e712
--- /dev/null
+++ b/cookie/test/server.js
@@ -0,0 +1,24 @@
+var http = require('http');
+var url = require('url');
+var path = require('path');
+var fs = require('fs');
+
+http.createServer(function(request, response) {
+ var uri = url.parse(request.url).pathname;
+ var filename = path.join(process.cwd(), uri);
+
+ fs.readFile(filename, 'binary', function(err, file) {
+ if (err) {
+ response.writeHead(500, { 'Content-Type': 'text/plain' });
+ response.write(err + '\n');
+ response.end();
+ return;
+ }
+
+ response.writeHead(200, filename.match(/\.js$/) ? { 'Content-Type': 'text/javascript' } : {});
+ response.write(file, 'utf-8');
+ response.end();
+ });
+}).listen(8124, '0.0.0.0');
+
+console.log('Test suite at http://0.0.0.0:8124/test/index.html');
diff --git a/cookie/test/tests.js b/cookie/test/tests.js
new file mode 100644
index 0000000..c5c3171
--- /dev/null
+++ b/cookie/test/tests.js
@@ -0,0 +1,303 @@
+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 at address.com\\"\\\\\\""';
+ strictEqual($.cookie('c'), 'v at 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");
+ document.cookie = 'bad=foo'; // Allow to be deleted...
+});
+
+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');
+});
+
+
+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('expires option as days from now', function () {
+ expect(1);
+ var sevenDaysFromNow = new Date();
+ sevenDaysFromNow.setDate(sevenDaysFromNow.getDate() + 7);
+ strictEqual($.cookie('c', 'v', { expires: 7 }), 'c=v; expires=' + sevenDaysFromNow.toUTCString(),
+ 'should write the cookie string with expires');
+});
+
+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');
+ $.each($.cookie(), $.removeCookie);
+});
+
+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('return', function () {
+ expect(2);
+ strictEqual($.removeCookie('c'), false, "return false if the cookie wasn't found");
+
+ $.cookie('c', 'v');
+ strictEqual($.removeCookie('c'), true, 'return true if the cookie was found');
+});
+
+test('with options', function () {
+ expect(3);
+ var originalCookie = $.cookie;
+ var callCount = 0;
+
+ $.cookie = function () {
+ callCount++;
+ if (callCount === 1) {
+ // see https://github.com/carhartl/jquery-cookie/issues/99
+ strictEqual(arguments.length, 1, 'look up cookie instead of accidently writing a new');
+ return 'cookie'; // act as if a cookie was found...
+ }
+ if (callCount === 2) {
+ strictEqual(arguments[2].foo, 'bar', 'pass along options when deleting cookie');
+ }
+ };
+
+ $.removeCookie('c', { foo: 'bar' });
+ strictEqual(callCount, 2);
+
+ $.cookie = originalCookie;
+});
+
+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');
+});
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/jquery-goodies.git
More information about the Pkg-javascript-commits
mailing list