web/js/partials/js.cookie.js   A
last analyzed

Complexity

Total Complexity 34
Complexity/F 3.4

Size

Lines of Code 158
Function Count 10

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 34
eloc 99
dl 0
loc 158
rs 9.68
c 0
b 0
f 0
cc 0
nc 32
mnd 4
bc 36
fnc 10
bpm 3.6
cpm 3.4
noi 10

2 Functions

Rating   Name   Duplication   Size   Complexity  
B js.cookie.js ➔ ?!? 0 140 1
A api.noConflict 0 4 1
1
/*!
2
 * JavaScript Cookie v2.1.4
3
 * https://github.com/js-cookie/js-cookie
4
 *
5
 * Copyright 2006, 2015 Klaus Hartl & Fagner Brack
6
 * Released under the MIT license
7
 */
8
;(function (factory) {
9
	var registeredInModuleLoader = false;
10
	if (typeof define === 'function' && define.amd) {
0 ignored issues
show
Bug introduced by
The variable define seems to be never declared. If this is a global, consider adding a /** global: define */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
11
		define(factory);
12
		registeredInModuleLoader = true;
13
	}
14
	if (typeof exports === 'object') {
15
		module.exports = factory();
16
		registeredInModuleLoader = true;
17
	}
18
	if (!registeredInModuleLoader) {
19
		var OldCookies = window.Cookies;
20
		var api = window.Cookies = factory();
21
		api.noConflict = function () {
22
			window.Cookies = OldCookies;
23
			return api;
24
		};
25
	}
26
}(function () {
27
	function extend () {
28
		var i = 0;
29
		var result = {};
30
		for (; i < arguments.length; i++) {
31
			var attributes = arguments[ i ];
32
			for (var key in attributes) {
0 ignored issues
show
Complexity introduced by
A for in loop automatically includes the property of any prototype object, consider checking the key using hasOwnProperty.

When iterating over the keys of an object, this includes not only the keys of the object, but also keys contained in the prototype of that object. It is generally a best practice to check for these keys specifically:

var someObject;
for (var key in someObject) {
    if ( ! someObject.hasOwnProperty(key)) {
        continue; // Skip keys from the prototype.
    }

    doSomethingWith(key);
}
Loading history...
33
				result[key] = attributes[key];
34
			}
35
		}
36
		return result;
37
	}
38
39
	function init (converter) {
40
		function api (key, value, attributes) {
41
			var result;
42
			if (typeof document === 'undefined') {
43
				return;
0 ignored issues
show
Comprehensibility Best Practice introduced by
Are you sure this return statement is not missing an argument? If this is intended, consider adding an explicit undefined like return undefined;.
Loading history...
44
			}
45
46
			// Write
47
48
			if (arguments.length > 1) {
49
				attributes = extend({
50
					path: '/'
51
				}, api.defaults, attributes);
52
53
				if (typeof attributes.expires === 'number') {
54
					var expires = new Date();
55
					expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);
56
					attributes.expires = expires;
57
				}
58
59
				// We're using "expires" because "max-age" is not supported by IE
60
				attributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';
61
62
				try {
63
					result = JSON.stringify(value);
64
					if (/^[\{\[]/.test(result)) {
65
						value = result;
66
					}
67
				} catch (e) {}
0 ignored issues
show
Coding Style Comprehensibility Best Practice introduced by
Empty catch clauses should be used with caution; consider adding a comment why this is needed.
Loading history...
68
69
				if (!converter.write) {
70
					value = encodeURIComponent(String(value))
71
						.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
0 ignored issues
show
Bug introduced by
The variable decodeURIComponent seems to be never declared. If this is a global, consider adding a /** global: decodeURIComponent */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
72
				} else {
73
					value = converter.write(value, key);
74
				}
75
76
				key = encodeURIComponent(String(key));
77
				key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);
78
				key = key.replace(/[\(\)]/g, escape);
0 ignored issues
show
Bug introduced by
The variable escape seems to be never declared. If this is a global, consider adding a /** global: escape */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
79
80
				var stringifiedAttributes = '';
81
82
				for (var attributeName in attributes) {
0 ignored issues
show
Complexity introduced by
A for in loop automatically includes the property of any prototype object, consider checking the key using hasOwnProperty.

When iterating over the keys of an object, this includes not only the keys of the object, but also keys contained in the prototype of that object. It is generally a best practice to check for these keys specifically:

var someObject;
for (var key in someObject) {
    if ( ! someObject.hasOwnProperty(key)) {
        continue; // Skip keys from the prototype.
    }

    doSomethingWith(key);
}
Loading history...
83
					if (!attributes[attributeName]) {
84
						continue;
85
					}
86
					stringifiedAttributes += '; ' + attributeName;
87
					if (attributes[attributeName] === true) {
88
						continue;
89
					}
90
					stringifiedAttributes += '=' + attributes[attributeName];
91
				}
92
				return (document.cookie = key + '=' + value + stringifiedAttributes);
93
			}
94
95
			// Read
96
97
			if (!key) {
98
				result = {};
99
			}
100
101
			// To prevent the for loop in the first place assign an empty array
102
			// in case there are no cookies at all. Also prevents odd result when
103
			// calling "get()"
104
			var cookies = document.cookie ? document.cookie.split('; ') : [];
105
			var rdecode = /(%[0-9A-Z]{2})+/g;
106
			var i = 0;
107
108
			for (; i < cookies.length; i++) {
109
				var parts = cookies[i].split('=');
110
				var cookie = parts.slice(1).join('=');
111
112
				if (cookie.charAt(0) === '"') {
113
					cookie = cookie.slice(1, -1);
114
				}
115
116
				try {
117
					var name = parts[0].replace(rdecode, decodeURIComponent);
118
					cookie = converter.read ?
119
						converter.read(cookie, name) : converter(cookie, name) ||
120
						cookie.replace(rdecode, decodeURIComponent);
121
122
					if (this.json) {
123
						try {
124
							cookie = JSON.parse(cookie);
125
						} catch (e) {}
0 ignored issues
show
Coding Style Comprehensibility Best Practice introduced by
Empty catch clauses should be used with caution; consider adding a comment why this is needed.
Loading history...
126
					}
127
128
					if (key === name) {
129
						result = cookie;
130
						break;
131
					}
132
133
					if (!key) {
134
						result[name] = cookie;
0 ignored issues
show
Bug introduced by
The variable result does not seem to be initialized in case !key on line 97 is false. Are you sure this can never be the case?
Loading history...
135
					}
136
				} catch (e) {}
0 ignored issues
show
Coding Style Comprehensibility Best Practice introduced by
Empty catch clauses should be used with caution; consider adding a comment why this is needed.
Loading history...
137
			}
138
139
			return result;
140
		}
141
142
		api.set = api;
143
		api.get = function (key) {
144
			return api.call(api, key);
145
		};
146
		api.getJSON = function () {
147
			return api.apply({
148
				json: true
149
			}, [].slice.call(arguments));
150
		};
151
		api.defaults = {};
152
153
		api.remove = function (key, attributes) {
154
			api(key, '', extend(attributes, {
155
				expires: -1
156
			}));
157
		};
158
159
		api.withConverter = init;
160
161
		return api;
162
	}
163
164
	return init(function () {});
165
}));
166