[
  {
    "path": ".gitignore",
    "content": "node_modules\nbuild\n.sizecache.json\n*.log*\n"
  },
  {
    "path": ".jshintignore",
    "content": "build\nnode_modules\n"
  },
  {
    "path": ".jshintrc",
    "content": "{\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\"trailing\": true,\n\t\"undef\": true,\n\t\"unused\": true\n}\n"
  },
  {
    "path": ".tm_properties",
    "content": "softTabs = false\ntabSize  = 2\n\n[ text.plain ]\nsoftWrap   = true\nwrapColumn = \"Use Window Frame\"\nsoftTabs   = true\ntabSize    = 4\n\n[ \"*.md\" ]\nfileType = \"text.plain\"\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: node_js\nnode_js:\n  - 0.10\nbefore_script:\n  - npm install -g grunt-cli\nscript: grunt ci --verbose\nenv:\n  global:\n    - secure: HRae0kyIDDuhonvMi2SfEl1WJb4K/wX8WmzT9YkxFbmWwLjiOMkmqyuEyi76DbTC1cb9o7WwGVgbP1DhSm6n6m0Lz+PSzpprBN4QZuJc56jcc+tBA6gM81hyUufaTT0yUWz112Bu06kWIAs44w5PtG0FYZR0CuIN8fQvZi8fXCQ=\n    - secure: c+M5ECIfxDcVrr+ZlqgpGjv8kVM/hxiz3ACMCn4ZkDiaeq4Rw0wWIGZYL6aV5fhsoHgzEQ/XQPca8xKs3Umr7R3b6Vr3AEyFnW+LP67K/1Qbz4Pi3PvhDH/h4rvK7fOoTqTDCVVDEH3v4pefsz2VaKemG4iBKxrcof5aR4Rjopk=\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "HEAD\n-----\n\n1.4.1\n-----\n- Added support for CommonJS.\n\n- Added support for package managers: Jam (http://jamjs.org), volo (http://volojs.org), Component (http://component.io), jspm (http://jspm.io).\n\n- The expires option now interpretes fractions of numbers (e.g. days) correctly.\n\n1.4.0\n-----\n- Support for AMD.\n\n- Removed deprecated method `$.cookie('name', null)` for deleting a cookie,\n  use `$.removeCookie('name')`.\n\n- `$.cookie('name')` now returns `undefined` in case such cookie does not exist\n  (was `null`). Because the return value is still falsy, testing for existence\n  of a cookie like `if ( $.cookie('foo') )` keeps working without change.\n\n- Renamed bower package definition (component.json -> bower.json) for usage\n  with up-to-date bower.\n\n- Badly encoded cookies no longer throw exception upon reading but do return\n  undefined (similar to how we handle JSON parse errors with json = true).\n\n- Added conversion function as optional last argument for reading,\n  so that values can be changed to a different representation easily on the fly.\n  Useful for parsing numbers for instance:\n\n  ```javascript\n  $.cookie('foo', '42');\n  $.cookie('foo', Number); // => 42\n  ```\n\n1.3.1\n-----\n- Fixed issue where it was no longer possible to check for an arbitrary cookie,\n  while json is set to true, there was a SyntaxError thrown from JSON.parse.\n\n- Fixed issue where RFC 2068 decoded cookies were not properly read.\n\n1.3.0\n-----\n- Configuration options: `raw`, `json`. Replaces raw option, becomes config:\n\n  ```javascript\n  $.cookie.raw = true; // bypass encoding/decoding the cookie value\n  $.cookie.json = true; // automatically JSON stringify/parse value\n  ```\n\n  Thus the default options now cleanly contain cookie attributes only.\n\n- Removing licensing under GPL Version 2, the plugin is now released under MIT License only\n(keeping it simple and following the jQuery library itself here).\n\n- Bugfix: Properly handle RFC 2068 quoted cookie values.\n\n- Added component.json for bower.\n\n- Added jQuery plugin package manifest.\n\n- `$.cookie()` returns all available cookies.\n\n1.2.0\n-----\n- Adding `$.removeCookie('foo')` for deleting a cookie, using `$.cookie('foo', null)` is now deprecated.\n\n1.1\n---\n- Adding default options.\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "##Issues\n\n- Report issues or feature requests on [GitHub Issues](https://github.com/carhartl/jquery-cookie/issues).\n- If reporting a bug, please add a [simplified example](http://sscce.org/).\n\n##Pull requests\n- Create a new topic branch for every separate change you make.\n- Create a test case if you are fixing a bug or implementing an important feature.\n- Make sure the build runs successfully.\n\n## Development\n\n###Tools\nWe use the following tools for development:\n\n- [Qunit](http://qunitjs.com/) for tests.\n- [NodeJS](http://nodejs.org/download/) required to run grunt.\n- [Grunt](http://gruntjs.com/getting-started) for task management.\n\n###Getting started \nInstall [NodeJS](http://nodejs.org/).  \nInstall globally grunt-cli using the following command:\n\n    $ npm install -g grunt-cli\n\nBrowse to the project root directory and install the dev dependencies:\n\n    $ npm install -d\n\nTo execute the build and tests run the following command in the root of the project:\n\n    $ grunt\n\nYou should see a green message in the console:\n\n    Done, without errors.\n\n###Tests\nYou can also run the tests in the browser.  \nStart a test server from the project root:\n\n    $ grunt connect:tests\n\nThis will automatically open the test suite at http://127.0.0.1:9998 in the default browser, with livereload enabled.\n\n_Note: we recommend cleaning all the browser cookies before running the tests, that can avoid false positive failures._\n\n###Automatic build\nYou can build automatically after a file change using the following command:\n\n    $ grunt watch\n"
  },
  {
    "path": "Gruntfile.js",
    "content": "/*jshint node:true, quotmark:single */\n'use strict';\n\nmodule.exports = function (grunt) {\n\n\tgrunt.initConfig({\n\t\tpkg: grunt.file.readJSON('package.json'),\n\t\tqunit: {\n\t\t\tall: 'test/index.html'\n\t\t},\n\t\tjshint: {\n\t\t\toptions: {\n\t\t\t\tjshintrc: true\n\t\t\t},\n\t\t\tgrunt: 'Gruntfile.js',\n\t\t\tsource: 'src/**/*.js',\n\t\t\ttests: 'test/**/*.js'\n\t\t},\n\t\tuglify: {\n\t\t\toptions: {\n\t\t\t\tbanner: '/*! <%= pkg.name %> v<%= pkg.version %> | <%= pkg.license %> */\\n'\n\t\t\t},\n\t\t\tbuild: {\n\t\t\t\tfiles: {\n\t\t\t\t\t'build/jquery.cookie-<%= pkg.version %>.min.js': 'src/jquery.cookie.js'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\toptions: {\n\t\t\t\tlivereload: true\n\t\t\t},\n\t\t\tfiles: '{src,test}/**/*.js',\n\t\t\ttasks: 'default'\n\t\t},\n\t\tcompare_size: {\n\t\t\tfiles: [\n\t\t\t\t'build/jquery.cookie-<%= pkg.version %>.min.js',\n\t\t\t\t'src/jquery.cookie.js'\n\t\t\t],\n\t\t\toptions: {\n\t\t\t\tcompress: {\n\t\t\t\t\tgz: function (fileContents) {\n\t\t\t\t\t\treturn require('gzip-js').zip(fileContents, {}).length;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tconnect: {\n\t\t\tsaucelabs: {\n\t\t\t\toptions: {\n\t\t\t\t\tport: 9999,\n\t\t\t\t\tbase: ['.', 'test']\n\t\t\t\t}\n\t\t\t},\n\t\t\ttests: {\n\t\t\t\toptions: {\n\t\t\t\t\tport: 9998,\n\t\t\t\t\tbase: ['.', 'test'],\n\t\t\t\t\topen: 'http://127.0.0.1:9998',\n\t\t\t\t\tkeepalive: true,\n\t\t\t\t\tlivereload: true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'saucelabs-qunit': {\n\t\t\tall: {\n\t\t\t\toptions: {\n\t\t\t\t\turls: ['http://127.0.0.1:9999'],\n\t\t\t\t\tbuild: process.env.TRAVIS_JOB_ID,\n\t\t\t\t\tbrowsers: [\n\t\t\t\t\t\t// iOS\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbrowserName: 'iphone',\n\t\t\t\t\t\t\tplatform: 'OS X 10.9',\n\t\t\t\t\t\t\tversion: '7.1'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbrowserName: 'ipad',\n\t\t\t\t\t\t\tplatform: 'OS X 10.9',\n\t\t\t\t\t\t\tversion: '7.1'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// Android\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbrowserName: 'android',\n\t\t\t\t\t\t\tplatform: 'Linux',\n\t\t\t\t\t\t\tversion: '4.3'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// OS X\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbrowserName: 'safari',\n\t\t\t\t\t\t\tplatform: 'OS X 10.9',\n\t\t\t\t\t\t\tversion: '7'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbrowserName: 'safari',\n\t\t\t\t\t\t\tplatform: 'OS X 10.8',\n\t\t\t\t\t\t\tversion: '6'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbrowserName: 'firefox',\n\t\t\t\t\t\t\tplatform: 'OS X 10.9',\n\t\t\t\t\t\t\tversion: '28'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// Windows\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbrowserName: 'internet explorer',\n\t\t\t\t\t\t\tplatform: 'Windows 8.1',\n\t\t\t\t\t\t\tversion: '11'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbrowserName: 'internet explorer',\n\t\t\t\t\t\t\tplatform: 'Windows 8',\n\t\t\t\t\t\t\tversion: '10'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbrowserName: 'internet explorer',\n\t\t\t\t\t\t\tplatform: 'Windows 7',\n\t\t\t\t\t\t\tversion: '11'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbrowserName: 'internet explorer',\n\t\t\t\t\t\t\tplatform: 'Windows 7',\n\t\t\t\t\t\t\tversion: '10'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbrowserName: 'internet explorer',\n\t\t\t\t\t\t\tplatform: 'Windows 7',\n\t\t\t\t\t\t\tversion: '9'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbrowserName: 'internet explorer',\n\t\t\t\t\t\t\tplatform: 'Windows 7',\n\t\t\t\t\t\t\tversion: '8'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbrowserName: 'firefox',\n\t\t\t\t\t\t\tplatform: 'Windows 7',\n\t\t\t\t\t\t\tversion: '29'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbrowserName: 'chrome',\n\t\t\t\t\t\t\tplatform: 'Windows 7',\n\t\t\t\t\t\t\tversion: '34'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// Linux\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbrowserName: 'firefox',\n\t\t\t\t\t\t\tplatform: 'Linux',\n\t\t\t\t\t\t\tversion: '29'\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Loading dependencies\n\tfor (var key in grunt.file.readJSON('package.json').devDependencies) {\n\t\tif (key !== 'grunt' && key.indexOf('grunt') === 0) {\n\t\t\tgrunt.loadNpmTasks(key);\n\t\t}\n\t}\n\n\tgrunt.registerTask('default', ['jshint', 'qunit', 'uglify', 'compare_size']);\n\tgrunt.registerTask('saucelabs', ['connect:saucelabs', 'saucelabs-qunit']);\n\tgrunt.registerTask('ci', ['jshint', 'qunit', 'saucelabs']);\n};\n"
  },
  {
    "path": "MIT-LICENSE.txt",
    "content": "Copyright 2014 Klaus Hartl\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# IMPORTANT!\n\nThis project was moved to https://github.com/js-cookie/js-cookie, check [the discussion](https://github.com/carhartl/jquery-cookie/issues/349).\n\nNew issues should be opened at https://github.com/js-cookie/js-cookie/issues\n\n# 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)\n\nA simple, lightweight jQuery plugin for reading, writing and deleting cookies.\n\n**If you're viewing this, you're reading the documentation for the old repository.\n[View documentation for the latest backwards compatible release (1.5.1).](https://github.com/js-cookie/js-cookie/tree/v1.5.1)**\n\n## Build Status Matrix\n\n[![Selenium Test Status](https://saucelabs.com/browser-matrix/jquery-cookie.svg)](https://saucelabs.com/u/jquery-cookie)\n\n## Installation\n\nInclude script *after* the jQuery library (unless you are packaging scripts somehow else):\n\n```html\n<script src=\"/path/to/jquery.cookie.js\"></script>\n```\n\n**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\nin Internet Explorer on Windows 7 for instance (because of the wrong MIME type). Bottom line: GitHub is not a CDN.\n\nThe plugin can also be loaded as AMD or CommonJS module.\n\n## Usage\n\nCreate session cookie:\n\n```javascript\n$.cookie('name', 'value');\n```\n\nCreate expiring cookie, 7 days from then:\n\n```javascript\n$.cookie('name', 'value', { expires: 7 });\n```\n\nCreate expiring cookie, valid across entire site:\n\n```javascript\n$.cookie('name', 'value', { expires: 7, path: '/' });\n```\n\nRead cookie:\n\n```javascript\n$.cookie('name'); // => \"value\"\n$.cookie('nothing'); // => undefined\n```\n\nRead all available cookies:\n\n```javascript\n$.cookie(); // => { \"name\": \"value\" }\n```\n\nDelete cookie:\n\n```javascript\n// Returns true when cookie was successfully deleted, otherwise false\n$.removeCookie('name'); // => true\n$.removeCookie('nothing'); // => false\n\n// Need to use the same attributes (path, domain) as what the cookie was written with\n$.cookie('name', 'value', { path: '/' });\n// This won't work!\n$.removeCookie('name'); // => false\n// This will work!\n$.removeCookie('name', { path: '/' }); // => true\n```\n\n*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.*\n\n## Configuration\n\n### raw\n\nBy default the cookie value is encoded/decoded when writing/reading, using `encodeURIComponent`/`decodeURIComponent`. Bypass this by setting raw to true:\n\n```javascript\n$.cookie.raw = true;\n```\n\n### json\n\nTurn on automatic storage of JSON objects passed as the cookie value. Assumes `JSON.stringify` and `JSON.parse`:\n\n```javascript\n$.cookie.json = true;\n```\n\n## Cookie Options\n\nCookie 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.\n\n### expires\n\n    expires: 365\n\nDefine 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.\n\n### path\n\n    path: '/'\n\nDefine 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.\n\n**Note regarding Internet Explorer:**\n\n> 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.\n\n(From [Internet Explorer Cookie Internals (FAQ)](http://blogs.msdn.com/b/ieinternals/archive/2009/08/20/wininet-ie-cookie-internals-faq.aspx))\n\nThis 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).\n\n### domain\n\n    domain: 'example.com'\n\nDefine the domain where the cookie is valid. Default: domain of page where the cookie was created.\n\n### secure\n\n    secure: true\n\nIf true, the cookie transmission requires a secure protocol (https). Default: `false`.\n\n## Converters\n\nProvide a conversion function as optional last argument for reading, in order to change the cookie's value\nto a different representation on the fly.\n\nExample for parsing a value into a number:\n\n```javascript\n$.cookie('foo', '42');\n$.cookie('foo', Number); // => 42\n```\n\nDealing with cookies that have been encoded using `escape` (3rd party cookies):\n\n```javascript\n$.cookie.raw = true;\n$.cookie('foo', unescape);\n```\n\nYou can pass an arbitrary conversion function.\n\n## Contributing\n\nCheck out the [Contributing Guidelines](CONTRIBUTING.md)\n\n## Authors\n\n[Klaus Hartl](https://github.com/carhartl)\n"
  },
  {
    "path": "bower.json",
    "content": "{\n  \"name\": \"jquery.cookie\",\n  \"version\": \"1.4.1\",\n  \"main\": [\n    \"src/jquery.cookie.js\"\n  ],\n  \"dependencies\": {\n    \"jquery\": \">=1.2\"\n  },\n  \"ignore\": [\n    \"test\",\n    \".*\",\n    \"*.json\",\n    \"*.md\",\n    \"*.txt\",\n    \"Gruntfile.js\"\n  ]\n}\n"
  },
  {
    "path": "component.json",
    "content": "{\n  \"name\": \"jquery.cookie\",\n  \"repo\": \"carhartl/jquery-cookie\",\n  \"description\": \"A simple, lightweight jQuery plugin for reading, writing and deleting cookies\",\n  \"version\": \"1.4.1\",\n  \"keywords\": [],\n  \"dependencies\": {},\n  \"development\": {},\n  \"license\": \"MIT\",\n  \"main\": \"src/jquery.cookie.js\",\n  \"scripts\": [\n    \"src/jquery.cookie.js\"\n  ]\n}\n"
  },
  {
    "path": "cookie.jquery.json",
    "content": "{\n  \"name\": \"cookie\",\n  \"version\": \"1.4.1\",\n  \"title\":  \"jQuery Cookie\",\n  \"description\": \"A simple, lightweight jQuery plugin for reading, writing and deleting cookies.\",\n  \"author\": {\n    \"name\": \"Klaus Hartl\",\n    \"url\": \"https://github.com/carhartl\"\n  },\n  \"maintainers\": [\n    {\n      \"name\": \"Klaus Hartl\",\n      \"url\": \"https://github.com/carhartl\"\n    },\n    {\n      \"name\": \"Fagner Martins\",\n      \"url\": \"https://github.com/FagnerMartinsBrack\"\n    }\n  ],\n  \"licenses\": [\n    {\n      \"type\": \"MIT\",\n      \"url\": \"https://raw.github.com/carhartl/jquery-cookie/master/MIT-LICENSE.txt\"\n    }\n  ],\n  \"dependencies\": {\n    \"jquery\": \">=1.2\"\n  },\n  \"bugs\": \"https://github.com/carhartl/jquery-cookie/issues\",\n  \"homepage\": \"https://github.com/carhartl/jquery-cookie\",\n  \"docs\": \"https://github.com/carhartl/jquery-cookie#readme\"\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"jquery.cookie\",\n  \"version\": \"1.4.1\",\n  \"description\": \"A simple, lightweight jQuery plugin for reading, writing and deleting cookies.\",\n  \"main\": \"src/jquery.cookie.js\",\n  \"directories\": {\n    \"test\": \"test\"\n  },\n  \"scripts\": {\n    \"test\": \"grunt\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/carhartl/jquery-cookie.git\"\n  },\n  \"author\": \"Klaus Hartl\",\n  \"license\": \"MIT\",\n  \"gitHead\": \"bd3c9713222bace68d25fe2128c0f8633cad1269\",\n  \"readmeFilename\": \"README.md\",\n  \"devDependencies\": {\n    \"grunt\": \"~0.4.1\",\n    \"grunt-contrib-jshint\": \"~0.10.0\",\n    \"grunt-contrib-uglify\": \"~0.2.0\",\n    \"grunt-contrib-qunit\": \"~0.2.0\",\n    \"grunt-contrib-watch\": \"~0.6.1\",\n    \"grunt-compare-size\": \"~0.4.0\",\n    \"grunt-saucelabs\": \"~7.0.0\",\n    \"grunt-contrib-connect\": \"~0.7.1\",\n    \"gzip-js\": \"~0.3.0\"\n  },\n  \"volo\": {\n    \"url\": \"https://raw.github.com/carhartl/jquery-cookie/v{version}/src/jquery.cookie.js\"\n  },\n  \"jspm\": {\n    \"main\": \"jquery.cookie\",\n    \"files\": [\"src/jquery.cookie.js\"],\n    \"buildConfig\": {\n      \"uglify\": true\n    }\n  },\n  \"jam\": {\n    \"dependencies\": {\n      \"jquery\": \">=1.2\"\n    },\n    \"main\": \"src/jquery.cookie.js\",\n    \"include\": [\n      \"src/jquery.cookie.js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "src/.jshintrc",
    "content": "{\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\"module\": true,\n\t\t\"require\": true\n\t},\n\n\t\"extends\": \"../.jshintrc\"\n}\n"
  },
  {
    "path": "src/jquery.cookie.js",
    "content": "/*!\n * jQuery Cookie Plugin v1.4.1\n * https://github.com/carhartl/jquery-cookie\n *\n * Copyright 2006, 2014 Klaus Hartl\n * Released under the MIT license\n */\n(function (factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD (Register as an anonymous module)\n\t\tdefine(['jquery'], factory);\n\t} else if (typeof exports === 'object') {\n\t\t// Node/CommonJS\n\t\tmodule.exports = factory(require('jquery'));\n\t} else {\n\t\t// Browser globals\n\t\tfactory(jQuery);\n\t}\n}(function ($) {\n\n\tvar pluses = /\\+/g;\n\n\tfunction encode(s) {\n\t\treturn config.raw ? s : encodeURIComponent(s);\n\t}\n\n\tfunction decode(s) {\n\t\treturn config.raw ? s : decodeURIComponent(s);\n\t}\n\n\tfunction stringifyCookieValue(value) {\n\t\treturn encode(config.json ? JSON.stringify(value) : String(value));\n\t}\n\n\tfunction parseCookieValue(s) {\n\t\tif (s.indexOf('\"') === 0) {\n\t\t\t// This is a quoted cookie as according to RFC2068, unescape...\n\t\t\ts = s.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\n\t\t}\n\n\t\ttry {\n\t\t\t// Replace server-side written pluses with spaces.\n\t\t\t// If we can't decode the cookie, ignore it, it's unusable.\n\t\t\t// If we can't parse the cookie, ignore it, it's unusable.\n\t\t\ts = decodeURIComponent(s.replace(pluses, ' '));\n\t\t\treturn config.json ? JSON.parse(s) : s;\n\t\t} catch(e) {}\n\t}\n\n\tfunction read(s, converter) {\n\t\tvar value = config.raw ? s : parseCookieValue(s);\n\t\treturn $.isFunction(converter) ? converter(value) : value;\n\t}\n\n\tvar config = $.cookie = function (key, value, options) {\n\n\t\t// Write\n\n\t\tif (arguments.length > 1 && !$.isFunction(value)) {\n\t\t\toptions = $.extend({}, config.defaults, options);\n\n\t\t\tif (typeof options.expires === 'number') {\n\t\t\t\tvar days = options.expires, t = options.expires = new Date();\n\t\t\t\tt.setMilliseconds(t.getMilliseconds() + days * 864e+5);\n\t\t\t}\n\n\t\t\treturn (document.cookie = [\n\t\t\t\tencode(key), '=', stringifyCookieValue(value),\n\t\t\t\toptions.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\n\t\t\t\toptions.path    ? '; path=' + options.path : '',\n\t\t\t\toptions.domain  ? '; domain=' + options.domain : '',\n\t\t\t\toptions.secure  ? '; secure' : ''\n\t\t\t].join(''));\n\t\t}\n\n\t\t// Read\n\n\t\tvar result = key ? undefined : {},\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t\t// calling $.cookie().\n\t\t\tcookies = document.cookie ? document.cookie.split('; ') : [],\n\t\t\ti = 0,\n\t\t\tl = cookies.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tvar parts = cookies[i].split('='),\n\t\t\t\tname = decode(parts.shift()),\n\t\t\t\tcookie = parts.join('=');\n\n\t\t\tif (key === name) {\n\t\t\t\t// If second argument (value) is a function it's a converter...\n\t\t\t\tresult = read(cookie, value);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Prevent storing a cookie that we couldn't decode.\n\t\t\tif (!key && (cookie = read(cookie)) !== undefined) {\n\t\t\t\tresult[name] = cookie;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tconfig.defaults = {};\n\n\t$.removeCookie = function (key, options) {\n\t\t// Must not alter options, thus extending a fresh object...\n\t\t$.cookie(key, '', $.extend({}, options, { expires: -1 }));\n\t\treturn !$.cookie(key);\n\t};\n\n}));\n"
  },
  {
    "path": "test/.jshintrc",
    "content": "{\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",
    "content": "<!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=\"stylesheet\" href=\"http://code.jquery.com/qunit/qunit-1.14.0.css\">\n\t\t<script src=\"http://code.jquery.com/qunit/qunit-1.14.0.js\"></script>\n\t\t<script src=\"http://code.jquery.com/jquery-1.11.1.min.js\"></script>\n\t\t<script src=\"../src/jquery.cookie.js\"></script>\n\t\t<script src=\"tests.js\"></script>\n\t</head>\n\t<body>\n\t\t<div id=\"qunit\"></div>\n\t\t<div id=\"qunit-fixture\"></div>\n\t</body>\n</html>\n"
  },
  {
    "path": "test/malformed_cookie.html",
    "content": "<!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\t<script src=\"../src/jquery.cookie.js\"></script>\n\t\t<script>\n\t\t\ttry {\n\t\t\t\tObject.defineProperty(document, \"cookie\", { get: function() { return \"first=one; ; second=two\"; } });\n\t\t\t\twindow.testValue = $.cookie(\"second\");\n\t\t\t\twindow.ok = true;\n\t\t\t} catch (er) {\n\t\t\t}\n\t\t</script>\n\t</head>\n\t<body>\n\t</body>\n</html>\n"
  },
  {
    "path": "test/tests.js",
    "content": "// Required for exposing test results to the Sauce Labs API.\n// Can be removed when the following issue is fixed:\n// https://github.com/axemclion/grunt-saucelabs/issues/84\nQUnit.done(function (details) {\n\twindow.global_test_results = details;\n});\n\n\nvar lifecycle = {\n\tteardown: function () {\n\t\t$.cookie.defaults = {};\n\t\tdelete $.cookie.raw;\n\t\tdelete $.cookie.json;\n\t\t$.each($.cookie(), $.removeCookie);\n\t}\n};\n\n\nmodule('read', lifecycle);\n\ntest('simple value', function () {\n\texpect(1);\n\tdocument.cookie = 'c=v';\n\tstrictEqual($.cookie('c'), 'v', 'should return value');\n});\n\ntest('empty value', function () {\n\texpect(1);\n\t// IE saves cookies with empty string as \"c; \", e.g. without \"=\" as opposed to EOMB, which\n\t// resulted in a bug while reading such a cookie.\n\t$.cookie('c', '');\n\tstrictEqual($.cookie('c'), '', 'should return value');\n});\n\ntest('not existing', function () {\n\texpect(1);\n\tstrictEqual($.cookie('whatever'), undefined, 'return undefined');\n});\n\ntest('RFC 2068 quoted string', function () {\n\texpect(1);\n\tdocument.cookie = 'c=\"v@address.com\\\\\"\\\\\\\\\\\\\"\"';\n\tstrictEqual($.cookie('c'), 'v@address.com\"\\\\\"', 'should decode RFC 2068 quoted string');\n});\n\ntest('decode', function () {\n\texpect(1);\n\tdocument.cookie = encodeURIComponent(' c') + '=' + encodeURIComponent(' v');\n\tstrictEqual($.cookie(' c'), ' v', 'should decode key and value');\n});\n\ntest('decode pluses to space for server side written cookie', function () {\n\texpect(1);\n\tdocument.cookie = 'c=foo+bar';\n\tstrictEqual($.cookie('c'), 'foo bar', 'should convert pluses back to space');\n});\n\ntest('raw = true', function () {\n\texpect(2);\n\t$.cookie.raw = true;\n\n\tdocument.cookie = 'c=%20v';\n\tstrictEqual($.cookie('c'), '%20v', 'should not decode value');\n\n\t// see https://github.com/carhartl/jquery-cookie/issues/50\n\t$.cookie('c', 'foo=bar');\n\tstrictEqual($.cookie('c'), 'foo=bar', 'should include the entire value');\n});\n\ntest('json = true', function () {\n\texpect(1);\n\n\tif ('JSON' in window) {\n\t\t$.cookie.json = true;\n\t\t$.cookie('c', { foo: 'bar' });\n\t\tdeepEqual($.cookie('c'), { foo: 'bar' }, 'should parse JSON');\n\t} else {\n\t\tok(true);\n\t}\n});\n\ntest('not existing with json = true', function () {\n\texpect(1);\n\n\tif ('JSON' in window) {\n\t\t$.cookie.json = true;\n\t\tstrictEqual($.cookie('whatever'), undefined, \"won't throw exception\");\n\t} else {\n\t\tok(true);\n\t}\n});\n\ntest('string with json = true', function () {\n\texpect(1);\n\n\tif ('JSON' in window) {\n\t\t$.cookie.json = true;\n\t\t$.cookie('c', 'v');\n\t\tstrictEqual($.cookie('c'), 'v', 'should return value');\n\t} else {\n\t\tok(true);\n\t}\n});\n\ntest('invalid JSON string with json = true', function () {\n\texpect(1);\n\n\tif ('JSON' in window) {\n\t\t$.cookie('c', 'v');\n\t\t$.cookie.json = true;\n\t\tstrictEqual($.cookie('c'), undefined, \"won't throw exception, returns undefined\");\n\t} else {\n\t\tok(true);\n\t}\n});\n\ntest('invalid URL encoding', function () {\n\texpect(1);\n\tdocument.cookie = 'bad=foo%';\n\tstrictEqual($.cookie('bad'), undefined, \"won't throw exception, returns undefined\");\n\t// Delete manually here because it requires raw === true...\n\t$.cookie.raw = true;\n\t$.removeCookie('bad');\n});\n\nasyncTest('malformed cookie value in IE (#88, #117)', function () {\n\texpect(1);\n\t// Sandbox in an iframe so that we can poke around with document.cookie.\n\tvar iframe = $('<iframe src=\"malformed_cookie.html\"></iframe>')[0];\n\t$(iframe).on('load', function () {\n\t\tstart();\n\t\tif (iframe.contentWindow.ok) {\n\t\t\tstrictEqual(iframe.contentWindow.testValue, 'two', 'reads all cookie values, skipping duplicate occurences of \"; \"');\n\t\t} else {\n\t\t\t// Skip the test where we can't stub document.cookie using\n\t\t\t// Object.defineProperty. Seems to work fine in\n\t\t\t// Chrome, Firefox and IE 8+.\n\t\t\tok(true, 'N/A');\n\t\t}\n\t});\n\tdocument.body.appendChild(iframe);\n});\n\ntest('Call to read all when there are cookies', function () {\n\t$.cookie('c', 'v');\n\t$.cookie('foo', 'bar');\n\tdeepEqual($.cookie(), { c: 'v', foo: 'bar' }, 'returns object containing all cookies');\n});\n\ntest('Call to read all when there are no cookies at all', function () {\n\tdeepEqual($.cookie(), {}, 'returns empty object');\n});\n\ntest('Call to read all with json: true', function () {\n\t$.cookie.json = true;\n\t$.cookie('c', { foo: 'bar' });\n\tdeepEqual($.cookie(), { c: { foo: 'bar' } }, 'returns JSON parsed cookies');\n});\n\ntest('Call to read all with a badly encoded cookie', function () {\n\texpect(1);\n\tdocument.cookie = 'bad=foo%';\n\tdocument.cookie = 'good=foo';\n\tdeepEqual($.cookie(), { good: 'foo' }, 'returns object containing all decodable cookies');\n\t// Delete manually here because it requires raw === true...\n\t$.cookie.raw = true;\n\t$.removeCookie('bad');\n});\n\n\nmodule('write', lifecycle);\n\ntest('String primitive', function () {\n\texpect(1);\n\t$.cookie('c', 'v');\n\tstrictEqual($.cookie('c'), 'v', 'should write value');\n});\n\ntest('String object', function () {\n\texpect(1);\n\t$.cookie('c', new String('v'));\n\tstrictEqual($.cookie('c'), 'v', 'should write value');\n});\n\ntest('value \"[object Object]\"', function () {\n\texpect(1);\n\t$.cookie('c', '[object Object]');\n\tstrictEqual($.cookie('c'), '[object Object]', 'should write value');\n});\n\ntest('number', function () {\n\texpect(1);\n\t$.cookie('c', 1234);\n\tstrictEqual($.cookie('c'), '1234', 'should write value');\n});\n\ntest('null', function () {\n\texpect(1);\n\t$.cookie('c', null);\n\tstrictEqual($.cookie('c'), 'null', 'should write value');\n});\n\ntest('undefined', function () {\n\texpect(1);\n\t$.cookie('c', undefined);\n\tstrictEqual($.cookie('c'), 'undefined', 'should write value');\n});\n\ntest('expires option as days from now', function () {\n\texpect(1);\n\tvar sevenDaysFromNow = new Date();\n\tsevenDaysFromNow.setDate(sevenDaysFromNow.getDate() + 21);\n\tstrictEqual($.cookie('c', 'v', { expires: 21 }), 'c=v; expires=' + sevenDaysFromNow.toUTCString(),\n\t\t'should write the cookie string with expires');\n});\n\ntest('expires option as fraction of a day', function () {\n\texpect(1);\n\n\tvar now = new Date().getTime();\n\tvar expires = Date.parse($.cookie('c', 'v', { expires: 0.5 }).replace(/.+expires=/, ''));\n\n\t// When we were using Date.setDate() fractions have been ignored\n\t// and expires resulted in the current date. Allow 1000 milliseconds\n\t// difference for execution time.\n\tok(expires > now + 1000, 'should write expires attribute with the correct date');\n});\n\ntest('expires option as Date instance', function () {\n\texpect(1);\n\tvar sevenDaysFromNow = new Date();\n\tsevenDaysFromNow.setDate(sevenDaysFromNow.getDate() + 7);\n\tstrictEqual($.cookie('c', 'v', { expires: sevenDaysFromNow }), 'c=v; expires=' + sevenDaysFromNow.toUTCString(),\n\t\t'should write the cookie string with expires');\n});\n\ntest('return value', function () {\n\texpect(1);\n\tstrictEqual($.cookie('c', 'v'), 'c=v', 'should return written cookie string');\n});\n\ntest('defaults', function () {\n\texpect(2);\n\t$.cookie.defaults.path = '/foo';\n\tok($.cookie('c', 'v').match(/path=\\/foo/), 'should use options from defaults');\n\tok($.cookie('c', 'v', { path: '/bar' }).match(/path=\\/bar/), 'options argument has precedence');\n});\n\ntest('raw = true', function () {\n\texpect(1);\n\t$.cookie.raw = true;\n\tstrictEqual($.cookie('c[1]', 'v[1]'), 'c[1]=v[1]', 'should not encode');\n\t// Delete manually here because it requires raw === true...\n\t$.removeCookie('c[1]');\n});\n\ntest('json = true', function () {\n\texpect(1);\n\t$.cookie.json = true;\n\n\tif ('JSON' in window) {\n\t\t$.cookie('c', { foo: 'bar' });\n\t\tstrictEqual(document.cookie, 'c=' + encodeURIComponent(JSON.stringify({ foo: 'bar' })), 'should stringify JSON');\n\t} else {\n\t\tok(true);\n\t}\n});\n\n\nmodule('removeCookie', lifecycle);\n\ntest('deletion', function () {\n\texpect(1);\n\t$.cookie('c', 'v');\n\t$.removeCookie('c');\n\tstrictEqual(document.cookie, '', 'should delete the cookie');\n});\n\ntest('when sucessfully deleted', function () {\n\texpect(1);\n\t$.cookie('c', 'v');\n\tstrictEqual($.removeCookie('c'), true, 'returns true');\n});\n\ntest('when cookie does not exist', function () {\n\texpect(1);\n\tstrictEqual($.removeCookie('c'), true, 'returns true');\n});\n\ntest('when deletion failed', function () {\n\texpect(1);\n\t$.cookie('c', 'v');\n\n\tvar originalCookie = $.cookie;\n\t$.cookie = function () {\n\t\t// Stub deletion...\n\t\tif (arguments.length === 1) {\n\t\t\treturn originalCookie.apply(null, arguments);\n\t\t}\n\t};\n\n\tstrictEqual($.removeCookie('c'), false, 'returns false');\n\n\t$.cookie = originalCookie;\n});\n\ntest('with options', function () {\n\texpect(1);\n\tvar options = { path: '/' };\n\t$.cookie('c', 'v', options);\n\t$.removeCookie('c', options);\n\tstrictEqual(document.cookie, '', 'should delete the cookie');\n});\n\ntest('passing options reference', function () {\n\texpect(1);\n\tvar options = { path: '/' };\n\t$.cookie('c', 'v', options);\n\t$.removeCookie('c', options);\n\tdeepEqual(options, { path: '/' }, \"won't alter options object\");\n});\n\ntest('[] used in name', function () {\n\texpect(1);\n\t$.cookie.raw = true;\n\tdocument.cookie = 'c[1]=foo';\n\t$.removeCookie('c[1]');\n\tstrictEqual(document.cookie, '', 'delete the cookie');\n});\n\n\nmodule('conversion', lifecycle);\n\ntest('read converter', function() {\n\texpect(1);\n\t$.cookie('c', '1');\n\tstrictEqual($.cookie('c', Number), 1, 'converts read value');\n});\n\ntest('read converter with raw = true', function() {\n\texpect(1);\n\t$.cookie.raw = true;\n\t$.cookie('c', '1');\n\tstrictEqual($.cookie('c', Number), 1, 'does not decode, but converts read value');\n});\n"
  }
]