| </section> | </section> | ||||
| </div> | </div> | ||||
| <div id=""> | |||||
| <div class="services-wrap"> | |||||
| <section id="services" class="services clearfix general-section"> | <section id="services" class="services clearfix general-section"> | ||||
| <!-- <div class="section-triangle-grey"></div> --> | <!-- <div class="section-triangle-grey"></div> --> | ||||
| <div class="section-title"> | <div class="section-title"> | ||||
| </section> | </section> | ||||
| </div> | </div> | ||||
| <div id="services-wrap"> | |||||
| <div class="services-wrap"> | |||||
| <section id="services" class="services clearfix general-section"> | <section id="services" class="services clearfix general-section"> | ||||
| <div class="section-triangle-grey"></div> | <div class="section-triangle-grey"></div> | ||||
| <div class="section-title"> | <div class="section-title"> | ||||
| </section> | </section> | ||||
| </div> | </div> | ||||
| <div id="services-wrap"> | |||||
| <div class="services-wrap"> | |||||
| <section id="services" class="services clearfix general-section"> | <section id="services" class="services clearfix general-section"> | ||||
| <div class="section-triangle-grey"></div> | <div class="section-triangle-grey"></div> | ||||
| <div class="section-title"> | <div class="section-title"> | ||||
| </section> | </section> | ||||
| </div> | </div> | ||||
| <div id=""> | |||||
| <div class="services-wrap"> | |||||
| <section id="services" class="services clearfix general-section"> | <section id="services" class="services clearfix general-section"> | ||||
| <div class="section-triangle-grey"></div> | <div class="section-triangle-grey"></div> | ||||
| <div class="section-title"> | <div class="section-title"> | ||||
| </section> | </section> | ||||
| </div> | </div> | ||||
| <div id=""> | |||||
| <div class="services-wrap"> | |||||
| <section id="services" class="services clearfix general-section"> | <section id="services" class="services clearfix general-section"> | ||||
| <div class="section-triangle-grey"></div> | <div class="section-triangle-grey"></div> | ||||
| <div class="section-title"> | <div class="section-title"> | ||||
| </section> | </section> | ||||
| </div> | </div> | ||||
| <div id=""> | |||||
| <div class="services-wrap"> | |||||
| <section id="services" class="services clearfix general-section"> | <section id="services" class="services clearfix general-section"> | ||||
| <div class="section-triangle-grey"></div> | <div class="section-triangle-grey"></div> | ||||
| <div class="section-title"> | <div class="section-title"> |
| node_modules | |||||
| build | |||||
| .sizecache.json | |||||
| *.log* |
| build | |||||
| node_modules |
| { | |||||
| "curly": true, | |||||
| "eqeqeq": true, | |||||
| "expr": true, | |||||
| // "maxlen": 130, | |||||
| "newcap": true, | |||||
| "noarg": true, | |||||
| "nonbsp": true, | |||||
| "trailing": true, | |||||
| "undef": true, | |||||
| "unused": true | |||||
| } |
| softTabs = false | |||||
| tabSize = 2 | |||||
| [ text.plain ] | |||||
| softWrap = true | |||||
| wrapColumn = "Use Window Frame" | |||||
| softTabs = true | |||||
| tabSize = 4 | |||||
| [ "*.md" ] | |||||
| fileType = "text.plain" |
| 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= |
| 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. |
| ##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 |
| /*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']); | |||||
| }; |
| 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. |
| # 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 [](https://travis-ci.org/carhartl/jquery-cookie) [](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 | |||||
| [](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) |
| { | |||||
| "name": "jquery.cookie", | |||||
| "version": "1.4.1", | |||||
| "main": [ | |||||
| "src/jquery.cookie.js" | |||||
| ], | |||||
| "dependencies": { | |||||
| "jquery": ">=1.2" | |||||
| }, | |||||
| "ignore": [ | |||||
| "test", | |||||
| ".*", | |||||
| "*.json", | |||||
| "*.md", | |||||
| "*.txt", | |||||
| "Gruntfile.js" | |||||
| ] | |||||
| } |
| { | |||||
| "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" | |||||
| ] | |||||
| } |
| { | |||||
| "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" | |||||
| } |
| { | |||||
| "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" | |||||
| ] | |||||
| } | |||||
| } |
| { | |||||
| "browser": true, | |||||
| "camelcase": true, | |||||
| "jquery": true, | |||||
| "quotmark": "single", | |||||
| "globals": { | |||||
| "define": true, | |||||
| "module": true, | |||||
| "require": true | |||||
| }, | |||||
| "extends": "../.jshintrc" | |||||
| } |
| /*! | |||||
| * 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); | |||||
| }; | |||||
| })); |
| { | |||||
| "browser": true, | |||||
| "jquery": true, | |||||
| "qunit": true, | |||||
| "-W053": true, | |||||
| "extends": "../.jshintrc" | |||||
| } |
| <!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> |
| <!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> |
| // 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'); | |||||
| }); |
| background-color: #9e9e9e !important; | background-color: #9e9e9e !important; | ||||
| } | } | ||||
| .services-wrap | |||||
| { | |||||
| border-top: 5px solid #ddd; | |||||
| } | |||||
| @media (max-width: 1024px){ | @media (max-width: 1024px){ | ||||
| #gallery .gallery-box | #gallery .gallery-box | ||||
| { | { |