Cookie Law / GDPR Info - Version 1.2

Version Description

  • Removed 3rd party JavaScript "jQuery.cookie" which can cause issues with certain versions of Apache server
  • Added native JavaScript cookie getter/setter
  • Removed JavaScript debug routine
  • Replaced JavaScript 'eval' with JSON.parse() for improved security: requires IE8+ (all other browsers fine though- who would have thought?)
  • Improved JavaScript performance and compatibility by removing global variables and running as inline function
Download this release

Release Info

Developer richardashby
Plugin Icon Cookie Law / GDPR Info
Version 1.2
Comparing to
See all releases

Code changes from version 1.0.3 to 1.2

Files changed (77) hide show
  1. admin/bgrins-spectrum/LICENSE +0 -20
  2. admin/bgrins-spectrum/README.md +0 -27
  3. admin/bgrins-spectrum/drop-arrow.png +0 -0
  4. admin/bgrins-spectrum/my-colours.js +0 -12
  5. admin/bgrins-spectrum/spectrum.css +0 -406
  6. admin/bgrins-spectrum/spectrum.js +0 -1563
  7. admin/cli-admin-page.php +82 -25
  8. admin/cli-admin.js +3 -0
  9. admin/cli-admin.php +15 -1
  10. cookie-law-info.php +22 -18
  11. css/cli-tables.css +86 -168
  12. css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  13. css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  14. css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  15. css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  16. css/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  17. css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  18. css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  19. css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  20. css/smoothness/images/ui-icons_222222_256x240.png +0 -0
  21. css/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  22. css/smoothness/images/ui-icons_454545_256x240.png +0 -0
  23. css/smoothness/images/ui-icons_888888_256x240.png +0 -0
  24. css/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  25. css/smoothness/jquery-ui-1.8.20.custom.css +0 -305
  26. js/cookielawinfo.js +77 -15
  27. js/jquery-ui-1.8.20.custom.min.js +0 -13
  28. js/jquery.cookie.js +0 -47
  29. php/custom-post-types.php +18 -0
  30. php/functions.php +18 -17
  31. php/shortcodes.php +7 -1
  32. readme.txt +37 -8
  33. trunk/admin/bgrins-spectrum/LICENSE +0 -20
  34. trunk/admin/bgrins-spectrum/README.md +0 -27
  35. trunk/admin/bgrins-spectrum/drop-arrow.png +0 -0
  36. trunk/admin/bgrins-spectrum/my-colours.js +0 -12
  37. trunk/admin/bgrins-spectrum/spectrum.css +0 -406
  38. trunk/admin/bgrins-spectrum/spectrum.js +0 -1563
  39. trunk/admin/cli-admin-page.php +0 -578
  40. trunk/admin/cli-admin.php +0 -452
  41. trunk/cookie-law-info.php +0 -133
  42. trunk/css/cli-admin-style.css +0 -102
  43. trunk/css/cli-style.css +0 -98
  44. trunk/css/cli-tables.css +0 -199
  45. trunk/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  46. trunk/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  47. trunk/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  48. trunk/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  49. trunk/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  50. trunk/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  51. trunk/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  52. trunk/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  53. trunk/css/smoothness/images/ui-icons_222222_256x240.png +0 -0
  54. trunk/css/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  55. trunk/css/smoothness/images/ui-icons_454545_256x240.png +0 -0
  56. trunk/css/smoothness/images/ui-icons_888888_256x240.png +0 -0
  57. trunk/css/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  58. trunk/css/smoothness/jquery-ui-1.8.20.custom.css +0 -305
  59. trunk/images/collapse.png +0 -0
  60. trunk/images/cross.png +0 -0
  61. trunk/images/expand.png +0 -0
  62. trunk/images/overlay.png +0 -0
  63. trunk/images/td_back.gif +0 -0
  64. trunk/images/tick.png +0 -0
  65. trunk/js/admin-ui-controller.js +0 -98
  66. trunk/js/cookielawinfo.js +0 -139
  67. trunk/js/jquery-ui-1.8.20.custom.min.js +0 -13
  68. trunk/js/jquery.cookie.js +0 -47
  69. trunk/php/custom-post-types.php +0 -167
  70. trunk/php/functions.php +0 -299
  71. trunk/php/shortcodes.php +0 -209
  72. trunk/readme.txt +0 -187
  73. trunk/screenshot-1.png +0 -0
  74. trunk/screenshot-2.png +0 -0
  75. trunk/screenshot-3.png +0 -0
  76. trunk/screenshot-4.png +0 -0
  77. trunk/screenshot-5.png +0 -0
admin/bgrins-spectrum/LICENSE DELETED
@@ -1,20 +0,0 @@
1
- Copyright (c) 2011, Brian Grinstead, http://briangrinstead.com
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
admin/bgrins-spectrum/README.md DELETED
@@ -1,27 +0,0 @@
1
- # Spectrum
2
- ## The No Hassle Colorpicker
3
-
4
- I wanted a colorpicker that didn't require images, and that had an API that made sense to me as a developer who has worked with color in a number of applications. I had used existing plugins (which I was quite grateful for), but decided that I would make a smaller, simpler one.
5
-
6
- I started using canvas, then switched to CSS gradients, since it turned out to be easier to manage, and worked better across browsers.
7
-
8
- See demo and docs: http://bgrins.github.com/spectrum/
9
-
10
- Thanks to the following places:
11
-
12
- * http://ansciath.tumblr.com/post/7347495869/css-aspect-ratio: Aspect ratio using CSS only
13
- * https://github.com/DavidDurman/FlexiColorPicker for saturation/value gradient constants
14
- * http://upload.wikimedia.org/wikipedia/commons/a/ad/HueScale.svg: For hue gradient contants
15
-
16
- The tool I use for measuring JavaScript size: http://closure-compiler.appspot.com/home
17
-
18
- // ==ClosureCompiler==
19
- // @compilation_level SIMPLE_OPTIMIZATIONS
20
- // @output_file_name default.js
21
- // @code_url https://raw.github.com/bgrins/spectrum/master/spectrum.js
22
- // ==/ClosureCompiler==
23
-
24
- Here is the JavaScript size
25
-
26
- Original Size: 35.93KB (11.25KB gzipped)
27
- Compiled Size: 17.56KB (6.79KB gzipped)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
admin/bgrins-spectrum/drop-arrow.png DELETED
Binary file
admin/bgrins-spectrum/my-colours.js DELETED
@@ -1,12 +0,0 @@
1
- jQuery(function() {
2
- var colour_selectors = "#cli-colour-btn-accept, #cli-colour-btn-decline, #cli-colour-btn-readmore, #cli-colour-link-accept, #cli-colour-link-decline, #cli-colour-link-readmore, #cli-colour-text, #cli-colour-background, #cli-colour-border, #cli-colour-link-button-1, #cli-colour-btn-button-1";
3
- jQuery(colour_selectors).spectrum({
4
- showPalette: false,
5
- palette: [
6
- ['#f00', '#ff0', '#0f0'],
7
- ['#00f', '#333', '#fff']
8
- ],
9
- showInitial: true,
10
- preferredFormat: "hex"
11
- });
12
- });
 
 
 
 
 
 
 
 
 
 
 
 
admin/bgrins-spectrum/spectrum.css DELETED
@@ -1,406 +0,0 @@
1
- /***
2
- Spectrum: The No Hassle Colorpicker
3
- https://github.com/bgrins/spectrum
4
-
5
- Author: Brian Grinstead
6
- License: MIT
7
- ***/
8
-
9
- .sp-container {
10
- position:absolute;
11
- top:0;
12
- left:0;
13
- display:inline-block;
14
- *display: inline;
15
- *zoom: 1;
16
- z-index: 2147483647;
17
- overflow: hidden;
18
- }
19
- .sp-container.sp-flat {
20
- position: relative;
21
- }
22
-
23
- /* http://ansciath.tumblr.com/post/7347495869/css-aspect-ratio */
24
- .sp-top {
25
- position:relative;
26
- width: 100%;
27
- display:inline-block;
28
- }
29
- .sp-top-inner {
30
- position:absolute;
31
- top:0;
32
- left:0;
33
- bottom:0;
34
- right:0;
35
- }
36
- .sp-color {
37
- position: absolute;
38
- top:0;
39
- left:0;
40
- bottom:0;
41
- right:20%;
42
- }
43
- .sp-hue {
44
- position: absolute;
45
- top:0;
46
- right:0;
47
- bottom:0;
48
- left:84%;
49
- height: 100%;
50
- }
51
- .sp-fill {
52
- padding-top: 80%;
53
- }
54
- .sp-sat, .sp-val {
55
- position: absolute;
56
- top:0;
57
- left:0;
58
- right:0;
59
- bottom:0;
60
- }
61
-
62
- /* Don't allow text selection */
63
- .sp-container, .sp-replacer, .sp-preview, .sp-dragger, .sp-slider , .sp-container.sp-dragging .sp-input, .sp-container button {
64
- -webkit-user-select:none;
65
- -moz-user-select: none;
66
- -o-user-select:none;
67
- user-select: none;
68
- }
69
-
70
- .sp-container.sp-input-disabled .sp-input-container {
71
- display: none;
72
- }
73
- .sp-container.sp-buttons-disabled .sp-button-container {
74
- display: none;
75
- }
76
- .sp-palette-only .sp-picker-container {
77
- display: none;
78
- }
79
- .sp-palette-disabled .sp-palette-container {
80
- display: none;
81
- }
82
-
83
- .sp-initial-disabled .sp-initial {
84
- display: none;
85
- }
86
-
87
-
88
- /* Gradients for hue, saturation and value instead of images. Not pretty... but it works */
89
- .sp-sat {
90
- background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#FFF), to(rgba(204, 154, 129, 0)));
91
- background-image: -webkit-linear-gradient(left, #FFF, rgba(204, 154, 129, 0));
92
- background-image: -moz-linear-gradient(left, #fff, rgba(204, 154, 129, 0));
93
- background-image: -o-linear-gradient(left, #fff, rgba(204, 154, 129, 0));
94
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)";
95
- filter : progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81');
96
- }
97
- .sp-val {
98
- background-image: -webkit-gradient(linear, 0 100%, 0 0, from(#000000), to(rgba(204, 154, 129, 0)));
99
- background-image: -webkit-linear-gradient(bottom, #000000, rgba(204, 154, 129, 0));
100
- background-image: -moz-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));
101
- background-image: -o-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));
102
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)";
103
- filter : progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000');
104
- }
105
-
106
- .sp-hue {
107
- background: -moz-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
108
- background: -ms-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
109
- background: -o-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
110
- background: -webkit-gradient(linear, left top, left bottom, from(#ff0000), color-stop(0.17, #ffff00), color-stop(0.33, #00ff00), color-stop(0.5, #00ffff), color-stop(0.67, #0000ff), color-stop(0.83, #ff00ff), to(#ff0000));
111
- background: -webkit-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
112
- }
113
-
114
- /* IE filters do not support multiple color stops.
115
- Generate 6 divs, line them up, and do two color gradients for each.
116
- Yes, really.
117
- */
118
-
119
- .sp-1 {
120
- height:17%;
121
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00');
122
- }
123
- .sp-2 {
124
- height:16%;
125
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00');
126
- }
127
- .sp-3 {
128
- height:17%;
129
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff');
130
- }
131
- .sp-4 {
132
- height:17%;
133
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff');
134
- }
135
- .sp-5 {
136
- height:16%;
137
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff');
138
- }
139
- .sp-6 {
140
- height:17%;
141
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000');
142
- }
143
-
144
- /* Clearfix hack */
145
- .sp-cf:before, .sp-cf:after { content: ""; display: table; }
146
- .sp-cf:after { clear: both; }
147
- .sp-cf { *zoom: 1; }
148
-
149
- /* Mobile devices, make hue slider bigger so it is easier to slide */
150
- @media (max-device-width: 480px) {
151
- .sp-color { right: 40%; }
152
- .sp-hue { left: 63%; }
153
- .sp-fill { padding-top: 60%; }
154
- }
155
-
156
- .sp-dragger {
157
- border-radius: 5px;
158
- height: 5px;
159
- width: 5px;
160
- border: 1px solid #fff;
161
- background: #000;
162
- cursor: pointer;
163
- position:absolute;
164
- top:0;
165
- left: 0;
166
- }
167
- .sp-slider {
168
- position: absolute;
169
- top:0;
170
- cursor:pointer;
171
- height: 3px;
172
- left: -1px;
173
- right: -1px;
174
- border: 1px solid #000;
175
- background: white;
176
- opacity: .8;
177
- }
178
-
179
- /* Basic display options (colors, fonts, global widths) */
180
- .sp-container {
181
- border-radius: 0;
182
- background-color: #ECECEC;
183
- border: solid 1px #f0c49B;
184
- padding: 0;
185
- }
186
- .sp-container, .sp-container button, .sp-container input, .sp-color, .sp-hue
187
- {
188
- font: normal 12px "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif;
189
- -webkit-box-sizing: border-box;
190
- -moz-box-sizing: border-box;
191
- -ms-box-sizing: border-box;
192
- box-sizing: border-box;
193
- }
194
- .sp-top
195
- {
196
- margin-bottom: 3px;
197
- }
198
- .sp-color, .sp-hue
199
- {
200
- border: solid 1px #666;
201
- }
202
-
203
- /* Input */
204
- .sp-input-container {
205
- float:right;
206
- width: 100px;
207
- margin-bottom: 4px;
208
- }
209
- .sp-initial-disabled .sp-input-container {
210
- width: 100%;
211
- }
212
- .sp-input {
213
- font-size: 12px !important;
214
- border: 1px inset;
215
- padding: 4px 5px;
216
- margin: 0;
217
- width: 100%;
218
- background:transparent;
219
- border-radius: 3px;
220
- color: #222;
221
- }
222
- .sp-input:focus {
223
- border: 1px solid orange;
224
- }
225
- .sp-input.sp-validation-error
226
- {
227
- border: 1px solid red;
228
- background: #fdd;
229
- }
230
- .sp-picker-container , .sp-palette-container
231
- {
232
- float:left;
233
- position: relative;
234
- padding: 10px;
235
- padding-bottom: 300px;
236
- margin-bottom: -290px;
237
- }
238
- .sp-picker-container
239
- {
240
- width: 172px;
241
- border-left: solid 1px #fff;
242
- }
243
-
244
- /* Palettes */
245
- .sp-palette-container
246
- {
247
- border-right: solid 1px #ccc;
248
- }
249
-
250
- .sp-palette span {
251
- display: block;
252
- position:relative;
253
- float:left;
254
- width: 24px;
255
- height: 15px;
256
- margin: 3px;
257
- cursor: pointer;
258
- border:solid 2px transparent;
259
- }
260
- .sp-palette span:hover, .sp-palette span.sp-thumb-active {
261
- border-color: orange;
262
- }
263
-
264
- /* Initial */
265
- .sp-initial
266
- {
267
- float: left;
268
- border: solid 1px #333;
269
- }
270
- .sp-initial span {
271
- width: 30px;
272
- height: 25px;
273
- border:none;
274
- display:block;
275
- float:left;
276
- margin:0;
277
- }
278
-
279
- /* Buttons */
280
- .sp-button-container {
281
- float: right;
282
- }
283
-
284
- /* Replacer (the little preview div that shows up instead of the <input>) */
285
- .sp-replacer {
286
- margin:0;
287
- overflow:hidden;
288
- cursor:pointer;
289
- padding: 4px;
290
- display:inline-block;
291
- *zoom: 1;
292
- *display: inline;
293
- border: solid 1px #91765d;
294
- background: #eee;
295
- color: #333;
296
- vertical-align: middle;
297
- }
298
- .sp-replacer:hover, .sp-replacer.sp-active {
299
- border-color: #F0C49B;
300
- color: #111;
301
- }
302
- .sp-dd {
303
- padding: 2px 0;
304
- height: 16px;
305
- line-height: 16px;
306
- float:left;
307
- font-size:10px;
308
- }
309
- .sp-preview {
310
- width:25px;
311
- height: 20px;
312
- border: solid 1px #222;
313
- margin-right: 5px;
314
- float:left;
315
- }
316
-
317
- .sp-palette
318
- {
319
- *width: 220px;
320
- max-width: 220px;
321
- }
322
- .sp-palette span
323
- {
324
- width:16px;
325
- height: 16px;
326
- margin:2px 1px;
327
- border: solid 1px #d0d0d0;
328
- }
329
-
330
- .sp-container
331
- {
332
- padding-bottom:0;
333
- }
334
-
335
-
336
- /* Buttons: http://hellohappy.org/css3-buttons/ */
337
- .sp-container button {
338
- background-color: #eeeeee;
339
- background-image: -webkit-linear-gradient(top, #eeeeee, #cccccc);
340
- background-image: -moz-linear-gradient(top, #eeeeee, #cccccc);
341
- background-image: -ms-linear-gradient(top, #eeeeee, #cccccc);
342
- background-image: -o-linear-gradient(top, #eeeeee, #cccccc);
343
- background-image: linear-gradient(top, #eeeeee, #cccccc);
344
- border: 1px solid #ccc;
345
- border-bottom: 1px solid #bbb;
346
- border-radius: 3px;
347
- color: #333;
348
- font-size: 14px;
349
- line-height: 1;
350
- padding: 5px 4px;
351
- text-align: center;
352
- text-shadow: 0 1px 0 #eee;
353
- vertical-align: middle;
354
- }
355
- .sp-container button:hover {
356
- background-color: #dddddd;
357
- background-image: -webkit-linear-gradient(top, #dddddd, #bbbbbb);
358
- background-image: -moz-linear-gradient(top, #dddddd, #bbbbbb);
359
- background-image: -ms-linear-gradient(top, #dddddd, #bbbbbb);
360
- background-image: -o-linear-gradient(top, #dddddd, #bbbbbb);
361
- background-image: linear-gradient(top, #dddddd, #bbbbbb);
362
- border: 1px solid #bbb;
363
- border-bottom: 1px solid #999;
364
- cursor: pointer;
365
- text-shadow: 0 1px 0 #ddd;
366
- }
367
- .sp-container button:active {
368
- border: 1px solid #aaa;
369
- border-bottom: 1px solid #888;
370
- -webkit-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
371
- -moz-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
372
- -ms-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
373
- -o-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
374
- box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
375
- }
376
- .sp-cancel
377
- {
378
- font-size: 11px;
379
- color: #d93f3f !important;
380
- margin:0;
381
- padding:2px;
382
- margin-right: 5px;
383
- vertical-align: middle;
384
- text-decoration:none;
385
-
386
- }
387
- .sp-cancel:hover
388
- {
389
- color: #d93f3f !important;
390
- text-decoration: underline;
391
- }
392
-
393
-
394
- .sp-palette span:hover, .sp-palette span.sp-thumb-active
395
- {
396
- border-color: #000;
397
- }
398
- .sp-palette span.sp-thumb-light.sp-thumb-active
399
- {
400
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=);
401
- }
402
-
403
- .sp-palette span.sp-thumb-dark.sp-thumb-active
404
- {
405
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=);
406
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
admin/bgrins-spectrum/spectrum.js DELETED
@@ -1,1563 +0,0 @@
1
- // Spectrum: The No Hassle Colorpicker
2
- // https://github.com/bgrins/spectrum
3
- // Author: Brian Grinstead
4
- // License: MIT
5
- // Requires: jQuery, spectrum.css
6
-
7
- (function (window, $, undefined) {
8
- var defaultOpts = {
9
-
10
- // Events
11
- beforeShow: noop,
12
- move: noop,
13
- change: noop,
14
- show: noop,
15
- hide: noop,
16
-
17
- // Options
18
- color: false,
19
- flat: false,
20
- showInput: false,
21
- showButtons: true,
22
- showInitial: false,
23
- showPalette: false,
24
- showPaletteOnly: false,
25
- showSelectionPalette: true,
26
- localStorageKey: false,
27
- maxSelectionSize: 7,
28
- cancelText: "cancel",
29
- chooseText: "choose",
30
- preferredFormat: false,
31
- className: "",
32
- theme: "sp-light",
33
- palette: ['fff', '000'],
34
- selectionPalette: []
35
- },
36
- spectrums = [],
37
- IE = $.browser.msie,
38
- replaceInput = [
39
- "<div class='sp-replacer'>",
40
- "<div class='sp-preview'></div>",
41
- "<div class='sp-dd'>&#9660;</div>",
42
- "</div>"
43
- ].join(''),
44
- markup = (function () {
45
-
46
- // IE does not support gradients with multiple stops, so we need to simulate
47
- // that for the rainbow slider with 8 divs that each have a single gradient
48
- var gradientFix = "";
49
- if (IE) {
50
- for (var i = 1; i <= 6; i++) {
51
- gradientFix += "<div class='sp-" + i + "'></div>";
52
- }
53
- }
54
-
55
- return [
56
- "<div class='sp-container'>",
57
- "<div class='sp-palette-container'>",
58
- "<div class='sp-palette sp-thumb sp-cf'></div>",
59
- "</div>",
60
- "<div class='sp-picker-container'>",
61
- "<div class='sp-top sp-cf'>",
62
- "<div class='sp-fill'></div>",
63
- "<div class='sp-top-inner'>",
64
- "<div class='sp-color'>",
65
- "<div class='sp-sat'>",
66
- "<div class='sp-val'>",
67
- "<div class='sp-dragger'></div>",
68
- "</div>",
69
- "</div>",
70
- "</div>",
71
- "<div class='sp-hue'>",
72
- "<div class='sp-slider'></div>",
73
- gradientFix,
74
- "</div>",
75
- "</div>",
76
- "</div>",
77
- "<div class='sp-input-container sp-cf'>",
78
- "<input class='sp-input' type='text' spellcheck='false' />",
79
- "</div>",
80
- "<div class='sp-initial sp-thumb sp-cf'></div>",
81
- "<div class='sp-button-container sp-cf'>",
82
- "<a class='sp-cancel' href='#'></a>",
83
- "<button class='sp-choose'></button>",
84
- "</div>",
85
- "</div>",
86
- "</div>"
87
- ].join("");
88
- })(),
89
- paletteTemplate = function (p, color, className) {
90
- var html = [];
91
- for (var i = 0; i < p.length; i++) {
92
- var tiny = tinycolor(p[i]);
93
- var c = tiny.toHsl().l < .5 ? "sp-thumb-dark" : "sp-thumb-light";
94
- c += (tinycolor.equals(color, p[i])) ? " sp-thumb-active" : "";
95
- html.push('<span title="' + tiny.toHexString() + '" data-color="' + tiny.toHexString() + '" style="background-color:' + tiny.toRgbString() + ';" class="' + c + '"></span>');
96
- }
97
- return "<div class='sp-cf " + className + "'>" + html.join('') + "</div>";
98
- };
99
-
100
- function hideAll() {
101
- for (var i = 0; i < spectrums.length; i++) {
102
- if (spectrums[i]) {
103
- spectrums[i].hide();
104
- }
105
- }
106
- }
107
- function instanceOptions(o, callbackContext) {
108
- var opts = $.extend({}, defaultOpts, o);
109
- opts.callbacks = {
110
- 'move': bind(opts.move, callbackContext),
111
- 'change': bind(opts.change, callbackContext),
112
- 'show': bind(opts.show, callbackContext),
113
- 'hide': bind(opts.hide, callbackContext),
114
- 'beforeShow': bind(opts.beforeShow, callbackContext)
115
- };
116
-
117
- return opts;
118
- }
119
-
120
- function spectrum(element, o) {
121
-
122
- var opts = instanceOptions(o, element),
123
- flat = opts.flat,
124
- showPaletteOnly = opts.showPaletteOnly,
125
- showPalette = opts.showPalette || showPaletteOnly,
126
- showInitial = opts.showInitial && !flat,
127
- showInput = opts.showInput,
128
- showSelectionPalette = opts.showSelectionPalette,
129
- localStorageKey = opts.localStorageKey,
130
- theme = opts.theme,
131
- callbacks = opts.callbacks,
132
- resize = throttle(reflow, 10),
133
- visible = false,
134
- dragWidth = 0,
135
- dragHeight = 0,
136
- dragHelperHeight = 0,
137
- slideHeight = 0,
138
- slideWidth = 0,
139
- slideHelperHeight = 0,
140
- currentHue = 0,
141
- currentSaturation = 0,
142
- currentValue = 0,
143
- palette = opts.palette.slice(0),
144
- paletteArray = $.isArray(palette[0]) ? palette : [palette],
145
- selectionPalette = opts.selectionPalette.slice(0),
146
- draggingClass = "sp-dragging";
147
-
148
- var doc = element.ownerDocument,
149
- body = doc.body,
150
- boundElement = $(element),
151
- container = $(markup, doc).addClass(theme),
152
- dragger = container.find(".sp-color"),
153
- dragHelper = container.find(".sp-dragger"),
154
- slider = container.find(".sp-hue"),
155
- slideHelper = container.find(".sp-slider"),
156
- textInput = container.find(".sp-input"),
157
- paletteContainer = container.find(".sp-palette"),
158
- initialColorContainer = container.find(".sp-initial"),
159
- cancelButton = container.find(".sp-cancel"),
160
- chooseButton = container.find(".sp-choose"),
161
- isInput = boundElement.is("input"),
162
- shouldReplace = isInput && !flat,
163
- replacer = (shouldReplace) ? $(replaceInput).addClass(theme) : $([]),
164
- offsetElement = (shouldReplace) ? replacer : boundElement,
165
- previewElement = replacer.find(".sp-preview"),
166
- initialColor = opts.color || (isInput && boundElement.val()),
167
- colorOnShow = false,
168
- preferredFormat = opts.preferredFormat,
169
- currentPreferredFormat = preferredFormat,
170
- clickoutFiresChange = !opts.showButtons;
171
-
172
- chooseButton.text(opts.chooseText);
173
- cancelButton.text(opts.cancelText);
174
-
175
- function initialize() {
176
-
177
- if (IE) {
178
- container.find("*:not(input)").attr("unselectable", "on");
179
- }
180
-
181
- container.toggleClass("sp-flat", flat);
182
- container.toggleClass("sp-input-disabled", !showInput);
183
- container.toggleClass("sp-buttons-disabled", !opts.showButtons || flat);
184
- container.toggleClass("sp-palette-disabled", !showPalette);
185
- container.toggleClass("sp-palette-only", showPaletteOnly);
186
- container.toggleClass("sp-initial-disabled", !showInitial);
187
- container.addClass(opts.className);
188
-
189
- if (shouldReplace) {
190
- boundElement.hide().after(replacer);
191
- }
192
-
193
- if (flat) {
194
- boundElement.after(container).hide();
195
- }
196
- else {
197
- $(body).append(container.hide());
198
- }
199
- if (localStorageKey && window.localStorage) {
200
- try {
201
- selectionPalette = window.localStorage[localStorageKey].split(",");
202
- }
203
- catch (e) {
204
-
205
- }
206
- }
207
-
208
- offsetElement.bind("click.spectrum touchstart.spectrum", function (e) {
209
- toggle();
210
-
211
- e.stopPropagation();
212
-
213
- if (!$(e.target).is("input")) {
214
- e.preventDefault();
215
- }
216
- });
217
-
218
- // Prevent clicks from bubbling up to document. This would cause it to be hidden.
219
- container.click(stopPropagation);
220
-
221
- // Handle user typed input
222
- textInput.change(setFromTextInput);
223
- textInput.bind("paste", function () {
224
- setTimeout(setFromTextInput, 1);
225
- });
226
- textInput.keydown(function (e) { if (e.keyCode == 13) { setFromTextInput(); } });
227
-
228
- cancelButton.bind("click.spectrum", function (e) {
229
- e.stopPropagation();
230
- e.preventDefault();
231
- hide();
232
- });
233
-
234
- chooseButton.bind("click.spectrum", function (e) {
235
- e.stopPropagation();
236
- e.preventDefault();
237
-
238
- if (isValid()) {
239
- updateOriginalInput(true);
240
- hide();
241
- }
242
- });
243
-
244
- draggable(slider, function (dragX, dragY) {
245
- currentHue = (dragY / slideHeight);
246
- move();
247
- }, dragStart, dragStop);
248
-
249
- draggable(dragger, function (dragX, dragY) {
250
- currentSaturation = dragX / dragWidth;
251
- currentValue = (dragHeight - dragY) / dragHeight;
252
- move();
253
- }, dragStart, dragStop);
254
-
255
- if (!!initialColor) {
256
- set(initialColor);
257
- addColorToSelectionPalette(initialColor);
258
- }
259
- else {
260
- updateUI();
261
- }
262
-
263
- if (flat) {
264
- show();
265
- }
266
-
267
- function palletElementClick(e) {
268
- if (e.data && e.data.ignore) {
269
- set($(this).data("color"));
270
- move();
271
- }
272
- else {
273
- set($(this).data("color"));
274
- updateOriginalInput(true);
275
- move();
276
- hide();
277
- }
278
-
279
- return false;
280
- }
281
-
282
- var paletteEvent = IE ? "mousedown.spectrum" : "click.spectrum touchstart.spectrum";
283
- paletteContainer.delegate("span", paletteEvent, palletElementClick);
284
- initialColorContainer.delegate("span::nth-child(1)", paletteEvent, { ignore: true }, palletElementClick);
285
- }
286
- function addColorToSelectionPalette(color) {
287
- if (showSelectionPalette) {
288
- selectionPalette.push(tinycolor(color).toHexString());
289
- if (localStorageKey && window.localStorage) {
290
- window.localStorage[localStorageKey] = selectionPalette.join(",");
291
- }
292
- }
293
- }
294
-
295
- function getUniqueSelectionPalette() {
296
- var unique = [];
297
- var p = selectionPalette;
298
- var paletteLookup = {};
299
-
300
- if (showPalette) {
301
-
302
- for (var i = 0; i < paletteArray.length; i++) {
303
- for (var j = 0; j < paletteArray[i].length; j++) {
304
- var hex = tinycolor(paletteArray[i][j]).toHexString();
305
- paletteLookup[hex] = true;
306
- }
307
- }
308
-
309
- for (var i = 0; i < p.length; i++) {
310
- var color = tinycolor(p[i]);
311
- var hex = color.toHexString();
312
-
313
- if (!paletteLookup.hasOwnProperty(hex)) {
314
- unique.push(p[i]);
315
- paletteLookup[hex] = true;
316
- }
317
- }
318
- }
319
-
320
- return unique.reverse().slice(0, opts.maxSelectionSize);
321
- }
322
- function drawPalette() {
323
-
324
- var currentColor = get();
325
-
326
- var html = $.map(paletteArray, function (palette, i) {
327
- return paletteTemplate(palette, currentColor, "sp-palette-row sp-palette-row-" + i);
328
- });
329
-
330
- if (selectionPalette) {
331
- html.push(paletteTemplate(getUniqueSelectionPalette(), currentColor, "sp-palette-row sp-palette-row-selection"));
332
- }
333
-
334
- paletteContainer.html(html.join(""));
335
- }
336
- function drawInitial() {
337
- if (showInitial) {
338
- var initial = colorOnShow;
339
- var current = get();
340
- initialColorContainer.html(paletteTemplate([initial, current], current, "sp-palette-row-initial"));
341
- }
342
- }
343
- function dragStart() {
344
- if (dragHeight === 0 || dragWidth === 0 || slideHeight === 0) {
345
- reflow();
346
- }
347
- container.addClass(draggingClass);
348
- }
349
- function dragStop() {
350
- container.removeClass(draggingClass);
351
- }
352
- function setFromTextInput() {
353
- var tiny = tinycolor(textInput.val());
354
- if (tiny.ok) {
355
- set(tiny);
356
- }
357
- else {
358
- textInput.addClass("sp-validation-error");
359
- }
360
- }
361
-
362
- function toggle() {
363
- (visible) ? hide() : show();
364
- }
365
-
366
- function show() {
367
- if (visible) {
368
- reflow();
369
- return;
370
- }
371
- if (callbacks.beforeShow(get()) === false) return;
372
-
373
- hideAll();
374
- visible = true;
375
-
376
- $(doc).bind("click.spectrum", hide);
377
- $(window).bind("resize.spectrum", resize);
378
- replacer.addClass("sp-active");
379
- container.show();
380
-
381
- if (showPalette) {
382
- drawPalette();
383
- }
384
- reflow();
385
- updateUI();
386
-
387
- colorOnShow = get();
388
-
389
- drawInitial();
390
- callbacks.show(colorOnShow);
391
- }
392
-
393
- function hide() {
394
- if (!visible || flat) { return; }
395
- visible = false;
396
-
397
- $(doc).unbind("click.spectrum", hide);
398
- $(window).unbind("resize.spectrum", resize);
399
-
400
- replacer.removeClass("sp-active");
401
- container.hide();
402
-
403
- var colorHasChanged = !tinycolor.equals(get(), colorOnShow);
404
-
405
- if (colorHasChanged) {
406
- if (clickoutFiresChange) {
407
- updateOriginalInput(true);
408
- }
409
- else {
410
- revert();
411
- }
412
- }
413
-
414
- callbacks.hide(get());
415
- }
416
-
417
- function revert() {
418
- set(colorOnShow, true);
419
- }
420
-
421
- function set(color, ignoreFormatChange) {
422
- if (tinycolor.equals(color, get())) {
423
- return;
424
- }
425
-
426
- var newColor = tinycolor(color);
427
- var newHsv = newColor.toHsv();
428
-
429
- currentHue = newHsv.h;
430
- currentSaturation = newHsv.s;
431
- currentValue = newHsv.v;
432
-
433
- updateUI();
434
-
435
- if (!ignoreFormatChange) {
436
- currentPreferredFormat = preferredFormat || newColor.format;
437
- }
438
- }
439
-
440
- function get() {
441
- return tinycolor.fromRatio({ h: currentHue, s: currentSaturation, v: currentValue });
442
- }
443
-
444
- function isValid() {
445
- return !textInput.hasClass("sp-validation-error");
446
- }
447
-
448
- function move() {
449
- updateUI();
450
-
451
- callbacks.move(get());
452
- }
453
-
454
- function updateUI() {
455
-
456
- textInput.removeClass("sp-validation-error");
457
-
458
- updateHelperLocations();
459
-
460
- // Update dragger background color (gradients take care of saturation and value).
461
- var flatColor = tinycolor({ h: currentHue, s: "1.0", v: "1.0" });
462
- dragger.css("background-color", flatColor.toHexString());
463
-
464
- var realColor = get(),
465
- realHex = realColor.toHexString();
466
-
467
- // Update the replaced elements background color (with actual selected color)
468
- previewElement.css("background-color", realHex);
469
-
470
- // Update the text entry input as it changes happen
471
- if (showInput) {
472
- textInput.val(realColor.toString(currentPreferredFormat));
473
- }
474
-
475
- if (showPalette) {
476
- drawPalette();
477
- }
478
-
479
- drawInitial();
480
- }
481
-
482
- function updateHelperLocations() {
483
- var h = currentHue;
484
- var s = currentSaturation;
485
- var v = currentValue;
486
-
487
- // Where to show the little circle in that displays your current selected color
488
- var dragX = s * dragWidth;
489
- var dragY = dragHeight - (v * dragHeight);
490
- dragX = Math.max(
491
- -dragHelperHeight,
492
- Math.min(dragWidth - dragHelperHeight, dragX - dragHelperHeight)
493
- );
494
- dragY = Math.max(
495
- -dragHelperHeight,
496
- Math.min(dragHeight - dragHelperHeight, dragY - dragHelperHeight)
497
- );
498
- dragHelper.css({
499
- "top": dragY,
500
- "left": dragX
501
- });
502
-
503
- // Where to show the bar that displays your current selected hue
504
- var slideY = (currentHue) * slideHeight;
505
- slideHelper.css({
506
- "top": slideY - slideHelperHeight
507
- });
508
- }
509
-
510
- function updateOriginalInput(fireCallback) {
511
- var color = get();
512
-
513
- if (isInput) {
514
- boundElement.val(color.toString(currentPreferredFormat)).change();
515
- }
516
-
517
- var hasChanged = !tinycolor.equals(color, colorOnShow);
518
- colorOnShow = color;
519
-
520
- // Update the selection palette with the current color
521
- addColorToSelectionPalette(color);
522
- if (fireCallback && hasChanged) {
523
- callbacks.change(color);
524
- }
525
- }
526
-
527
- function reflow() {
528
- dragWidth = dragger.width();
529
- dragHeight = dragger.height();
530
- dragHelperHeight = dragHelper.height();
531
- slideWidth = slider.width();
532
- slideHeight = slider.height();
533
- slideHelperHeight = slideHelper.height();
534
-
535
- if (!flat) {
536
- container.offset(getOffset(container, offsetElement));
537
- }
538
-
539
- updateHelperLocations();
540
- }
541
-
542
- function destroy() {
543
- boundElement.show();
544
- offsetElement.unbind("click.spectrum touchstart.spectrum");
545
- container.remove();
546
- replacer.remove();
547
- spectrums[spect.id] = null;
548
- }
549
-
550
- initialize();
551
-
552
- var spect = {
553
- show: show,
554
- hide: hide,
555
- set: function (c) {
556
- set(c);
557
- updateOriginalInput();
558
- },
559
- get: get,
560
- destroy: destroy,
561
- container: container
562
- };
563
-
564
- spect.id = spectrums.push(spect) - 1;
565
-
566
- return spect;
567
- }
568
-
569
- /**
570
- * checkOffset - get the offset below/above and left/right element depending on screen position
571
- * Thanks https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.datepicker.js
572
- */
573
- function getOffset(picker, input) {
574
- var extraY = 0;
575
- var dpWidth = picker.outerWidth();
576
- var dpHeight = picker.outerHeight();
577
- var inputWidth = input.outerWidth();
578
- var inputHeight = input.outerHeight();
579
- var doc = picker[0].ownerDocument;
580
- var docElem = doc.documentElement;
581
- var viewWidth = docElem.clientWidth + $(doc).scrollLeft();
582
- var viewHeight = docElem.clientHeight + $(doc).scrollTop();
583
- var offset = input.offset();
584
- offset.top += inputHeight;
585
-
586
- offset.left -=
587
- Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
588
- Math.abs(offset.left + dpWidth - viewWidth) : 0);
589
-
590
- offset.top -=
591
- Math.min(offset.top, ((offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
592
- Math.abs(dpHeight + inputHeight - extraY) : extraY));
593
-
594
- return offset;
595
- }
596
-
597
- /**
598
- * noop - do nothing
599
- */
600
- function noop() {
601
-
602
- }
603
-
604
- /**
605
- * stopPropagation - makes the code only doing this a little easier to read in line
606
- */
607
- function stopPropagation(e) {
608
- e.stopPropagation();
609
- }
610
-
611
- /**
612
- * Create a function bound to a given object
613
- * Thanks to underscore.js
614
- */
615
- function bind(func, obj) {
616
- var slice = Array.prototype.slice;
617
- var args = slice.call(arguments, 2);
618
- return function () {
619
- return func.apply(obj, args.concat(slice.call(arguments)));
620
- }
621
- }
622
-
623
- /**
624
- * Lightweight drag helper. Handles containment within the element, so that
625
- * when dragging, the x is within [0,element.width] and y is within [0,element.height]
626
- */
627
- function draggable(element, onmove, onstart, onstop) {
628
- onmove = onmove || function () { };
629
- onstart = onstart || function () { };
630
- onstop = onstop || function () { };
631
- var doc = element.ownerDocument || document;
632
- var dragging = false;
633
- var offset = {};
634
- var maxHeight = 0;
635
- var maxWidth = 0;
636
- var IE = $.browser.msie;
637
- var hasTouch = ('ontouchstart' in window);
638
-
639
- var duringDragEvents = {};
640
- duringDragEvents["selectstart"] = prevent;
641
- duringDragEvents["dragstart"] = prevent;
642
- duringDragEvents[(hasTouch ? "touchmove" : "mousemove")] = move;
643
- duringDragEvents[(hasTouch ? "touchend" : "mouseup")] = stop;
644
-
645
- function prevent(e) {
646
- if (e.stopPropagation) {
647
- e.stopPropagation();
648
- }
649
- if (e.preventDefault) {
650
- e.preventDefault();
651
- }
652
- e.returnValue = false;
653
- }
654
-
655
- function move(e) {
656
- if (dragging) {
657
- // Mouseup happened outside of window
658
- if (IE && !(document.documentMode >= 9) && !e.button) {
659
- return stop();
660
- }
661
-
662
- var touches = e.originalEvent.touches;
663
- var pageX = touches ? touches[0].pageX : e.pageX;
664
- var pageY = touches ? touches[0].pageY : e.pageY;
665
-
666
- var dragX = Math.max(0, Math.min(pageX - offset.left, maxWidth));
667
- var dragY = Math.max(0, Math.min(pageY - offset.top, maxHeight));
668
-
669
- if (hasTouch) {
670
- // Stop scrolling in iOS
671
- prevent(e);
672
- }
673
-
674
- onmove.apply(element, [dragX, dragY]);
675
- }
676
- }
677
- function start(e) {
678
- var rightclick = (e.which) ? (e.which == 3) : (e.button == 2);
679
- var touches = e.originalEvent.touches;
680
-
681
- if (!rightclick && !dragging) {
682
- if (onstart.apply(element, arguments) !== false) {
683
- dragging = true;
684
- maxHeight = $(element).height();
685
- maxWidth = $(element).width();
686
- offset = $(element).offset();
687
-
688
- $(doc).bind(duringDragEvents);
689
- $(doc.body).addClass("sp-dragging");
690
-
691
- if (!hasTouch) {
692
- move(e);
693
- }
694
-
695
- prevent(e);
696
- }
697
- }
698
- }
699
- function stop() {
700
- if (dragging) {
701
- $(doc).unbind(duringDragEvents);
702
- $(doc.body).removeClass("sp-dragging");
703
- onstop.apply(element, arguments);
704
- }
705
- dragging = false;
706
- }
707
-
708
- $(element).bind(hasTouch ? "touchstart" : "mousedown", start);
709
- }
710
-
711
- function throttle(func, wait, debounce) {
712
- var timeout;
713
- return function () {
714
- var context = this, args = arguments;
715
- var throttler = function () {
716
- timeout = null;
717
- func.apply(context, args);
718
- };
719
- if (debounce) clearTimeout(timeout);
720
- if (debounce || !timeout) timeout = setTimeout(throttler, wait);
721
- };
722
- }
723
-
724
-
725
- /**
726
- * Define a jQuery plugin
727
- */
728
- var dataID = "spectrum.id";
729
- $.fn.spectrum = function (opts, extra) {
730
- if (typeof opts == "string") {
731
- if (opts == "get") {
732
- return spectrums[this.eq(0).data(dataID)].get();
733
- } else if (opts == "container") {
734
- return spectrums[$(this).data(dataID)].container;
735
- }
736
-
737
- return this.each(function () {
738
- var spect = spectrums[$(this).data(dataID)];
739
- if (spect) {
740
- if (opts == "show") { spect.show(); }
741
- if (opts == "hide") { spect.hide(); }
742
- if (opts == "set") { spect.set(extra); }
743
- if (opts == "destroy") {
744
- spect.destroy();
745
- $(this).removeData(dataID);
746
- }
747
- }
748
- });
749
- }
750
-
751
- // Initializing a new one
752
- return this.spectrum("destroy").each(function () {
753
- var spect = spectrum(this, opts);
754
- $(this).data(dataID, spect.id);
755
- });
756
- };
757
-
758
- $.fn.spectrum.load = true;
759
- $.fn.spectrum.loadOpts = {};
760
- $.fn.spectrum.draggable = draggable;
761
-
762
- $.fn.spectrum.processNativeColorInputs = function() {
763
- var supportsColor = $("<input type='color' />")[0].type === "color";
764
- if (!supportsColor) {
765
- $("input[type=color]").spectrum({
766
- preferredFormat: "hex6"
767
- });
768
- }
769
- };
770
-
771
- $(function () {
772
- if ($.fn.spectrum.load) {
773
- $.fn.spectrum.processNativeColorInputs();
774
- }
775
- });
776
-
777
- })(this, jQuery);
778
-
779
-
780
-
781
-
782
-
783
-
784
-
785
- // TinyColor.js - <https://github.com/bgrins/TinyColor> - 2011 Brian Grinstead - v0.5
786
-
787
- (function (window) {
788
-
789
- var trimLeft = /^[\s,#]+/,
790
- trimRight = /\s+$/,
791
- tinyCounter = 0,
792
- math = Math,
793
- mathRound = math.round,
794
- mathMin = math.min,
795
- mathMax = math.max,
796
- mathRandom = math.random,
797
- parseFloat = window.parseFloat;
798
-
799
- function tinycolor(color, opts) {
800
-
801
- // If input is already a tinycolor, return itself
802
- if (typeof color == "object" && color.hasOwnProperty("_tc_id")) {
803
- return color;
804
- }
805
-
806
- var rgb = inputToRGB(color);
807
- var r = rgb.r, g = rgb.g, b = rgb.b, a = parseFloat(rgb.a), format = rgb.format;
808
-
809
- return {
810
- ok: rgb.ok,
811
- format: format,
812
- _tc_id: tinyCounter++,
813
- alpha: a,
814
- toHsv: function () {
815
- var hsv = rgbToHsv(r, g, b);
816
- return { h: hsv.h, s: hsv.s, v: hsv.v, a: a };
817
- },
818
- toHsvString: function () {
819
- var hsv = rgbToHsv(r, g, b);
820
- var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);
821
- return (a == 1) ?
822
- "hsv(" + h + ", " + s + "%, " + v + "%)" :
823
- "hsva(" + h + ", " + s + "%, " + v + "%, " + a + ")";
824
- },
825
- toHsl: function () {
826
- var hsl = rgbToHsl(r, g, b);
827
- return { h: hsl.h, s: hsl.s, l: hsl.l, a: a };
828
- },
829
- toHslString: function () {
830
- var hsl = rgbToHsl(r, g, b);
831
- var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);
832
- return (a == 1) ?
833
- "hsl(" + h + ", " + s + "%, " + l + "%)" :
834
- "hsla(" + h + ", " + s + "%, " + l + "%, " + a + ")";
835
- },
836
- toHex: function () {
837
- return rgbToHex(r, g, b);
838
- },
839
- toHexString: function (force6Char) {
840
- return '#' + rgbToHex(r, g, b, force6Char);
841
- },
842
- toRgb: function () {
843
- return { r: mathRound(r), g: mathRound(g), b: mathRound(b), a: a };
844
- },
845
- toRgbString: function () {
846
- return (a == 1) ?
847
- "rgb(" + mathRound(r) + ", " + mathRound(g) + ", " + mathRound(b) + ")" :
848
- "rgba(" + mathRound(r) + ", " + mathRound(g) + ", " + mathRound(b) + ", " + a + ")";
849
- },
850
- toName: function () {
851
- return hexNames[rgbToHex(r, g, b)] || false;
852
- },
853
- toFilter: function () {
854
- var hex = rgbToHex(r, g, b);
855
- var alphaHex = Math.round(parseFloat(a) * 255).toString(16);
856
- return "progid:DXImageTransform.Microsoft.gradient(startColorstr=#" +
857
- alphaHex + hex + ",endColorstr=#" + alphaHex + hex + ")";
858
- },
859
- toString: function (format) {
860
- format = format || this.format;
861
- var formattedString = false;
862
- if (format === "rgb") {
863
- formattedString = this.toRgbString();
864
- }
865
- if (format === "hex") {
866
- formattedString = this.toHexString();
867
- }
868
- if (format === "hex6") {
869
- formattedString = this.toHexString(true);
870
- }
871
- if (format === "name") {
872
- formattedString = this.toName();
873
- }
874
- if (format === "hsl") {
875
- formattedString = this.toHslString();
876
- }
877
- if (format === "hsv") {
878
- formattedString = this.toHsvString();
879
- }
880
-
881
- return formattedString || this.toHexString();
882
- }
883
- };
884
- }
885
-
886
- // If input is an object, force 1 into "1.0" to handle ratios properly
887
- // String input requires "1.0" as input, so 1 will be treated as 1
888
- tinycolor.fromRatio = function(color) {
889
-
890
- if (typeof color == "object") {
891
- for (var i in color) {
892
- if (color[i] === 1) {
893
- color[i] = "1.0";
894
- }
895
- }
896
- }
897
-
898
- return tinycolor(color);
899
-
900
- }
901
-
902
- // Given a string or object, convert that input to RGB
903
- // Possible string inputs:
904
- //
905
- // "red"
906
- // "#f00" or "f00"
907
- // "#ff0000" or "ff0000"
908
- // "rgb 255 0 0" or "rgb (255, 0, 0)"
909
- // "rgb 1.0 0 0" or "rgb (1, 0, 0)"
910
- // "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1"
911
- // "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1"
912
- // "hsl(0, 100%, 50%)" or "hsl 0 100% 50%"
913
- // "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1"
914
- // "hsv(0, 100%, 100%)" or "hsv 0 100% 100%"
915
- //
916
- function inputToRGB(color) {
917
-
918
- var rgb = { r: 0, g: 0, b: 0 };
919
- var a = 1;
920
- var ok = false;
921
- var format = false;
922
-
923
- if (typeof color == "string") {
924
- color = stringInputToObject(color);
925
- }
926
-
927
- if (typeof color == "object") {
928
- if (color.hasOwnProperty("r") && color.hasOwnProperty("g") && color.hasOwnProperty("b")) {
929
- rgb = rgbToRgb(color.r, color.g, color.b);
930
- ok = true;
931
- format = "rgb";
932
- }
933
- else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("v")) {
934
- rgb = hsvToRgb(color.h, color.s, color.v);
935
- ok = true;
936
- format = "hsv";
937
- }
938
- else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("l")) {
939
- var rgb = hslToRgb(color.h, color.s, color.l);
940
- ok = true;
941
- format = "hsl";
942
- }
943
-
944
- if (color.hasOwnProperty("a")) {
945
- a = color.a;
946
- }
947
- }
948
-
949
- rgb.r = mathMin(255, mathMax(rgb.r, 0));
950
- rgb.g = mathMin(255, mathMax(rgb.g, 0));
951
- rgb.b = mathMin(255, mathMax(rgb.b, 0));
952
-
953
-
954
- // Don't let the range of [0,255] come back in [0,1].
955
- // Potentially lose a little bit of precision here, but will fix issues where
956
- // .5 gets interpreted as half of the total, instead of half of 1.
957
- // If it was supposed to be 128, this was already taken care of in the conversion function
958
- if (rgb.r < 1) { rgb.r = mathRound(rgb.r); }
959
- if (rgb.g < 1) { rgb.g = mathRound(rgb.g); }
960
- if (rgb.b < 1) { rgb.b = mathRound(rgb.b); }
961
-
962
- return {
963
- ok: ok,
964
- format: (color && color.format) || format,
965
- r: rgb.r,
966
- g: rgb.g,
967
- b: rgb.b,
968
- a: a
969
- };
970
- }
971
-
972
-
973
-
974
- // Conversion Functions
975
- // --------------------
976
-
977
- // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:
978
- // <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>
979
-
980
- // `rgbToRgb`
981
- // Handle bounds / percentage checking to conform to CSS color spec
982
- // <http://www.w3.org/TR/css3-color/>
983
- // *Assumes:* r, g, b in [0, 255] or [0, 1]
984
- // *Returns:* { r, g, b } in [0, 255]
985
- function rgbToRgb(r, g, b) {
986
- return {
987
- r: bound01(r, 255) * 255,
988
- g: bound01(g, 255) * 255,
989
- b: bound01(b, 255) * 255
990
- };
991
- }
992
-
993
- // `rgbToHsl`
994
- // Converts an RGB color value to HSL.
995
- // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]
996
- // *Returns:* { h, s, l } in [0,1]
997
- function rgbToHsl(r, g, b) {
998
-
999
- r = bound01(r, 255);
1000
- g = bound01(g, 255);
1001
- b = bound01(b, 255);
1002
-
1003
- var max = mathMax(r, g, b), min = mathMin(r, g, b);
1004
- var h, s, l = (max + min) / 2;
1005
-
1006
- if (max == min) {
1007
- h = s = 0; // achromatic
1008
- }
1009
- else {
1010
- var d = max - min;
1011
- s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
1012
- switch (max) {
1013
- case r: h = (g - b) / d + (g < b ? 6 : 0); break;
1014
- case g: h = (b - r) / d + 2; break;
1015
- case b: h = (r - g) / d + 4; break;
1016
- }
1017
-
1018
- h /= 6;
1019
- }
1020
-
1021
- return { h: h, s: s, l: l };
1022
- }
1023
-
1024
- // `hslToRgb`
1025
- // Converts an HSL color value to RGB.
1026
- // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]
1027
- // *Returns:* { r, g, b } in the set [0, 255]
1028
- function hslToRgb(h, s, l) {
1029
- var r, g, b;
1030
-
1031
- h = bound01(h, 360);
1032
- s = bound01(s, 100);
1033
- l = bound01(l, 100);
1034
-
1035
- function hue2rgb(p, q, t) {
1036
- if (t < 0) t += 1;
1037
- if (t > 1) t -= 1;
1038
- if (t < 1 / 6) return p + (q - p) * 6 * t;
1039
- if (t < 1 / 2) return q;
1040
- if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
1041
- return p;
1042
- }
1043
-
1044
- if (s == 0) {
1045
- r = g = b = l; // achromatic
1046
- }
1047
- else {
1048
- var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
1049
- var p = 2 * l - q;
1050
- r = hue2rgb(p, q, h + 1 / 3);
1051
- g = hue2rgb(p, q, h);
1052
- b = hue2rgb(p, q, h - 1 / 3);
1053
- }
1054
-
1055
- return { r: r * 255, g: g * 255, b: b * 255 };
1056
- }
1057
-
1058
- // `rgbToHsv`
1059
- // Converts an RGB color value to HSV
1060
- // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]
1061
- // *Returns:* { h, s, v } in [0,1]
1062
- function rgbToHsv(r, g, b) {
1063
-
1064
- r = bound01(r, 255);
1065
- g = bound01(g, 255);
1066
- b = bound01(b, 255);
1067
-
1068
- var max = mathMax(r, g, b), min = mathMin(r, g, b);
1069
- var h, s, v = max;
1070
-
1071
- var d = max - min;
1072
- s = max == 0 ? 0 : d / max;
1073
-
1074
- if (max == min) {
1075
- h = 0; // achromatic
1076
- }
1077
- else {
1078
- switch (max) {
1079
- case r: h = (g - b) / d + (g < b ? 6 : 0); break;
1080
- case g: h = (b - r) / d + 2; break;
1081
- case b: h = (r - g) / d + 4; break;
1082
- }
1083
- h /= 6;
1084
- }
1085
- return { h: h, s: s, v: v };
1086
- }
1087
-
1088
- // `hsvToRgb`
1089
- // Converts an HSV color value to RGB.
1090
- // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]
1091
- // *Returns:* { r, g, b } in the set [0, 255]
1092
- function hsvToRgb(h, s, v) {
1093
- var r, g, b;
1094
-
1095
- h = bound01(h, 360) * 6;
1096
- s = bound01(s, 100);
1097
- v = bound01(v, 100);
1098
-
1099
- var i = math.floor(h),
1100
- f = h - i,
1101
- p = v * (1 - s),
1102
- q = v * (1 - f * s),
1103
- t = v * (1 - (1 - f) * s),
1104
- mod = i % 6,
1105
- r = [v, q, p, p, t, v][mod],
1106
- g = [t, v, v, q, p, p][mod],
1107
- b = [p, p, t, v, v, q][mod];
1108
-
1109
- return { r: r * 255, g: g * 255, b: b * 255 };
1110
- }
1111
-
1112
- // `rgbToHex`
1113
- // Converts an RGB color to hex
1114
- // Assumes r, g, and b are contained in the set [0, 255]
1115
- // Returns a 3 or 6 character hex
1116
- function rgbToHex(r, g, b, force6Char) {
1117
- function pad(c) {
1118
- return c.length == 1 ? '0' + c : '' + c;
1119
- }
1120
-
1121
- var hex = [
1122
- pad(mathRound(r).toString(16)),
1123
- pad(mathRound(g).toString(16)),
1124
- pad(mathRound(b).toString(16))
1125
- ];
1126
-
1127
- // Return a 3 character hex if possible
1128
- if (!force6Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {
1129
- return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);
1130
- }
1131
-
1132
- return hex.join("");
1133
- }
1134
-
1135
- // `equals`
1136
- // Can be called with any tinycolor input
1137
- tinycolor.equals = function (color1, color2) {
1138
- if (!color1 || !color2) { return false; }
1139
- return tinycolor(color1).toHex() == tinycolor(color2).toHex();
1140
- };
1141
- tinycolor.random = function () {
1142
- return tinycolor.fromRatio({
1143
- r: mathRandom(),
1144
- g: mathRandom(),
1145
- b: mathRandom()
1146
- });
1147
- };
1148
-
1149
-
1150
- // Modification Functions
1151
- // ----------------------
1152
- // Thanks to less.js for some of the basics here
1153
- // <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>
1154
-
1155
-
1156
- tinycolor.desaturate = function (color, amount) {
1157
- var hsl = tinycolor(color).toHsl();
1158
- hsl.s -= ((amount || 10) / 100);
1159
- hsl.s = clamp01(hsl.s);
1160
- return tinycolor(hsl);
1161
- };
1162
- tinycolor.saturate = function (color, amount) {
1163
- var hsl = tinycolor(color).toHsl();
1164
- hsl.s += ((amount || 10) / 100);
1165
- hsl.s = clamp01(hsl.s);
1166
- return tinycolor(hsl);
1167
- };
1168
- tinycolor.greyscale = function (color) {
1169
- return tinycolor.desaturate(color, 100);
1170
- };
1171
- tinycolor.lighten = function (color, amount) {
1172
- var hsl = tinycolor(color).toHsl();
1173
- hsl.l += ((amount || 10) / 100);
1174
- hsl.l = clamp01(hsl.l);
1175
- return tinycolor(hsl);
1176
- };
1177
- tinycolor.darken = function (color, amount) {
1178
- var hsl = tinycolor(color).toHsl();
1179
- hsl.l -= ((amount || 10) / 100);
1180
- hsl.l = clamp01(hsl.l);
1181
- return tinycolor(hsl);
1182
- };
1183
- tinycolor.complement = function (color) {
1184
- var hsl = tinycolor(color).toHsl();
1185
- hsl.h = (hsl.h + .5) % 1;
1186
- return tinycolor(hsl);
1187
- };
1188
-
1189
-
1190
- // Combination Functions
1191
- // ---------------------
1192
- // Thanks to jQuery xColor for some of the ideas behind these
1193
- // <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>
1194
-
1195
- tinycolor.triad = function (color) {
1196
- var hsl = tinycolor(color).toHsl();
1197
- var h = hsl.h * 360;
1198
- return [
1199
- tinycolor(color),
1200
- tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),
1201
- tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })
1202
- ];
1203
- };
1204
- tinycolor.tetrad = function (color) {
1205
- var hsl = tinycolor(color).toHsl();
1206
- var h = hsl.h * 360;
1207
- return [
1208
- tinycolor(color),
1209
- tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),
1210
- tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),
1211
- tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })
1212
- ];
1213
- };
1214
- tinycolor.splitcomplement = function (color) {
1215
- var hsl = tinycolor(color).toHsl();
1216
- var h = hsl.h * 360;
1217
- return [
1218
- tinycolor(color),
1219
- tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l }),
1220
- tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l })
1221
- ];
1222
- };
1223
- tinycolor.analogous = function (color, results, slices) {
1224
- results = results || 6;
1225
- slices = slices || 30;
1226
-
1227
- var hsl = tinycolor(color).toHsl();
1228
- var part = 360 / slices
1229
- var ret = [tinycolor(color)];
1230
-
1231
- hsl.h *= 360;
1232
-
1233
- for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {
1234
- hsl.h = (hsl.h + part) % 360;
1235
- ret.push(tinycolor(hsl));
1236
- }
1237
- return ret;
1238
- };
1239
- tinycolor.monochromatic = function (color, results) {
1240
- results = results || 6;
1241
- var hsv = tinycolor(color).toHsv();
1242
- var h = hsv.h, s = hsv.s, v = hsv.v;
1243
- var ret = [];
1244
- var modification = 1 / results;
1245
-
1246
- while (results--) {
1247
- ret.push(tinycolor({ h: h, s: s, v: v }));
1248
- v = (v + modification) % 1;
1249
- }
1250
-
1251
- return ret;
1252
- };
1253
- tinycolor.readable = function (color1, color2) {
1254
- var a = tinycolor(color1).toRgb(), b = tinycolor(color2).toRgb();
1255
- return (
1256
- (b.r - a.r) * (b.r - a.r) +
1257
- (b.g - a.g) * (b.g - a.g) +
1258
- (b.b - a.b) * (b.b - a.b)
1259
- ) > 0x28A4;
1260
- };
1261
-
1262
- // Big List of Colors
1263
- // ---------
1264
- // <http://www.w3.org/TR/css3-color/#svg-color>
1265
- var names = tinycolor.names = {
1266
- aliceblue: "f0f8ff",
1267
- antiquewhite: "faebd7",
1268
- aqua: "0ff",
1269
- aquamarine: "7fffd4",
1270
- azure: "f0ffff",
1271
- beige: "f5f5dc",
1272
- bisque: "ffe4c4",
1273
- black: "000",
1274
- blanchedalmond: "ffebcd",
1275
- blue: "00f",
1276
- blueviolet: "8a2be2",
1277
- brown: "a52a2a",
1278
- burlywood: "deb887",
1279
- burntsienna: "ea7e5d",
1280
- cadetblue: "5f9ea0",
1281
- chartreuse: "7fff00",
1282
- chocolate: "d2691e",
1283
- coral: "ff7f50",
1284
- cornflowerblue: "6495ed",
1285
- cornsilk: "fff8dc",
1286
- crimson: "dc143c",
1287
- cyan: "0ff",
1288
- darkblue: "00008b",
1289
- darkcyan: "008b8b",
1290
- darkgoldenrod: "b8860b",
1291
- darkgray: "a9a9a9",
1292
- darkgreen: "006400",
1293
- darkgrey: "a9a9a9",
1294
- darkkhaki: "bdb76b",
1295
- darkmagenta: "8b008b",
1296
- darkolivegreen: "556b2f",
1297
- darkorange: "ff8c00",
1298
- darkorchid: "9932cc",
1299
- darkred: "8b0000",
1300
- darksalmon: "e9967a",
1301
- darkseagreen: "8fbc8f",
1302
- darkslateblue: "483d8b",
1303
- darkslategray: "2f4f4f",
1304
- darkslategrey: "2f4f4f",
1305
- darkturquoise: "00ced1",
1306
- darkviolet: "9400d3",
1307
- deeppink: "ff1493",
1308
- deepskyblue: "00bfff",
1309
- dimgray: "696969",
1310
- dimgrey: "696969",
1311
- dodgerblue: "1e90ff",
1312
- firebrick: "b22222",
1313
- floralwhite: "fffaf0",
1314
- forestgreen: "228b22",
1315
- fuchsia: "f0f",
1316
- gainsboro: "dcdcdc",
1317
- ghostwhite: "f8f8ff",
1318
- gold: "ffd700",
1319
- goldenrod: "daa520",
1320
- gray: "808080",
1321
- green: "008000",
1322
- greenyellow: "adff2f",
1323
- grey: "808080",
1324
- honeydew: "f0fff0",
1325
- hotpink: "ff69b4",
1326
- indianred: "cd5c5c",
1327
- indigo: "4b0082",
1328
- ivory: "fffff0",
1329
- khaki: "f0e68c",
1330
- lavender: "e6e6fa",
1331
- lavenderblush: "fff0f5",
1332
- lawngreen: "7cfc00",
1333
- lemonchiffon: "fffacd",
1334
- lightblue: "add8e6",
1335
- lightcoral: "f08080",
1336
- lightcyan: "e0ffff",
1337
- lightgoldenrodyellow: "fafad2",
1338
- lightgray: "d3d3d3",
1339
- lightgreen: "90ee90",
1340
- lightgrey: "d3d3d3",
1341
- lightpink: "ffb6c1",
1342
- lightsalmon: "ffa07a",
1343
- lightseagreen: "20b2aa",
1344
- lightskyblue: "87cefa",
1345
- lightslategray: "789",
1346
- lightslategrey: "789",
1347
- lightsteelblue: "b0c4de",
1348
- lightyellow: "ffffe0",
1349
- lime: "0f0",
1350
- limegreen: "32cd32",
1351
- linen: "faf0e6",
1352
- magenta: "f0f",
1353
- maroon: "800000",
1354
- mediumaquamarine: "66cdaa",
1355
- mediumblue: "0000cd",
1356
- mediumorchid: "ba55d3",
1357
- mediumpurple: "9370db",
1358
- mediumseagreen: "3cb371",
1359
- mediumslateblue: "7b68ee",
1360
- mediumspringgreen: "00fa9a",
1361
- mediumturquoise: "48d1cc",
1362
- mediumvioletred: "c71585",
1363
- midnightblue: "191970",
1364
- mintcream: "f5fffa",
1365
- mistyrose: "ffe4e1",
1366
- moccasin: "ffe4b5",
1367
- navajowhite: "ffdead",
1368
- navy: "000080",
1369
- oldlace: "fdf5e6",
1370
- olive: "808000",
1371
- olivedrab: "6b8e23",
1372
- orange: "ffa500",
1373
- orangered: "ff4500",
1374
- orchid: "da70d6",
1375
- palegoldenrod: "eee8aa",
1376
- palegreen: "98fb98",
1377
- paleturquoise: "afeeee",
1378
- palevioletred: "db7093",
1379
- papayawhip: "ffefd5",
1380
- peachpuff: "ffdab9",
1381
- peru: "cd853f",
1382
- pink: "ffc0cb",
1383
- plum: "dda0dd",
1384
- powderblue: "b0e0e6",
1385
- purple: "800080",
1386
- red: "f00",
1387
- rosybrown: "bc8f8f",
1388
- royalblue: "4169e1",
1389
- saddlebrown: "8b4513",
1390
- salmon: "fa8072",
1391
- sandybrown: "f4a460",
1392
- seagreen: "2e8b57",
1393
- seashell: "fff5ee",
1394
- sienna: "a0522d",
1395
- silver: "c0c0c0",
1396
- skyblue: "87ceeb",
1397
- slateblue: "6a5acd",
1398
- slategray: "708090",
1399
- slategrey: "708090",
1400
- snow: "fffafa",
1401
- springgreen: "00ff7f",
1402
- steelblue: "4682b4",
1403
- tan: "d2b48c",
1404
- teal: "008080",
1405
- thistle: "d8bfd8",
1406
- tomato: "ff6347",
1407
- turquoise: "40e0d0",
1408
- violet: "ee82ee",
1409
- wheat: "f5deb3",
1410
- white: "fff",
1411
- whitesmoke: "f5f5f5",
1412
- yellow: "ff0",
1413
- yellowgreen: "9acd32"
1414
- };
1415
-
1416
- // Make it easy to access colors via `hexNames[hex]`
1417
- var hexNames = tinycolor.hexNames = flip(names);
1418
-
1419
-
1420
- // Utilities
1421
- // ---------
1422
-
1423
- // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`
1424
- function flip(o) {
1425
- var flipped = {};
1426
- for (var i in o) {
1427
- if (o.hasOwnProperty(i)) {
1428
- flipped[o[i]] = i;
1429
- }
1430
- }
1431
- return flipped;
1432
- }
1433
-
1434
- // Take input from [0, n] and return it as [0, 1]
1435
- function bound01(n, max) {
1436
- if (isOnePointZero(n)) { n = "100%"; }
1437
-
1438
- var processPercent = isPercentage(n);
1439
- n = mathMin(max, mathMax(0, parseFloat(n)));
1440
-
1441
- // Automatically convert percentage into number
1442
- if (processPercent) {
1443
- n = n * (max / 100);
1444
- }
1445
-
1446
- // Handle floating point rounding errors
1447
- if ((math.abs(n - max) < 0.000001)) {
1448
- return 1;
1449
- }
1450
- else if (n >= 1) {
1451
- return (n % max) / parseFloat(max);
1452
- }
1453
- return n;
1454
- }
1455
-
1456
- // Force a number between 0 and 1
1457
- function clamp01(val) {
1458
- return mathMin(1, mathMax(0, val));
1459
- }
1460
-
1461
- // Parse an integer into hex
1462
- function parseHex(val) {
1463
- return parseInt(val, 16);
1464
- }
1465
-
1466
- // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1
1467
- // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>
1468
- function isOnePointZero(n) {
1469
- return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1;
1470
- }
1471
-
1472
- // Check to see if string passed in is a percentage
1473
- function isPercentage(n) {
1474
- return typeof n === "string" && n.indexOf('%') != -1;
1475
- }
1476
-
1477
- var matchers = (function () {
1478
-
1479
- // <http://www.w3.org/TR/css3-values/#integers>
1480
- var CSS_INTEGER = "[-\\+]?\\d+%?";
1481
-
1482
- // <http://www.w3.org/TR/css3-values/#number-value>
1483
- var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?";
1484
-
1485
- // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.
1486
- var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")";
1487
-
1488
- // Actual matching.
1489
- // Parentheses and commas are optional, but not required.
1490
- // Whitespace can take the place of commas or opening paren
1491
- var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
1492
- var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
1493
-
1494
- return {
1495
- rgb: new RegExp("rgb" + PERMISSIVE_MATCH3),
1496
- rgba: new RegExp("rgba" + PERMISSIVE_MATCH4),
1497
- hsl: new RegExp("hsl" + PERMISSIVE_MATCH3),
1498
- hsla: new RegExp("hsla" + PERMISSIVE_MATCH4),
1499
- hsv: new RegExp("hsv" + PERMISSIVE_MATCH3),
1500
- hex3: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
1501
- hex6: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/
1502
- };
1503
- })();
1504
-
1505
- // `stringInputToObject`
1506
- // Permissive string parsing. Take in a number of formats, and output an object
1507
- // based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`
1508
- function stringInputToObject(color) {
1509
-
1510
- color = color.replace(trimLeft, '').replace(trimRight, '').toLowerCase();
1511
- var named = false;
1512
- if (names[color]) {
1513
- color = names[color];
1514
- named = true;
1515
- }
1516
- else if (color == 'transparent') {
1517
- return { r: 0, g: 0, b: 0, a: 0 };
1518
- }
1519
-
1520
- // Try to match string input using regular expressions.
1521
- // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]
1522
- // Just return an object and let the conversion functions handle that.
1523
- // This way the result will be the same whether the tinycolor is initialized with string or object.
1524
- var match;
1525
- if ((match = matchers.rgb.exec(color))) {
1526
- return { r: match[1], g: match[2], b: match[3] };
1527
- }
1528
- if ((match = matchers.rgba.exec(color))) {
1529
- return { r: match[1], g: match[2], b: match[3], a: match[4] };
1530
- }
1531
- if ((match = matchers.hsl.exec(color))) {
1532
- return { h: match[1], s: match[2], l: match[3] };
1533
- }
1534
- if ((match = matchers.hsla.exec(color))) {
1535
- return { h: match[1], s: match[2], l: match[3], a: match[4] };
1536
- }
1537
- if ((match = matchers.hsv.exec(color))) {
1538
- return { h: match[1], s: match[2], v: match[3] };
1539
- }
1540
- if ((match = matchers.hex6.exec(color))) {
1541
- return {
1542
- r: parseHex(match[1]),
1543
- g: parseHex(match[2]),
1544
- b: parseHex(match[3]),
1545
- format: named ? "name" : "hex"
1546
- };
1547
- }
1548
- if ((match = matchers.hex3.exec(color))) {
1549
- return {
1550
- r: parseHex(match[1] + '' + match[1]),
1551
- g: parseHex(match[2] + '' + match[2]),
1552
- b: parseHex(match[3] + '' + match[3]),
1553
- format: named ? "name" : "hex"
1554
- };
1555
- }
1556
-
1557
- return false;
1558
- }
1559
-
1560
- // Everything is ready, expose to window
1561
- window.tinycolor = tinycolor;
1562
-
1563
- })(this);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
admin/cli-admin-page.php CHANGED
@@ -128,13 +128,28 @@ function cookielawinfo_print_admin_page() {
128
  </div>
129
  </div>
130
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
131
 
132
  <!-- Accordion -->
133
- <div id="cookielawinfo-accordion">
134
 
135
 
136
- <h3><a href="#">Settings</a></h3>
137
- <div>
138
  <h4>The Cookie Bar</h4>
139
  <table class="form-table">
140
  <tr valign="top">
@@ -196,6 +211,23 @@ function cookielawinfo_print_admin_page() {
196
  </select>
197
  </td>
198
  </tr>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
199
  </table>
200
 
201
  <h4>The Show Again Tab</h4>
@@ -240,11 +272,11 @@ function cookielawinfo_print_admin_page() {
240
  </tr>
241
  </table>
242
 
243
- </div>
244
 
245
 
246
- <h3><a href="#">Cookie Law Message Bar</a></h3>
247
- <div>
248
  <table class="form-table">
249
  <tr valign="top">
250
  <th scope="row"><label for="notify_message_field">Message</label></th>
@@ -260,7 +292,11 @@ function cookielawinfo_print_admin_page() {
260
  <th scope="row"><label for="background_field">Cookie Bar Colour</label></th>
261
  <td>
262
  <?php
263
- echo '<input type="text" name="background_field" id="cli-colour-background" value="' .$the_options['background']. '" />';
 
 
 
 
264
  ?>
265
  </td>
266
  </tr>
@@ -268,7 +304,8 @@ function cookielawinfo_print_admin_page() {
268
  <th scope="row"><label for="text_field">Text Colour</label></th>
269
  <td>
270
  <?php
271
- echo '<input type="text" name="text_field" id="cli-colour-text" value="' .$the_options['text']. '" />';
 
272
  ?>
273
  </td>
274
  </tr>
@@ -284,7 +321,7 @@ function cookielawinfo_print_admin_page() {
284
  <th scope="row"><label for="border_field">Border Colour</label></th>
285
  <td>
286
  <?php
287
- echo '<input type="text" name="border_field" id="cli-colour-border" value="' .$the_options['border']. '" />';
288
  ?>
289
  </td>
290
  </tr>
@@ -297,11 +334,11 @@ function cookielawinfo_print_admin_page() {
297
  </td>
298
  </tr>
299
  </table>
300
- </div>
301
 
302
 
303
- <h3><a href="#">Customise Buttons</a></h3>
304
- <div>
305
 
306
  <h4>Main Button <code>[cookie_button]</code></h4>
307
  <p>This button/link can be customised to either simply close the cookie bar, or follow a link. You can also customise the colours and styles, and show it as a link or a button.</p>
@@ -339,7 +376,7 @@ function cookielawinfo_print_admin_page() {
339
  <th scope="row"><label for="button_1_link_colour_field">Link colour</label></th>
340
  <td>
341
  <?php
342
- echo '<input type="text" name="button_1_link_colour_field" id="cli-colour-link-button-1" value="' .$the_options['button_1_link_colour']. '" />';
343
  ?>
344
  </td>
345
  </tr>
@@ -354,7 +391,7 @@ function cookielawinfo_print_admin_page() {
354
  <th scope="row"><label for="button_1_button_colour_field">Button colour</label></th>
355
  <td>
356
  <?php
357
- echo '<input type="text" name="button_1_button_colour_field" id="cli-colour-btn-button-1" value="' .$the_options['button_1_button_colour']. '" />';
358
  ?>
359
  </td>
360
  </tr>
@@ -388,7 +425,7 @@ function cookielawinfo_print_admin_page() {
388
  <th scope="row"><label for="button_2_link_colour_field">Link colour</label></th>
389
  <td>
390
  <?php
391
- echo '<input type="text" name="button_2_link_colour_field" id="cli-colour-link-button-1" value="' .$the_options['button_2_link_colour']. '" />';
392
  ?>
393
  </td>
394
  </tr>
@@ -412,7 +449,7 @@ function cookielawinfo_print_admin_page() {
412
  <th scope="row"><label for="button_2_button_colour_field">Button colour</label></th>
413
  <td>
414
  <?php
415
- echo '<input type="text" name="button_2_button_colour_field" id="cli-colour-btn-button-1" value="' .$the_options['button_2_button_colour']. '" />';
416
  ?>
417
  </td>
418
  </tr>
@@ -426,10 +463,10 @@ function cookielawinfo_print_admin_page() {
426
  </tr>
427
  </table><!-- end custom button -->
428
 
429
- </div>
430
 
431
- <h3><a href="#">Using the Shortcodes</a></h3>
432
- <div class="cli-help">
433
  <h4>Cookie bar shortcodes</h4>
434
  <p>You can enter the shortcodes in the "message" field of the Cookie Law Info bar. They add nicely formatted buttons and/or links into the cookie bar, without you having to add any HTML.</p>
435
  <p>The shortcodes are:</p>
@@ -447,16 +484,19 @@ function cookielawinfo_print_admin_page() {
447
 
448
  <pre>[cookie_audit]</pre><span>This prints out a nice table of cookies, in line with the guidance given by the ICO. <em>You need to enter the cookies your website uses via the Cookie Law Info menu in your WordPress dashboard.</em></span>
449
 
450
- <pre>[cookie_delete]</pre><span>This shortcode will display a normal HTML link which when clicked, will delete the cookie set by Cookie Law Info (this cookie is used to remember that the cookie bar is closed).</span>
 
451
 
452
- </div>
 
453
 
454
 
455
- <h3><a href="#">Advanced</a></h3>
456
- <div>
457
  <p>Sometimes themes apply settings that clash with plugins. If that happens, try adjusting these settings.</p>
458
 
459
  <table class="form-table">
 
460
  <tr valign="top">
461
  <th scope="row"><label for="use_colour_picker_field">Use colour picker on this page?</label></th>
462
  <td>
@@ -465,6 +505,7 @@ function cookielawinfo_print_admin_page() {
465
  <span class="cli-plugin-example"><em>You will need to refresh your browser once the page re-loads in order to show the colour pickers.</em></span>
466
  </td>
467
  </tr>
 
468
  <tr valign="top">
469
  <th scope="row">Reset all values</th>
470
  <td>
@@ -483,9 +524,9 @@ function cookielawinfo_print_admin_page() {
483
  -->
484
  </table>
485
 
486
- </div>
487
 
488
- </div><!-- end of cookielawinfo-accordion -->
489
 
490
 
491
  <!-- Second save button -->
@@ -556,6 +597,22 @@ function cookielawinfo_print_admin_page() {
556
  </div><!-- end of cli-plugin-container -->
557
 
558
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
559
  <?php
560
  if ( !cookielawinfo_has_migrated() ) {
561
  ?>
128
  </div>
129
  </div>
130
 
131
+ <style>
132
+ /* http://css-tricks.com/snippets/jquery/simple-jquery-accordion/ ...with custom CSS */
133
+ dl.accordion dt {
134
+ background: #fff;
135
+ border: 1px #ccc solid;
136
+ color: #333;
137
+ font-size: 12px;
138
+ margin-bottom: 10px;
139
+ padding: 8px;
140
+ -moz-border-radius: 5px;
141
+ -webkit-border-radius: 5px;
142
+ border-radius: 5px;
143
+ -khtml-border-radius: 5px;
144
+ }
145
+ </style>
146
 
147
  <!-- Accordion -->
148
+ <dl class="accordion">
149
 
150
 
151
+ <dt class="ui-icon ui-icon-triangle-1-s"><a href="#">Settings</a></dt>
152
+ <dd id="accordion_default">
153
  <h4>The Cookie Bar</h4>
154
  <table class="form-table">
155
  <tr valign="top">
211
  </select>
212
  </td>
213
  </tr>
214
+
215
+ <!-- NEW: SHOW ONCE / TIMER -->
216
+ <tr valign="top">
217
+ <th scope="row"><label for="show_once_yn_field">Auto-hide cookie bar after delay?</label></th>
218
+ <td>
219
+ <input type="radio" id="show_once_yn_yes" name="show_once_yn_field" class="styled" value="true" <?php echo ( $the_options['show_once_yn'] == true ) ? ' checked="checked" />' : ' />'; ?> Yes
220
+ <input type="radio" id="show_once_yn_no" name="show_once_yn_field" class="styled" value="false" <?php echo ( $the_options['show_once_yn'] == false ) ? ' checked="checked" />' : ' />'; ?> No
221
+ </td>
222
+ </tr>
223
+ <tr valign="top">
224
+ <th scope="row"><label for="show_once_field">Milliseconds until hidden</label></th>
225
+ <td>
226
+ <input type="text" name="show_once_field" value="<?php echo $the_options['show_once'] ?>" />
227
+ <span class="cli-plugin-example">Specify milliseconds (not seconds) e.g. <em>8000 = 8 seconds</em></span>
228
+ </td>
229
+ </tr>
230
+
231
  </table>
232
 
233
  <h4>The Show Again Tab</h4>
272
  </tr>
273
  </table>
274
 
275
+ </dd>
276
 
277
 
278
+ <dt><a href="#">Cookie Law Message Bar</a></dt>
279
+ <dd>
280
  <table class="form-table">
281
  <tr valign="top">
282
  <th scope="row"><label for="notify_message_field">Message</label></th>
292
  <th scope="row"><label for="background_field">Cookie Bar Colour</label></th>
293
  <td>
294
  <?php
295
+
296
+ /** RICHARDASHBY EDIT */
297
+ //echo '<input type="text" name="background_field" id="cli-colour-background" value="' .$the_options['background']. '" />';
298
+ echo '<input type="text" name="background_field" id="cli-colour-background" value="' .$the_options['background']. '" class="my-color-field" data-default-color="#fff" />';
299
+
300
  ?>
301
  </td>
302
  </tr>
304
  <th scope="row"><label for="text_field">Text Colour</label></th>
305
  <td>
306
  <?php
307
+ /** RICHARDASHBY EDIT */
308
+ echo '<input type="text" name="text_field" id="cli-colour-text" value="' .$the_options['text']. '" class="my-color-field" data-default-color="#000" />';
309
  ?>
310
  </td>
311
  </tr>
321
  <th scope="row"><label for="border_field">Border Colour</label></th>
322
  <td>
323
  <?php
324
+ echo '<input type="text" name="border_field" id="cli-colour-border" value="' .$the_options['border']. '" class="my-color-field" />';
325
  ?>
326
  </td>
327
  </tr>
334
  </td>
335
  </tr>
336
  </table>
337
+ </dd>
338
 
339
 
340
+ <dt><a href="#">Customise Buttons</a></dt>
341
+ <dd>
342
 
343
  <h4>Main Button <code>[cookie_button]</code></h4>
344
  <p>This button/link can be customised to either simply close the cookie bar, or follow a link. You can also customise the colours and styles, and show it as a link or a button.</p>
376
  <th scope="row"><label for="button_1_link_colour_field">Link colour</label></th>
377
  <td>
378
  <?php
379
+ echo '<input type="text" name="button_1_link_colour_field" id="cli-colour-link-button-1" value="' .$the_options['button_1_link_colour']. '" class="my-color-field" />';
380
  ?>
381
  </td>
382
  </tr>
391
  <th scope="row"><label for="button_1_button_colour_field">Button colour</label></th>
392
  <td>
393
  <?php
394
+ echo '<input type="text" name="button_1_button_colour_field" id="cli-colour-btn-button-1" value="' .$the_options['button_1_button_colour']. '" class="my-color-field" />';
395
  ?>
396
  </td>
397
  </tr>
425
  <th scope="row"><label for="button_2_link_colour_field">Link colour</label></th>
426
  <td>
427
  <?php
428
+ echo '<input type="text" name="button_2_link_colour_field" id="cli-colour-link-button-1" value="' .$the_options['button_2_link_colour']. '" class="my-color-field" />';
429
  ?>
430
  </td>
431
  </tr>
449
  <th scope="row"><label for="button_2_button_colour_field">Button colour</label></th>
450
  <td>
451
  <?php
452
+ echo '<input type="text" name="button_2_button_colour_field" id="cli-colour-btn-button-1" value="' .$the_options['button_2_button_colour']. '" class="my-color-field" />';
453
  ?>
454
  </td>
455
  </tr>
463
  </tr>
464
  </table><!-- end custom button -->
465
 
466
+ </dd>
467
 
468
+ <dt><a href="#">Using the Shortcodes</a></dt>
469
+ <dd class="cli-help">
470
  <h4>Cookie bar shortcodes</h4>
471
  <p>You can enter the shortcodes in the "message" field of the Cookie Law Info bar. They add nicely formatted buttons and/or links into the cookie bar, without you having to add any HTML.</p>
472
  <p>The shortcodes are:</p>
484
 
485
  <pre>[cookie_audit]</pre><span>This prints out a nice table of cookies, in line with the guidance given by the ICO. <em>You need to enter the cookies your website uses via the Cookie Law Info menu in your WordPress dashboard.</em></span>
486
 
487
+ <pre>[delete_cookies]</pre><span>This shortcode will display a normal HTML link which when clicked, will delete the cookie set by Cookie Law Info (this cookie is used to remember that the cookie bar is closed).</span>
488
+ <pre>[delete_cookies text="Click here to delete"]</pre><span>Add any text you like- useful if you want e.g. another language to English.</span>
489
 
490
+
491
+ </dd>
492
 
493
 
494
+ <dt><a href="#">Advanced</a></dt>
495
+ <dd>
496
  <p>Sometimes themes apply settings that clash with plugins. If that happens, try adjusting these settings.</p>
497
 
498
  <table class="form-table">
499
+ <!--
500
  <tr valign="top">
501
  <th scope="row"><label for="use_colour_picker_field">Use colour picker on this page?</label></th>
502
  <td>
505
  <span class="cli-plugin-example"><em>You will need to refresh your browser once the page re-loads in order to show the colour pickers.</em></span>
506
  </td>
507
  </tr>
508
+ -->
509
  <tr valign="top">
510
  <th scope="row">Reset all values</th>
511
  <td>
524
  -->
525
  </table>
526
 
527
+ </dd>
528
 
529
+ </dl><!-- end of cookielawinfo-accordion -->
530
 
531
 
532
  <!-- Second save button -->
597
  </div><!-- end of cli-plugin-container -->
598
 
599
 
600
+ <script type="text/javascript">
601
+ (function($) {
602
+
603
+ var allPanels = $('.accordion > dd').hide();
604
+ $('#accordion_default').show();
605
+
606
+ $('.accordion > dt > a').click(function() {
607
+ allPanels.slideUp();
608
+ $(this).parent().next().slideDown();
609
+ return false;
610
+ });
611
+
612
+ })(jQuery);
613
+ </script>
614
+
615
+
616
  <?php
617
  if ( !cookielawinfo_has_migrated() ) {
618
  ?>
admin/cli-admin.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ jQuery(document).ready(function($){
2
+ $('.my-color-field').wpColorPicker();
3
+ });
admin/cli-admin.php CHANGED
@@ -64,7 +64,9 @@ function cookielawinfo_get_default_settings() {
64
  'showagain_tab' => true,
65
  'showagain_x_position' => '100px',
66
  'text' => '#000',
67
- 'use_colour_picker' => true
 
 
68
  );
69
  return $settings_v0_9;
70
  }
@@ -269,6 +271,7 @@ function cookielawinfo_sanitise($key, $value) {
269
  case 'button_1_as_button':
270
  case 'button_2_new_win':
271
  case 'button_2_as_button':
 
272
  if ( $value == 'true' || $value === true ) {
273
  $ret = true;
274
  }
@@ -346,17 +349,24 @@ function cookielawinfo_custom_dashboard_styles( $hook ) {
346
  wp_register_style( 'cookielawinfo-admin-style', plugins_url('/cookie-law-info/css/cli-admin-style.css') );
347
  wp_enqueue_style( 'cookielawinfo-admin-style' );
348
 
 
 
349
  if ( cookielawinfo_colourpicker_enabled() ) {
350
  wp_enqueue_script('spectrum-colorpicker', plugins_url('/cookie-law-info/admin/bgrins-spectrum/spectrum.js'), array('jquery'));
351
  wp_register_style( 'spectrum-style', plugins_url('/cookie-law-info/admin/bgrins-spectrum/spectrum.css') );
352
  wp_enqueue_style( 'spectrum-style' );
353
  }
 
354
 
 
 
 
355
  wp_enqueue_script('jquery-ui-custom', plugins_url('/cookie-law-info/js/jquery-ui-1.8.20.custom.min.js'), array('jquery'));
356
  wp_enqueue_script('admin-ui-controller', plugins_url('/cookie-law-info/js/admin-ui-controller.js'), array('jquery'));
357
 
358
  wp_register_style( 'jquery-ui-custom', plugins_url('/cookie-law-info/css/smoothness/jquery-ui-1.8.20.custom.css') );
359
  wp_enqueue_style( 'jquery-ui-custom' );
 
360
  }
361
 
362
 
@@ -370,9 +380,13 @@ function cookielawinfo_custom_dashboard_styles_my_colours() {
370
  if ( $screen->post_type != 'cookielawinfo' ) {
371
  return;
372
  }
 
 
 
373
  if( cookielawinfo_colourpicker_enabled() ) {
374
  wp_enqueue_script('spectrum-custom', plugins_url('/cookie-law-info/admin/bgrins-spectrum/my-colours.js'));
375
  }
 
376
  }
377
 
378
 
64
  'showagain_tab' => true,
65
  'showagain_x_position' => '100px',
66
  'text' => '#000',
67
+ 'use_colour_picker' => true,
68
+ 'show_once_yn' => false, // this is a new feature so default = switched off
69
+ 'show_once' => '10000' // 8 seconds
70
  );
71
  return $settings_v0_9;
72
  }
271
  case 'button_1_as_button':
272
  case 'button_2_new_win':
273
  case 'button_2_as_button':
274
+ case 'show_once_yn':
275
  if ( $value == 'true' || $value === true ) {
276
  $ret = true;
277
  }
349
  wp_register_style( 'cookielawinfo-admin-style', plugins_url('/cookie-law-info/css/cli-admin-style.css') );
350
  wp_enqueue_style( 'cookielawinfo-admin-style' );
351
 
352
+ /** RICHARDASHBY EDIT: remove old colourpicker */
353
+ /*
354
  if ( cookielawinfo_colourpicker_enabled() ) {
355
  wp_enqueue_script('spectrum-colorpicker', plugins_url('/cookie-law-info/admin/bgrins-spectrum/spectrum.js'), array('jquery'));
356
  wp_register_style( 'spectrum-style', plugins_url('/cookie-law-info/admin/bgrins-spectrum/spectrum.css') );
357
  wp_enqueue_style( 'spectrum-style' );
358
  }
359
+ */
360
 
361
+ /** RICHARDASHBY EDIT: remove jqueryUI (js and CSS) for accordion tabs */
362
+ /** @todo Replace UI with own jQuery, far simpler! */
363
+ /*
364
  wp_enqueue_script('jquery-ui-custom', plugins_url('/cookie-law-info/js/jquery-ui-1.8.20.custom.min.js'), array('jquery'));
365
  wp_enqueue_script('admin-ui-controller', plugins_url('/cookie-law-info/js/admin-ui-controller.js'), array('jquery'));
366
 
367
  wp_register_style( 'jquery-ui-custom', plugins_url('/cookie-law-info/css/smoothness/jquery-ui-1.8.20.custom.css') );
368
  wp_enqueue_style( 'jquery-ui-custom' );
369
+ */
370
  }
371
 
372
 
380
  if ( $screen->post_type != 'cookielawinfo' ) {
381
  return;
382
  }
383
+
384
+ /** RICHARDASHBY EDIT: remove old colourpicker */
385
+ /*
386
  if( cookielawinfo_colourpicker_enabled() ) {
387
  wp_enqueue_script('spectrum-custom', plugins_url('/cookie-law-info/admin/bgrins-spectrum/my-colours.js'));
388
  }
389
+ */
390
  }
391
 
392
 
cookie-law-info.php CHANGED
@@ -5,24 +5,11 @@ Plugin URI: http://wordpress.org/extend/plugins/cookie-law-info/description/
5
  Description: A simple way of 'implied consent' to show your website complies with the EU Cookie Law, which came into force on 26 May 2012.
6
  Author: Richard Ashby
7
  Author URI: http://www.cookielawinfo.com/
8
- Version: 1.0.3
9
  License: GPL2
10
-
11
- ===============================================================================
12
-
13
- Whilst writing this plugin, somebody very close to me passed away from
14
- prostate cancer.
15
-
16
- If you found this software useful, please consider making a donation to
17
- cancer research. Your donation, no matter how small, makes a real difference.
18
-
19
- Thank You.
20
-
21
- http://uk.movember.com/mospace/1853714/
22
- www.cancerresearchuk.org
23
-
24
- ===============================================================================
25
 
 
26
  Copyright 2012 Richard Ashby (email : richard.ashby@mediacreek.com)
27
 
28
  This program is free software; you can redistribute it and/or modify
@@ -37,7 +24,6 @@ License: GPL2
37
  You should have received a copy of the GNU General Public License
38
  along with this program; if not, write to the Free Software
39
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
40
-
41
  */
42
 
43
 
@@ -78,7 +64,25 @@ add_shortcode( 'cookie_button', 'cookielawinfo_shortcode_main_button' ); // a s
78
 
79
  // Dashboard styles:
80
  add_action( 'admin_enqueue_scripts', 'cookielawinfo_custom_dashboard_styles' );
81
- add_action( 'admin_footer', 'cookielawinfo_custom_dashboard_styles_my_colours' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
 
83
  // Cookie Audit custom post type functions:
84
  add_action( 'admin_init', 'cookielawinfo_custom_posts_admin_init' );
5
  Description: A simple way of 'implied consent' to show your website complies with the EU Cookie Law, which came into force on 26 May 2012.
6
  Author: Richard Ashby
7
  Author URI: http://www.cookielawinfo.com/
8
+ Version: 1.2
9
  License: GPL2
10
+ */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
+ /*
13
  Copyright 2012 Richard Ashby (email : richard.ashby@mediacreek.com)
14
 
15
  This program is free software; you can redistribute it and/or modify
24
  You should have received a copy of the GNU General Public License
25
  along with this program; if not, write to the Free Software
26
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 
27
  */
28
 
29
 
64
 
65
  // Dashboard styles:
66
  add_action( 'admin_enqueue_scripts', 'cookielawinfo_custom_dashboard_styles' );
67
+
68
+
69
+ /** RICHARDASHBY EDIT */
70
+ //add_action( 'admin_footer', 'cookielawinfo_custom_dashboard_styles_my_colours' );
71
+
72
+
73
+
74
+ /** RICHARDASHBY EDIT */
75
+ // WP3.5 colour picker:
76
+ // http://make.wordpress.org/core/2012/11/30/new-color-picker-in-wp-3-5/
77
+ add_action( 'admin_enqueue_scripts', 'cookielawinfo_enqueue_color_picker' );
78
+ function cookielawinfo_enqueue_color_picker( $hook ) {
79
+ if ( 'cookielawinfo_page_cookie-law-info' != $hook )
80
+ return;
81
+ wp_enqueue_style( 'wp-color-picker' );
82
+ wp_enqueue_script( 'cookielawinfo_admin_page_script', plugins_url('admin/cli-admin.js', __FILE__ ), array( 'wp-color-picker' ), false, true );
83
+ }
84
+
85
+
86
 
87
  // Cookie Audit custom post type functions:
88
  add_action( 'admin_init', 'cookielawinfo_custom_posts_admin_init' );
css/cli-tables.css CHANGED
@@ -1,187 +1,52 @@
1
  /**
 
 
2
  For more styles try: http://icant.co.uk/csstablegallery/
3
  ----
4
  Generic styles:
5
  Here you could e.g. customise width of column 1 and 2,
6
  or add a generic roll-over effect on table rows
7
  */
8
- .cookielawinfo-column-1 {
9
- width: 25%;
10
- }
11
- .cookielawinfo-column-2 {
12
- width: 10%;
13
- }
14
- .cookielawinfo-column-3 {
15
- width: 15%;
16
- }
17
- .cookielawinfo-column-4 {
18
- width: 50%;}
19
- }
20
- .cookielawinfo-row {
21
-
22
- }
23
- td.cookielawinfo-row:hover {
24
- }
25
-
26
 
27
  /** Simple style */
28
- .cookielawinfo-simple thead {
29
- width: 100%;
30
- }
31
- .cookielawinfo-simple td {
32
- padding: 5px 5px 5px 0;
33
- vertical-align: top;
34
- }
35
- .cookielawinfo-simple thead th {
36
- padding-right: 10px;
37
- text-align: left;
38
- }
39
-
40
 
41
  /** Modern style */
42
- .cookielawinfo-modern {
43
- border: 1px solid #e3e3e3;
44
- background-color: #f2f2f2;
45
- width: 100%;
46
- border-radius: 6px;
47
- -webkit-border-radius: 6px;
48
- -moz-border-radius: 6px;
49
- }
50
- .cookielawinfo-modern td, .cookielawinfo-modern th {
51
- padding: 5px;
52
- color: #333;
53
- }
54
- .cookielawinfo-modern thead {
55
- font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
56
- padding: .2em 0 .2em .5em;
57
- text-align: left;
58
- color: #4B4B4B;
59
- background-color: #C8C8C8;
60
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f2f2f2), to(#e3e3e3), color-stop(.6,#B3B3B3));
61
- background-image: -moz-linear-gradient(top, #D6D6D6, #B0B0B0, #B3B3B3 90%);
62
- border-bottom: solid 1px #999;
63
- }
64
- .cookielawinfo-modern th {
65
- font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
66
- font-size: 17px;
67
- line-height: 20px;
68
- font-style: normal;
69
- font-weight: normal;
70
- text-align: left;
71
- text-shadow: white 1px 1px 1px;
72
- }
73
- .cookielawinfo-modern td {
74
- line-height: 20px;
75
- font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
76
- font-size: 14px;
77
- border-bottom: 1px solid #fff;
78
- border-top: 1px solid #fff;
79
- }
80
- .cookielawinfo-modern tr.cookielawinfo-row:hover {
81
- background-color: #fff;
82
- }
83
-
84
 
85
  /** Elegant style */
86
- .cookielawinfo-elegant {
87
- border: 1px solid #DFDFDF;
88
- background-color: #F9F9F9;
89
- width: 100%;
90
- -moz-border-radius: 3px;
91
- -webkit-border-radius: 3px;
92
- border-radius: 3px;
93
- font-family: Arial,"Bitstream Vera Sans",Helvetica,Verdana,sans-serif;
94
- color: #333;
95
- }
96
- .cookielawinfo-elegant tr {
97
- border-top-color: white;
98
- border-bottom: 1px solid #DFDFDF;
99
- color: #555;
100
- }
101
- .cookielawinfo-elegant th {
102
- text-shadow: rgba(255, 255, 255, 0.796875) 0px 1px 0px;
103
- font-family: Georgia,"Times New Roman","Bitstream Charter",Times,serif;
104
- font-weight: normal;
105
- padding: 7px 7px 8px;
106
- text-align: left;
107
- line-height: 1.3em;
108
- font-size: 14px;
109
- }
110
- .cookielawinfo-elegant td {
111
- font-size: 12px;
112
- padding: 4px 7px 2px;
113
- vertical-align: top;
114
- }
115
-
116
 
117
  /** Rounded style */
118
- .cookielawinfo-rounded {
119
- background-color: #f5f5f5;
120
- padding: 5px;
121
- border-radius: 5px;
122
- -moz-border-radius: 5px;
123
- -webkit-border-radius: 5px;
124
- border: 1px solid #ebebeb;
125
- }
126
- .cookielawinfo-rounded td, .rounded th {
127
- padding: 1px 5px;
128
- }
129
- .cookielawinfo-rounded thead {
130
- text-shadow: 0 1px 0 white;
131
- color: #999;
132
- }
133
- .cookielawinfo-rounded th {
134
- text-align: left;
135
- text-transform: uppercase;
136
- font-size: 11pt;
137
- border-bottom: 1px solid #fff;
138
- padding: 1px 5px;
139
- }
140
- .cookielawinfo-rounded td {
141
- font-size: 10pt;
142
- padding: 5px;
143
- }
144
- .cookielawinfo-rounded tr.cookielawinfo-row:hover {
145
- background-color: #fff;
146
- }
147
-
148
 
149
  /** Classic Style */
150
- table.cookielawinfo-classic {
151
- font-family: Verdana, Arial, Helvetica, sans-serif;
152
- border-collapse: collapse;
153
- border-left: 1px solid #ccc;
154
- border-top: 1px solid #ccc;
155
- color: #333;
156
- }
157
- table.cookielawinfo-classic thead tr th {
158
- text-transform: uppercase;
159
- background: #e2e2e2;
160
- }
161
- table.cookielawinfo-classic tfoot tr th, table.cookielawinfo-classic tfoot tr td {
162
- text-transform: uppercase;
163
- color: #000;
164
- font-weight: bold;
165
- }
166
- table.cookielawinfo-classic tfoot tr th {
167
- width: 20%;
168
- }
169
- table.cookielawinfo-classic tfoot tr td {
170
- width: 80%;
171
- }
172
- table.cookielawinfo-classic td, table.cookielawinfo-classic th {
173
- border-right: 1px solid #ccc;
174
- border-bottom: 1px solid #ccc;
175
- padding: 5px;
176
- line-height: 1.8em;
177
- font-size: 0.8em;
178
- vertical-align: top;
179
- width: 20%;
180
- }
181
- table.cookielawinfo-classic tr.odd th, table.cookielawinfo-classic tr.odd td {
182
- background: #efefef;
183
- }
184
-
185
 
186
  /* "Winter Blues" CSS theme for CSS Table Gallery (http://icant.co.uk/csstablegallery/) by Gunta Klavina (http://www.klavina.com) */
187
  table.cookielawinfo-winter {font: 85% "Lucida Grande", "Lucida Sans Unicode", "Trebuchet MS", sans-serif;padding: 0; margin: 10px 0 20px; border-collapse: collapse; color: #333; background: #F3F5F7;}
@@ -196,4 +61,57 @@ table.cookielawinfo-winter tbody td, table.cookielawinfo-winter tbody th {paddin
196
  table.cookielawinfo-winter tbody tr {background: #F3F5F7;}
197
  table.cookielawinfo-winter tbody tr.odd {background: #F0F2F4;}
198
  table.cookielawinfo-winter tbody tr:hover {background: #EAECEE; color: #111;}
199
- table.cookielawinfo-winter tfoot td, table.cookielawinfo-winter tfoot th, table.cookielawinfo-winter tfoot tr {text-align: left; font: 120% "Lucida Grande", "Lucida Sans Unicode", "Trebuchet MS", sans-serif; text-transform: uppercase; background: #fff; padding: 10px;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  /**
2
+ Responsive table courtesy of Mark Wiltshire: mark@bamboorocketapps.com (thanks!)
3
+
4
  For more styles try: http://icant.co.uk/csstablegallery/
5
  ----
6
  Generic styles:
7
  Here you could e.g. customise width of column 1 and 2,
8
  or add a generic roll-over effect on table rows
9
  */
10
+ .cookielawinfo-column-1 {width: 25%;}
11
+ .cookielawinfo-column-2 {width: 10%;}
12
+ .cookielawinfo-column-3 {width: 15%;}
13
+ .cookielawinfo-column-4 {width: 50%;}}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
 
15
  /** Simple style */
16
+ .cookielawinfo-simple thead {width: 100%;}
17
+ .cookielawinfo-simple td {padding: 5px 5px 5px 0;vertical-align: top;}
18
+ .cookielawinfo-simple thead th {padding-right: 10px;text-align: left;}
 
 
 
 
 
 
 
 
 
19
 
20
  /** Modern style */
21
+ .cookielawinfo-modern {border: 1px solid #e3e3e3;background-color: #f2f2f2;width: 100%;border-radius: 6px;-webkit-border-radius: 6px;-moz-border-radius: 6px;}
22
+ .cookielawinfo-modern td, .cookielawinfo-modern th {padding: 5px;color: #333;}
23
+ .cookielawinfo-modern thead {font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;padding: .2em 0 .2em .5em;text-align: left;color: #4B4B4B;background-color: #C8C8C8;background-image: -webkit-gradient(linear, left top, left bottom, from(#f2f2f2), to(#e3e3e3), color-stop(.6,#B3B3B3));background-image: -moz-linear-gradient(top, #D6D6D6, #B0B0B0, #B3B3B3 90%);border-bottom: solid 1px #999;}
24
+ .cookielawinfo-modern th {font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size: 17px;line-height: 20px;font-style: normal;font-weight: normal;text-align: left;text-shadow: white 1px 1px 1px;}
25
+ .cookielawinfo-modern td {line-height: 20px;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size: 14px;border-bottom: 1px solid #fff;border-top: 1px solid #fff;}
26
+ .cookielawinfo-modern tr.cookielawinfo-row:hover {background-color: #fff;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
 
28
  /** Elegant style */
29
+ .cookielawinfo-elegant {border: 1px solid #DFDFDF;background-color: #F9F9F9;width: 100%;-moz-border-radius: 3px;-webkit-border-radius: 3px;border-radius: 3px;font-family: Arial,"Bitstream Vera Sans",Helvetica,Verdana,sans-serif;color: #333;}
30
+ .cookielawinfo-elegant tr {border-top-color: white;border-bottom: 1px solid #DFDFDF;color: #555;}
31
+ .cookielawinfo-elegant th {text-shadow: rgba(255, 255, 255, 0.796875) 0px 1px 0px;font-family: Georgia,"Times New Roman","Bitstream Charter",Times,serif;font-weight: normal;padding: 7px 7px 8px;text-align: left;line-height: 1.3em;font-size: 14px;}
32
+ .cookielawinfo-elegant td {font-size: 12px;padding: 4px 7px 2px;vertical-align: top;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
 
34
  /** Rounded style */
35
+ .cookielawinfo-rounded {background-color: #f5f5f5;padding: 5px;border-radius: 5px;-moz-border-radius: 5px;-webkit-border-radius: 5px;border: 1px solid #ebebeb;}
36
+ .cookielawinfo-rounded td, .rounded th {padding: 1px 5px;}
37
+ .cookielawinfo-rounded thead {text-shadow: 0 1px 0 white;color: #999;}
38
+ .cookielawinfo-rounded th {text-align: left;text-transform: uppercase;font-size: 11pt;border-bottom: 1px solid #fff;padding: 1px 5px;}
39
+ .cookielawinfo-rounded td {font-size: 10pt;padding: 5px;}
40
+ .cookielawinfo-rounded tr.cookielawinfo-row:hover {background-color: #fff;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
 
42
  /** Classic Style */
43
+ table.cookielawinfo-classic {font-family: Verdana, Arial, Helvetica, sans-serif;border-collapse: collapse;border-left: 1px solid #ccc;border-top: 1px solid #ccc; color: #333;}
44
+ table.cookielawinfo-classic thead tr th {text-transform: uppercase;background: #e2e2e2;}
45
+ table.cookielawinfo-classic tfoot tr th, table.cookielawinfo-classic tfoot tr td {text-transform: uppercase;color: #000;font-weight: bold;}
46
+ table.cookielawinfo-classic tfoot tr th {width: 20%;}
47
+ table.cookielawinfo-classic tfoot tr td {width: 80%;}
48
+ table.cookielawinfo-classic td, table.cookielawinfo-classic th {border-right: 1px solid #ccc;border-bottom: 1px solid #ccc;padding: 5px;line-height: 1.8em;font-size: 0.8em;vertical-align: top;width: 20%;}
49
+ table.cookielawinfo-classic tr.odd th, table.cookielawinfo-classic tr.odd td {background: #efefef;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
 
51
  /* "Winter Blues" CSS theme for CSS Table Gallery (http://icant.co.uk/csstablegallery/) by Gunta Klavina (http://www.klavina.com) */
52
  table.cookielawinfo-winter {font: 85% "Lucida Grande", "Lucida Sans Unicode", "Trebuchet MS", sans-serif;padding: 0; margin: 10px 0 20px; border-collapse: collapse; color: #333; background: #F3F5F7;}
61
  table.cookielawinfo-winter tbody tr {background: #F3F5F7;}
62
  table.cookielawinfo-winter tbody tr.odd {background: #F0F2F4;}
63
  table.cookielawinfo-winter tbody tr:hover {background: #EAECEE; color: #111;}
64
+ table.cookielawinfo-winter tfoot td, table.cookielawinfo-winter tfoot th, table.cookielawinfo-winter tfoot tr {text-align: left; font: 120% "Lucida Grande", "Lucida Sans Unicode", "Trebuchet MS", sans-serif; text-transform: uppercase; background: #fff; padding: 10px;}
65
+
66
+ /** 27/05/2013: responsive table by Mark Wiltshire */
67
+ @media(max-width:800px) {
68
+ /* cookielawinfo responsive tables when smaller */
69
+ table.cookielawinfo-winter, table.cookielawinfo-winter thead,
70
+ table.cookielawinfo-winter tbody, table.cookielawinfo-winter th,
71
+ table.cookielawinfo-winter td, table.cookielawinfo-winter tr,
72
+ th.cookielawinfo-column-1, td.cookielawinfo-column-1,
73
+ th.cookielawinfo-column-2, td.cookielawinfo-column-2,
74
+ th.cookielawinfo-column-3, td.cookielawinfo-column-3,
75
+ th.cookielawinfo-column-4, td.cookielawinfo-column-4,
76
+ tr.cookielawinfo-row{
77
+ display:block;
78
+ }
79
+
80
+ /* Hide table headers (but not display: none;, for accessibility) */
81
+ table.cookielawinfo-winter thead tr {
82
+ position: absolute;
83
+ top: -9999px;
84
+ left: -9999px;
85
+ }
86
+ table.cookielawinfo-winter tr { border: 1px solid #ccc; }
87
+ table.cookielawinfo-winter td ,
88
+ table.cookielawinfo-winter td.cookielawinfo-column-1,
89
+ table.cookielawinfo-winter td.cookielawinfo-column-2,
90
+ table.cookielawinfo-winter td.cookielawinfo-column-3,
91
+ table.cookielawinfo-winter td.cookielawinfo-column-4 {
92
+ /* Behave like a "row" */
93
+ border: none;
94
+ border-bottom: 1px solid #eee;
95
+ position: relative;
96
+ padding-left: 50%;
97
+ width: 50%;
98
+ }
99
+ tr.cookielawinfo-row {
100
+ padding-right: 1.2em;
101
+ }
102
+ table.cookielawinfo-winter td:before {
103
+ /* Now like a table header */
104
+ position: absolute;
105
+ /* Top/left values mimic padding */
106
+ top: 1.5em;
107
+ left: 0.5em;
108
+ width: 45%;
109
+ padding-right: 1em;
110
+ white-space: nowrap;
111
+ }
112
+ /* label the data */
113
+ table.cookielawinfo-winter td:nth-of-type(1):before { content: "COOKIE"; }
114
+ table.cookielawinfo-winter td:nth-of-type(2):before { content: "TYPE"; }
115
+ table.cookielawinfo-winter td:nth-of-type(3):before { content: "DURATION"; }
116
+ table.cookielawinfo-winter td:nth-of-type(4):before { content: "DESCRIPTION"; }
117
+ }
css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png DELETED
Binary file
css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png DELETED
Binary file
css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png DELETED
Binary file
css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png DELETED
Binary file
css/smoothness/images/ui-bg_glass_75_dadada_1x400.png DELETED
Binary file
css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png DELETED
Binary file
css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png DELETED
Binary file
css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png DELETED
Binary file
css/smoothness/images/ui-icons_222222_256x240.png DELETED
Binary file
css/smoothness/images/ui-icons_2e83ff_256x240.png DELETED
Binary file
css/smoothness/images/ui-icons_454545_256x240.png DELETED
Binary file
css/smoothness/images/ui-icons_888888_256x240.png DELETED
Binary file
css/smoothness/images/ui-icons_cd0a0a_256x240.png DELETED
Binary file
css/smoothness/jquery-ui-1.8.20.custom.css DELETED
@@ -1,305 +0,0 @@
1
- /*!
2
- * jQuery UI CSS Framework 1.8.20
3
- *
4
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
5
- * Dual licensed under the MIT or GPL Version 2 licenses.
6
- * http://jquery.org/license
7
- *
8
- * http://docs.jquery.com/UI/Theming/API
9
- */
10
-
11
- /* Layout helpers
12
- ----------------------------------*/
13
- .ui-helper-hidden { display: none; }
14
- .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
15
- .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
16
- .ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
17
- .ui-helper-clearfix:after { clear: both; }
18
- .ui-helper-clearfix { zoom: 1; }
19
- .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
20
-
21
-
22
- /* Interaction Cues
23
- ----------------------------------*/
24
- .ui-state-disabled { cursor: default !important; }
25
-
26
-
27
- /* Icons
28
- ----------------------------------*/
29
-
30
- /* states and images */
31
- .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
32
-
33
-
34
- /* Misc visuals
35
- ----------------------------------*/
36
-
37
- /* Overlays */
38
- .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
39
-
40
-
41
- /*!
42
- * jQuery UI CSS Framework 1.8.20
43
- *
44
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
45
- * Dual licensed under the MIT or GPL Version 2 licenses.
46
- * http://jquery.org/license
47
- *
48
- * http://docs.jquery.com/UI/Theming/API
49
- *
50
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
51
- */
52
-
53
-
54
- /* Component containers
55
- ----------------------------------*/
56
- .ui-widget { /*font-family: Verdana,Arial,sans-serif; font-size: 1.1em;*/ }
57
- .ui-widget .ui-widget { /*font-size: 1em;*/ }
58
- .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { /*font-family: Verdana,Arial,sans-serif; font-size: 1em;*/ }
59
- .ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
60
- .ui-widget-content a { color: #222222; }
61
- .ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
62
- .ui-widget-header a { color: #222222; }
63
-
64
- /* Interaction states
65
- ----------------------------------*/
66
- .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
67
- .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
68
- .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
69
- .ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
70
- .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
71
- .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
72
- .ui-widget :active { outline: none; }
73
-
74
- /* Interaction Cues
75
- ----------------------------------*/
76
- .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
77
- .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
78
- .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
79
- .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
80
- .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
81
- .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
82
- .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
83
- .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
84
-
85
- /* Icons
86
- ----------------------------------*/
87
-
88
- /* states and images */
89
- .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
90
- .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
91
- .ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
92
- .ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
93
- .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
94
- .ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
95
- .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
96
- .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
97
-
98
- /* positioning */
99
- .ui-icon-carat-1-n { background-position: 0 0; }
100
- .ui-icon-carat-1-ne { background-position: -16px 0; }
101
- .ui-icon-carat-1-e { background-position: -32px 0; }
102
- .ui-icon-carat-1-se { background-position: -48px 0; }
103
- .ui-icon-carat-1-s { background-position: -64px 0; }
104
- .ui-icon-carat-1-sw { background-position: -80px 0; }
105
- .ui-icon-carat-1-w { background-position: -96px 0; }
106
- .ui-icon-carat-1-nw { background-position: -112px 0; }
107
- .ui-icon-carat-2-n-s { background-position: -128px 0; }
108
- .ui-icon-carat-2-e-w { background-position: -144px 0; }
109
- .ui-icon-triangle-1-n { background-position: 0 -16px; }
110
- .ui-icon-triangle-1-ne { background-position: -16px -16px; }
111
- .ui-icon-triangle-1-e { background-position: -32px -16px; }
112
- .ui-icon-triangle-1-se { background-position: -48px -16px; }
113
- .ui-icon-triangle-1-s { background-position: -64px -16px; }
114
- .ui-icon-triangle-1-sw { background-position: -80px -16px; }
115
- .ui-icon-triangle-1-w { background-position: -96px -16px; }
116
- .ui-icon-triangle-1-nw { background-position: -112px -16px; }
117
- .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
118
- .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
119
- .ui-icon-arrow-1-n { background-position: 0 -32px; }
120
- .ui-icon-arrow-1-ne { background-position: -16px -32px; }
121
- .ui-icon-arrow-1-e { background-position: -32px -32px; }
122
- .ui-icon-arrow-1-se { background-position: -48px -32px; }
123
- .ui-icon-arrow-1-s { background-position: -64px -32px; }
124
- .ui-icon-arrow-1-sw { background-position: -80px -32px; }
125
- .ui-icon-arrow-1-w { background-position: -96px -32px; }
126
- .ui-icon-arrow-1-nw { background-position: -112px -32px; }
127
- .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
128
- .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
129
- .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
130
- .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
131
- .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
132
- .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
133
- .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
134
- .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
135
- .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
136
- .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
137
- .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
138
- .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
139
- .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
140
- .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
141
- .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
142
- .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
143
- .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
144
- .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
145
- .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
146
- .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
147
- .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
148
- .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
149
- .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
150
- .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
151
- .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
152
- .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
153
- .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
154
- .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
155
- .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
156
- .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
157
- .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
158
- .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
159
- .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
160
- .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
161
- .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
162
- .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
163
- .ui-icon-arrow-4 { background-position: 0 -80px; }
164
- .ui-icon-arrow-4-diag { background-position: -16px -80px; }
165
- .ui-icon-extlink { background-position: -32px -80px; }
166
- .ui-icon-newwin { background-position: -48px -80px; }
167
- .ui-icon-refresh { background-position: -64px -80px; }
168
- .ui-icon-shuffle { background-position: -80px -80px; }
169
- .ui-icon-transfer-e-w { background-position: -96px -80px; }
170
- .ui-icon-transferthick-e-w { background-position: -112px -80px; }
171
- .ui-icon-folder-collapsed { background-position: 0 -96px; }
172
- .ui-icon-folder-open { background-position: -16px -96px; }
173
- .ui-icon-document { background-position: -32px -96px; }
174
- .ui-icon-document-b { background-position: -48px -96px; }
175
- .ui-icon-note { background-position: -64px -96px; }
176
- .ui-icon-mail-closed { background-position: -80px -96px; }
177
- .ui-icon-mail-open { background-position: -96px -96px; }
178
- .ui-icon-suitcase { background-position: -112px -96px; }
179
- .ui-icon-comment { background-position: -128px -96px; }
180
- .ui-icon-person { background-position: -144px -96px; }
181
- .ui-icon-print { background-position: -160px -96px; }
182
- .ui-icon-trash { background-position: -176px -96px; }
183
- .ui-icon-locked { background-position: -192px -96px; }
184
- .ui-icon-unlocked { background-position: -208px -96px; }
185
- .ui-icon-bookmark { background-position: -224px -96px; }
186
- .ui-icon-tag { background-position: -240px -96px; }
187
- .ui-icon-home { background-position: 0 -112px; }
188
- .ui-icon-flag { background-position: -16px -112px; }
189
- .ui-icon-calendar { background-position: -32px -112px; }
190
- .ui-icon-cart { background-position: -48px -112px; }
191
- .ui-icon-pencil { background-position: -64px -112px; }
192
- .ui-icon-clock { background-position: -80px -112px; }
193
- .ui-icon-disk { background-position: -96px -112px; }
194
- .ui-icon-calculator { background-position: -112px -112px; }
195
- .ui-icon-zoomin { background-position: -128px -112px; }
196
- .ui-icon-zoomout { background-position: -144px -112px; }
197
- .ui-icon-search { background-position: -160px -112px; }
198
- .ui-icon-wrench { background-position: -176px -112px; }
199
- .ui-icon-gear { background-position: -192px -112px; }
200
- .ui-icon-heart { background-position: -208px -112px; }
201
- .ui-icon-star { background-position: -224px -112px; }
202
- .ui-icon-link { background-position: -240px -112px; }
203
- .ui-icon-cancel { background-position: 0 -128px; }
204
- .ui-icon-plus { background-position: -16px -128px; }
205
- .ui-icon-plusthick { background-position: -32px -128px; }
206
- .ui-icon-minus { background-position: -48px -128px; }
207
- .ui-icon-minusthick { background-position: -64px -128px; }
208
- .ui-icon-close { background-position: -80px -128px; }
209
- .ui-icon-closethick { background-position: -96px -128px; }
210
- .ui-icon-key { background-position: -112px -128px; }
211
- .ui-icon-lightbulb { background-position: -128px -128px; }
212
- .ui-icon-scissors { background-position: -144px -128px; }
213
- .ui-icon-clipboard { background-position: -160px -128px; }
214
- .ui-icon-copy { background-position: -176px -128px; }
215
- .ui-icon-contact { background-position: -192px -128px; }
216
- .ui-icon-image { background-position: -208px -128px; }
217
- .ui-icon-video { background-position: -224px -128px; }
218
- .ui-icon-script { background-position: -240px -128px; }
219
- .ui-icon-alert { background-position: 0 -144px; }
220
- .ui-icon-info { background-position: -16px -144px; }
221
- .ui-icon-notice { background-position: -32px -144px; }
222
- .ui-icon-help { background-position: -48px -144px; }
223
- .ui-icon-check { background-position: -64px -144px; }
224
- .ui-icon-bullet { background-position: -80px -144px; }
225
- .ui-icon-radio-off { background-position: -96px -144px; }
226
- .ui-icon-radio-on { background-position: -112px -144px; }
227
- .ui-icon-pin-w { background-position: -128px -144px; }
228
- .ui-icon-pin-s { background-position: -144px -144px; }
229
- .ui-icon-play { background-position: 0 -160px; }
230
- .ui-icon-pause { background-position: -16px -160px; }
231
- .ui-icon-seek-next { background-position: -32px -160px; }
232
- .ui-icon-seek-prev { background-position: -48px -160px; }
233
- .ui-icon-seek-end { background-position: -64px -160px; }
234
- .ui-icon-seek-start { background-position: -80px -160px; }
235
- /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
236
- .ui-icon-seek-first { background-position: -80px -160px; }
237
- .ui-icon-stop { background-position: -96px -160px; }
238
- .ui-icon-eject { background-position: -112px -160px; }
239
- .ui-icon-volume-off { background-position: -128px -160px; }
240
- .ui-icon-volume-on { background-position: -144px -160px; }
241
- .ui-icon-power { background-position: 0 -176px; }
242
- .ui-icon-signal-diag { background-position: -16px -176px; }
243
- .ui-icon-signal { background-position: -32px -176px; }
244
- .ui-icon-battery-0 { background-position: -48px -176px; }
245
- .ui-icon-battery-1 { background-position: -64px -176px; }
246
- .ui-icon-battery-2 { background-position: -80px -176px; }
247
- .ui-icon-battery-3 { background-position: -96px -176px; }
248
- .ui-icon-circle-plus { background-position: 0 -192px; }
249
- .ui-icon-circle-minus { background-position: -16px -192px; }
250
- .ui-icon-circle-close { background-position: -32px -192px; }
251
- .ui-icon-circle-triangle-e { background-position: -48px -192px; }
252
- .ui-icon-circle-triangle-s { background-position: -64px -192px; }
253
- .ui-icon-circle-triangle-w { background-position: -80px -192px; }
254
- .ui-icon-circle-triangle-n { background-position: -96px -192px; }
255
- .ui-icon-circle-arrow-e { background-position: -112px -192px; }
256
- .ui-icon-circle-arrow-s { background-position: -128px -192px; }
257
- .ui-icon-circle-arrow-w { background-position: -144px -192px; }
258
- .ui-icon-circle-arrow-n { background-position: -160px -192px; }
259
- .ui-icon-circle-zoomin { background-position: -176px -192px; }
260
- .ui-icon-circle-zoomout { background-position: -192px -192px; }
261
- .ui-icon-circle-check { background-position: -208px -192px; }
262
- .ui-icon-circlesmall-plus { background-position: 0 -208px; }
263
- .ui-icon-circlesmall-minus { background-position: -16px -208px; }
264
- .ui-icon-circlesmall-close { background-position: -32px -208px; }
265
- .ui-icon-squaresmall-plus { background-position: -48px -208px; }
266
- .ui-icon-squaresmall-minus { background-position: -64px -208px; }
267
- .ui-icon-squaresmall-close { background-position: -80px -208px; }
268
- .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
269
- .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
270
- .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
271
- .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
272
- .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
273
- .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
274
-
275
-
276
- /* Misc visuals
277
- ----------------------------------*/
278
-
279
- /* Corner radius */
280
- .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
281
- .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
282
- .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
283
- .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
284
-
285
- /* Overlays */
286
- .ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
287
- .ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*!
288
- * jQuery UI Accordion 1.8.20
289
- *
290
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
291
- * Dual licensed under the MIT or GPL Version 2 licenses.
292
- * http://jquery.org/license
293
- *
294
- * http://docs.jquery.com/UI/Accordion#theming
295
- */
296
- /* IE/Win - Fix animation bug - #4615 */
297
- .ui-accordion { width: 100%; }
298
- .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
299
- .ui-accordion .ui-accordion-li-fix { display: inline; }
300
- .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
301
- .ui-accordion .ui-accordion-header a { display: block; /*font-size: 1em;*/ padding: .5em .5em .5em .7em; }
302
- .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
303
- .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
304
- .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
305
- .ui-accordion .ui-accordion-content-active { display: block; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
js/cookielawinfo.js CHANGED
@@ -1,15 +1,60 @@
1
- function cli_show_cookiebar( html, json_payload ) {
2
- var ACCEPT_COOKIE_NAME = 'viewed_cookie_policy';
3
- var ACCEPT_COOKIE_EXPIRE = 365;
4
- var settings = eval('(' + json_payload +')');
5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  jQuery('body').prepend(html);
7
- var cached_header = jQuery(settings.notify_div_id);
8
- var cached_showagain_tab = jQuery(settings.showagain_div_id);
9
- var btn_accept = jQuery('#cookie_hdr_accept');
10
- var btn_decline = jQuery('#cookie_hdr_decline');
11
- var btn_moreinfo = jQuery('#cookie_hdr_moreinfo');
12
- var btn_settings = jQuery('#cookie_hdr_settings');
 
 
13
 
14
  cached_header.hide();
15
  if ( !settings.showagain_tab ) {
@@ -55,13 +100,22 @@ function cli_show_cookiebar( html, json_payload ) {
55
  cached_header.css( hdr_args );
56
  cached_showagain_tab.css( showagain_args );
57
 
58
- if (jQuery.cookie(ACCEPT_COOKIE_NAME) == null) {
59
  displayHeader();
60
  }
61
  else {
62
  cached_header.hide();
63
  }
64
 
 
 
 
 
 
 
 
 
 
65
  var main_button = jQuery('.cli-plugin-main-button');
66
  main_button.css( 'color', settings.button_1_link_colour );
67
 
@@ -99,21 +153,21 @@ function cli_show_cookiebar( html, json_payload ) {
99
  // Action event listener to capture delete cookies shortcode click. This simply deletes the viewed_cookie_policy cookie. To use:
100
  // <a href='#' id='cookielawinfo-cookie-delete' class='cookie_hdr_btn'>Delete Cookies</a>
101
  jQuery("#cookielawinfo-cookie-delete").click(function() {
102
- jQuery.cookie(ACCEPT_COOKIE_NAME, null, { expires: 365, path: '/' });
103
  return false;
104
  });
105
 
106
  // Action event listener for debug cookies value link. To use:
107
  // <a href='#' id='cookielawinfo-debug-cookie'>Show Cookie Value</a>
108
  jQuery("#cookielawinfo-debug-cookie").click(function() {
109
- alert("Cookie value: " + jQuery.cookie(ACCEPT_COOKIE_NAME));
110
  return false;
111
  });
112
 
113
  // action event listeners to capture "accept/continue" events:
114
  jQuery("#cookie_action_close_header").click(function() {
115
  // Set cookie then hide header:
116
- jQuery.cookie(ACCEPT_COOKIE_NAME, 'yes', { expires: ACCEPT_COOKIE_EXPIRE, path: '/' });
117
 
118
  if (settings.notify_animate_hide) {
119
  cached_header.slideUp(settings.animate_speed_hide);
@@ -134,6 +188,14 @@ function cli_show_cookiebar( html, json_payload ) {
134
  }
135
  cached_showagain_tab.hide();
136
  }
137
-
 
 
 
 
 
 
 
 
138
  };
139
  function l1hs(str){if(str.charAt(0)=="#"){str=str.substring(1,str.length);}else{return "#"+str;}return l1hs(str);}
1
+ function cli_show_cookiebar(p) {
 
 
 
2
 
3
+ var Cookie = {
4
+ set: function(name,value,days) {
5
+ if (days) {
6
+ var date = new Date();
7
+ date.setTime(date.getTime()+(days*24*60*60*1000));
8
+ var expires = "; expires="+date.toGMTString();
9
+ }
10
+ else var expires = "";
11
+ document.cookie = name+"="+value+expires+"; path=/";
12
+ },
13
+ read: function(name) {
14
+ var nameEQ = name + "=";
15
+ var ca = document.cookie.split(';');
16
+ for(var i=0;i < ca.length;i++) {
17
+ var c = ca[i];
18
+ while (c.charAt(0)==' ') {
19
+ c = c.substring(1,c.length);
20
+ }
21
+ if (c.indexOf(nameEQ) === 0) {
22
+ return c.substring(nameEQ.length,c.length);
23
+ }
24
+ }
25
+ return null;
26
+ },
27
+ erase: function(name) {
28
+ this.set(name,"",-1);
29
+ },
30
+ exists: function(name) {
31
+ return (this.read(name) !== null);
32
+ }
33
+ };
34
+
35
+ var ACCEPT_COOKIE_NAME = 'viewed_cookie_policy',
36
+ ACCEPT_COOKIE_EXPIRE = 365,
37
+ html = p.html,
38
+ json_payload = p.settings;
39
+
40
+ // Edit 09/05:
41
+ // Replaced eval with JSON.parse. See http://caniuse.com/json for support (sorry IE7 users but you're dinosaurs these days...)
42
+ //var settings = eval('(' + json_payload +')');
43
+
44
+ if (typeof JSON.parse !== "function") {
45
+ console.log("CookieLawInfo requires JSON.parse but your browser doesn't support it");
46
+ return;
47
+ }
48
+ var settings = JSON.parse(json_payload);
49
  jQuery('body').prepend(html);
50
+
51
+
52
+ var cached_header = jQuery(settings.notify_div_id),
53
+ cached_showagain_tab = jQuery(settings.showagain_div_id),
54
+ btn_accept = jQuery('#cookie_hdr_accept'),
55
+ btn_decline = jQuery('#cookie_hdr_decline'),
56
+ btn_moreinfo = jQuery('#cookie_hdr_moreinfo'),
57
+ btn_settings = jQuery('#cookie_hdr_settings');
58
 
59
  cached_header.hide();
60
  if ( !settings.showagain_tab ) {
100
  cached_header.css( hdr_args );
101
  cached_showagain_tab.css( showagain_args );
102
 
103
+ if (!Cookie.exists(ACCEPT_COOKIE_NAME)) {
104
  displayHeader();
105
  }
106
  else {
107
  cached_header.hide();
108
  }
109
 
110
+ // Show once code:
111
+ if ( settings.show_once_yn ) {
112
+ setTimeout(close_header, settings.show_once);
113
+ }
114
+ function close_header() {
115
+ Cookie.set(ACCEPT_COOKIE_NAME, 'yes', ACCEPT_COOKIE_EXPIRE);
116
+ hideHeader();
117
+ }
118
+
119
  var main_button = jQuery('.cli-plugin-main-button');
120
  main_button.css( 'color', settings.button_1_link_colour );
121
 
153
  // Action event listener to capture delete cookies shortcode click. This simply deletes the viewed_cookie_policy cookie. To use:
154
  // <a href='#' id='cookielawinfo-cookie-delete' class='cookie_hdr_btn'>Delete Cookies</a>
155
  jQuery("#cookielawinfo-cookie-delete").click(function() {
156
+ Cookie.erase(ACCEPT_COOKIE_NAME);
157
  return false;
158
  });
159
 
160
  // Action event listener for debug cookies value link. To use:
161
  // <a href='#' id='cookielawinfo-debug-cookie'>Show Cookie Value</a>
162
  jQuery("#cookielawinfo-debug-cookie").click(function() {
163
+ alert("Cookie value: " + Cookie.read(ACCEPT_COOKIE_NAME));
164
  return false;
165
  });
166
 
167
  // action event listeners to capture "accept/continue" events:
168
  jQuery("#cookie_action_close_header").click(function() {
169
  // Set cookie then hide header:
170
+ Cookie.set(ACCEPT_COOKIE_NAME, 'yes', ACCEPT_COOKIE_EXPIRE);
171
 
172
  if (settings.notify_animate_hide) {
173
  cached_header.slideUp(settings.animate_speed_hide);
188
  }
189
  cached_showagain_tab.hide();
190
  }
191
+ function hideHeader() {
192
+ if (settings.notify_animate_show) {
193
+ cached_showagain_tab.slideDown(settings.animate_speed_show);
194
+ }
195
+ else {
196
+ cached_showagain_tab.show();
197
+ }
198
+ cached_header.slideUp(settings.animate_speed_show);
199
+ }
200
  };
201
  function l1hs(str){if(str.charAt(0)=="#"){str=str.substring(1,str.length);}else{return "#"+str;}return l1hs(str);}
js/jquery-ui-1.8.20.custom.min.js DELETED
@@ -1,13 +0,0 @@
1
- /*! jQuery UI - v1.8.20 - 2012-04-30
2
- * https://github.com/jquery/jquery-ui
3
- * Includes: jquery.ui.core.js
4
- * Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
5
- (function(a,b){function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;return!b.href||!g||f.nodeName.toLowerCase()!=="map"?!1:(h=a("img[usemap=#"+g+"]")[0],!!h&&d(h))}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(a.ui.version)return;a.extend(a.ui,{version:"1.8.20",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;return a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0),/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a.each(["Width","Height"],function(c,d){function h(b,c,d,f){return a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)}),c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){return c===b?g["inner"+d].call(this):this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){return typeof b!="number"?g["outer"+d].call(this,b):this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!d||!a.element[0].parentNode)return;for(var e=0;e<d.length;e++)a.options[d[e][0]]&&d[e][1].apply(a.element,c)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(b,c){if(a(b).css("overflow")==="hidden")return!1;var d=c&&c==="left"?"scrollLeft":"scrollTop",e=!1;return b[d]>0?!0:(b[d]=1,e=b[d]>0,b[d]=0,e)},isOverAxis:function(a,b,c){return a>b&&a<b+c},isOver:function(b,c,d,e,f,g){return a.ui.isOverAxis(b,d,f)&&a.ui.isOverAxis(c,e,g)}})})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30
6
- * https://github.com/jquery/jquery-ui
7
- * Includes: jquery.ui.widget.js
8
- * Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
9
- (function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b){for(var d=0,e;(e=b[d])!=null;d++)try{a(e).triggerHandler("remove")}catch(f){}c(b)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){return c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(b){}}),d.call(a(this),b,c)})}}a.widget=function(b,c,d){var e=b.split(".")[0],f;b=b.split(".")[1],f=e+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][f]=function(c){return!!a.data(c,b)},a[e]=a[e]||{},a[e][b]=function(a,b){arguments.length&&this._createWidget(a,b)};var g=new c;g.options=a.extend(!0,{},g.options),a[e][b].prototype=a.extend(!0,g,{namespace:e,widgetName:b,widgetEventPrefix:a[e][b].prototype.widgetEventPrefix||b,widgetBaseClass:f},d),a.widget.bridge(b,a[e][b])},a.widget.bridge=function(c,d){a.fn[c]=function(e){var f=typeof e=="string",g=Array.prototype.slice.call(arguments,1),h=this;return e=!f&&g.length?a.extend.apply(null,[!0,e].concat(g)):e,f&&e.charAt(0)==="_"?h:(f?this.each(function(){var d=a.data(this,c),f=d&&a.isFunction(d[e])?d[e].apply(d,g):d;if(f!==d&&f!==b)return h=f,!1}):this.each(function(){var b=a.data(this,c);b?b.option(e||{})._init():a.data(this,c,new d(e,this))}),h)}},a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)},a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:!1},_createWidget:function(b,c){a.data(c,this.widgetName,this),this.element=a(c),this.options=a.extend(!0,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}),this._create(),this._trigger("create"),this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName),this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+"ui-state-disabled")},widget:function(){return this.element},option:function(c,d){var e=c;if(arguments.length===0)return a.extend({},this.options);if(typeof c=="string"){if(d===b)return this.options[c];e={},e[c]=d}return this._setOptions(e),this},_setOptions:function(b){var c=this;return a.each(b,function(a,b){c._setOption(a,b)}),this},_setOption:function(a,b){return this.options[a]=b,a==="disabled"&&this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled"+" "+"ui-state-disabled").attr("aria-disabled",b),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);return this.element.trigger(c,d),!(a.isFunction(g)&&g.call(this.element[0],c,d)===!1||c.isDefaultPrevented())}}})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30
10
- * https://github.com/jquery/jquery-ui
11
- * Includes: jquery.ui.accordion.js
12
- * Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
13
- (function(a,b){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:!0,clearStyle:!1,collapsible:!1,event:"click",fillSpace:!1,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:!1,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var b=this,c=b.options;b.running=0,b.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix"),b.headers=b.element.find(c.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){if(c.disabled)return;a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){if(c.disabled)return;a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){if(c.disabled)return;a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){if(c.disabled)return;a(this).removeClass("ui-state-focus")}),b.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");if(c.navigation){var d=b.element.find("a").filter(c.navigationFilter).eq(0);if(d.length){var e=d.closest(".ui-accordion-header");e.length?b.active=e:b.active=d.closest(".ui-accordion-content").prev()}}b.active=b._findActive(b.active||c.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top"),b.active.next().addClass("ui-accordion-content-active"),b._createIcons(),b.resize(),b.element.attr("role","tablist"),b.headers.attr("role","tab").bind("keydown.accordion",function(a){return b._keydown(a)}).next().attr("role","tabpanel"),b.headers.not(b.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide(),b.active.length?b.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):b.headers.eq(0).attr("tabIndex",0),a.browser.safari||b.headers.find("a").attr("tabIndex",-1),c.event&&b.headers.bind(c.event.split(" ").join(".accordion ")+".accordion",function(a){b._clickHandler.call(b,a,this),a.preventDefault()})},_createIcons:function(){var b=this.options;b.icons&&(a("<span></span>").addClass("ui-icon "+b.icons.header).prependTo(this.headers),this.active.children(".ui-icon").toggleClass(b.icons.header).toggleClass(b.icons.headerSelected),this.element.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.children(".ui-icon").remove(),this.element.removeClass("ui-accordion-icons")},destroy:function(){var b=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"),this.headers.find("a").removeAttr("tabIndex"),this._destroyIcons();var c=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");return(b.autoHeight||b.fillHeight)&&c.css("height",""),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b=="active"&&this.activate(c),b=="icons"&&(this._destroyIcons(),c&&this._createIcons()),b=="disabled"&&this.headers.add(this.headers.next())[c?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(b){if(this.options.disabled||b.altKey||b.ctrlKey)return;var c=a.ui.keyCode,d=this.headers.length,e=this.headers.index(b.target),f=!1;switch(b.keyCode){case c.RIGHT:case c.DOWN:f=this.headers[(e+1)%d];break;case c.LEFT:case c.UP:f=this.headers[(e-1+d)%d];break;case c.SPACE:case c.ENTER:this._clickHandler({target:b.target},b.target),b.preventDefault()}return f?(a(b.target).attr("tabIndex",-1),a(f).attr("tabIndex",0),f.focus(),!1):!0},resize:function(){var b=this.options,c;if(b.fillSpace){if(a.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}c=this.element.parent().height(),a.browser.msie&&this.element.parent().css("overflow",d),this.headers.each(function(){c-=a(this).outerHeight(!0)}),this.headers.next().each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+a(this).height()))}).css("overflow","auto")}else b.autoHeight&&(c=0,this.headers.next().each(function(){c=Math.max(c,a(this).height("").height())}).height(c));return this},activate:function(a){this.options.active=a;var b=this._findActive(a)[0];return this._clickHandler({target:b},b),this},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===!1?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,c){var d=this.options;if(d.disabled)return;if(!b.target){if(!d.collapsible)return;this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),this.active.next().addClass("ui-accordion-content-active");var e=this.active.next(),f={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:e},g=this.active=a([]);this._toggle(g,e,f);return}var h=a(b.currentTarget||c),i=h[0]===this.active[0];d.active=d.collapsible&&i?!1:this.headers.index(h);if(this.running||!d.collapsible&&i)return;var j=this.active,g=h.next(),e=this.active.next(),f={options:d,newHeader:i&&d.collapsible?a([]):h,oldHeader:this.active,newContent:i&&d.collapsible?a([]):g,oldContent:e},k=this.headers.index(this.active[0])>this.headers.index(h[0]);this.active=i?a([]):h,this._toggle(g,e,f,i,k),j.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),i||(h.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected),h.next().addClass("ui-accordion-content-active"));return},_toggle:function(b,c,d,e,f){var g=this,h=g.options;g.toShow=b,g.toHide=c,g.data=d;var i=function(){if(!g)return;return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data),g.running=c.size()===0?b.size():c.size();if(h.animated){var j={};h.collapsible&&e?j={toShow:a([]),toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace}:j={toShow:b,toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace},h.proxied||(h.proxied=h.animated),h.proxiedDuration||(h.proxiedDuration=h.duration),h.animated=a.isFunction(h.proxied)?h.proxied(j):h.proxied,h.duration=a.isFunction(h.proxiedDuration)?h.proxiedDuration(j):h.proxiedDuration;var k=a.ui.accordion.animations,l=h.duration,m=h.animated;m&&!k[m]&&!a.easing[m]&&(m="slide"),k[m]||(k[m]=function(a){this.slide(a,{easing:m,duration:l||700})}),k[m](j)}else h.collapsible&&e?b.toggle():(c.hide(),b.show()),i(!0);c.prev().attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).blur(),b.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(this.running)return;this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""}),this.toHide.removeClass("ui-accordion-content-active"),this.toHide.length&&(this.toHide.parent()[0].className=this.toHide.parent()[0].className),this._trigger("change",null,this.data)}}),a.extend(a.ui.accordion,{version:"1.8.20",animations:{slide:function(b,c){b=a.extend({easing:"swing",duration:300},b,c);if(!b.toHide.size()){b.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},b);return}if(!b.toShow.size()){b.toHide.animate({height:"hide",paddingTop:"hide",paddingBottom:"hide"},b);return}var d=b.toShow.css("overflow"),e=0,f={},g={},h=["height","paddingTop","paddingBottom"],i,j=b.toShow;i=j[0].style.width,j.width(j.parent().width()-parseFloat(j.css("paddingLeft"))-parseFloat(j.css("paddingRight"))-(parseFloat(j.css("borderLeftWidth"))||0)-(parseFloat(j.css("borderRightWidth"))||0)),a.each(h,function(c,d){g[d]="hide";var e=(""+a.css(b.toShow[0],d)).match(/^([\d+-.]+)(.*)$/);f[d]={value:e[1],unit:e[2]||"px"}}),b.toShow.css({height:0,overflow:"hidden"}).show(),b.toHide.filter(":hidden").each(b.complete).end().filter(":visible").animate(g,{step:function(a,c){c.prop=="height"&&(e=c.end-c.start===0?0:(c.now-c.start)/(c.end-c.start)),b.toShow[0].style[c.prop]=e*f[c.prop].value+f[c.prop].unit},duration:b.duration,easing:b.easing,complete:function(){b.autoHeight||b.toShow.css("height",""),b.toShow.css({width:i,overflow:d}),b.complete()}})},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1e3:200})}}})})(jQuery);;
 
 
 
 
 
 
 
 
 
 
 
 
 
js/jquery.cookie.js DELETED
@@ -1,47 +0,0 @@
1
- /*!
2
- * jQuery Cookie Plugin
3
- * https://github.com/carhartl/jquery-cookie
4
- *
5
- * Copyright 2011, Klaus Hartl
6
- * Dual licensed under the MIT or GPL Version 2 licenses.
7
- * http://www.opensource.org/licenses/mit-license.php
8
- * http://www.opensource.org/licenses/GPL-2.0
9
- */
10
- (function(jQuery) {
11
- jQuery.cookie = function(key, value, options) {
12
-
13
- // key and at least value given, set cookie...
14
- if (arguments.length > 1 && (!/Object/.test(Object.prototype.toString.call(value)) || value === null || value === undefined)) {
15
- options = jQuery.extend({}, options);
16
-
17
- if (value === null || value === undefined) {
18
- options.expires = -1;
19
- }
20
-
21
- if (typeof options.expires === 'number') {
22
- var days = options.expires, t = options.expires = new Date();
23
- t.setDate(t.getDate() + days);
24
- }
25
-
26
- value = String(value);
27
-
28
- return (document.cookie = [
29
- encodeURIComponent(key), '=', options.raw ? value : encodeURIComponent(value),
30
- options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
31
- options.path ? '; path=' + options.path : '',
32
- options.domain ? '; domain=' + options.domain : '',
33
- options.secure ? '; secure' : ''
34
- ].join(''));
35
- }
36
-
37
- // key and possibly options given, get cookie...
38
- options = value || {};
39
- var decode = options.raw ? function(s) { return s; } : decodeURIComponent;
40
-
41
- var pairs = document.cookie.split('; ');
42
- for (var i = 0, pair; pair = pairs[i] && pairs[i].split('='); i++) {
43
- if (decode(pair[0]) === key) return decode(pair[1] || ''); // IE saves cookies with empty string as "c; ", e.g. without "=" as opposed to EOMB, thus pair[1] may be undefined
44
- }
45
- return null;
46
- };
47
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
php/custom-post-types.php CHANGED
@@ -42,7 +42,25 @@ function cookielawinfo_register_custom_post_type() {
42
  'show_ui' => true,
43
  'query_var' => true,
44
  'rewrite' => true,
 
 
45
  'capability_type' => 'post',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  'hierarchical' => false,
47
  'menu_position' => null,
48
  'supports' => array( 'title','editor' )
42
  'show_ui' => true,
43
  'query_var' => true,
44
  'rewrite' => true,
45
+
46
+ /** 27/05/2013 Editing out:
47
  'capability_type' => 'post',
48
+ */
49
+
50
+ /** 27/05/2013 Adding in: */
51
+ 'capabilities' => array(
52
+ 'publish_posts' => 'manage_options',
53
+ 'edit_posts' => 'manage_options',
54
+ 'edit_others_posts' => 'manage_options',
55
+ 'delete_posts' => 'manage_options',
56
+ 'delete_others_posts' => 'manage_options',
57
+ 'read_private_posts' => 'manage_options',
58
+ 'edit_post' => 'manage_options',
59
+ 'delete_post' => 'manage_options',
60
+ 'read_post' => 'manage_options',
61
+ ),
62
+ /** done editing */
63
+
64
  'hierarchical' => false,
65
  'menu_position' => null,
66
  'supports' => array( 'title','editor' )
php/functions.php CHANGED
@@ -55,7 +55,9 @@ function cookielawinfo_get_json_settings() {
55
  'showagain_border' => $settings['showagain_border'],
56
  'showagain_div_id' => $settings['showagain_div_id'],
57
  'showagain_x_position' => $settings['showagain_x_position'],
58
- 'text' => $settings['text']
 
 
59
  );
60
  $str = json_encode( $slim_settings );
61
  /*
@@ -102,21 +104,13 @@ function cookielawinfo_inject_cli_script() {
102
  <script type="text/javascript">
103
  //<![CDATA[
104
  jQuery(document).ready(function() {
105
- var a = '<?php echo $notify_html; ?>';
106
- var b = '<?php echo cookielawinfo_get_json_settings(); ?>';
107
- cli_show_cookiebar(a,b);
108
 
109
- <?php
110
- // Note to developers:
111
- // Here's a debug routine that you can use in case the cookie bar is giving you trouble.
112
- // Switch CLI_PLUGIN_DEVELOPMENT_MODE to true then call as e.g. http://www.yourwebsite.com/?cli-debug=all
113
- // Options: all | html | json
114
- if ( CLI_PLUGIN_DEVELOPMENT_MODE ) {
115
- ?>
116
- function getURLParameter(name){return decodeURI((RegExp(name+'='+'(.+?)(&|$)').exec(location.search)||[,null])[1]);}var p=eval('('+b+')');var t='';for(prop in p){if (!p.hasOwnProperty(prop)){continue;}t+=prop+" = "+p[prop]+"\n";}switch(getURLParameter("cli-debug")){case "json":alert(t);break;case "html":alert(a);break;case "all":alert(t);alert(a);break;default:}
117
- <?php
118
- }
119
- ?>
120
  });
121
  //]]>
122
  </script>
@@ -136,7 +130,9 @@ function cookielawinfo_inject_cli_script() {
136
  function cookielawinfo_enqueue_frontend_scripts() {
137
  $the_options = cookielawinfo_get_admin_settings();
138
  if ( $the_options['is_on'] == true ) {
139
- wp_enqueue_script( 'jquery-cookie', CLI_PLUGIN_URL . 'js/jquery.cookie.js', array('jquery') );
 
 
140
 
141
  wp_register_style( 'cookielawinfo-style', CLI_PLUGIN_URL . 'css/cli-style.css' );
142
  wp_enqueue_style( 'cookielawinfo-style' );
@@ -145,7 +141,12 @@ function cookielawinfo_enqueue_frontend_scripts() {
145
  wp_enqueue_script( 'cookie-law-info-script', CLI_PLUGIN_URL . 'js/cookielawinfo.js', array( 'jquery' ) );
146
  }
147
  wp_register_style( 'cookielawinfo-table-style', CLI_PLUGIN_URL . 'css/cli-tables.css' );
148
- wp_enqueue_style( 'cookielawinfo-table-style' );
 
 
 
 
 
149
  }
150
 
151
 
55
  'showagain_border' => $settings['showagain_border'],
56
  'showagain_div_id' => $settings['showagain_div_id'],
57
  'showagain_x_position' => $settings['showagain_x_position'],
58
+ 'text' => $settings['text'],
59
+ 'show_once_yn' => $settings['show_once_yn'],
60
+ 'show_once' => $settings['show_once']
61
  );
62
  $str = json_encode( $slim_settings );
63
  /*
104
  <script type="text/javascript">
105
  //<![CDATA[
106
  jQuery(document).ready(function() {
 
 
 
107
 
108
+ // Edit 09/05: remove globals and package into Object Literal, and removed the debug function
109
+ cli_show_cookiebar({
110
+ html: '<?php echo $notify_html; ?>',
111
+ settings: '<?php echo cookielawinfo_get_json_settings(); ?>'
112
+ });
113
+
 
 
 
 
 
114
  });
115
  //]]>
116
  </script>
130
  function cookielawinfo_enqueue_frontend_scripts() {
131
  $the_options = cookielawinfo_get_admin_settings();
132
  if ( $the_options['is_on'] == true ) {
133
+
134
+ // Edit 09/05: remove jQuery cookie dependency
135
+ //wp_enqueue_script( 'jquery-cookie', CLI_PLUGIN_URL . 'js/jquery.cookie.js', array('jquery') );
136
 
137
  wp_register_style( 'cookielawinfo-style', CLI_PLUGIN_URL . 'css/cli-style.css' );
138
  wp_enqueue_style( 'cookielawinfo-style' );
141
  wp_enqueue_script( 'cookie-law-info-script', CLI_PLUGIN_URL . 'js/cookielawinfo.js', array( 'jquery' ) );
142
  }
143
  wp_register_style( 'cookielawinfo-table-style', CLI_PLUGIN_URL . 'css/cli-tables.css' );
144
+
145
+ /**
146
+ * RICHARDASHBY EDIT: only enqueue on pages that need it
147
+ * Previously this next line of code included CSS on every page, which is a waste of resources
148
+ * Old >>> wp_enqueue_style( 'cookielawinfo-table-style' );
149
+ */
150
  }
151
 
152
 
php/shortcodes.php CHANGED
@@ -60,6 +60,11 @@ function cookielawinfo_delete_cookies_shortcode( $atts ) {
60
  included with plugin.
61
  */
62
  function cookielawinfo_table_shortcode( $atts ) {
 
 
 
 
 
63
  extract( shortcode_atts( array(
64
  'style' => 'classic',
65
  'not_shown_message' => ''
@@ -69,7 +74,8 @@ function cookielawinfo_table_shortcode( $atts ) {
69
 
70
  $args = array(
71
  'post_type' => 'cookielawinfo',
72
- 'posts_per_page' => 10,
 
73
  'order' => 'ASC',
74
  'orderby' => 'title'
75
  );
60
  included with plugin.
61
  */
62
  function cookielawinfo_table_shortcode( $atts ) {
63
+
64
+ /** RICHARDASHBY EDIT: only add CSS if table is being used */
65
+ wp_enqueue_style( 'cookielawinfo-table-style' );
66
+ /** END EDIT */
67
+
68
  extract( shortcode_atts( array(
69
  'style' => 'classic',
70
  'not_shown_message' => ''
74
 
75
  $args = array(
76
  'post_type' => 'cookielawinfo',
77
+ /** 28/05/2013: Changing from 10 to 50 to allow longer tables of cookie data */
78
+ 'posts_per_page' => 50,
79
  'order' => 'ASC',
80
  'orderby' => 'title'
81
  );
readme.txt CHANGED
@@ -3,8 +3,8 @@ Contributors: richardashby
3
  Donate link: http://mobro.co/richashby
4
  Tags: eu cookie law, cookie law, eu privacy directive, privacy directive, cookies, privacy, compliance
5
  Requires at least: 3.3.1
6
- Tested up to: 3.4
7
- Stable tag: 1.0.3
8
  License: GPLv2
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -18,6 +18,9 @@ This plugin uses implied consent, adding a subtle banner to your website either
18
  You can fully customise the style so it fits in with your existing website- change the colours, fonts, styles, the position on the page and even how it behaves when you click "accept".
19
 
20
 
 
 
 
21
  It also has a Cookie Audit module so you can easily show what cookies your site uses and display them neatly in a table on your Privacy & Cookies Policy page.
22
 
23
 
@@ -35,6 +38,7 @@ Features:
35
 
36
  * Fully customisable to look just like your own website's style: customise the colours, styles and fonts
37
  * Put the cookie bar in either the header or the footer
 
38
  * (Optional) cookie bar can be permanently dismissed or accessible through a "show again" tab
39
  * (Optional) "show again" tab is fully customisable including position shown on page and styles
40
  * "Cookie Audit" shortcode to construct a nicely-styled 'Privacy & Cookie Policy'
@@ -161,8 +165,27 @@ The more information you give, the quicker I can respond.
161
 
162
  == Changelog ==
163
 
164
- = 0.8.3 =
165
- * First public release.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
166
 
167
  = 0.9 =
168
  * Improved design & appearance
@@ -178,10 +201,16 @@ The more information you give, the quicker I can respond.
178
  * Refactored codebase, improved jQuery performance
179
  * Bugs fixed: no more slashes in Message Box
180
 
181
- = 1.0.3 =
182
- * Fixed bug where JavaScript generated an http 404 error.
183
 
184
  == Upgrade Notice ==
185
 
186
- = 0.9 =
187
- Major upgrade with several new features including show in footer, custom fonts and a new shortcode for Privacy & Cookie policy page.
 
 
 
 
 
 
3
  Donate link: http://mobro.co/richashby
4
  Tags: eu cookie law, cookie law, eu privacy directive, privacy directive, cookies, privacy, compliance
5
  Requires at least: 3.3.1
6
+ Tested up to: 3.9.1
7
+ Stable tag: 1.2
8
  License: GPLv2
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
18
  You can fully customise the style so it fits in with your existing website- change the colours, fonts, styles, the position on the page and even how it behaves when you click "accept".
19
 
20
 
21
+ You can choose to make the cookie bar disappear after a few seconds (completely configurable).
22
+
23
+
24
  It also has a Cookie Audit module so you can easily show what cookies your site uses and display them neatly in a table on your Privacy & Cookies Policy page.
25
 
26
 
38
 
39
  * Fully customisable to look just like your own website's style: customise the colours, styles and fonts
40
  * Put the cookie bar in either the header or the footer
41
+ * (Optional) automatically close the cookie bar after a delay (delay is configurable)
42
  * (Optional) cookie bar can be permanently dismissed or accessible through a "show again" tab
43
  * (Optional) "show again" tab is fully customisable including position shown on page and styles
44
  * "Cookie Audit" shortcode to construct a nicely-styled 'Privacy & Cookie Policy'
165
 
166
  == Changelog ==
167
 
168
+ = 1.2 =
169
+ * Removed 3rd party JavaScript "jQuery.cookie" which can cause issues with certain versions of Apache server
170
+ * Added native JavaScript cookie getter/setter
171
+ * Removed JavaScript debug routine
172
+ * Replaced JavaScript 'eval' with JSON.parse() for improved security: requires IE8+ (all other browsers fine though- who would have thought?)
173
+ * Improved JavaScript performance and compatibility by removing global variables and running as inline function
174
+
175
+ = 1.1 =
176
+ * New feature: auto-hide cookie bar after (configurable) delay
177
+ * New feature: added responsive design to cookie audit table (thanks to Mark Wiltshire)
178
+ * Upgrade: now using WP3.5 color picker
179
+ * Bug fix: Cookie Audit table now shows maximum of 50 posts (was 10, which was a bit restrictive)
180
+ * Bug fix: Cookie Law Info now only visible to admins
181
+ * Bug fix: fixed typo on Dashboard help section for the [delete_cookies] shortcode
182
+ * Bug fix: fixed "invalid header" bug
183
+ * Performance enhancement: removed jQueryUI from admin panel and added custom (slimline) code
184
+ * Performance enhancement: compressed CSS a bit
185
+ * Performance enhancement: cookie audit CSS is now only downloaded on the page on which it is needed
186
+
187
+ = 1.0.3 =
188
+ * Fixed bug where JavaScript generated an http 404 error.
189
 
190
  = 0.9 =
191
  * Improved design & appearance
201
  * Refactored codebase, improved jQuery performance
202
  * Bugs fixed: no more slashes in Message Box
203
 
204
+ = 0.8.3 =
205
+ * First public release.
206
 
207
  == Upgrade Notice ==
208
 
209
+ = 1.2 =
210
+ Performance and compatibility upgrade
211
+
212
+ = 1.1.2 =
213
+ Bugfix: namespaced function to cookielawinfo_enqueue_color_picker()
214
+
215
+ = 1.1 =
216
+ Major upgrade with several new features including auto-hide cookie bar after (configurable) delay, responsive design plus some bug fixes and performance enhancements.
trunk/admin/bgrins-spectrum/LICENSE DELETED
@@ -1,20 +0,0 @@
1
- Copyright (c) 2011, Brian Grinstead, http://briangrinstead.com
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/admin/bgrins-spectrum/README.md DELETED
@@ -1,27 +0,0 @@
1
- # Spectrum
2
- ## The No Hassle Colorpicker
3
-
4
- I wanted a colorpicker that didn't require images, and that had an API that made sense to me as a developer who has worked with color in a number of applications. I had used existing plugins (which I was quite grateful for), but decided that I would make a smaller, simpler one.
5
-
6
- I started using canvas, then switched to CSS gradients, since it turned out to be easier to manage, and worked better across browsers.
7
-
8
- See demo and docs: http://bgrins.github.com/spectrum/
9
-
10
- Thanks to the following places:
11
-
12
- * http://ansciath.tumblr.com/post/7347495869/css-aspect-ratio: Aspect ratio using CSS only
13
- * https://github.com/DavidDurman/FlexiColorPicker for saturation/value gradient constants
14
- * http://upload.wikimedia.org/wikipedia/commons/a/ad/HueScale.svg: For hue gradient contants
15
-
16
- The tool I use for measuring JavaScript size: http://closure-compiler.appspot.com/home
17
-
18
- // ==ClosureCompiler==
19
- // @compilation_level SIMPLE_OPTIMIZATIONS
20
- // @output_file_name default.js
21
- // @code_url https://raw.github.com/bgrins/spectrum/master/spectrum.js
22
- // ==/ClosureCompiler==
23
-
24
- Here is the JavaScript size
25
-
26
- Original Size: 35.93KB (11.25KB gzipped)
27
- Compiled Size: 17.56KB (6.79KB gzipped)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/admin/bgrins-spectrum/drop-arrow.png DELETED
Binary file
trunk/admin/bgrins-spectrum/my-colours.js DELETED
@@ -1,12 +0,0 @@
1
- jQuery(function() {
2
- var colour_selectors = "#cli-colour-btn-accept, #cli-colour-btn-decline, #cli-colour-btn-readmore, #cli-colour-link-accept, #cli-colour-link-decline, #cli-colour-link-readmore, #cli-colour-text, #cli-colour-background, #cli-colour-border, #cli-colour-link-button-1, #cli-colour-btn-button-1";
3
- jQuery(colour_selectors).spectrum({
4
- showPalette: false,
5
- palette: [
6
- ['#f00', '#ff0', '#0f0'],
7
- ['#00f', '#333', '#fff']
8
- ],
9
- showInitial: true,
10
- preferredFormat: "hex"
11
- });
12
- });
 
 
 
 
 
 
 
 
 
 
 
 
trunk/admin/bgrins-spectrum/spectrum.css DELETED
@@ -1,406 +0,0 @@
1
- /***
2
- Spectrum: The No Hassle Colorpicker
3
- https://github.com/bgrins/spectrum
4
-
5
- Author: Brian Grinstead
6
- License: MIT
7
- ***/
8
-
9
- .sp-container {
10
- position:absolute;
11
- top:0;
12
- left:0;
13
- display:inline-block;
14
- *display: inline;
15
- *zoom: 1;
16
- z-index: 2147483647;
17
- overflow: hidden;
18
- }
19
- .sp-container.sp-flat {
20
- position: relative;
21
- }
22
-
23
- /* http://ansciath.tumblr.com/post/7347495869/css-aspect-ratio */
24
- .sp-top {
25
- position:relative;
26
- width: 100%;
27
- display:inline-block;
28
- }
29
- .sp-top-inner {
30
- position:absolute;
31
- top:0;
32
- left:0;
33
- bottom:0;
34
- right:0;
35
- }
36
- .sp-color {
37
- position: absolute;
38
- top:0;
39
- left:0;
40
- bottom:0;
41
- right:20%;
42
- }
43
- .sp-hue {
44
- position: absolute;
45
- top:0;
46
- right:0;
47
- bottom:0;
48
- left:84%;
49
- height: 100%;
50
- }
51
- .sp-fill {
52
- padding-top: 80%;
53
- }
54
- .sp-sat, .sp-val {
55
- position: absolute;
56
- top:0;
57
- left:0;
58
- right:0;
59
- bottom:0;
60
- }
61
-
62
- /* Don't allow text selection */
63
- .sp-container, .sp-replacer, .sp-preview, .sp-dragger, .sp-slider , .sp-container.sp-dragging .sp-input, .sp-container button {
64
- -webkit-user-select:none;
65
- -moz-user-select: none;
66
- -o-user-select:none;
67
- user-select: none;
68
- }
69
-
70
- .sp-container.sp-input-disabled .sp-input-container {
71
- display: none;
72
- }
73
- .sp-container.sp-buttons-disabled .sp-button-container {
74
- display: none;
75
- }
76
- .sp-palette-only .sp-picker-container {
77
- display: none;
78
- }
79
- .sp-palette-disabled .sp-palette-container {
80
- display: none;
81
- }
82
-
83
- .sp-initial-disabled .sp-initial {
84
- display: none;
85
- }
86
-
87
-
88
- /* Gradients for hue, saturation and value instead of images. Not pretty... but it works */
89
- .sp-sat {
90
- background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#FFF), to(rgba(204, 154, 129, 0)));
91
- background-image: -webkit-linear-gradient(left, #FFF, rgba(204, 154, 129, 0));
92
- background-image: -moz-linear-gradient(left, #fff, rgba(204, 154, 129, 0));
93
- background-image: -o-linear-gradient(left, #fff, rgba(204, 154, 129, 0));
94
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)";
95
- filter : progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81');
96
- }
97
- .sp-val {
98
- background-image: -webkit-gradient(linear, 0 100%, 0 0, from(#000000), to(rgba(204, 154, 129, 0)));
99
- background-image: -webkit-linear-gradient(bottom, #000000, rgba(204, 154, 129, 0));
100
- background-image: -moz-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));
101
- background-image: -o-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));
102
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)";
103
- filter : progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000');
104
- }
105
-
106
- .sp-hue {
107
- background: -moz-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
108
- background: -ms-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
109
- background: -o-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
110
- background: -webkit-gradient(linear, left top, left bottom, from(#ff0000), color-stop(0.17, #ffff00), color-stop(0.33, #00ff00), color-stop(0.5, #00ffff), color-stop(0.67, #0000ff), color-stop(0.83, #ff00ff), to(#ff0000));
111
- background: -webkit-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
112
- }
113
-
114
- /* IE filters do not support multiple color stops.
115
- Generate 6 divs, line them up, and do two color gradients for each.
116
- Yes, really.
117
- */
118
-
119
- .sp-1 {
120
- height:17%;
121
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00');
122
- }
123
- .sp-2 {
124
- height:16%;
125
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00');
126
- }
127
- .sp-3 {
128
- height:17%;
129
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff');
130
- }
131
- .sp-4 {
132
- height:17%;
133
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff');
134
- }
135
- .sp-5 {
136
- height:16%;
137
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff');
138
- }
139
- .sp-6 {
140
- height:17%;
141
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000');
142
- }
143
-
144
- /* Clearfix hack */
145
- .sp-cf:before, .sp-cf:after { content: ""; display: table; }
146
- .sp-cf:after { clear: both; }
147
- .sp-cf { *zoom: 1; }
148
-
149
- /* Mobile devices, make hue slider bigger so it is easier to slide */
150
- @media (max-device-width: 480px) {
151
- .sp-color { right: 40%; }
152
- .sp-hue { left: 63%; }
153
- .sp-fill { padding-top: 60%; }
154
- }
155
-
156
- .sp-dragger {
157
- border-radius: 5px;
158
- height: 5px;
159
- width: 5px;
160
- border: 1px solid #fff;
161
- background: #000;
162
- cursor: pointer;
163
- position:absolute;
164
- top:0;
165
- left: 0;
166
- }
167
- .sp-slider {
168
- position: absolute;
169
- top:0;
170
- cursor:pointer;
171
- height: 3px;
172
- left: -1px;
173
- right: -1px;
174
- border: 1px solid #000;
175
- background: white;
176
- opacity: .8;
177
- }
178
-
179
- /* Basic display options (colors, fonts, global widths) */
180
- .sp-container {
181
- border-radius: 0;
182
- background-color: #ECECEC;
183
- border: solid 1px #f0c49B;
184
- padding: 0;
185
- }
186
- .sp-container, .sp-container button, .sp-container input, .sp-color, .sp-hue
187
- {
188
- font: normal 12px "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif;
189
- -webkit-box-sizing: border-box;
190
- -moz-box-sizing: border-box;
191
- -ms-box-sizing: border-box;
192
- box-sizing: border-box;
193
- }
194
- .sp-top
195
- {
196
- margin-bottom: 3px;
197
- }
198
- .sp-color, .sp-hue
199
- {
200
- border: solid 1px #666;
201
- }
202
-
203
- /* Input */
204
- .sp-input-container {
205
- float:right;
206
- width: 100px;
207
- margin-bottom: 4px;
208
- }
209
- .sp-initial-disabled .sp-input-container {
210
- width: 100%;
211
- }
212
- .sp-input {
213
- font-size: 12px !important;
214
- border: 1px inset;
215
- padding: 4px 5px;
216
- margin: 0;
217
- width: 100%;
218
- background:transparent;
219
- border-radius: 3px;
220
- color: #222;
221
- }
222
- .sp-input:focus {
223
- border: 1px solid orange;
224
- }
225
- .sp-input.sp-validation-error
226
- {
227
- border: 1px solid red;
228
- background: #fdd;
229
- }
230
- .sp-picker-container , .sp-palette-container
231
- {
232
- float:left;
233
- position: relative;
234
- padding: 10px;
235
- padding-bottom: 300px;
236
- margin-bottom: -290px;
237
- }
238
- .sp-picker-container
239
- {
240
- width: 172px;
241
- border-left: solid 1px #fff;
242
- }
243
-
244
- /* Palettes */
245
- .sp-palette-container
246
- {
247
- border-right: solid 1px #ccc;
248
- }
249
-
250
- .sp-palette span {
251
- display: block;
252
- position:relative;
253
- float:left;
254
- width: 24px;
255
- height: 15px;
256
- margin: 3px;
257
- cursor: pointer;
258
- border:solid 2px transparent;
259
- }
260
- .sp-palette span:hover, .sp-palette span.sp-thumb-active {
261
- border-color: orange;
262
- }
263
-
264
- /* Initial */
265
- .sp-initial
266
- {
267
- float: left;
268
- border: solid 1px #333;
269
- }
270
- .sp-initial span {
271
- width: 30px;
272
- height: 25px;
273
- border:none;
274
- display:block;
275
- float:left;
276
- margin:0;
277
- }
278
-
279
- /* Buttons */
280
- .sp-button-container {
281
- float: right;
282
- }
283
-
284
- /* Replacer (the little preview div that shows up instead of the <input>) */
285
- .sp-replacer {
286
- margin:0;
287
- overflow:hidden;
288
- cursor:pointer;
289
- padding: 4px;
290
- display:inline-block;
291
- *zoom: 1;
292
- *display: inline;
293
- border: solid 1px #91765d;
294
- background: #eee;
295
- color: #333;
296
- vertical-align: middle;
297
- }
298
- .sp-replacer:hover, .sp-replacer.sp-active {
299
- border-color: #F0C49B;
300
- color: #111;
301
- }
302
- .sp-dd {
303
- padding: 2px 0;
304
- height: 16px;
305
- line-height: 16px;
306
- float:left;
307
- font-size:10px;
308
- }
309
- .sp-preview {
310
- width:25px;
311
- height: 20px;
312
- border: solid 1px #222;
313
- margin-right: 5px;
314
- float:left;
315
- }
316
-
317
- .sp-palette
318
- {
319
- *width: 220px;
320
- max-width: 220px;
321
- }
322
- .sp-palette span
323
- {
324
- width:16px;
325
- height: 16px;
326
- margin:2px 1px;
327
- border: solid 1px #d0d0d0;
328
- }
329
-
330
- .sp-container
331
- {
332
- padding-bottom:0;
333
- }
334
-
335
-
336
- /* Buttons: http://hellohappy.org/css3-buttons/ */
337
- .sp-container button {
338
- background-color: #eeeeee;
339
- background-image: -webkit-linear-gradient(top, #eeeeee, #cccccc);
340
- background-image: -moz-linear-gradient(top, #eeeeee, #cccccc);
341
- background-image: -ms-linear-gradient(top, #eeeeee, #cccccc);
342
- background-image: -o-linear-gradient(top, #eeeeee, #cccccc);
343
- background-image: linear-gradient(top, #eeeeee, #cccccc);
344
- border: 1px solid #ccc;
345
- border-bottom: 1px solid #bbb;
346
- border-radius: 3px;
347
- color: #333;
348
- font-size: 14px;
349
- line-height: 1;
350
- padding: 5px 4px;
351
- text-align: center;
352
- text-shadow: 0 1px 0 #eee;
353
- vertical-align: middle;
354
- }
355
- .sp-container button:hover {
356
- background-color: #dddddd;
357
- background-image: -webkit-linear-gradient(top, #dddddd, #bbbbbb);
358
- background-image: -moz-linear-gradient(top, #dddddd, #bbbbbb);
359
- background-image: -ms-linear-gradient(top, #dddddd, #bbbbbb);
360
- background-image: -o-linear-gradient(top, #dddddd, #bbbbbb);
361
- background-image: linear-gradient(top, #dddddd, #bbbbbb);
362
- border: 1px solid #bbb;
363
- border-bottom: 1px solid #999;
364
- cursor: pointer;
365
- text-shadow: 0 1px 0 #ddd;
366
- }
367
- .sp-container button:active {
368
- border: 1px solid #aaa;
369
- border-bottom: 1px solid #888;
370
- -webkit-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
371
- -moz-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
372
- -ms-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
373
- -o-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
374
- box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
375
- }
376
- .sp-cancel
377
- {
378
- font-size: 11px;
379
- color: #d93f3f !important;
380
- margin:0;
381
- padding:2px;
382
- margin-right: 5px;
383
- vertical-align: middle;
384
- text-decoration:none;
385
-
386
- }
387
- .sp-cancel:hover
388
- {
389
- color: #d93f3f !important;
390
- text-decoration: underline;
391
- }
392
-
393
-
394
- .sp-palette span:hover, .sp-palette span.sp-thumb-active
395
- {
396
- border-color: #000;
397
- }
398
- .sp-palette span.sp-thumb-light.sp-thumb-active
399
- {
400
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=);
401
- }
402
-
403
- .sp-palette span.sp-thumb-dark.sp-thumb-active
404
- {
405
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=);
406
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/admin/bgrins-spectrum/spectrum.js DELETED
@@ -1,1563 +0,0 @@
1
- // Spectrum: The No Hassle Colorpicker
2
- // https://github.com/bgrins/spectrum
3
- // Author: Brian Grinstead
4
- // License: MIT
5
- // Requires: jQuery, spectrum.css
6
-
7
- (function (window, $, undefined) {
8
- var defaultOpts = {
9
-
10
- // Events
11
- beforeShow: noop,
12
- move: noop,
13
- change: noop,
14
- show: noop,
15
- hide: noop,
16
-
17
- // Options
18
- color: false,
19
- flat: false,
20
- showInput: false,
21
- showButtons: true,
22
- showInitial: false,
23
- showPalette: false,
24
- showPaletteOnly: false,
25
- showSelectionPalette: true,
26
- localStorageKey: false,
27
- maxSelectionSize: 7,
28
- cancelText: "cancel",
29
- chooseText: "choose",
30
- preferredFormat: false,
31
- className: "",
32
- theme: "sp-light",
33
- palette: ['fff', '000'],
34
- selectionPalette: []
35
- },
36
- spectrums = [],
37
- IE = $.browser.msie,
38
- replaceInput = [
39
- "<div class='sp-replacer'>",
40
- "<div class='sp-preview'></div>",
41
- "<div class='sp-dd'>&#9660;</div>",
42
- "</div>"
43
- ].join(''),
44
- markup = (function () {
45
-
46
- // IE does not support gradients with multiple stops, so we need to simulate
47
- // that for the rainbow slider with 8 divs that each have a single gradient
48
- var gradientFix = "";
49
- if (IE) {
50
- for (var i = 1; i <= 6; i++) {
51
- gradientFix += "<div class='sp-" + i + "'></div>";
52
- }
53
- }
54
-
55
- return [
56
- "<div class='sp-container'>",
57
- "<div class='sp-palette-container'>",
58
- "<div class='sp-palette sp-thumb sp-cf'></div>",
59
- "</div>",
60
- "<div class='sp-picker-container'>",
61
- "<div class='sp-top sp-cf'>",
62
- "<div class='sp-fill'></div>",
63
- "<div class='sp-top-inner'>",
64
- "<div class='sp-color'>",
65
- "<div class='sp-sat'>",
66
- "<div class='sp-val'>",
67
- "<div class='sp-dragger'></div>",
68
- "</div>",
69
- "</div>",
70
- "</div>",
71
- "<div class='sp-hue'>",
72
- "<div class='sp-slider'></div>",
73
- gradientFix,
74
- "</div>",
75
- "</div>",
76
- "</div>",
77
- "<div class='sp-input-container sp-cf'>",
78
- "<input class='sp-input' type='text' spellcheck='false' />",
79
- "</div>",
80
- "<div class='sp-initial sp-thumb sp-cf'></div>",
81
- "<div class='sp-button-container sp-cf'>",
82
- "<a class='sp-cancel' href='#'></a>",
83
- "<button class='sp-choose'></button>",
84
- "</div>",
85
- "</div>",
86
- "</div>"
87
- ].join("");
88
- })(),
89
- paletteTemplate = function (p, color, className) {
90
- var html = [];
91
- for (var i = 0; i < p.length; i++) {
92
- var tiny = tinycolor(p[i]);
93
- var c = tiny.toHsl().l < .5 ? "sp-thumb-dark" : "sp-thumb-light";
94
- c += (tinycolor.equals(color, p[i])) ? " sp-thumb-active" : "";
95
- html.push('<span title="' + tiny.toHexString() + '" data-color="' + tiny.toHexString() + '" style="background-color:' + tiny.toRgbString() + ';" class="' + c + '"></span>');
96
- }
97
- return "<div class='sp-cf " + className + "'>" + html.join('') + "</div>";
98
- };
99
-
100
- function hideAll() {
101
- for (var i = 0; i < spectrums.length; i++) {
102
- if (spectrums[i]) {
103
- spectrums[i].hide();
104
- }
105
- }
106
- }
107
- function instanceOptions(o, callbackContext) {
108
- var opts = $.extend({}, defaultOpts, o);
109
- opts.callbacks = {
110
- 'move': bind(opts.move, callbackContext),
111
- 'change': bind(opts.change, callbackContext),
112
- 'show': bind(opts.show, callbackContext),
113
- 'hide': bind(opts.hide, callbackContext),
114
- 'beforeShow': bind(opts.beforeShow, callbackContext)
115
- };
116
-
117
- return opts;
118
- }
119
-
120
- function spectrum(element, o) {
121
-
122
- var opts = instanceOptions(o, element),
123
- flat = opts.flat,
124
- showPaletteOnly = opts.showPaletteOnly,
125
- showPalette = opts.showPalette || showPaletteOnly,
126
- showInitial = opts.showInitial && !flat,
127
- showInput = opts.showInput,
128
- showSelectionPalette = opts.showSelectionPalette,
129
- localStorageKey = opts.localStorageKey,
130
- theme = opts.theme,
131
- callbacks = opts.callbacks,
132
- resize = throttle(reflow, 10),
133
- visible = false,
134
- dragWidth = 0,
135
- dragHeight = 0,
136
- dragHelperHeight = 0,
137
- slideHeight = 0,
138
- slideWidth = 0,
139
- slideHelperHeight = 0,
140
- currentHue = 0,
141
- currentSaturation = 0,
142
- currentValue = 0,
143
- palette = opts.palette.slice(0),
144
- paletteArray = $.isArray(palette[0]) ? palette : [palette],
145
- selectionPalette = opts.selectionPalette.slice(0),
146
- draggingClass = "sp-dragging";
147
-
148
- var doc = element.ownerDocument,
149
- body = doc.body,
150
- boundElement = $(element),
151
- container = $(markup, doc).addClass(theme),
152
- dragger = container.find(".sp-color"),
153
- dragHelper = container.find(".sp-dragger"),
154
- slider = container.find(".sp-hue"),
155
- slideHelper = container.find(".sp-slider"),
156
- textInput = container.find(".sp-input"),
157
- paletteContainer = container.find(".sp-palette"),
158
- initialColorContainer = container.find(".sp-initial"),
159
- cancelButton = container.find(".sp-cancel"),
160
- chooseButton = container.find(".sp-choose"),
161
- isInput = boundElement.is("input"),
162
- shouldReplace = isInput && !flat,
163
- replacer = (shouldReplace) ? $(replaceInput).addClass(theme) : $([]),
164
- offsetElement = (shouldReplace) ? replacer : boundElement,
165
- previewElement = replacer.find(".sp-preview"),
166
- initialColor = opts.color || (isInput && boundElement.val()),
167
- colorOnShow = false,
168
- preferredFormat = opts.preferredFormat,
169
- currentPreferredFormat = preferredFormat,
170
- clickoutFiresChange = !opts.showButtons;
171
-
172
- chooseButton.text(opts.chooseText);
173
- cancelButton.text(opts.cancelText);
174
-
175
- function initialize() {
176
-
177
- if (IE) {
178
- container.find("*:not(input)").attr("unselectable", "on");
179
- }
180
-
181
- container.toggleClass("sp-flat", flat);
182
- container.toggleClass("sp-input-disabled", !showInput);
183
- container.toggleClass("sp-buttons-disabled", !opts.showButtons || flat);
184
- container.toggleClass("sp-palette-disabled", !showPalette);
185
- container.toggleClass("sp-palette-only", showPaletteOnly);
186
- container.toggleClass("sp-initial-disabled", !showInitial);
187
- container.addClass(opts.className);
188
-
189
- if (shouldReplace) {
190
- boundElement.hide().after(replacer);
191
- }
192
-
193
- if (flat) {
194
- boundElement.after(container).hide();
195
- }
196
- else {
197
- $(body).append(container.hide());
198
- }
199
- if (localStorageKey && window.localStorage) {
200
- try {
201
- selectionPalette = window.localStorage[localStorageKey].split(",");
202
- }
203
- catch (e) {
204
-
205
- }
206
- }
207
-
208
- offsetElement.bind("click.spectrum touchstart.spectrum", function (e) {
209
- toggle();
210
-
211
- e.stopPropagation();
212
-
213
- if (!$(e.target).is("input")) {
214
- e.preventDefault();
215
- }
216
- });
217
-
218
- // Prevent clicks from bubbling up to document. This would cause it to be hidden.
219
- container.click(stopPropagation);
220
-
221
- // Handle user typed input
222
- textInput.change(setFromTextInput);
223
- textInput.bind("paste", function () {
224
- setTimeout(setFromTextInput, 1);
225
- });
226
- textInput.keydown(function (e) { if (e.keyCode == 13) { setFromTextInput(); } });
227
-
228
- cancelButton.bind("click.spectrum", function (e) {
229
- e.stopPropagation();
230
- e.preventDefault();
231
- hide();
232
- });
233
-
234
- chooseButton.bind("click.spectrum", function (e) {
235
- e.stopPropagation();
236
- e.preventDefault();
237
-
238
- if (isValid()) {
239
- updateOriginalInput(true);
240
- hide();
241
- }
242
- });
243
-
244
- draggable(slider, function (dragX, dragY) {
245
- currentHue = (dragY / slideHeight);
246
- move();
247
- }, dragStart, dragStop);
248
-
249
- draggable(dragger, function (dragX, dragY) {
250
- currentSaturation = dragX / dragWidth;
251
- currentValue = (dragHeight - dragY) / dragHeight;
252
- move();
253
- }, dragStart, dragStop);
254
-
255
- if (!!initialColor) {
256
- set(initialColor);
257
- addColorToSelectionPalette(initialColor);
258
- }
259
- else {
260
- updateUI();
261
- }
262
-
263
- if (flat) {
264
- show();
265
- }
266
-
267
- function palletElementClick(e) {
268
- if (e.data && e.data.ignore) {
269
- set($(this).data("color"));
270
- move();
271
- }
272
- else {
273
- set($(this).data("color"));
274
- updateOriginalInput(true);
275
- move();
276
- hide();
277
- }
278
-
279
- return false;
280
- }
281
-
282
- var paletteEvent = IE ? "mousedown.spectrum" : "click.spectrum touchstart.spectrum";
283
- paletteContainer.delegate("span", paletteEvent, palletElementClick);
284
- initialColorContainer.delegate("span::nth-child(1)", paletteEvent, { ignore: true }, palletElementClick);
285
- }
286
- function addColorToSelectionPalette(color) {
287
- if (showSelectionPalette) {
288
- selectionPalette.push(tinycolor(color).toHexString());
289
- if (localStorageKey && window.localStorage) {
290
- window.localStorage[localStorageKey] = selectionPalette.join(",");
291
- }
292
- }
293
- }
294
-
295
- function getUniqueSelectionPalette() {
296
- var unique = [];
297
- var p = selectionPalette;
298
- var paletteLookup = {};
299
-
300
- if (showPalette) {
301
-
302
- for (var i = 0; i < paletteArray.length; i++) {
303
- for (var j = 0; j < paletteArray[i].length; j++) {
304
- var hex = tinycolor(paletteArray[i][j]).toHexString();
305
- paletteLookup[hex] = true;
306
- }
307
- }
308
-
309
- for (var i = 0; i < p.length; i++) {
310
- var color = tinycolor(p[i]);
311
- var hex = color.toHexString();
312
-
313
- if (!paletteLookup.hasOwnProperty(hex)) {
314
- unique.push(p[i]);
315
- paletteLookup[hex] = true;
316
- }
317
- }
318
- }
319
-
320
- return unique.reverse().slice(0, opts.maxSelectionSize);
321
- }
322
- function drawPalette() {
323
-
324
- var currentColor = get();
325
-
326
- var html = $.map(paletteArray, function (palette, i) {
327
- return paletteTemplate(palette, currentColor, "sp-palette-row sp-palette-row-" + i);
328
- });
329
-
330
- if (selectionPalette) {
331
- html.push(paletteTemplate(getUniqueSelectionPalette(), currentColor, "sp-palette-row sp-palette-row-selection"));
332
- }
333
-
334
- paletteContainer.html(html.join(""));
335
- }
336
- function drawInitial() {
337
- if (showInitial) {
338
- var initial = colorOnShow;
339
- var current = get();
340
- initialColorContainer.html(paletteTemplate([initial, current], current, "sp-palette-row-initial"));
341
- }
342
- }
343
- function dragStart() {
344
- if (dragHeight === 0 || dragWidth === 0 || slideHeight === 0) {
345
- reflow();
346
- }
347
- container.addClass(draggingClass);
348
- }
349
- function dragStop() {
350
- container.removeClass(draggingClass);
351
- }
352
- function setFromTextInput() {
353
- var tiny = tinycolor(textInput.val());
354
- if (tiny.ok) {
355
- set(tiny);
356
- }
357
- else {
358
- textInput.addClass("sp-validation-error");
359
- }
360
- }
361
-
362
- function toggle() {
363
- (visible) ? hide() : show();
364
- }
365
-
366
- function show() {
367
- if (visible) {
368
- reflow();
369
- return;
370
- }
371
- if (callbacks.beforeShow(get()) === false) return;
372
-
373
- hideAll();
374
- visible = true;
375
-
376
- $(doc).bind("click.spectrum", hide);
377
- $(window).bind("resize.spectrum", resize);
378
- replacer.addClass("sp-active");
379
- container.show();
380
-
381
- if (showPalette) {
382
- drawPalette();
383
- }
384
- reflow();
385
- updateUI();
386
-
387
- colorOnShow = get();
388
-
389
- drawInitial();
390
- callbacks.show(colorOnShow);
391
- }
392
-
393
- function hide() {
394
- if (!visible || flat) { return; }
395
- visible = false;
396
-
397
- $(doc).unbind("click.spectrum", hide);
398
- $(window).unbind("resize.spectrum", resize);
399
-
400
- replacer.removeClass("sp-active");
401
- container.hide();
402
-
403
- var colorHasChanged = !tinycolor.equals(get(), colorOnShow);
404
-
405
- if (colorHasChanged) {
406
- if (clickoutFiresChange) {
407
- updateOriginalInput(true);
408
- }
409
- else {
410
- revert();
411
- }
412
- }
413
-
414
- callbacks.hide(get());
415
- }
416
-
417
- function revert() {
418
- set(colorOnShow, true);
419
- }
420
-
421
- function set(color, ignoreFormatChange) {
422
- if (tinycolor.equals(color, get())) {
423
- return;
424
- }
425
-
426
- var newColor = tinycolor(color);
427
- var newHsv = newColor.toHsv();
428
-
429
- currentHue = newHsv.h;
430
- currentSaturation = newHsv.s;
431
- currentValue = newHsv.v;
432
-
433
- updateUI();
434
-
435
- if (!ignoreFormatChange) {
436
- currentPreferredFormat = preferredFormat || newColor.format;
437
- }
438
- }
439
-
440
- function get() {
441
- return tinycolor.fromRatio({ h: currentHue, s: currentSaturation, v: currentValue });
442
- }
443
-
444
- function isValid() {
445
- return !textInput.hasClass("sp-validation-error");
446
- }
447
-
448
- function move() {
449
- updateUI();
450
-
451
- callbacks.move(get());
452
- }
453
-
454
- function updateUI() {
455
-
456
- textInput.removeClass("sp-validation-error");
457
-
458
- updateHelperLocations();
459
-
460
- // Update dragger background color (gradients take care of saturation and value).
461
- var flatColor = tinycolor({ h: currentHue, s: "1.0", v: "1.0" });
462
- dragger.css("background-color", flatColor.toHexString());
463
-
464
- var realColor = get(),
465
- realHex = realColor.toHexString();
466
-
467
- // Update the replaced elements background color (with actual selected color)
468
- previewElement.css("background-color", realHex);
469
-
470
- // Update the text entry input as it changes happen
471
- if (showInput) {
472
- textInput.val(realColor.toString(currentPreferredFormat));
473
- }
474
-
475
- if (showPalette) {
476
- drawPalette();
477
- }
478
-
479
- drawInitial();
480
- }
481
-
482
- function updateHelperLocations() {
483
- var h = currentHue;
484
- var s = currentSaturation;
485
- var v = currentValue;
486
-
487
- // Where to show the little circle in that displays your current selected color
488
- var dragX = s * dragWidth;
489
- var dragY = dragHeight - (v * dragHeight);
490
- dragX = Math.max(
491
- -dragHelperHeight,
492
- Math.min(dragWidth - dragHelperHeight, dragX - dragHelperHeight)
493
- );
494
- dragY = Math.max(
495
- -dragHelperHeight,
496
- Math.min(dragHeight - dragHelperHeight, dragY - dragHelperHeight)
497
- );
498
- dragHelper.css({
499
- "top": dragY,
500
- "left": dragX
501
- });
502
-
503
- // Where to show the bar that displays your current selected hue
504
- var slideY = (currentHue) * slideHeight;
505
- slideHelper.css({
506
- "top": slideY - slideHelperHeight
507
- });
508
- }
509
-
510
- function updateOriginalInput(fireCallback) {
511
- var color = get();
512
-
513
- if (isInput) {
514
- boundElement.val(color.toString(currentPreferredFormat)).change();
515
- }
516
-
517
- var hasChanged = !tinycolor.equals(color, colorOnShow);
518
- colorOnShow = color;
519
-
520
- // Update the selection palette with the current color
521
- addColorToSelectionPalette(color);
522
- if (fireCallback && hasChanged) {
523
- callbacks.change(color);
524
- }
525
- }
526
-
527
- function reflow() {
528
- dragWidth = dragger.width();
529
- dragHeight = dragger.height();
530
- dragHelperHeight = dragHelper.height();
531
- slideWidth = slider.width();
532
- slideHeight = slider.height();
533
- slideHelperHeight = slideHelper.height();
534
-
535
- if (!flat) {
536
- container.offset(getOffset(container, offsetElement));
537
- }
538
-
539
- updateHelperLocations();
540
- }
541
-
542
- function destroy() {
543
- boundElement.show();
544
- offsetElement.unbind("click.spectrum touchstart.spectrum");
545
- container.remove();
546
- replacer.remove();
547
- spectrums[spect.id] = null;
548
- }
549
-
550
- initialize();
551
-
552
- var spect = {
553
- show: show,
554
- hide: hide,
555
- set: function (c) {
556
- set(c);
557
- updateOriginalInput();
558
- },
559
- get: get,
560
- destroy: destroy,
561
- container: container
562
- };
563
-
564
- spect.id = spectrums.push(spect) - 1;
565
-
566
- return spect;
567
- }
568
-
569
- /**
570
- * checkOffset - get the offset below/above and left/right element depending on screen position
571
- * Thanks https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.datepicker.js
572
- */
573
- function getOffset(picker, input) {
574
- var extraY = 0;
575
- var dpWidth = picker.outerWidth();
576
- var dpHeight = picker.outerHeight();
577
- var inputWidth = input.outerWidth();
578
- var inputHeight = input.outerHeight();
579
- var doc = picker[0].ownerDocument;
580
- var docElem = doc.documentElement;
581
- var viewWidth = docElem.clientWidth + $(doc).scrollLeft();
582
- var viewHeight = docElem.clientHeight + $(doc).scrollTop();
583
- var offset = input.offset();
584
- offset.top += inputHeight;
585
-
586
- offset.left -=
587
- Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
588
- Math.abs(offset.left + dpWidth - viewWidth) : 0);
589
-
590
- offset.top -=
591
- Math.min(offset.top, ((offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
592
- Math.abs(dpHeight + inputHeight - extraY) : extraY));
593
-
594
- return offset;
595
- }
596
-
597
- /**
598
- * noop - do nothing
599
- */
600
- function noop() {
601
-
602
- }
603
-
604
- /**
605
- * stopPropagation - makes the code only doing this a little easier to read in line
606
- */
607
- function stopPropagation(e) {
608
- e.stopPropagation();
609
- }
610
-
611
- /**
612
- * Create a function bound to a given object
613
- * Thanks to underscore.js
614
- */
615
- function bind(func, obj) {
616
- var slice = Array.prototype.slice;
617
- var args = slice.call(arguments, 2);
618
- return function () {
619
- return func.apply(obj, args.concat(slice.call(arguments)));
620
- }
621
- }
622
-
623
- /**
624
- * Lightweight drag helper. Handles containment within the element, so that
625
- * when dragging, the x is within [0,element.width] and y is within [0,element.height]
626
- */
627
- function draggable(element, onmove, onstart, onstop) {
628
- onmove = onmove || function () { };
629
- onstart = onstart || function () { };
630
- onstop = onstop || function () { };
631
- var doc = element.ownerDocument || document;
632
- var dragging = false;
633
- var offset = {};
634
- var maxHeight = 0;
635
- var maxWidth = 0;
636
- var IE = $.browser.msie;
637
- var hasTouch = ('ontouchstart' in window);
638
-
639
- var duringDragEvents = {};
640
- duringDragEvents["selectstart"] = prevent;
641
- duringDragEvents["dragstart"] = prevent;
642
- duringDragEvents[(hasTouch ? "touchmove" : "mousemove")] = move;
643
- duringDragEvents[(hasTouch ? "touchend" : "mouseup")] = stop;
644
-
645
- function prevent(e) {
646
- if (e.stopPropagation) {
647
- e.stopPropagation();
648
- }
649
- if (e.preventDefault) {
650
- e.preventDefault();
651
- }
652
- e.returnValue = false;
653
- }
654
-
655
- function move(e) {
656
- if (dragging) {
657
- // Mouseup happened outside of window
658
- if (IE && !(document.documentMode >= 9) && !e.button) {
659
- return stop();
660
- }
661
-
662
- var touches = e.originalEvent.touches;
663
- var pageX = touches ? touches[0].pageX : e.pageX;
664
- var pageY = touches ? touches[0].pageY : e.pageY;
665
-
666
- var dragX = Math.max(0, Math.min(pageX - offset.left, maxWidth));
667
- var dragY = Math.max(0, Math.min(pageY - offset.top, maxHeight));
668
-
669
- if (hasTouch) {
670
- // Stop scrolling in iOS
671
- prevent(e);
672
- }
673
-
674
- onmove.apply(element, [dragX, dragY]);
675
- }
676
- }
677
- function start(e) {
678
- var rightclick = (e.which) ? (e.which == 3) : (e.button == 2);
679
- var touches = e.originalEvent.touches;
680
-
681
- if (!rightclick && !dragging) {
682
- if (onstart.apply(element, arguments) !== false) {
683
- dragging = true;
684
- maxHeight = $(element).height();
685
- maxWidth = $(element).width();
686
- offset = $(element).offset();
687
-
688
- $(doc).bind(duringDragEvents);
689
- $(doc.body).addClass("sp-dragging");
690
-
691
- if (!hasTouch) {
692
- move(e);
693
- }
694
-
695
- prevent(e);
696
- }
697
- }
698
- }
699
- function stop() {
700
- if (dragging) {
701
- $(doc).unbind(duringDragEvents);
702
- $(doc.body).removeClass("sp-dragging");
703
- onstop.apply(element, arguments);
704
- }
705
- dragging = false;
706
- }
707
-
708
- $(element).bind(hasTouch ? "touchstart" : "mousedown", start);
709
- }
710
-
711
- function throttle(func, wait, debounce) {
712
- var timeout;
713
- return function () {
714
- var context = this, args = arguments;
715
- var throttler = function () {
716
- timeout = null;
717
- func.apply(context, args);
718
- };
719
- if (debounce) clearTimeout(timeout);
720
- if (debounce || !timeout) timeout = setTimeout(throttler, wait);
721
- };
722
- }
723
-
724
-
725
- /**
726
- * Define a jQuery plugin
727
- */
728
- var dataID = "spectrum.id";
729
- $.fn.spectrum = function (opts, extra) {
730
- if (typeof opts == "string") {
731
- if (opts == "get") {
732
- return spectrums[this.eq(0).data(dataID)].get();
733
- } else if (opts == "container") {
734
- return spectrums[$(this).data(dataID)].container;
735
- }
736
-
737
- return this.each(function () {
738
- var spect = spectrums[$(this).data(dataID)];
739
- if (spect) {
740
- if (opts == "show") { spect.show(); }
741
- if (opts == "hide") { spect.hide(); }
742
- if (opts == "set") { spect.set(extra); }
743
- if (opts == "destroy") {
744
- spect.destroy();
745
- $(this).removeData(dataID);
746
- }
747
- }
748
- });
749
- }
750
-
751
- // Initializing a new one
752
- return this.spectrum("destroy").each(function () {
753
- var spect = spectrum(this, opts);
754
- $(this).data(dataID, spect.id);
755
- });
756
- };
757
-
758
- $.fn.spectrum.load = true;
759
- $.fn.spectrum.loadOpts = {};
760
- $.fn.spectrum.draggable = draggable;
761
-
762
- $.fn.spectrum.processNativeColorInputs = function() {
763
- var supportsColor = $("<input type='color' />")[0].type === "color";
764
- if (!supportsColor) {
765
- $("input[type=color]").spectrum({
766
- preferredFormat: "hex6"
767
- });
768
- }
769
- };
770
-
771
- $(function () {
772
- if ($.fn.spectrum.load) {
773
- $.fn.spectrum.processNativeColorInputs();
774
- }
775
- });
776
-
777
- })(this, jQuery);
778
-
779
-
780
-
781
-
782
-
783
-
784
-
785
- // TinyColor.js - <https://github.com/bgrins/TinyColor> - 2011 Brian Grinstead - v0.5
786
-
787
- (function (window) {
788
-
789
- var trimLeft = /^[\s,#]+/,
790
- trimRight = /\s+$/,
791
- tinyCounter = 0,
792
- math = Math,
793
- mathRound = math.round,
794
- mathMin = math.min,
795
- mathMax = math.max,
796
- mathRandom = math.random,
797
- parseFloat = window.parseFloat;
798
-
799
- function tinycolor(color, opts) {
800
-
801
- // If input is already a tinycolor, return itself
802
- if (typeof color == "object" && color.hasOwnProperty("_tc_id")) {
803
- return color;
804
- }
805
-
806
- var rgb = inputToRGB(color);
807
- var r = rgb.r, g = rgb.g, b = rgb.b, a = parseFloat(rgb.a), format = rgb.format;
808
-
809
- return {
810
- ok: rgb.ok,
811
- format: format,
812
- _tc_id: tinyCounter++,
813
- alpha: a,
814
- toHsv: function () {
815
- var hsv = rgbToHsv(r, g, b);
816
- return { h: hsv.h, s: hsv.s, v: hsv.v, a: a };
817
- },
818
- toHsvString: function () {
819
- var hsv = rgbToHsv(r, g, b);
820
- var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);
821
- return (a == 1) ?
822
- "hsv(" + h + ", " + s + "%, " + v + "%)" :
823
- "hsva(" + h + ", " + s + "%, " + v + "%, " + a + ")";
824
- },
825
- toHsl: function () {
826
- var hsl = rgbToHsl(r, g, b);
827
- return { h: hsl.h, s: hsl.s, l: hsl.l, a: a };
828
- },
829
- toHslString: function () {
830
- var hsl = rgbToHsl(r, g, b);
831
- var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);
832
- return (a == 1) ?
833
- "hsl(" + h + ", " + s + "%, " + l + "%)" :
834
- "hsla(" + h + ", " + s + "%, " + l + "%, " + a + ")";
835
- },
836
- toHex: function () {
837
- return rgbToHex(r, g, b);
838
- },
839
- toHexString: function (force6Char) {
840
- return '#' + rgbToHex(r, g, b, force6Char);
841
- },
842
- toRgb: function () {
843
- return { r: mathRound(r), g: mathRound(g), b: mathRound(b), a: a };
844
- },
845
- toRgbString: function () {
846
- return (a == 1) ?
847
- "rgb(" + mathRound(r) + ", " + mathRound(g) + ", " + mathRound(b) + ")" :
848
- "rgba(" + mathRound(r) + ", " + mathRound(g) + ", " + mathRound(b) + ", " + a + ")";
849
- },
850
- toName: function () {
851
- return hexNames[rgbToHex(r, g, b)] || false;
852
- },
853
- toFilter: function () {
854
- var hex = rgbToHex(r, g, b);
855
- var alphaHex = Math.round(parseFloat(a) * 255).toString(16);
856
- return "progid:DXImageTransform.Microsoft.gradient(startColorstr=#" +
857
- alphaHex + hex + ",endColorstr=#" + alphaHex + hex + ")";
858
- },
859
- toString: function (format) {
860
- format = format || this.format;
861
- var formattedString = false;
862
- if (format === "rgb") {
863
- formattedString = this.toRgbString();
864
- }
865
- if (format === "hex") {
866
- formattedString = this.toHexString();
867
- }
868
- if (format === "hex6") {
869
- formattedString = this.toHexString(true);
870
- }
871
- if (format === "name") {
872
- formattedString = this.toName();
873
- }
874
- if (format === "hsl") {
875
- formattedString = this.toHslString();
876
- }
877
- if (format === "hsv") {
878
- formattedString = this.toHsvString();
879
- }
880
-
881
- return formattedString || this.toHexString();
882
- }
883
- };
884
- }
885
-
886
- // If input is an object, force 1 into "1.0" to handle ratios properly
887
- // String input requires "1.0" as input, so 1 will be treated as 1
888
- tinycolor.fromRatio = function(color) {
889
-
890
- if (typeof color == "object") {
891
- for (var i in color) {
892
- if (color[i] === 1) {
893
- color[i] = "1.0";
894
- }
895
- }
896
- }
897
-
898
- return tinycolor(color);
899
-
900
- }
901
-
902
- // Given a string or object, convert that input to RGB
903
- // Possible string inputs:
904
- //
905
- // "red"
906
- // "#f00" or "f00"
907
- // "#ff0000" or "ff0000"
908
- // "rgb 255 0 0" or "rgb (255, 0, 0)"
909
- // "rgb 1.0 0 0" or "rgb (1, 0, 0)"
910
- // "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1"
911
- // "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1"
912
- // "hsl(0, 100%, 50%)" or "hsl 0 100% 50%"
913
- // "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1"
914
- // "hsv(0, 100%, 100%)" or "hsv 0 100% 100%"
915
- //
916
- function inputToRGB(color) {
917
-
918
- var rgb = { r: 0, g: 0, b: 0 };
919
- var a = 1;
920
- var ok = false;
921
- var format = false;
922
-
923
- if (typeof color == "string") {
924
- color = stringInputToObject(color);
925
- }
926
-
927
- if (typeof color == "object") {
928
- if (color.hasOwnProperty("r") && color.hasOwnProperty("g") && color.hasOwnProperty("b")) {
929
- rgb = rgbToRgb(color.r, color.g, color.b);
930
- ok = true;
931
- format = "rgb";
932
- }
933
- else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("v")) {
934
- rgb = hsvToRgb(color.h, color.s, color.v);
935
- ok = true;
936
- format = "hsv";
937
- }
938
- else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("l")) {
939
- var rgb = hslToRgb(color.h, color.s, color.l);
940
- ok = true;
941
- format = "hsl";
942
- }
943
-
944
- if (color.hasOwnProperty("a")) {
945
- a = color.a;
946
- }
947
- }
948
-
949
- rgb.r = mathMin(255, mathMax(rgb.r, 0));
950
- rgb.g = mathMin(255, mathMax(rgb.g, 0));
951
- rgb.b = mathMin(255, mathMax(rgb.b, 0));
952
-
953
-
954
- // Don't let the range of [0,255] come back in [0,1].
955
- // Potentially lose a little bit of precision here, but will fix issues where
956
- // .5 gets interpreted as half of the total, instead of half of 1.
957
- // If it was supposed to be 128, this was already taken care of in the conversion function
958
- if (rgb.r < 1) { rgb.r = mathRound(rgb.r); }
959
- if (rgb.g < 1) { rgb.g = mathRound(rgb.g); }
960
- if (rgb.b < 1) { rgb.b = mathRound(rgb.b); }
961
-
962
- return {
963
- ok: ok,
964
- format: (color && color.format) || format,
965
- r: rgb.r,
966
- g: rgb.g,
967
- b: rgb.b,
968
- a: a
969
- };
970
- }
971
-
972
-
973
-
974
- // Conversion Functions
975
- // --------------------
976
-
977
- // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:
978
- // <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>
979
-
980
- // `rgbToRgb`
981
- // Handle bounds / percentage checking to conform to CSS color spec
982
- // <http://www.w3.org/TR/css3-color/>
983
- // *Assumes:* r, g, b in [0, 255] or [0, 1]
984
- // *Returns:* { r, g, b } in [0, 255]
985
- function rgbToRgb(r, g, b) {
986
- return {
987
- r: bound01(r, 255) * 255,
988
- g: bound01(g, 255) * 255,
989
- b: bound01(b, 255) * 255
990
- };
991
- }
992
-
993
- // `rgbToHsl`
994
- // Converts an RGB color value to HSL.
995
- // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]
996
- // *Returns:* { h, s, l } in [0,1]
997
- function rgbToHsl(r, g, b) {
998
-
999
- r = bound01(r, 255);
1000
- g = bound01(g, 255);
1001
- b = bound01(b, 255);
1002
-
1003
- var max = mathMax(r, g, b), min = mathMin(r, g, b);
1004
- var h, s, l = (max + min) / 2;
1005
-
1006
- if (max == min) {
1007
- h = s = 0; // achromatic
1008
- }
1009
- else {
1010
- var d = max - min;
1011
- s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
1012
- switch (max) {
1013
- case r: h = (g - b) / d + (g < b ? 6 : 0); break;
1014
- case g: h = (b - r) / d + 2; break;
1015
- case b: h = (r - g) / d + 4; break;
1016
- }
1017
-
1018
- h /= 6;
1019
- }
1020
-
1021
- return { h: h, s: s, l: l };
1022
- }
1023
-
1024
- // `hslToRgb`
1025
- // Converts an HSL color value to RGB.
1026
- // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]
1027
- // *Returns:* { r, g, b } in the set [0, 255]
1028
- function hslToRgb(h, s, l) {
1029
- var r, g, b;
1030
-
1031
- h = bound01(h, 360);
1032
- s = bound01(s, 100);
1033
- l = bound01(l, 100);
1034
-
1035
- function hue2rgb(p, q, t) {
1036
- if (t < 0) t += 1;
1037
- if (t > 1) t -= 1;
1038
- if (t < 1 / 6) return p + (q - p) * 6 * t;
1039
- if (t < 1 / 2) return q;
1040
- if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
1041
- return p;
1042
- }
1043
-
1044
- if (s == 0) {
1045
- r = g = b = l; // achromatic
1046
- }
1047
- else {
1048
- var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
1049
- var p = 2 * l - q;
1050
- r = hue2rgb(p, q, h + 1 / 3);
1051
- g = hue2rgb(p, q, h);
1052
- b = hue2rgb(p, q, h - 1 / 3);
1053
- }
1054
-
1055
- return { r: r * 255, g: g * 255, b: b * 255 };
1056
- }
1057
-
1058
- // `rgbToHsv`
1059
- // Converts an RGB color value to HSV
1060
- // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]
1061
- // *Returns:* { h, s, v } in [0,1]
1062
- function rgbToHsv(r, g, b) {
1063
-
1064
- r = bound01(r, 255);
1065
- g = bound01(g, 255);
1066
- b = bound01(b, 255);
1067
-
1068
- var max = mathMax(r, g, b), min = mathMin(r, g, b);
1069
- var h, s, v = max;
1070
-
1071
- var d = max - min;
1072
- s = max == 0 ? 0 : d / max;
1073
-
1074
- if (max == min) {
1075
- h = 0; // achromatic
1076
- }
1077
- else {
1078
- switch (max) {
1079
- case r: h = (g - b) / d + (g < b ? 6 : 0); break;
1080
- case g: h = (b - r) / d + 2; break;
1081
- case b: h = (r - g) / d + 4; break;
1082
- }
1083
- h /= 6;
1084
- }
1085
- return { h: h, s: s, v: v };
1086
- }
1087
-
1088
- // `hsvToRgb`
1089
- // Converts an HSV color value to RGB.
1090
- // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]
1091
- // *Returns:* { r, g, b } in the set [0, 255]
1092
- function hsvToRgb(h, s, v) {
1093
- var r, g, b;
1094
-
1095
- h = bound01(h, 360) * 6;
1096
- s = bound01(s, 100);
1097
- v = bound01(v, 100);
1098
-
1099
- var i = math.floor(h),
1100
- f = h - i,
1101
- p = v * (1 - s),
1102
- q = v * (1 - f * s),
1103
- t = v * (1 - (1 - f) * s),
1104
- mod = i % 6,
1105
- r = [v, q, p, p, t, v][mod],
1106
- g = [t, v, v, q, p, p][mod],
1107
- b = [p, p, t, v, v, q][mod];
1108
-
1109
- return { r: r * 255, g: g * 255, b: b * 255 };
1110
- }
1111
-
1112
- // `rgbToHex`
1113
- // Converts an RGB color to hex
1114
- // Assumes r, g, and b are contained in the set [0, 255]
1115
- // Returns a 3 or 6 character hex
1116
- function rgbToHex(r, g, b, force6Char) {
1117
- function pad(c) {
1118
- return c.length == 1 ? '0' + c : '' + c;
1119
- }
1120
-
1121
- var hex = [
1122
- pad(mathRound(r).toString(16)),
1123
- pad(mathRound(g).toString(16)),
1124
- pad(mathRound(b).toString(16))
1125
- ];
1126
-
1127
- // Return a 3 character hex if possible
1128
- if (!force6Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {
1129
- return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);
1130
- }
1131
-
1132
- return hex.join("");
1133
- }
1134
-
1135
- // `equals`
1136
- // Can be called with any tinycolor input
1137
- tinycolor.equals = function (color1, color2) {
1138
- if (!color1 || !color2) { return false; }
1139
- return tinycolor(color1).toHex() == tinycolor(color2).toHex();
1140
- };
1141
- tinycolor.random = function () {
1142
- return tinycolor.fromRatio({
1143
- r: mathRandom(),
1144
- g: mathRandom(),
1145
- b: mathRandom()
1146
- });
1147
- };
1148
-
1149
-
1150
- // Modification Functions
1151
- // ----------------------
1152
- // Thanks to less.js for some of the basics here
1153
- // <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>
1154
-
1155
-
1156
- tinycolor.desaturate = function (color, amount) {
1157
- var hsl = tinycolor(color).toHsl();
1158
- hsl.s -= ((amount || 10) / 100);
1159
- hsl.s = clamp01(hsl.s);
1160
- return tinycolor(hsl);
1161
- };
1162
- tinycolor.saturate = function (color, amount) {
1163
- var hsl = tinycolor(color).toHsl();
1164
- hsl.s += ((amount || 10) / 100);
1165
- hsl.s = clamp01(hsl.s);
1166
- return tinycolor(hsl);
1167
- };
1168
- tinycolor.greyscale = function (color) {
1169
- return tinycolor.desaturate(color, 100);
1170
- };
1171
- tinycolor.lighten = function (color, amount) {
1172
- var hsl = tinycolor(color).toHsl();
1173
- hsl.l += ((amount || 10) / 100);
1174
- hsl.l = clamp01(hsl.l);
1175
- return tinycolor(hsl);
1176
- };
1177
- tinycolor.darken = function (color, amount) {
1178
- var hsl = tinycolor(color).toHsl();
1179
- hsl.l -= ((amount || 10) / 100);
1180
- hsl.l = clamp01(hsl.l);
1181
- return tinycolor(hsl);
1182
- };
1183
- tinycolor.complement = function (color) {
1184
- var hsl = tinycolor(color).toHsl();
1185
- hsl.h = (hsl.h + .5) % 1;
1186
- return tinycolor(hsl);
1187
- };
1188
-
1189
-
1190
- // Combination Functions
1191
- // ---------------------
1192
- // Thanks to jQuery xColor for some of the ideas behind these
1193
- // <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>
1194
-
1195
- tinycolor.triad = function (color) {
1196
- var hsl = tinycolor(color).toHsl();
1197
- var h = hsl.h * 360;
1198
- return [
1199
- tinycolor(color),
1200
- tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),
1201
- tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })
1202
- ];
1203
- };
1204
- tinycolor.tetrad = function (color) {
1205
- var hsl = tinycolor(color).toHsl();
1206
- var h = hsl.h * 360;
1207
- return [
1208
- tinycolor(color),
1209
- tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),
1210
- tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),
1211
- tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })
1212
- ];
1213
- };
1214
- tinycolor.splitcomplement = function (color) {
1215
- var hsl = tinycolor(color).toHsl();
1216
- var h = hsl.h * 360;
1217
- return [
1218
- tinycolor(color),
1219
- tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l }),
1220
- tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l })
1221
- ];
1222
- };
1223
- tinycolor.analogous = function (color, results, slices) {
1224
- results = results || 6;
1225
- slices = slices || 30;
1226
-
1227
- var hsl = tinycolor(color).toHsl();
1228
- var part = 360 / slices
1229
- var ret = [tinycolor(color)];
1230
-
1231
- hsl.h *= 360;
1232
-
1233
- for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {
1234
- hsl.h = (hsl.h + part) % 360;
1235
- ret.push(tinycolor(hsl));
1236
- }
1237
- return ret;
1238
- };
1239
- tinycolor.monochromatic = function (color, results) {
1240
- results = results || 6;
1241
- var hsv = tinycolor(color).toHsv();
1242
- var h = hsv.h, s = hsv.s, v = hsv.v;
1243
- var ret = [];
1244
- var modification = 1 / results;
1245
-
1246
- while (results--) {
1247
- ret.push(tinycolor({ h: h, s: s, v: v }));
1248
- v = (v + modification) % 1;
1249
- }
1250
-
1251
- return ret;
1252
- };
1253
- tinycolor.readable = function (color1, color2) {
1254
- var a = tinycolor(color1).toRgb(), b = tinycolor(color2).toRgb();
1255
- return (
1256
- (b.r - a.r) * (b.r - a.r) +
1257
- (b.g - a.g) * (b.g - a.g) +
1258
- (b.b - a.b) * (b.b - a.b)
1259
- ) > 0x28A4;
1260
- };
1261
-
1262
- // Big List of Colors
1263
- // ---------
1264
- // <http://www.w3.org/TR/css3-color/#svg-color>
1265
- var names = tinycolor.names = {
1266
- aliceblue: "f0f8ff",
1267
- antiquewhite: "faebd7",
1268
- aqua: "0ff",
1269
- aquamarine: "7fffd4",
1270
- azure: "f0ffff",
1271
- beige: "f5f5dc",
1272
- bisque: "ffe4c4",
1273
- black: "000",
1274
- blanchedalmond: "ffebcd",
1275
- blue: "00f",
1276
- blueviolet: "8a2be2",
1277
- brown: "a52a2a",
1278
- burlywood: "deb887",
1279
- burntsienna: "ea7e5d",
1280
- cadetblue: "5f9ea0",
1281
- chartreuse: "7fff00",
1282
- chocolate: "d2691e",
1283
- coral: "ff7f50",
1284
- cornflowerblue: "6495ed",
1285
- cornsilk: "fff8dc",
1286
- crimson: "dc143c",
1287
- cyan: "0ff",
1288
- darkblue: "00008b",
1289
- darkcyan: "008b8b",
1290
- darkgoldenrod: "b8860b",
1291
- darkgray: "a9a9a9",
1292
- darkgreen: "006400",
1293
- darkgrey: "a9a9a9",
1294
- darkkhaki: "bdb76b",
1295
- darkmagenta: "8b008b",
1296
- darkolivegreen: "556b2f",
1297
- darkorange: "ff8c00",
1298
- darkorchid: "9932cc",
1299
- darkred: "8b0000",
1300
- darksalmon: "e9967a",
1301
- darkseagreen: "8fbc8f",
1302
- darkslateblue: "483d8b",
1303
- darkslategray: "2f4f4f",
1304
- darkslategrey: "2f4f4f",
1305
- darkturquoise: "00ced1",
1306
- darkviolet: "9400d3",
1307
- deeppink: "ff1493",
1308
- deepskyblue: "00bfff",
1309
- dimgray: "696969",
1310
- dimgrey: "696969",
1311
- dodgerblue: "1e90ff",
1312
- firebrick: "b22222",
1313
- floralwhite: "fffaf0",
1314
- forestgreen: "228b22",
1315
- fuchsia: "f0f",
1316
- gainsboro: "dcdcdc",
1317
- ghostwhite: "f8f8ff",
1318
- gold: "ffd700",
1319
- goldenrod: "daa520",
1320
- gray: "808080",
1321
- green: "008000",
1322
- greenyellow: "adff2f",
1323
- grey: "808080",
1324
- honeydew: "f0fff0",
1325
- hotpink: "ff69b4",
1326
- indianred: "cd5c5c",
1327
- indigo: "4b0082",
1328
- ivory: "fffff0",
1329
- khaki: "f0e68c",
1330
- lavender: "e6e6fa",
1331
- lavenderblush: "fff0f5",
1332
- lawngreen: "7cfc00",
1333
- lemonchiffon: "fffacd",
1334
- lightblue: "add8e6",
1335
- lightcoral: "f08080",
1336
- lightcyan: "e0ffff",
1337
- lightgoldenrodyellow: "fafad2",
1338
- lightgray: "d3d3d3",
1339
- lightgreen: "90ee90",
1340
- lightgrey: "d3d3d3",
1341
- lightpink: "ffb6c1",
1342
- lightsalmon: "ffa07a",
1343
- lightseagreen: "20b2aa",
1344
- lightskyblue: "87cefa",
1345
- lightslategray: "789",
1346
- lightslategrey: "789",
1347
- lightsteelblue: "b0c4de",
1348
- lightyellow: "ffffe0",
1349
- lime: "0f0",
1350
- limegreen: "32cd32",
1351
- linen: "faf0e6",
1352
- magenta: "f0f",
1353
- maroon: "800000",
1354
- mediumaquamarine: "66cdaa",
1355
- mediumblue: "0000cd",
1356
- mediumorchid: "ba55d3",
1357
- mediumpurple: "9370db",
1358
- mediumseagreen: "3cb371",
1359
- mediumslateblue: "7b68ee",
1360
- mediumspringgreen: "00fa9a",
1361
- mediumturquoise: "48d1cc",
1362
- mediumvioletred: "c71585",
1363
- midnightblue: "191970",
1364
- mintcream: "f5fffa",
1365
- mistyrose: "ffe4e1",
1366
- moccasin: "ffe4b5",
1367
- navajowhite: "ffdead",
1368
- navy: "000080",
1369
- oldlace: "fdf5e6",
1370
- olive: "808000",
1371
- olivedrab: "6b8e23",
1372
- orange: "ffa500",
1373
- orangered: "ff4500",
1374
- orchid: "da70d6",
1375
- palegoldenrod: "eee8aa",
1376
- palegreen: "98fb98",
1377
- paleturquoise: "afeeee",
1378
- palevioletred: "db7093",
1379
- papayawhip: "ffefd5",
1380
- peachpuff: "ffdab9",
1381
- peru: "cd853f",
1382
- pink: "ffc0cb",
1383
- plum: "dda0dd",
1384
- powderblue: "b0e0e6",
1385
- purple: "800080",
1386
- red: "f00",
1387
- rosybrown: "bc8f8f",
1388
- royalblue: "4169e1",
1389
- saddlebrown: "8b4513",
1390
- salmon: "fa8072",
1391
- sandybrown: "f4a460",
1392
- seagreen: "2e8b57",
1393
- seashell: "fff5ee",
1394
- sienna: "a0522d",
1395
- silver: "c0c0c0",
1396
- skyblue: "87ceeb",
1397
- slateblue: "6a5acd",
1398
- slategray: "708090",
1399
- slategrey: "708090",
1400
- snow: "fffafa",
1401
- springgreen: "00ff7f",
1402
- steelblue: "4682b4",
1403
- tan: "d2b48c",
1404
- teal: "008080",
1405
- thistle: "d8bfd8",
1406
- tomato: "ff6347",
1407
- turquoise: "40e0d0",
1408
- violet: "ee82ee",
1409
- wheat: "f5deb3",
1410
- white: "fff",
1411
- whitesmoke: "f5f5f5",
1412
- yellow: "ff0",
1413
- yellowgreen: "9acd32"
1414
- };
1415
-
1416
- // Make it easy to access colors via `hexNames[hex]`
1417
- var hexNames = tinycolor.hexNames = flip(names);
1418
-
1419
-
1420
- // Utilities
1421
- // ---------
1422
-
1423
- // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`
1424
- function flip(o) {
1425
- var flipped = {};
1426
- for (var i in o) {
1427
- if (o.hasOwnProperty(i)) {
1428
- flipped[o[i]] = i;
1429
- }
1430
- }
1431
- return flipped;
1432
- }
1433
-
1434
- // Take input from [0, n] and return it as [0, 1]
1435
- function bound01(n, max) {
1436
- if (isOnePointZero(n)) { n = "100%"; }
1437
-
1438
- var processPercent = isPercentage(n);
1439
- n = mathMin(max, mathMax(0, parseFloat(n)));
1440
-
1441
- // Automatically convert percentage into number
1442
- if (processPercent) {
1443
- n = n * (max / 100);
1444
- }
1445
-
1446
- // Handle floating point rounding errors
1447
- if ((math.abs(n - max) < 0.000001)) {
1448
- return 1;
1449
- }
1450
- else if (n >= 1) {
1451
- return (n % max) / parseFloat(max);
1452
- }
1453
- return n;
1454
- }
1455
-
1456
- // Force a number between 0 and 1
1457
- function clamp01(val) {
1458
- return mathMin(1, mathMax(0, val));
1459
- }
1460
-
1461
- // Parse an integer into hex
1462
- function parseHex(val) {
1463
- return parseInt(val, 16);
1464
- }
1465
-
1466
- // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1
1467
- // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>
1468
- function isOnePointZero(n) {
1469
- return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1;
1470
- }
1471
-
1472
- // Check to see if string passed in is a percentage
1473
- function isPercentage(n) {
1474
- return typeof n === "string" && n.indexOf('%') != -1;
1475
- }
1476
-
1477
- var matchers = (function () {
1478
-
1479
- // <http://www.w3.org/TR/css3-values/#integers>
1480
- var CSS_INTEGER = "[-\\+]?\\d+%?";
1481
-
1482
- // <http://www.w3.org/TR/css3-values/#number-value>
1483
- var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?";
1484
-
1485
- // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.
1486
- var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")";
1487
-
1488
- // Actual matching.
1489
- // Parentheses and commas are optional, but not required.
1490
- // Whitespace can take the place of commas or opening paren
1491
- var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
1492
- var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
1493
-
1494
- return {
1495
- rgb: new RegExp("rgb" + PERMISSIVE_MATCH3),
1496
- rgba: new RegExp("rgba" + PERMISSIVE_MATCH4),
1497
- hsl: new RegExp("hsl" + PERMISSIVE_MATCH3),
1498
- hsla: new RegExp("hsla" + PERMISSIVE_MATCH4),
1499
- hsv: new RegExp("hsv" + PERMISSIVE_MATCH3),
1500
- hex3: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
1501
- hex6: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/
1502
- };
1503
- })();
1504
-
1505
- // `stringInputToObject`
1506
- // Permissive string parsing. Take in a number of formats, and output an object
1507
- // based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`
1508
- function stringInputToObject(color) {
1509
-
1510
- color = color.replace(trimLeft, '').replace(trimRight, '').toLowerCase();
1511
- var named = false;
1512
- if (names[color]) {
1513
- color = names[color];
1514
- named = true;
1515
- }
1516
- else if (color == 'transparent') {
1517
- return { r: 0, g: 0, b: 0, a: 0 };
1518
- }
1519
-
1520
- // Try to match string input using regular expressions.
1521
- // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]
1522
- // Just return an object and let the conversion functions handle that.
1523
- // This way the result will be the same whether the tinycolor is initialized with string or object.
1524
- var match;
1525
- if ((match = matchers.rgb.exec(color))) {
1526
- return { r: match[1], g: match[2], b: match[3] };
1527
- }
1528
- if ((match = matchers.rgba.exec(color))) {
1529
- return { r: match[1], g: match[2], b: match[3], a: match[4] };
1530
- }
1531
- if ((match = matchers.hsl.exec(color))) {
1532
- return { h: match[1], s: match[2], l: match[3] };
1533
- }
1534
- if ((match = matchers.hsla.exec(color))) {
1535
- return { h: match[1], s: match[2], l: match[3], a: match[4] };
1536
- }
1537
- if ((match = matchers.hsv.exec(color))) {
1538
- return { h: match[1], s: match[2], v: match[3] };
1539
- }
1540
- if ((match = matchers.hex6.exec(color))) {
1541
- return {
1542
- r: parseHex(match[1]),
1543
- g: parseHex(match[2]),
1544
- b: parseHex(match[3]),
1545
- format: named ? "name" : "hex"
1546
- };
1547
- }
1548
- if ((match = matchers.hex3.exec(color))) {
1549
- return {
1550
- r: parseHex(match[1] + '' + match[1]),
1551
- g: parseHex(match[2] + '' + match[2]),
1552
- b: parseHex(match[3] + '' + match[3]),
1553
- format: named ? "name" : "hex"
1554
- };
1555
- }
1556
-
1557
- return false;
1558
- }
1559
-
1560
- // Everything is ready, expose to window
1561
- window.tinycolor = tinycolor;
1562
-
1563
- })(this);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/admin/cli-admin-page.php DELETED
@@ -1,578 +0,0 @@
1
- <?php
2
- /*
3
- ===============================================================================
4
-
5
- Copyright 2012 Richard Ashby (email : richard.ashby@mediacreek.com)
6
-
7
- This program is free software; you can redistribute it and/or modify
8
- it under the terms of the GNU General Public License, version 2, as
9
- published by the Free Software Foundation.
10
-
11
- This program is distributed in the hope that it will be useful,
12
- but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- GNU General Public License for more details.
15
-
16
- You should have received a copy of the GNU General Public License
17
- along with this program; if not, write to the Free Software
18
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
- */
20
-
21
-
22
- /** Displays admin page within WP dashboard */
23
- function cookielawinfo_print_admin_page() {
24
-
25
- // Lock out non-admins:
26
- if ( !current_user_can( 'manage_options' ) ) {
27
- wp_die( 'You do not have sufficient permission to perform this operation' );
28
- }
29
-
30
- // Get options:
31
- $the_options = cookielawinfo_get_admin_settings();
32
-
33
- // Check if form has been set:
34
- if ( isset( $_POST['update_admin_settings_form'] ) ) {
35
- // Check nonce:
36
- check_admin_referer( 'cookielawinfo-update-' . CLI_SETTINGS_FIELD );
37
- foreach ( $the_options as $key => $value ) {
38
- if (isset($_POST[$key . '_field'])) {
39
- // Store sanitised values only:
40
- $the_options[$key] = cookielawinfo_sanitise($key, $_POST[$key . '_field']);
41
- }
42
- }
43
- update_option(CLI_SETTINGS_FIELD, $the_options);
44
- echo '<div class="updated"><p><strong>Settings Updated.</strong></p></div>';
45
- }
46
- else if ( isset ( $_POST['delete_all_settings'] ) ) {
47
- // Check nonce:
48
- check_admin_referer( 'cookielawinfo-update-' . CLI_SETTINGS_FIELD );
49
- cookielawinfo_delete_settings();
50
- $the_options = cookielawinfo_get_admin_settings();
51
- }
52
- else if ( isset ( $_POST['revert_to_previous_settings'] ) ) {
53
- if ( !cookielawinfo_copy_old_settings_to_new() ) {
54
- echo '<h3>ERROR MIGRATING SETTINGS (ERROR: 2)</h3>';
55
- }
56
- $the_options = cookielawinfo_get_admin_settings();
57
- }
58
-
59
- // Print form here:
60
-
61
-
62
- echo '<div class="wrap">';
63
-
64
- ?>
65
- <h2>Cookie Law Settings</h2>
66
-
67
-
68
- <?php
69
-
70
- // Migration controller:
71
- if ( isset ( $_POST['cli-migration-button'] ) ) {
72
- if ( isset( $_POST['cli-migration_field'] ) ) {
73
- switch ( $_POST['cli-migration_field'] ) {
74
- case '2':
75
- // Migrate but keep
76
- if ( !cookielawinfo_migrate_to_new_version() ) {
77
- echo '<h3>ERROR MIGRATING SETTINGS (ERROR: 2)</h3>';
78
- }
79
- break;
80
- case '3':
81
- // Just use this version
82
- cookielawinfo_update_to_latest_version_number();
83
- break;
84
- default:
85
- // Form error, ignore
86
- echo '<h3>Error processing migration request (ERROR: 4)</h3>';
87
- break;
88
- }
89
- }
90
- $the_options = cookielawinfo_get_admin_settings();
91
- }
92
-
93
-
94
- echo '<form method="post" action="' . esc_url ( $_SERVER["REQUEST_URI"] ) . '">';
95
-
96
- // Set nonce:
97
- if ( function_exists('wp_nonce_field') )
98
- wp_nonce_field('cookielawinfo-update-' . CLI_SETTINGS_FIELD);
99
-
100
- ?>
101
-
102
- <div class="cli-plugin-container">
103
- <div class="cli-plugin-left-col width-62">
104
- <div class="pad-10">
105
-
106
- <!-- Toolbar -->
107
- <div class="cli-plugin-toolbar top">
108
- <div class="left">
109
-
110
- <?php
111
- // Outputs the "cookie bar is on/off" message in the header
112
- $img_tag = '<img id="cli-plugin-status-icon" src="' . CLI_PLUGIN_URL . 'images/';
113
- $span_tag = '<span id="header_on_off_alert">';
114
- if ( $the_options['is_on'] == true ) {
115
- $img_tag .= 'tick.png" alt="tick icon" />';
116
- $span_tag .= 'Your Cookie Law Info bar is switched on</span>';
117
- }
118
- else {
119
- $img_tag .= 'cross.png" alt="cross icon" />';
120
- $span_tag .= 'Your Cookie Law Info bar is switched off</span>';
121
- }
122
- echo $img_tag . $span_tag;
123
- ?>
124
-
125
- </div>
126
- <div class="right">
127
- <input type="submit" name="update_admin_settings_form" value="Update Settings" class="button-primary" />
128
- </div>
129
- </div>
130
-
131
-
132
- <!-- Accordion -->
133
- <div id="cookielawinfo-accordion">
134
-
135
-
136
- <h3><a href="#">Settings</a></h3>
137
- <div>
138
- <h4>The Cookie Bar</h4>
139
- <table class="form-table">
140
- <tr valign="top">
141
- <th scope="row"><label for="is_on_field">Cookie Bar is currently:</label></th>
142
- <td>
143
- <input type="radio" id="is_on_field_yes" name="is_on_field" class="styled" value="true" <?php echo ( $the_options['is_on'] == true ) ? ' checked="checked" />' : ' />'; ?> On
144
- <input type="radio" id="is_on_field_no" name="is_on_field" class="styled" value="false" <?php echo ( $the_options['is_on'] == false ) ? ' checked="checked" />' : ' />'; ?> Off
145
- <span id="header_on_off_field_warning"></span>
146
- </td>
147
- </tr>
148
- <tr valign="top">
149
- <th scope="row"><label for="notify_position_vertical_field">Cookie Bar will be show in:</label></th>
150
- <td>
151
- <select name="notify_position_vertical_field" class="vvv_combobox">
152
- <?php
153
- if ( $the_options['notify_position_vertical'] == "top" ) {
154
- echo '<option value="top" selected="selected">Header</option>';
155
- echo '<option value="bottom">Footer</option>';
156
- }
157
- else {
158
- echo '<option value="top">Header</option>';
159
- echo '<option value="bottom" selected="selected">Footer</option>';
160
- }
161
- ?>
162
- </select>
163
- </td>
164
- </tr>
165
- <tr valign="top">
166
- <th scope="row"><label for="notify_animate_show_field">On load</label></th>
167
- <td>
168
- <select name="notify_animate_show_field" class="vvv_combobox">
169
- <?php
170
- if ( $the_options['notify_animate_show'] == true ) {
171
- echo '<option value="true" selected="selected">Animate</option>';
172
- echo '<option value="false">Sticky</option>';
173
- }
174
- else {
175
- echo '<option value="true">Animate</option>';
176
- echo '<option value="false" selected="selected">Sticky</option>';
177
- }
178
- ?>
179
- </select>
180
- </td>
181
- </tr>
182
- <tr valign="top">
183
- <th scope="row"><label for="notify_animate_hide_field">On hide</label></th>
184
- <td>
185
- <select name="notify_animate_hide_field" class="vvv_combobox">
186
- <?php
187
- if ( $the_options['notify_animate_hide'] == true ) {
188
- echo '<option value="true" selected="selected">Animate</option>';
189
- echo '<option value="false">Disappear</option>';
190
- }
191
- else {
192
- echo '<option value="true">Animate</option>';
193
- echo '<option value="false" selected="selected">Disappear</option>';
194
- }
195
- ?>
196
- </select>
197
- </td>
198
- </tr>
199
- </table>
200
-
201
- <h4>The Show Again Tab</h4>
202
- <table class="form-table">
203
- <tr valign="top">
204
- <th scope="row"><label for="showagain_tab_field">Use Show Again Tab?</label></th>
205
- <td>
206
- <input type="radio" id="showagain_tab_field_yes" name="showagain_tab_field" class="styled" value="true" <?php echo ( $the_options['showagain_tab'] == true ) ? ' checked="checked" />' : ' />'; ?> Yes
207
- <input type="radio" id="showagain_tab_field_no" name="showagain_tab_field" class="styled" value="false" <?php echo ( $the_options['showagain_tab'] == false ) ? ' checked="checked" />' : ' />'; ?> No
208
- </td>
209
- </tr>
210
- <tr valign="top">
211
- <th scope="row"><label for="notify_position_horizontal_field">Tab Position</label></th>
212
- <td>
213
- <select name="notify_position_horizontal_field" class="vvv_combobox">
214
- <?php
215
- if ( $the_options['notify_position_horizontal'] == "right" ) {
216
- echo '<option value="right" selected="selected">Right</option>';
217
- echo '<option value="left">Left</option>';
218
- }
219
- else {
220
- echo '<option value="right">Right</option>';
221
- echo '<option value="left" selected="selected">Left</option>';
222
- }
223
- ?>
224
- </select>
225
- </td>
226
- </tr>
227
- <tr valign="top">
228
- <th scope="row"><label for="showagain_x_position_field">From Left Margin</label></th>
229
- <td>
230
- <input type="text" name="showagain_x_position_field" value="<?php echo $the_options['showagain_x_position'] ?>" />
231
- <span class="cli-plugin-example">Specify px&nbsp;or&nbsp;&#37;, e.g. <em>"100px" or "30%"</em></span>
232
- </td>
233
- </tr>
234
- <tr valign="top">
235
- <th scope="row"><label for="showagain_text">Show More Text</label></th>
236
- <td>
237
- <input type="text" name="showagain_text_field" value="<?php echo $the_options['showagain_text'] ?>" />
238
-
239
- </td>
240
- </tr>
241
- </table>
242
-
243
- </div>
244
-
245
-
246
- <h3><a href="#">Cookie Law Message Bar</a></h3>
247
- <div>
248
- <table class="form-table">
249
- <tr valign="top">
250
- <th scope="row"><label for="notify_message_field">Message</label></th>
251
- <td>
252
- <?php
253
- echo '<textarea name="notify_message_field" class="vvv_textbox">';
254
- echo apply_filters('format_to_edit', stripslashes($the_options['notify_message'])) . '</textarea>';
255
- ?>
256
- <span class="cli-plugin-example">Shortcodes allowed: see settngs section "Using the Shortcodes". <br /><em>Examples: "We use cookies on this website [cookie_accept] to find out how to delete cookies [cookie_link]."</em></span>
257
- </td>
258
- </tr>
259
- <tr valign="top">
260
- <th scope="row"><label for="background_field">Cookie Bar Colour</label></th>
261
- <td>
262
- <?php
263
- echo '<input type="text" name="background_field" id="cli-colour-background" value="' .$the_options['background']. '" />';
264
- ?>
265
- </td>
266
- </tr>
267
- <tr valign="top">
268
- <th scope="row"><label for="text_field">Text Colour</label></th>
269
- <td>
270
- <?php
271
- echo '<input type="text" name="text_field" id="cli-colour-text" value="' .$the_options['text']. '" />';
272
- ?>
273
- </td>
274
- </tr>
275
- <tr valign="top">
276
- <th scope="row"><label for="border_on_field">Show Border?</label></th>
277
- <td>
278
- <!-- Border on/off -->
279
- <input type="radio" id="border_on_field_yes" name="border_on_field" class="styled" value="true" <?php echo ( $the_options['border_on'] == true ) ? ' checked="checked" />' : ' />'; ?> Yes
280
- <input type="radio" id="border_on_field_no" name="border_on_field" class="styled" value="false" <?php echo ( $the_options['border_on'] == false ) ? ' checked="checked" />' : ' />'; ?> No
281
- </td>
282
- </tr>
283
- <tr valign="top">
284
- <th scope="row"><label for="border_field">Border Colour</label></th>
285
- <td>
286
- <?php
287
- echo '<input type="text" name="border_field" id="cli-colour-border" value="' .$the_options['border']. '" />';
288
- ?>
289
- </td>
290
- </tr>
291
- <tr valign="top">
292
- <th scope="row"><label for="font_family_field">Font</label></th>
293
- <td>
294
- <select name="font_family_field" class="vvv_combobox">
295
- <?php cookielawinfo_print_combobox_options( cookielawinfo_get_fonts(), $the_options['font_family'] ) ?>
296
- </select>
297
- </td>
298
- </tr>
299
- </table>
300
- </div>
301
-
302
-
303
- <h3><a href="#">Customise Buttons</a></h3>
304
- <div>
305
-
306
- <h4>Main Button <code>[cookie_button]</code></h4>
307
- <p>This button/link can be customised to either simply close the cookie bar, or follow a link. You can also customise the colours and styles, and show it as a link or a button.</p>
308
- <table class="form-table">
309
- <tr valign="top">
310
- <th scope="row"><label for="button_1_text_field">Link Text</label></th>
311
- <td>
312
- <input type="text" name="button_1_text_field" value="<?php echo $the_options['button_1_text'] ?>" />
313
- </td>
314
- </tr>
315
- <tr valign="top">
316
- <th scope="row"><label for="button_1_action_field">Action</label></th>
317
- <td>
318
- <select name="button_1_action_field" id="cli-plugin-button-1-action" class="vvv_combobox">
319
- <?php cookielawinfo_print_combobox_options( cookielawinfo_get_js_actions(), $the_options['button_1_action'] ) ?>
320
- </select>
321
- </td>
322
- </tr>
323
- <tr valign="top" class="cli-plugin-row">
324
- <th scope="row"><label for="button_1_url_field">Link URL</label></th>
325
- <td>
326
- <input type="text" name="button_1_url_field" id="button_1_url_field" value="<?php echo $the_options['button_1_url'] ?>" />
327
- <span class="cli-plugin-example"><em>Button will only link to URL if Action = Show URL</em></span>
328
- </td>
329
- </tr>
330
-
331
- <tr valign="top" class="cli-plugin-row">
332
- <th scope="row"><label for="button_1_new_win_field">Open link in new window?</label></th>
333
- <td>
334
- <input type="radio" id="button_1_new_win_field_yes" name="button_1_new_win_field" class="styled" value="true" <?php echo ( $the_options['button_1_new_win'] == true ) ? ' checked="checked" />' : ' />'; ?> Yes
335
- <input type="radio" id="button_1_new_win_field_no" name="button_1_new_win_field" class="styled" value="false" <?php echo ( $the_options['button_1_new_win'] == false ) ? ' checked="checked" />' : ' />'; ?> No
336
- </td>
337
- </tr>
338
- <tr valign="top">
339
- <th scope="row"><label for="button_1_link_colour_field">Link colour</label></th>
340
- <td>
341
- <?php
342
- echo '<input type="text" name="button_1_link_colour_field" id="cli-colour-link-button-1" value="' .$the_options['button_1_link_colour']. '" />';
343
- ?>
344
- </td>
345
- </tr>
346
- <tr valign="top">
347
- <th scope="row"><label for="button_1_as_button_field">Show as button?</label></th>
348
- <td>
349
- <input type="radio" id="button_1_as_button_field_yes" name="button_1_as_button_field" class="styled" value="true" <?php echo ( $the_options['button_1_as_button'] == true ) ? ' checked="checked" />' : ' />'; ?> Button
350
- <input type="radio" id="button_1_as_button_field_no" name="button_1_as_button_field" class="styled" value="false" <?php echo ( $the_options['button_1_as_button'] == false ) ? ' checked="checked" />' : ' />'; ?> Link
351
- </td>
352
- </tr>
353
- <tr valign="top">
354
- <th scope="row"><label for="button_1_button_colour_field">Button colour</label></th>
355
- <td>
356
- <?php
357
- echo '<input type="text" name="button_1_button_colour_field" id="cli-colour-btn-button-1" value="' .$the_options['button_1_button_colour']. '" />';
358
- ?>
359
- </td>
360
- </tr>
361
- <tr valign="top">
362
- <th scope="row"><label for="button_1_button_size_field">Button Size</label></th>
363
- <td>
364
- <select name="button_1_button_size_field" class="vvv_combobox">
365
- <?php cookielawinfo_print_combobox_options( cookielawinfo_get_button_sizes(), $the_options['button_1_button_size'] ); ?>
366
- </select>
367
- </td>
368
- </tr>
369
- </table><!-- end custom button -->
370
-
371
-
372
- <h4>Read More Link <code>[cookie_link]</code></h4>
373
- <p>This button/link can be used to provide a link out to your Privacy & Cookie Policy. You can customise it any way you like.</p>
374
- <table class="form-table">
375
- <tr valign="top">
376
- <th scope="row"><label for="button_2_text_field">Link Text</label></th>
377
- <td>
378
- <input type="text" name="button_2_text_field" value="<?php echo $the_options['button_2_text'] ?>" />
379
- </td>
380
- </tr>
381
- <tr valign="top">
382
- <th scope="row"><label for="button_2_url_field">Link URL</label></th>
383
- <td>
384
- <input type="text" name="button_2_url_field" id="button_2_url_field" value="<?php echo $the_options['button_2_url'] ?>" />
385
- </td>
386
- </tr>
387
- <tr valign="top">
388
- <th scope="row"><label for="button_2_link_colour_field">Link colour</label></th>
389
- <td>
390
- <?php
391
- echo '<input type="text" name="button_2_link_colour_field" id="cli-colour-link-button-1" value="' .$the_options['button_2_link_colour']. '" />';
392
- ?>
393
- </td>
394
- </tr>
395
-
396
-
397
- <tr valign="top">
398
- <th scope="row"><label for="button_2_new_win_field">Open link in new window?</label></th>
399
- <td>
400
- <input type="radio" id="button_2_new_win_field_yes" name="button_2_new_win_field" class="styled" value="true" <?php echo ( $the_options['button_2_new_win'] == true ) ? ' checked="checked" />' : ' />'; ?> Yes
401
- <input type="radio" id="button_2_new_win_field_no" name="button_2_new_win_field" class="styled" value="false" <?php echo ( $the_options['button_2_new_win'] == false ) ? ' checked="checked" />' : ' />'; ?> No
402
- </td>
403
- </tr>
404
- <tr valign="top">
405
- <th scope="row"><label for="button_2_as_button_field">Show as button?</label></th>
406
- <td>
407
- <input type="radio" id="button_2_as_button_field_yes" name="button_2_as_button_field" class="styled" value="true" <?php echo ( $the_options['button_2_as_button'] == true ) ? ' checked="checked" />' : ' />'; ?> Button
408
- <input type="radio" id="button_2_as_button_field_no" name="button_2_as_button_field" class="styled" value="false" <?php echo ( $the_options['button_2_as_button'] == false ) ? ' checked="checked" />' : ' />'; ?> Link
409
- </td>
410
- </tr>
411
- <tr valign="top">
412
- <th scope="row"><label for="button_2_button_colour_field">Button colour</label></th>
413
- <td>
414
- <?php
415
- echo '<input type="text" name="button_2_button_colour_field" id="cli-colour-btn-button-1" value="' .$the_options['button_2_button_colour']. '" />';
416
- ?>
417
- </td>
418
- </tr>
419
- <tr valign="top">
420
- <th scope="row"><label for="button_2_button_size_field">Button Size</label></th>
421
- <td>
422
- <select name="button_2_button_size_field" class="vvv_combobox">
423
- <?php cookielawinfo_print_combobox_options( cookielawinfo_get_button_sizes(), $the_options['button_2_button_size'] ); ?>
424
- </select>
425
- </td>
426
- </tr>
427
- </table><!-- end custom button -->
428
-
429
- </div>
430
-
431
- <h3><a href="#">Using the Shortcodes</a></h3>
432
- <div class="cli-help">
433
- <h4>Cookie bar shortcodes</h4>
434
- <p>You can enter the shortcodes in the "message" field of the Cookie Law Info bar. They add nicely formatted buttons and/or links into the cookie bar, without you having to add any HTML.</p>
435
- <p>The shortcodes are:</p>
436
-
437
- <pre>[cookie_accept]</pre><span>If you just want a standard green "Accept" button that closes the header and nothing more, use this shortcode. It is already styled, you don't need to customise it.</span>
438
-
439
- <pre>[cookie_accept colour="red"]</pre><span>Alternatively you can add a colour value. Choose from: red, blue, orange, yellow, green or pink.<br /><em>Careful to use the British spelling of "colour" for the attribute.</em></span>
440
-
441
- <pre>[cookie_button]</pre><span>This is the "main button" you customise above.</span>
442
-
443
- <pre>[cookie_link]</pre><span>This is the "read more" link you customise above.</span>
444
-
445
- <h4>Other shortcodes</h4>
446
- <p>These shortcodes can be used in pages and posts on your website. It is not recommended to use these inside the cookie bar itself.</p>
447
-
448
- <pre>[cookie_audit]</pre><span>This prints out a nice table of cookies, in line with the guidance given by the ICO. <em>You need to enter the cookies your website uses via the Cookie Law Info menu in your WordPress dashboard.</em></span>
449
-
450
- <pre>[cookie_delete]</pre><span>This shortcode will display a normal HTML link which when clicked, will delete the cookie set by Cookie Law Info (this cookie is used to remember that the cookie bar is closed).</span>
451
-
452
- </div>
453
-
454
-
455
- <h3><a href="#">Advanced</a></h3>
456
- <div>
457
- <p>Sometimes themes apply settings that clash with plugins. If that happens, try adjusting these settings.</p>
458
-
459
- <table class="form-table">
460
- <tr valign="top">
461
- <th scope="row"><label for="use_colour_picker_field">Use colour picker on this page?</label></th>
462
- <td>
463
- <input type="radio" id="use_colour_picker_field_yes" name="use_colour_picker_field" class="styled" value="true" <?php echo ( $the_options['use_colour_picker'] == true ) ? ' checked="checked" />' : ' />'; ?> Yes
464
- <input type="radio" id="use_colour_picker_field_no" name="use_colour_picker_field" class="styled" value="false" <?php echo ( $the_options['use_colour_picker'] == false ) ? ' checked="checked" />' : ' />'; ?> No
465
- <span class="cli-plugin-example"><em>You will need to refresh your browser once the page re-loads in order to show the colour pickers.</em></span>
466
- </td>
467
- </tr>
468
- <tr valign="top">
469
- <th scope="row">Reset all values</th>
470
- <td>
471
- <input type="submit" name="delete_all_settings" value="Delete settings and reset" class="button-secondary" onclick="return confirm('Are you sure you want to delete all your settings?');" />
472
- <span class="cli-plugin-example"><em>Warning: this will actually delete your current settings.</em></span>
473
- </td>
474
- </tr>
475
- <!--
476
- <tr valign="top">
477
- <th scope="row">Revert to previous version's settings</th>
478
- <td>
479
- <input type="submit" name="revert_to_previous_settings" value="Revert to old settings" class="button-secondary" onclick="return confirm('You will lose your current settings. Are you sure?');" />
480
- <span class="cli-plugin-example"><em>Warning: this will actually delete your current settings.</em></span>
481
- </td>
482
- </tr>
483
- -->
484
- </table>
485
-
486
- </div>
487
-
488
- </div><!-- end of cookielawinfo-accordion -->
489
-
490
-
491
- <!-- Second save button -->
492
- <div class="cli-plugin-toolbar bottom">
493
- <div class="left">
494
-
495
- </div>
496
- <div class="right">
497
- <input type="submit" name="update_admin_settings_form" value="Update Settings" class="button-primary" />
498
- </div>
499
- </div>
500
-
501
-
502
- </form><!-- end of main settings form -->
503
-
504
-
505
- </div><!-- end of pad-5 -->
506
- </div><!-- end of cli-plugin-left-col (62%) -->
507
-
508
- <!-- Dashboard Sidebar -->
509
- <div class="cli-plugin-right-col width-38">
510
- <div class="pad-10">
511
-
512
-
513
- <div id="cli-plugin-migrate">
514
- <h3>Where did my settings go?</h3>
515
- <p>Cookie Law Info version 0.9 has been updated and has new settings. <strong>Your previous settings are safe.</strong></p>
516
- <p>You can either copy over your old settings to this version, or use the new default values. </p>
517
- <form method="post" action="<?php esc_url ( $_SERVER["REQUEST_URI"] ) ?>">
518
- <p><label for="cli-migration">Would you like to:</label></p>
519
- <ul>
520
- <li><input type="radio" id="cli-migration_field_yes" name="cli-migration_field" class="styled" value="2" /> Use previous settings</li>
521
- <li><input type="radio" id="cli-migration_field_yes" name="cli-migration_field" class="styled" value="3" checked="checked" /> Start afresh with the new version</li>
522
- </ul>
523
- <input type="submit" name="cli-migration-button" value="Update" class="button-secondary" onclick="return confirm('Are you sure you want to migrate settings?');" />
524
- </form>
525
- <p>If you want to go back to the previous version you can always download it again from <a href="http://www.cookielawinfo.com">CookieLawInfo.com.</a></p>
526
- </div>
527
-
528
- <h3>Help</h3>
529
- <ul>
530
- <li><a href="http://www.cookielawinfo.com/wordpress-plugin/">Plugin Homepage</a></li>
531
- <li><a href="http://wordpress.org/support/plugin/cookie-law-info/">Plugin Support</a></li>
532
- <li><a href="http://wordpress.org/support/plugin/cookie-law-info/">Report a Bug</a></li>
533
- <li><a href="http://www.cookielawinfo.com/contact/">Suggest a Feature</a></li>
534
- <li><a href="http://www.cookielawinfo.com">About the law</a></li>
535
- </ul>
536
-
537
- <br />
538
- <br />
539
- <br />
540
-
541
- <div>
542
- <form action="http://cookielawinfo.us5.list-manage.com/subscribe/post?u=b32779d828ef2e37e68e1580d&amp;id=71af66b86e" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank">
543
- <h3><label for="mce-EMAIL">Subscribe to our mailing list</label></h3>
544
- <p>Occasional updates on plugin updates, compliance requirements, who's doing what and industry best practice.</p>
545
- <input type="email" value="" name="EMAIL" class="vvv_textfield" id="mce-EMAIL" placeholder="email address" required>
546
- <div class="">
547
- <input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button-secondary">
548
- </div>
549
- <p>We will not send you spam or pass your details to 3rd Parties.</p>
550
- </form>
551
- </div><!--End mc_embed_signup-->
552
-
553
- </div>
554
- </div><!-- end of cli-plugin-right-col (38%) -->
555
-
556
- </div><!-- end of cli-plugin-container -->
557
-
558
-
559
- <?php
560
- if ( !cookielawinfo_has_migrated() ) {
561
- ?>
562
- <script type="text/javascript">
563
- jQuery(document).ready(function() {
564
- jQuery('#cli-plugin-migrate').slideDown();
565
- });
566
- </script>
567
- <?php
568
- }
569
-
570
- //DEBUG:
571
- echo cookielawinfo_debug_admin_settings( true );
572
- echo cookielawinfo_debug_echo (cookielawinfo_get_json_settings() );
573
-
574
- echo '</div><!-- end wrap -->';
575
-
576
- }
577
-
578
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/admin/cli-admin.php DELETED
@@ -1,452 +0,0 @@
1
- <?php
2
- /*
3
- ===============================================================================
4
-
5
- Copyright 2012 Richard Ashby (email : richard.ashby@mediacreek.com)
6
-
7
- This program is free software; you can redistribute it and/or modify
8
- it under the terms of the GNU General Public License, version 2, as
9
- published by the Free Software Foundation.
10
-
11
- This program is distributed in the hope that it will be useful,
12
- but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- GNU General Public License for more details.
15
-
16
- You should have received a copy of the GNU General Public License
17
- along with this program; if not, write to the Free Software
18
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
-
20
- */
21
-
22
-
23
-
24
- /**
25
- Returns default settings
26
- If you override the settings here, be ultra careful to use escape characters!
27
- */
28
- function cookielawinfo_get_default_settings() {
29
- $settings_v0_9 = array(
30
- 'animate_speed_hide' => '500',
31
- 'animate_speed_show' => '500',
32
- 'background' => '#fff',
33
- 'background_url' => '',
34
- 'border' => '#444',
35
- 'border_on' => true,
36
- 'button_1_text' => 'Accept',
37
- 'button_1_url' => '#',
38
- 'button_1_action' => '#cookie_action_close_header',
39
- 'button_1_link_colour' => '#fff',
40
- 'button_1_new_win' => false,
41
- 'button_1_as_button' => true,
42
- 'button_1_button_colour' => '#000',
43
- 'button_1_button_size' => 'medium',
44
- 'button_2_text' => 'Read More',
45
- 'button_2_url' => get_site_url(),
46
- 'button_2_action' => 'CONSTANT_OPEN_URL',
47
- 'button_2_link_colour' => '#444',
48
- 'button_2_new_win' => true,
49
- 'button_2_as_button' => false,
50
- 'button_2_button_colour' => '#333',
51
- 'button_2_button_size' => 'medium',
52
- 'font_family' => 'inherit', // Pick the family, not the easy name (see helper function below)
53
- 'is_on' => true,
54
- 'notify_animate_hide' => true,
55
- 'notify_animate_show' => false,
56
- 'notify_div_id' => '#cookie-law-info-bar',
57
- 'notify_position_horizontal' => 'right', // left | right
58
- 'notify_position_vertical' => 'bottom', // 'top' = header | 'bottom' = footer
59
- 'notify_message' => addslashes ( 'This website uses cookies to improve your experience. We\'ll assume you\'re ok with this, but you can opt-out if you wish.[cookie_button] [cookie_link]' ),
60
- 'showagain_background' => '#fff',
61
- 'showagain_border' => '#000',
62
- 'showagain_text' => addslashes ( 'Privacy & Cookies Policy' ),
63
- 'showagain_div_id' => '#cookie-law-info-again',
64
- 'showagain_tab' => true,
65
- 'showagain_x_position' => '100px',
66
- 'text' => '#000',
67
- 'use_colour_picker' => true
68
- );
69
- return $settings_v0_9;
70
- }
71
-
72
-
73
- /**
74
- Delete the values in all fields
75
- WARNING - this has a predictable result i.e. will delete saved settings! Once deleted,
76
- the get_admin_options() function will not find saved settings so will return default values
77
- */
78
- function cookielawinfo_delete_settings() {
79
- if ( defined ( 'CLI_ADMIN_OPTIONS_NAME' ) ) {
80
- delete_option( CLI_ADMIN_OPTIONS_NAME );
81
- }
82
- if ( defined ( 'CLI_SETTINGS_FIELD' ) ) {
83
- delete_option( CLI_SETTINGS_FIELD );
84
- }
85
- }
86
-
87
-
88
- /**
89
- Retrieves admin setting: use colour picker in admin panel?
90
- Default is true
91
- Useful if issues with WP Theme and need to disable
92
- */
93
- function cookielawinfo_colourpicker_enabled() {
94
- $settings = cookielawinfo_get_admin_settings();
95
- return $settings['use_colour_picker'];
96
- }
97
-
98
-
99
-
100
- /** Retrieves (and sanitises) settings */
101
- function cookielawinfo_get_admin_settings() {
102
- $settings = cookielawinfo_get_default_settings();
103
- $stored_options = get_option( CLI_SETTINGS_FIELD );
104
- if ( !empty( $stored_options ) ) {
105
- foreach ( $stored_options as $key => $option ) {
106
- $settings[$key] = cookielawinfo_sanitise( $key, $option );
107
- }
108
- }
109
- update_option( CLI_SETTINGS_FIELD, $settings );
110
- return $settings;
111
- }
112
-
113
-
114
- /** Updates latest version number of plugin */
115
- function cookielawinfo_update_to_latest_version_number() {
116
- update_option( CLI_MIGRATED_VERSION, CLI_LATEST_VERSION_NUMBER );
117
- }
118
-
119
-
120
- /** Returns true if user is on latest version of plugin */
121
- function cookielawinfo_has_migrated() {
122
- // Test for previous version. If doesn't exist then safe to say are fresh install:
123
- $old_settings = get_option( CLI_ADMIN_OPTIONS_NAME );
124
- if ( empty( $old_settings ) ) {
125
- return true;
126
- }
127
- // Test for latest version number
128
- $version = get_option( CLI_MIGRATED_VERSION );
129
- if ( empty ( $version ) ) {
130
- // No version stored; not yet migrated:
131
- return false;
132
- }
133
- if ( $version == CLI_LATEST_VERSION_NUMBER ) {
134
- // Are on latest version
135
- return true;
136
- }
137
- echo 'VERSION: ' . $version . '<br /> V2: ' . CLI_LATEST_VERSION_NUMBER;
138
- // If you got this far then you're on an inbetween version
139
- return false;
140
- }
141
-
142
- function cookielawinfo_copy_old_settings_to_new() {
143
- $new_settings = cookielawinfo_get_admin_settings();
144
- $old_settings = get_option( CLI_ADMIN_OPTIONS_NAME );
145
-
146
- if ( empty( $old_settings ) ) {
147
- // Something went wrong:
148
- return false;
149
- }
150
- else {
151
- // Copy over settings:
152
- $new_settings['background'] = $old_settings['colour_bg'];
153
- $new_settings['border'] = $old_settings['colour_border'];
154
- $new_settings['button_1_action'] = 'CONSTANT_OPEN_URL';
155
- $new_settings['button_1_text'] = $old_settings['link_text'];
156
- $new_settings['button_1_url'] = $old_settings['link_url'];
157
- $new_settings['button_1_link_colour'] = $old_settings['colour_link'];
158
- $new_settings['button_1_new_win'] = $old_settings['link_opens_new_window'];
159
- $new_settings['button_1_as_button'] = $old_settings['show_as_button'];
160
- $new_settings['button_1_button_colour'] = $old_settings['colour_button_bg'];
161
- $new_settings['notify_message'] = $old_settings['message_text'];
162
- $new_settings['text'] = $old_settings['colour_text'];
163
-
164
- // Save new values:
165
- update_option( CLI_SETTINGS_FIELD, $new_settings );
166
- }
167
- return true;
168
- }
169
-
170
- /** Migrates settings from version 0.8.3 to version 0.9 */
171
- function cookielawinfo_migrate_to_new_version() {
172
-
173
- if ( cookielawinfo_has_migrated() ) {
174
- return false;
175
- }
176
-
177
- if ( !cookielawinfo_copy_old_settings_to_new() ) {
178
- return false;
179
- }
180
-
181
- // Register that have completed:
182
- cookielawinfo_update_to_latest_version_number();
183
- return true;
184
- }
185
-
186
-
187
- /**
188
- Returns list of HTML tags allowed in HTML fields for use in declaration of wp_kset field validation.
189
-
190
- Deliberately allows class and ID declarations to assist with custom CSS styling.
191
- To customise further, see the excellent article at: http://ottopress.com/2010/wp-quickie-kses/
192
- */
193
- function cookielawinfo_allowed_html() {
194
- $allowed_html = array(
195
- // Allowed: <a href="" id="" class="" title="" target="">...</a>
196
- // Not allowed: <a href="javascript(...);">...</a>
197
- 'a' => array(
198
- 'href' => array(),
199
- 'id' => array(),
200
- 'class' => array(),
201
- 'title' => array(),
202
- 'target' => array(),
203
- 'rel' => array()
204
- ),
205
- 'b' => array(),
206
- 'br' => array(
207
- 'id' => array(),
208
- 'class' => array()
209
- ),
210
- 'div' => array(
211
- 'id' => array(),
212
- 'class' => array()
213
- ),
214
- 'em' => array (
215
- 'id' => array(),
216
- 'class' => array()
217
- ),
218
- 'i' => array(),
219
- 'img' => array(
220
- 'src' => array(),
221
- 'id' => array(),
222
- 'class' => array(),
223
- 'alt' => array()
224
- ),
225
- 'p' => array (
226
- 'id' => array(),
227
- 'class' => array()
228
- ),
229
- 'span' => array(
230
- 'id' => array(),
231
- 'class' => array()
232
- ),
233
- 'strong' => array(
234
- 'id' => array(),
235
- 'class' => array()
236
- ),
237
- );
238
- return $allowed_html;
239
- }
240
-
241
-
242
- /**
243
- Returns list of allowed protocols, for use in declaration of wp_kset field validation.
244
- N.B. JavaScript is specifically disallowed for security reasons.
245
- Don't even trust your own database, as you don't know if another plugin has written to your settings.
246
- */
247
- function cookielawinfo_allowed_protocols() {
248
- // Additional options: 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet'
249
- return array ('http', 'https');
250
- }
251
-
252
-
253
- /**
254
- Returns sanitised content based on field-specific rules defined here
255
- Used for both read AND write operations
256
- */
257
- function cookielawinfo_sanitise($key, $value) {
258
- $ret = null;
259
-
260
- switch ($key) {
261
- // Convert all boolean values from text to bool:
262
- case 'is_on':
263
- case 'border_on':
264
- case 'notify_animate_show':
265
- case 'notify_animate_hide':
266
- case 'showagain_tab':
267
- case 'use_colour_picker':
268
- case 'button_1_new_win':
269
- case 'button_1_as_button':
270
- case 'button_2_new_win':
271
- case 'button_2_as_button':
272
- if ( $value == 'true' || $value === true ) {
273
- $ret = true;
274
- }
275
- elseif ( $value == 'false' || $value === false ) {
276
- $ret = false;
277
- }
278
- else {
279
- // Unexpected value returned from radio button, go fix the HTML.
280
- // Failover = assign null.
281
- $ret = 'fffffff';
282
- }
283
- break;
284
- // Any hex colour e.g. '#f00', '#FE01ab' '#ff0000' but not 'f00' or 'ff0000':
285
- case 'background':
286
- case 'text':
287
- case 'border':
288
- case 'showagain_background':
289
- case 'showagain_border':
290
- case 'button_1_link_colour':
291
- case 'button_1_button_colour':
292
- case 'button_2_link_colour':
293
- case 'button_2_button_colour':
294
- if ( preg_match( '/^#[a-f0-9]{6}|#[a-f0-9]{3}$/i', $value ) ) {
295
- // Was: '/^#([0-9a-fA-F]{1,2}){3}$/i' which allowed e.g. '#00dd' (error)
296
- $ret = $value;
297
- }
298
- else {
299
- // Failover = assign '#000' (black)
300
- $ret = '#000';
301
- }
302
- break;
303
- // Allow some HTML, but no JavaScript. Note that deliberately NOT stripping out line breaks here, that's done when sending JavaScript parameter elsewhere:
304
- case 'notify_message':
305
- $ret = wp_kses( $value, cookielawinfo_allowed_html(), cookielawinfo_allowed_protocols() );
306
- break;
307
- // URLs only:
308
- case 'button_1_url':
309
- case 'button_2_url':
310
- $ret = esc_url( $value );
311
- break;
312
- // Basic sanitisation for all the rest:
313
- default:
314
- $ret = sanitize_text_field( $value );
315
- break;
316
- }
317
- return $ret;
318
- }
319
-
320
-
321
- /**
322
- Registers menu options
323
- Hooked into admin_menu
324
- */
325
- function cookielawinfo_register_custom_menu_page() {
326
- add_submenu_page(
327
- 'edit.php?post_type=cookielawinfo',
328
- 'Cookie Law Settings',
329
- 'Cookie Law Settings',
330
- 'manage_options',
331
- 'cookie-law-info',
332
- 'cookielawinfo_print_admin_page'
333
- );
334
- }
335
-
336
-
337
- /**
338
- Registers dashboard scripts and styles used for Cookie Law Info plugin settings panel
339
- Important: these scripts only load on the plugin settings page (avoids conflicts)
340
- Hooked into admin_enqueue_script
341
- */
342
- function cookielawinfo_custom_dashboard_styles( $hook ) {
343
- if ( 'cookielawinfo_page_cookie-law-info' != $hook )
344
- return;
345
-
346
- wp_register_style( 'cookielawinfo-admin-style', plugins_url('/cookie-law-info/css/cli-admin-style.css') );
347
- wp_enqueue_style( 'cookielawinfo-admin-style' );
348
-
349
- if ( cookielawinfo_colourpicker_enabled() ) {
350
- wp_enqueue_script('spectrum-colorpicker', plugins_url('/cookie-law-info/admin/bgrins-spectrum/spectrum.js'), array('jquery'));
351
- wp_register_style( 'spectrum-style', plugins_url('/cookie-law-info/admin/bgrins-spectrum/spectrum.css') );
352
- wp_enqueue_style( 'spectrum-style' );
353
- }
354
-
355
- wp_enqueue_script('jquery-ui-custom', plugins_url('/cookie-law-info/js/jquery-ui-1.8.20.custom.min.js'), array('jquery'));
356
- wp_enqueue_script('admin-ui-controller', plugins_url('/cookie-law-info/js/admin-ui-controller.js'), array('jquery'));
357
-
358
- wp_register_style( 'jquery-ui-custom', plugins_url('/cookie-law-info/css/smoothness/jquery-ui-1.8.20.custom.css') );
359
- wp_enqueue_style( 'jquery-ui-custom' );
360
- }
361
-
362
-
363
- /**
364
- Adds custom script to cookielawinfo admin panel to run the colour pickers
365
- Important: these scripts only load on the plugin settings page (avoids conflicts)
366
- Hooked into admin_footer
367
- */
368
- function cookielawinfo_custom_dashboard_styles_my_colours() {
369
- $screen = get_current_screen();
370
- if ( $screen->post_type != 'cookielawinfo' ) {
371
- return;
372
- }
373
- if( cookielawinfo_colourpicker_enabled() ) {
374
- wp_enqueue_script('spectrum-custom', plugins_url('/cookie-law-info/admin/bgrins-spectrum/my-colours.js'));
375
- }
376
- }
377
-
378
-
379
- /**
380
- Returns list of available jQuery actions
381
- Used by buttons/links in header
382
- */
383
- function cookielawinfo_get_js_actions() {
384
- $js_actions = array(
385
- 'Close Header' => '#cookie_action_close_header',
386
- 'Open URL' => 'CONSTANT_OPEN_URL' // Don't change this value, is used by jQuery
387
- );
388
- return $js_actions;
389
- }
390
-
391
-
392
- /**
393
- Function returns list of supported fonts
394
- Used when printing admin form (for combo box)
395
- */
396
- function cookielawinfo_get_fonts() {
397
- $fonts = Array(
398
- 'Default theme font' => 'inherit',
399
- 'Sans Serif' => 'Helvetica, Arial, sans-serif',
400
- 'Serif' => 'Georgia, Times New Roman, Times, serif',
401
- 'Arial' => 'Arial, Helvetica, sans-serif',
402
- 'Arial Black' => 'Arial Black,Gadget,sans-serif',
403
- 'Georgia' => 'Georgia, serif',
404
- 'Helvetica' => 'Helvetica, sans-serif',
405
- 'Lucida' => 'Lucida Sans Unicode, Lucida Grande, sans-serif',
406
- 'Tahoma' => 'Tahoma, Geneva, sans-serif',
407
- 'Times New Roman' => 'Times New Roman, Times, serif',
408
- 'Trebuchet' => 'Trebuchet MS, sans-serif',
409
- 'Verdana' => 'Verdana, Geneva'
410
- );
411
- return $fonts;
412
- }
413
-
414
-
415
- /**
416
- Returns button sizes (dependent upon CSS implemented - careful if editing)
417
- Used when printing admin form (for combo boxes)
418
- */
419
- function cookielawinfo_get_button_sizes() {
420
- $sizes = Array(
421
- 'Extra Large' => 'super',
422
- 'Large' => 'large',
423
- 'Medium' => 'medium',
424
- 'Small' => 'small'
425
- );
426
- return $sizes;
427
- }
428
-
429
-
430
- /**
431
- Prints a combobox based on options and selected=match value
432
-
433
- Parameters:
434
- $options = array of options (suggest using helper functions)
435
- $selected = which of those options should be selected (allows just one; is case sensitive)
436
-
437
- Outputs (based on array ( $key => $value ):
438
- <option value=$value>$key</option>
439
- <option value=$value selected="selected">$key</option>
440
- */
441
- function cookielawinfo_print_combobox_options( $options, $selected ) {
442
- foreach ( $options as $key => $value ) {
443
- echo '<option value="' . $value . '"';
444
- if ( $value == $selected ) {
445
- echo ' selected="selected"';
446
- }
447
- echo '>' . $key . '</option>';
448
- }
449
- }
450
-
451
-
452
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/cookie-law-info.php DELETED
@@ -1,133 +0,0 @@
1
- <?php
2
- /*
3
- Plugin Name: Cookie Law Info
4
- Plugin URI: http://wordpress.org/extend/plugins/cookie-law-info/description/
5
- Description: A simple way of 'implied consent' to show your website complies with the EU Cookie Law, which came into force on 26 May 2012.
6
- Author: Richard Ashby
7
- Author URI: http://www.cookielawinfo.com/
8
- Version: 1.0.3
9
- License: GPL2
10
-
11
- ===============================================================================
12
-
13
- Whilst writing this plugin, somebody very close to me passed away from
14
- prostate cancer.
15
-
16
- If you found this software useful, please consider making a donation to
17
- cancer research. Your donation, no matter how small, makes a real difference.
18
-
19
- Thank You.
20
-
21
- http://uk.movember.com/mospace/1853714/
22
- www.cancerresearchuk.org
23
-
24
- ===============================================================================
25
-
26
- Copyright 2012 Richard Ashby (email : richard.ashby@mediacreek.com)
27
-
28
- This program is free software; you can redistribute it and/or modify
29
- it under the terms of the GNU General Public License, version 2, as
30
- published by the Free Software Foundation.
31
-
32
- This program is distributed in the hope that it will be useful,
33
- but WITHOUT ANY WARRANTY; without even the implied warranty of
34
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
35
- GNU General Public License for more details.
36
-
37
- You should have received a copy of the GNU General Public License
38
- along with this program; if not, write to the Free Software
39
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
40
-
41
- */
42
-
43
-
44
-
45
- // Failsafe setting (will catch any missed debug function calls), switch off ("false") in live:
46
- define ( 'CLI_PLUGIN_DEVELOPMENT_MODE', false );
47
-
48
- define ( 'CLI_PLUGIN_PATH', plugin_dir_path(__FILE__) );
49
- define ( 'CLI_PLUGIN_URL', plugins_url() . '/cookie-law-info/');
50
- define ( 'CLI_DB_KEY_PREFIX', 'CookieLawInfo-' );
51
- define ( 'CLI_LATEST_VERSION_NUMBER', '0.9' );
52
- define ( 'CLI_SETTINGS_FIELD', CLI_DB_KEY_PREFIX . CLI_LATEST_VERSION_NUMBER );
53
- define ( 'CLI_MIGRATED_VERSION', CLI_DB_KEY_PREFIX . 'MigratedVersion' );
54
-
55
- // Previous version settings (depreciated from 0.9 onwards):
56
- define ( 'CLI_ADMIN_OPTIONS_NAME', 'CookieLawInfo-0.8.3' );
57
-
58
-
59
- require_once CLI_PLUGIN_PATH . 'php/functions.php';
60
- require_once CLI_PLUGIN_PATH . 'admin/cli-admin.php';
61
- require_once CLI_PLUGIN_PATH . 'admin/cli-admin-page.php';
62
- require_once CLI_PLUGIN_PATH . 'php/shortcodes.php';
63
- require_once CLI_PLUGIN_PATH . 'php/custom-post-types.php';
64
-
65
-
66
- // General, including script handling and uninstall:
67
- register_activation_hook( __FILE__, 'cookielawinfo_activate' );
68
- add_action( 'admin_menu', 'cookielawinfo_register_custom_menu_page' );
69
- add_action( 'wp_enqueue_scripts', 'cookielawinfo_enqueue_frontend_scripts' );
70
- add_action( 'wp_footer', 'cookielawinfo_inject_cli_script' );
71
-
72
- // Shortcodes:
73
- add_shortcode( 'delete_cookies', 'cookielawinfo_delete_cookies_shortcode' ); // a shortcode [delete_cookies (text="Delete Cookies")]
74
- add_shortcode( 'cookie_audit', 'cookielawinfo_table_shortcode' ); // a shortcode [cookie_audit style="winter"]
75
- add_shortcode( 'cookie_accept', 'cookielawinfo_shortcode_accept_button' ); // a shortcode [cookie_accept (colour="red")]
76
- add_shortcode( 'cookie_link', 'cookielawinfo_shortcode_more_link' ); // a shortcode [cookie_link]
77
- add_shortcode( 'cookie_button', 'cookielawinfo_shortcode_main_button' ); // a shortcode [cookie_button]
78
-
79
- // Dashboard styles:
80
- add_action( 'admin_enqueue_scripts', 'cookielawinfo_custom_dashboard_styles' );
81
- add_action( 'admin_footer', 'cookielawinfo_custom_dashboard_styles_my_colours' );
82
-
83
- // Cookie Audit custom post type functions:
84
- add_action( 'admin_init', 'cookielawinfo_custom_posts_admin_init' );
85
- add_action( 'init', 'cookielawinfo_register_custom_post_type' );
86
- add_action( 'save_post', 'cookielawinfo_save_custom_metaboxes' );
87
- add_filter( 'manage_edit-cookielawinfo_columns', 'cookielawinfo_edit_columns' );
88
- add_action( 'manage_posts_custom_column', 'cookielawinfo_custom_columns' );
89
-
90
-
91
- /** Register the uninstall function */
92
- function cookielawinfo_activate() {
93
- register_uninstall_hook( __FILE__, 'cookielawinfo_uninstall_plugin' );
94
- }
95
-
96
-
97
- /** Uninstalls the plugin (removes settings and custom meta) */
98
- function cookielawinfo_uninstall_plugin() {
99
- // Bye bye settings:
100
- delete_option( CLI_ADMIN_OPTIONS_NAME );
101
- delete_option( CLI_MIGRATED_VERSION );
102
- delete_option( CLI_SETTINGS_FIELD );
103
-
104
- // Bye bye custom meta:
105
- global $post;
106
- $args = array('post_type' => 'cookielawinfo');
107
- $cookies = new WP_Query( $args );
108
-
109
- if ( !$cookies->have_posts() ) {
110
- return;
111
- }
112
-
113
- while ( $cookies->have_posts() ) : $cookies->the_post();
114
- // Get custom fields:
115
- $custom = get_post_custom( $post->ID );
116
- // Look for old values. If they exist, move them to new values then delete old values:
117
- if ( isset ( $custom["cookie_type"][0] ) ) {
118
- delete_post_meta( $post->ID, "cookie_type", $custom["cookie_type"][0] );
119
- }
120
- if ( isset ( $custom["cookie_duration"][0] ) ) {
121
- delete_post_meta( $post->ID, "cookie_duration", $custom["cookie_duration"][0] );
122
- }
123
- if ( isset ( $custom["_cli_cookie_type"][0] ) ) {
124
- delete_post_meta( $post->ID, "_cli_cookie_type", $custom["_cli_cookie_type"][0] );
125
- }
126
- if ( isset ( $custom["_cli_cookie_duration"][0] ) ) {
127
- delete_post_meta( $post->ID, "_cli_cookie_duration", $custom["_cli_cookie_duration"][0] );
128
- }
129
- endwhile;
130
- }
131
-
132
-
133
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/css/cli-admin-style.css DELETED
@@ -1,102 +0,0 @@
1
- #cli-plugin-migrate {
2
- background: #C5E3BF;
3
- border: 1px solid #98A148;
4
- color: #000;
5
- margin: 0 0 20px 0;
6
- padding: 10px;
7
- display: none;
8
- }
9
-
10
- .vvv_combobox {
11
- width: 100%;
12
- }
13
- .vvv_textbox {
14
- height: 150px;
15
- width: 100%;
16
- }
17
- .form-table input[type="text"], .vvv_textfield {
18
- width:100%;
19
- height: 24px;
20
- margin-bottom: 5px;
21
- }
22
- .cli-plugin-example {
23
- display: block;
24
- }
25
- #cookielawinfo-accordion h4 {
26
- border-bottom: 1px solid #ccc;
27
- line-height: 110%;
28
- padding: 5px;
29
- }
30
- #cookielawinfo-accordion h4 code {
31
- padding-left: 40px;
32
- background: transparent;
33
- }
34
- .cli-help pre {
35
- font-weight: bold;
36
- }
37
- .cli-help span {
38
- margin: 0 0 30px 15px;
39
- display: block;
40
- }
41
- .cli-plugin-toolbar {
42
- height: 40px;
43
- width: 100%;
44
- margin: 0;
45
- padding: 0;
46
- }
47
- .cli-plugin-toolbar .left {
48
- float: left;
49
- margin: 0;
50
- padding: 0;
51
- }
52
- .cli-plugin-toolbar .left img {
53
- vertical-align: text-bottom;
54
- margin-right: 10px;
55
- }
56
- .cli-plugin-toolbar .right {
57
- float: right;
58
- margin: 0;
59
- padding: 0;
60
- }
61
- .cli-plugin-toolbar.top {
62
- margin-bottom: -5px;
63
- }
64
- .cli-plugin-toolbar.bottom {
65
- margin-top: 12px;
66
- }
67
- #header_on_off_field_warning {
68
- margin-left: 30px;
69
- }
70
- .warning { /* called by jQuery in admin-ui-controller.js */
71
- color: #f00;
72
- font-weight: bold;
73
- }
74
- .cli-plugin-container {
75
- overflow: hidden;
76
- width: 100%;
77
- }
78
- .cli-plugin-left-col {
79
- float: left;
80
- padding-bottom: 500em;
81
- margin-bottom: -500em;
82
- }
83
- .cli-plugin-right-col {
84
- float: left;
85
- margin-right: -1px; /* For IE */
86
- padding-bottom: 500em;
87
- margin-bottom: -500em;
88
- }
89
-
90
- .cli-plugin-container.width-50 { width: 50%; }
91
- .cli-plugin-container.width-60 { width: 60%; }
92
- .cli-plugin-container.width-70 { width: 70%; }
93
- .cli-plugin-container.width-80 { width: 80%; }
94
- .cli-plugin-container.width-90 { width: 90%; }
95
- .cli-plugin-left-col.width-50, .cli-plugin-right-col.width-50 { width: 50%; }
96
- .cli-plugin-left-col.width-62, .cli-plugin-right-col.width-62 { width: 62%; } /* Golden Ratio */
97
- .cli-plugin-left-col.width-38, .cli-plugin-right-col.width-38 { width: 38%; } /* Golden Ratio */
98
- .cli-plugin-left-col.width-f220, .cli-plugin-right-col.width-f220 { width: 220px; }
99
- .cli-plugin-container div.pad-5, .cli-plugin-left-col div.pad-5, .cli-plugin-right-col div.pad-5 { padding: 5px; }
100
- .cli-plugin-container div.pad-10, .cli-plugin-left-col div.pad-10, .cli-plugin-right-col div.pad-10 { padding: 10px; }
101
- .width-60 { width: 60%; }
102
- .width-100 { width: 100%; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/css/cli-style.css DELETED
@@ -1,98 +0,0 @@
1
- #cookie-law-info-bar {
2
- border: 0;
3
- font-size: 10pt;
4
- margin: 0 auto;
5
- padding: 5px 0;
6
- text-align: center;
7
- width: 100%;
8
- z-index: 9999;
9
- }
10
- #cookie-law-info-again {
11
- font-size: 10pt;
12
- margin: 0;
13
- padding: 2px 10px;
14
- text-align: center;
15
- z-index: 9999;
16
- cursor: pointer;
17
- }
18
- #cookie-law-info-bar span {
19
- vertical-align: middle;
20
- }
21
- /** Buttons (http://papermashup.com/demos/css-buttons) */
22
- .cli-plugin-button, .cli-plugin-button:visited {
23
- background: #222 url('../images/overlay.png') repeat-x;
24
- display: inline-block;
25
- padding: 5px 10px 6px;
26
- color: #fff;
27
- text-decoration: none;
28
- -moz-border-radius: 6px;
29
- -webkit-border-radius: 6px;
30
- -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.6);
31
- -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.6);
32
- text-shadow: 0 -1px 1px rgba(0,0,0,0.25);
33
- border-bottom: 1px solid rgba(0,0,0,0.25);
34
- position: relative;
35
- cursor: pointer;
36
- margin: auto 10px;
37
- }
38
- .cli-plugin-button:hover {
39
- background-color: #111;
40
- color: #fff;
41
- }
42
- .cli-plugin-button:active {
43
- top: 1px;
44
- }
45
- .small.cli-plugin-button, .small.cli-plugin-button:visited {
46
- font-size: 11px;
47
- }
48
- .cli-plugin-button, .cli-plugin-button:visited,
49
- .medium.cli-plugin-button, .medium.cli-plugin-button:visited {
50
- font-size: 13px;
51
- font-weight: bold;
52
- line-height: 1;
53
- text-shadow: 0 -1px 1px rgba(0,0,0,0.25);
54
- }
55
- .large.cli-plugin-button, .large.cli-plugin-button:visited {
56
- font-size: 14px;
57
- padding: 8px 14px 9px;
58
- }
59
- .super.cli-plugin-button, .super.cli-plugin-button:visited {
60
- font-size: 34px;
61
- padding: 8px 14px 9px;
62
- }
63
- .pink.cli-plugin-button, .magenta.cli-plugin-button:visited {
64
- background-color: #e22092;
65
- }
66
- .pink.cli-plugin-button:hover {
67
- background-color: #c81e82;
68
- }
69
- .green.cli-plugin-button, .green.cli-plugin-button:visited {
70
- background-color: #91bd09;
71
- }
72
- .green.cli-plugin-button:hover {
73
- background-color: #749a02;
74
- }
75
- .red.cli-plugin-button, .red.cli-plugin-button:visited {
76
- background-color: #e62727;
77
- }
78
- .red.cli-plugin-button:hover {
79
- background-color: #cf2525;
80
- }
81
- .orange.cli-plugin-button, .orange.cli-plugin-button:visited {
82
- background-color: #ff5c00;
83
- }
84
- .orange.cli-plugin-button:hover {
85
- background-color: #d45500;
86
- }
87
- .blue.cli-plugin-button, .blue.cli-plugin-button:visited {
88
- background-color: #2981e4;
89
- }
90
- .blue.cli-plugin-button:hover {
91
- background-color: #2575cf;
92
- }
93
- .yellow.cli-plugin-button, .yellow.cli-plugin-button:visited {
94
- background-color: #ffb515;
95
- }
96
- .yellow.cli-plugin-button:hover {
97
- background-color: #fc9200;
98
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/css/cli-tables.css DELETED
@@ -1,199 +0,0 @@
1
- /**
2
- For more styles try: http://icant.co.uk/csstablegallery/
3
- ----
4
- Generic styles:
5
- Here you could e.g. customise width of column 1 and 2,
6
- or add a generic roll-over effect on table rows
7
- */
8
- .cookielawinfo-column-1 {
9
- width: 25%;
10
- }
11
- .cookielawinfo-column-2 {
12
- width: 10%;
13
- }
14
- .cookielawinfo-column-3 {
15
- width: 15%;
16
- }
17
- .cookielawinfo-column-4 {
18
- width: 50%;}
19
- }
20
- .cookielawinfo-row {
21
-
22
- }
23
- td.cookielawinfo-row:hover {
24
- }
25
-
26
-
27
- /** Simple style */
28
- .cookielawinfo-simple thead {
29
- width: 100%;
30
- }
31
- .cookielawinfo-simple td {
32
- padding: 5px 5px 5px 0;
33
- vertical-align: top;
34
- }
35
- .cookielawinfo-simple thead th {
36
- padding-right: 10px;
37
- text-align: left;
38
- }
39
-
40
-
41
- /** Modern style */
42
- .cookielawinfo-modern {
43
- border: 1px solid #e3e3e3;
44
- background-color: #f2f2f2;
45
- width: 100%;
46
- border-radius: 6px;
47
- -webkit-border-radius: 6px;
48
- -moz-border-radius: 6px;
49
- }
50
- .cookielawinfo-modern td, .cookielawinfo-modern th {
51
- padding: 5px;
52
- color: #333;
53
- }
54
- .cookielawinfo-modern thead {
55
- font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
56
- padding: .2em 0 .2em .5em;
57
- text-align: left;
58
- color: #4B4B4B;
59
- background-color: #C8C8C8;
60
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f2f2f2), to(#e3e3e3), color-stop(.6,#B3B3B3));
61
- background-image: -moz-linear-gradient(top, #D6D6D6, #B0B0B0, #B3B3B3 90%);
62
- border-bottom: solid 1px #999;
63
- }
64
- .cookielawinfo-modern th {
65
- font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
66
- font-size: 17px;
67
- line-height: 20px;
68
- font-style: normal;
69
- font-weight: normal;
70
- text-align: left;
71
- text-shadow: white 1px 1px 1px;
72
- }
73
- .cookielawinfo-modern td {
74
- line-height: 20px;
75
- font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
76
- font-size: 14px;
77
- border-bottom: 1px solid #fff;
78
- border-top: 1px solid #fff;
79
- }
80
- .cookielawinfo-modern tr.cookielawinfo-row:hover {
81
- background-color: #fff;
82
- }
83
-
84
-
85
- /** Elegant style */
86
- .cookielawinfo-elegant {
87
- border: 1px solid #DFDFDF;
88
- background-color: #F9F9F9;
89
- width: 100%;
90
- -moz-border-radius: 3px;
91
- -webkit-border-radius: 3px;
92
- border-radius: 3px;
93
- font-family: Arial,"Bitstream Vera Sans",Helvetica,Verdana,sans-serif;
94
- color: #333;
95
- }
96
- .cookielawinfo-elegant tr {
97
- border-top-color: white;
98
- border-bottom: 1px solid #DFDFDF;
99
- color: #555;
100
- }
101
- .cookielawinfo-elegant th {
102
- text-shadow: rgba(255, 255, 255, 0.796875) 0px 1px 0px;
103
- font-family: Georgia,"Times New Roman","Bitstream Charter",Times,serif;
104
- font-weight: normal;
105
- padding: 7px 7px 8px;
106
- text-align: left;
107
- line-height: 1.3em;
108
- font-size: 14px;
109
- }
110
- .cookielawinfo-elegant td {
111
- font-size: 12px;
112
- padding: 4px 7px 2px;
113
- vertical-align: top;
114
- }
115
-
116
-
117
- /** Rounded style */
118
- .cookielawinfo-rounded {
119
- background-color: #f5f5f5;
120
- padding: 5px;
121
- border-radius: 5px;
122
- -moz-border-radius: 5px;
123
- -webkit-border-radius: 5px;
124
- border: 1px solid #ebebeb;
125
- }
126
- .cookielawinfo-rounded td, .rounded th {
127
- padding: 1px 5px;
128
- }
129
- .cookielawinfo-rounded thead {
130
- text-shadow: 0 1px 0 white;
131
- color: #999;
132
- }
133
- .cookielawinfo-rounded th {
134
- text-align: left;
135
- text-transform: uppercase;
136
- font-size: 11pt;
137
- border-bottom: 1px solid #fff;
138
- padding: 1px 5px;
139
- }
140
- .cookielawinfo-rounded td {
141
- font-size: 10pt;
142
- padding: 5px;
143
- }
144
- .cookielawinfo-rounded tr.cookielawinfo-row:hover {
145
- background-color: #fff;
146
- }
147
-
148
-
149
- /** Classic Style */
150
- table.cookielawinfo-classic {
151
- font-family: Verdana, Arial, Helvetica, sans-serif;
152
- border-collapse: collapse;
153
- border-left: 1px solid #ccc;
154
- border-top: 1px solid #ccc;
155
- color: #333;
156
- }
157
- table.cookielawinfo-classic thead tr th {
158
- text-transform: uppercase;
159
- background: #e2e2e2;
160
- }
161
- table.cookielawinfo-classic tfoot tr th, table.cookielawinfo-classic tfoot tr td {
162
- text-transform: uppercase;
163
- color: #000;
164
- font-weight: bold;
165
- }
166
- table.cookielawinfo-classic tfoot tr th {
167
- width: 20%;
168
- }
169
- table.cookielawinfo-classic tfoot tr td {
170
- width: 80%;
171
- }
172
- table.cookielawinfo-classic td, table.cookielawinfo-classic th {
173
- border-right: 1px solid #ccc;
174
- border-bottom: 1px solid #ccc;
175
- padding: 5px;
176
- line-height: 1.8em;
177
- font-size: 0.8em;
178
- vertical-align: top;
179
- width: 20%;
180
- }
181
- table.cookielawinfo-classic tr.odd th, table.cookielawinfo-classic tr.odd td {
182
- background: #efefef;
183
- }
184
-
185
-
186
- /* "Winter Blues" CSS theme for CSS Table Gallery (http://icant.co.uk/csstablegallery/) by Gunta Klavina (http://www.klavina.com) */
187
- table.cookielawinfo-winter {font: 85% "Lucida Grande", "Lucida Sans Unicode", "Trebuchet MS", sans-serif;padding: 0; margin: 10px 0 20px; border-collapse: collapse; color: #333; background: #F3F5F7;}
188
- table.cookielawinfo-winter a {color: #3A4856; text-decoration: none; border-bottom: 1px solid #C6C8CB;}
189
- table.cookielawinfo-winter a:visited {color: #777;}
190
- table.cookielawinfo-winter a:hover {color: #000;}
191
- table.cookielawinfo-winter caption {text-align: left; text-transform: uppercase; padding-bottom: 10px; font: 200% "Lucida Grande", "Lucida Sans Unicode", "Trebuchet MS", sans-serif;}
192
- table.cookielawinfo-winter thead th {background: #3A4856; padding: 15px 10px; color: #fff; text-align: left; font-weight: normal;}
193
- table.cookielawinfo-winter tbody {border-left: 1px solid #EAECEE; border-right: 1px solid #EAECEE;}
194
- table.cookielawinfo-winter tbody {border-bottom: 1px solid #EAECEE;}
195
- table.cookielawinfo-winter tbody td, table.cookielawinfo-winter tbody th {padding: 10px; background: url("../images/td_back.gif") repeat-x; text-align: left;}
196
- table.cookielawinfo-winter tbody tr {background: #F3F5F7;}
197
- table.cookielawinfo-winter tbody tr.odd {background: #F0F2F4;}
198
- table.cookielawinfo-winter tbody tr:hover {background: #EAECEE; color: #111;}
199
- table.cookielawinfo-winter tfoot td, table.cookielawinfo-winter tfoot th, table.cookielawinfo-winter tfoot tr {text-align: left; font: 120% "Lucida Grande", "Lucida Sans Unicode", "Trebuchet MS", sans-serif; text-transform: uppercase; background: #fff; padding: 10px;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png DELETED
Binary file
trunk/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png DELETED
Binary file
trunk/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png DELETED
Binary file
trunk/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png DELETED
Binary file
trunk/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png DELETED
Binary file
trunk/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png DELETED
Binary file
trunk/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png DELETED
Binary file
trunk/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png DELETED
Binary file
trunk/css/smoothness/images/ui-icons_222222_256x240.png DELETED
Binary file
trunk/css/smoothness/images/ui-icons_2e83ff_256x240.png DELETED
Binary file
trunk/css/smoothness/images/ui-icons_454545_256x240.png DELETED
Binary file
trunk/css/smoothness/images/ui-icons_888888_256x240.png DELETED
Binary file
trunk/css/smoothness/images/ui-icons_cd0a0a_256x240.png DELETED
Binary file
trunk/css/smoothness/jquery-ui-1.8.20.custom.css DELETED
@@ -1,305 +0,0 @@
1
- /*!
2
- * jQuery UI CSS Framework 1.8.20
3
- *
4
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
5
- * Dual licensed under the MIT or GPL Version 2 licenses.
6
- * http://jquery.org/license
7
- *
8
- * http://docs.jquery.com/UI/Theming/API
9
- */
10
-
11
- /* Layout helpers
12
- ----------------------------------*/
13
- .ui-helper-hidden { display: none; }
14
- .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
15
- .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
16
- .ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
17
- .ui-helper-clearfix:after { clear: both; }
18
- .ui-helper-clearfix { zoom: 1; }
19
- .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
20
-
21
-
22
- /* Interaction Cues
23
- ----------------------------------*/
24
- .ui-state-disabled { cursor: default !important; }
25
-
26
-
27
- /* Icons
28
- ----------------------------------*/
29
-
30
- /* states and images */
31
- .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
32
-
33
-
34
- /* Misc visuals
35
- ----------------------------------*/
36
-
37
- /* Overlays */
38
- .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
39
-
40
-
41
- /*!
42
- * jQuery UI CSS Framework 1.8.20
43
- *
44
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
45
- * Dual licensed under the MIT or GPL Version 2 licenses.
46
- * http://jquery.org/license
47
- *
48
- * http://docs.jquery.com/UI/Theming/API
49
- *
50
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
51
- */
52
-
53
-
54
- /* Component containers
55
- ----------------------------------*/
56
- .ui-widget { /*font-family: Verdana,Arial,sans-serif; font-size: 1.1em;*/ }
57
- .ui-widget .ui-widget { /*font-size: 1em;*/ }
58
- .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { /*font-family: Verdana,Arial,sans-serif; font-size: 1em;*/ }
59
- .ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
60
- .ui-widget-content a { color: #222222; }
61
- .ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
62
- .ui-widget-header a { color: #222222; }
63
-
64
- /* Interaction states
65
- ----------------------------------*/
66
- .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
67
- .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
68
- .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
69
- .ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
70
- .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
71
- .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
72
- .ui-widget :active { outline: none; }
73
-
74
- /* Interaction Cues
75
- ----------------------------------*/
76
- .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
77
- .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
78
- .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
79
- .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
80
- .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
81
- .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
82
- .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
83
- .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
84
-
85
- /* Icons
86
- ----------------------------------*/
87
-
88
- /* states and images */
89
- .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
90
- .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
91
- .ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
92
- .ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
93
- .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
94
- .ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
95
- .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
96
- .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
97
-
98
- /* positioning */
99
- .ui-icon-carat-1-n { background-position: 0 0; }
100
- .ui-icon-carat-1-ne { background-position: -16px 0; }
101
- .ui-icon-carat-1-e { background-position: -32px 0; }
102
- .ui-icon-carat-1-se { background-position: -48px 0; }
103
- .ui-icon-carat-1-s { background-position: -64px 0; }
104
- .ui-icon-carat-1-sw { background-position: -80px 0; }
105
- .ui-icon-carat-1-w { background-position: -96px 0; }
106
- .ui-icon-carat-1-nw { background-position: -112px 0; }
107
- .ui-icon-carat-2-n-s { background-position: -128px 0; }
108
- .ui-icon-carat-2-e-w { background-position: -144px 0; }
109
- .ui-icon-triangle-1-n { background-position: 0 -16px; }
110
- .ui-icon-triangle-1-ne { background-position: -16px -16px; }
111
- .ui-icon-triangle-1-e { background-position: -32px -16px; }
112
- .ui-icon-triangle-1-se { background-position: -48px -16px; }
113
- .ui-icon-triangle-1-s { background-position: -64px -16px; }
114
- .ui-icon-triangle-1-sw { background-position: -80px -16px; }
115
- .ui-icon-triangle-1-w { background-position: -96px -16px; }
116
- .ui-icon-triangle-1-nw { background-position: -112px -16px; }
117
- .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
118
- .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
119
- .ui-icon-arrow-1-n { background-position: 0 -32px; }
120
- .ui-icon-arrow-1-ne { background-position: -16px -32px; }
121
- .ui-icon-arrow-1-e { background-position: -32px -32px; }
122
- .ui-icon-arrow-1-se { background-position: -48px -32px; }
123
- .ui-icon-arrow-1-s { background-position: -64px -32px; }
124
- .ui-icon-arrow-1-sw { background-position: -80px -32px; }
125
- .ui-icon-arrow-1-w { background-position: -96px -32px; }
126
- .ui-icon-arrow-1-nw { background-position: -112px -32px; }
127
- .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
128
- .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
129
- .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
130
- .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
131
- .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
132
- .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
133
- .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
134
- .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
135
- .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
136
- .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
137
- .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
138
- .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
139
- .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
140
- .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
141
- .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
142
- .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
143
- .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
144
- .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
145
- .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
146
- .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
147
- .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
148
- .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
149
- .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
150
- .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
151
- .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
152
- .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
153
- .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
154
- .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
155
- .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
156
- .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
157
- .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
158
- .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
159
- .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
160
- .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
161
- .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
162
- .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
163
- .ui-icon-arrow-4 { background-position: 0 -80px; }
164
- .ui-icon-arrow-4-diag { background-position: -16px -80px; }
165
- .ui-icon-extlink { background-position: -32px -80px; }
166
- .ui-icon-newwin { background-position: -48px -80px; }
167
- .ui-icon-refresh { background-position: -64px -80px; }
168
- .ui-icon-shuffle { background-position: -80px -80px; }
169
- .ui-icon-transfer-e-w { background-position: -96px -80px; }
170
- .ui-icon-transferthick-e-w { background-position: -112px -80px; }
171
- .ui-icon-folder-collapsed { background-position: 0 -96px; }
172
- .ui-icon-folder-open { background-position: -16px -96px; }
173
- .ui-icon-document { background-position: -32px -96px; }
174
- .ui-icon-document-b { background-position: -48px -96px; }
175
- .ui-icon-note { background-position: -64px -96px; }
176
- .ui-icon-mail-closed { background-position: -80px -96px; }
177
- .ui-icon-mail-open { background-position: -96px -96px; }
178
- .ui-icon-suitcase { background-position: -112px -96px; }
179
- .ui-icon-comment { background-position: -128px -96px; }
180
- .ui-icon-person { background-position: -144px -96px; }
181
- .ui-icon-print { background-position: -160px -96px; }
182
- .ui-icon-trash { background-position: -176px -96px; }
183
- .ui-icon-locked { background-position: -192px -96px; }
184
- .ui-icon-unlocked { background-position: -208px -96px; }
185
- .ui-icon-bookmark { background-position: -224px -96px; }
186
- .ui-icon-tag { background-position: -240px -96px; }
187
- .ui-icon-home { background-position: 0 -112px; }
188
- .ui-icon-flag { background-position: -16px -112px; }
189
- .ui-icon-calendar { background-position: -32px -112px; }
190
- .ui-icon-cart { background-position: -48px -112px; }
191
- .ui-icon-pencil { background-position: -64px -112px; }
192
- .ui-icon-clock { background-position: -80px -112px; }
193
- .ui-icon-disk { background-position: -96px -112px; }
194
- .ui-icon-calculator { background-position: -112px -112px; }
195
- .ui-icon-zoomin { background-position: -128px -112px; }
196
- .ui-icon-zoomout { background-position: -144px -112px; }
197
- .ui-icon-search { background-position: -160px -112px; }
198
- .ui-icon-wrench { background-position: -176px -112px; }
199
- .ui-icon-gear { background-position: -192px -112px; }
200
- .ui-icon-heart { background-position: -208px -112px; }
201
- .ui-icon-star { background-position: -224px -112px; }
202
- .ui-icon-link { background-position: -240px -112px; }
203
- .ui-icon-cancel { background-position: 0 -128px; }
204
- .ui-icon-plus { background-position: -16px -128px; }
205
- .ui-icon-plusthick { background-position: -32px -128px; }
206
- .ui-icon-minus { background-position: -48px -128px; }
207
- .ui-icon-minusthick { background-position: -64px -128px; }
208
- .ui-icon-close { background-position: -80px -128px; }
209
- .ui-icon-closethick { background-position: -96px -128px; }
210
- .ui-icon-key { background-position: -112px -128px; }
211
- .ui-icon-lightbulb { background-position: -128px -128px; }
212
- .ui-icon-scissors { background-position: -144px -128px; }
213
- .ui-icon-clipboard { background-position: -160px -128px; }
214
- .ui-icon-copy { background-position: -176px -128px; }
215
- .ui-icon-contact { background-position: -192px -128px; }
216
- .ui-icon-image { background-position: -208px -128px; }
217
- .ui-icon-video { background-position: -224px -128px; }
218
- .ui-icon-script { background-position: -240px -128px; }
219
- .ui-icon-alert { background-position: 0 -144px; }
220
- .ui-icon-info { background-position: -16px -144px; }
221
- .ui-icon-notice { background-position: -32px -144px; }
222
- .ui-icon-help { background-position: -48px -144px; }
223
- .ui-icon-check { background-position: -64px -144px; }
224
- .ui-icon-bullet { background-position: -80px -144px; }
225
- .ui-icon-radio-off { background-position: -96px -144px; }
226
- .ui-icon-radio-on { background-position: -112px -144px; }
227
- .ui-icon-pin-w { background-position: -128px -144px; }
228
- .ui-icon-pin-s { background-position: -144px -144px; }
229
- .ui-icon-play { background-position: 0 -160px; }
230
- .ui-icon-pause { background-position: -16px -160px; }
231
- .ui-icon-seek-next { background-position: -32px -160px; }
232
- .ui-icon-seek-prev { background-position: -48px -160px; }
233
- .ui-icon-seek-end { background-position: -64px -160px; }
234
- .ui-icon-seek-start { background-position: -80px -160px; }
235
- /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
236
- .ui-icon-seek-first { background-position: -80px -160px; }
237
- .ui-icon-stop { background-position: -96px -160px; }
238
- .ui-icon-eject { background-position: -112px -160px; }
239
- .ui-icon-volume-off { background-position: -128px -160px; }
240
- .ui-icon-volume-on { background-position: -144px -160px; }
241
- .ui-icon-power { background-position: 0 -176px; }
242
- .ui-icon-signal-diag { background-position: -16px -176px; }
243
- .ui-icon-signal { background-position: -32px -176px; }
244
- .ui-icon-battery-0 { background-position: -48px -176px; }
245
- .ui-icon-battery-1 { background-position: -64px -176px; }
246
- .ui-icon-battery-2 { background-position: -80px -176px; }
247
- .ui-icon-battery-3 { background-position: -96px -176px; }
248
- .ui-icon-circle-plus { background-position: 0 -192px; }
249
- .ui-icon-circle-minus { background-position: -16px -192px; }
250
- .ui-icon-circle-close { background-position: -32px -192px; }
251
- .ui-icon-circle-triangle-e { background-position: -48px -192px; }
252
- .ui-icon-circle-triangle-s { background-position: -64px -192px; }
253
- .ui-icon-circle-triangle-w { background-position: -80px -192px; }
254
- .ui-icon-circle-triangle-n { background-position: -96px -192px; }
255
- .ui-icon-circle-arrow-e { background-position: -112px -192px; }
256
- .ui-icon-circle-arrow-s { background-position: -128px -192px; }
257
- .ui-icon-circle-arrow-w { background-position: -144px -192px; }
258
- .ui-icon-circle-arrow-n { background-position: -160px -192px; }
259
- .ui-icon-circle-zoomin { background-position: -176px -192px; }
260
- .ui-icon-circle-zoomout { background-position: -192px -192px; }
261
- .ui-icon-circle-check { background-position: -208px -192px; }
262
- .ui-icon-circlesmall-plus { background-position: 0 -208px; }
263
- .ui-icon-circlesmall-minus { background-position: -16px -208px; }
264
- .ui-icon-circlesmall-close { background-position: -32px -208px; }
265
- .ui-icon-squaresmall-plus { background-position: -48px -208px; }
266
- .ui-icon-squaresmall-minus { background-position: -64px -208px; }
267
- .ui-icon-squaresmall-close { background-position: -80px -208px; }
268
- .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
269
- .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
270
- .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
271
- .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
272
- .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
273
- .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
274
-
275
-
276
- /* Misc visuals
277
- ----------------------------------*/
278
-
279
- /* Corner radius */
280
- .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
281
- .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
282
- .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
283
- .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
284
-
285
- /* Overlays */
286
- .ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
287
- .ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*!
288
- * jQuery UI Accordion 1.8.20
289
- *
290
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
291
- * Dual licensed under the MIT or GPL Version 2 licenses.
292
- * http://jquery.org/license
293
- *
294
- * http://docs.jquery.com/UI/Accordion#theming
295
- */
296
- /* IE/Win - Fix animation bug - #4615 */
297
- .ui-accordion { width: 100%; }
298
- .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
299
- .ui-accordion .ui-accordion-li-fix { display: inline; }
300
- .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
301
- .ui-accordion .ui-accordion-header a { display: block; /*font-size: 1em;*/ padding: .5em .5em .5em .7em; }
302
- .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
303
- .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
304
- .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
305
- .ui-accordion .ui-accordion-content-active { display: block; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/images/collapse.png DELETED
Binary file
trunk/images/cross.png DELETED
Binary file
trunk/images/expand.png DELETED
Binary file
trunk/images/overlay.png DELETED
Binary file
trunk/images/td_back.gif DELETED
Binary file
trunk/images/tick.png DELETED
Binary file
trunk/js/admin-ui-controller.js DELETED
@@ -1,98 +0,0 @@
1
- jQuery(document).ready(function() {
2
-
3
- // You can override the icon names here, in case you prefer your own or have URL issues:
4
- // E.g. "http://mysite.com/cross.png/images/cross.png" would have "cross.png" replaced twice...
5
- // Styling should be done in your custom CSS
6
- var cookie_bar_on_icon = "tick.png";
7
- var cookie_bar_off_icon = "cross.png";
8
-
9
- // jQuery only CSS:
10
- jQuery('HTML').addClass('JS');
11
-
12
- /*
13
- Work in progress... open same tab position between saves
14
- If you are a web developer and fancy beating me to this, please get in touch... :)
15
-
16
- DONE:
17
- if 'cliopentab' GET param is set:
18
- find out value of 'cliopentab'
19
- call accordion with 'cliopentab' value
20
-
21
- TO DO:
22
- on accordion changing the active div:
23
- update form action with &cliopentab= <div number>:
24
- parse form action
25
- if 'cliopentab' GET param is set:
26
- update 'cliopentab' value with <div number>
27
- else:
28
- add &cliopentab= <div number>
29
- */
30
- function getURLParameter(name) {
31
- return decodeURI(
32
- (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
33
- );
34
- }
35
- switch ( getURLParameter("cliopentab") ) {
36
- case "0":
37
- jQuery("#cookielawinfo-accordion").accordion( { autoHeight: false, active: 0 } );
38
- break;
39
- case "2":
40
- jQuery("#cookielawinfo-accordion").accordion( { autoHeight: false, active: 2 } );
41
- break;
42
- case "3":
43
- jQuery("#cookielawinfo-accordion").accordion( { autoHeight: false, active: 3 } );
44
- break;
45
- case "1":
46
- default:
47
- jQuery("#cookielawinfo-accordion").accordion( { autoHeight: false, active: 1 } );
48
- }
49
-
50
-
51
- // Cookie bar is on/off message handling:
52
- var f = jQuery("#header_on_off_alert");
53
- var t = jQuery("#header_on_off_field_warning");
54
- var icon = jQuery("#cli-plugin-status-icon");
55
-
56
- jQuery('#is_on_field_yes').click(function(){
57
- // Cookie bar is on
58
- f.text("Your Cookie Law Info bar is switched on");
59
- t.text("Your Cookie Law Info bar is switched on");
60
- t.removeClass('warning');
61
- swap_icon( cookie_bar_on_icon );
62
- });
63
- jQuery('#is_on_field_no').click(function(){
64
- // Cookie bar is off
65
- f.text("Your Cookie Law Info bar is switched off");
66
- t.text("Your Cookie Law Info bar is switched off");
67
- t.addClass('warning');
68
- swap_icon( cookie_bar_off_icon );
69
- });
70
- function swap_icon(new_icon) {
71
- old_icon = ( new_icon == cookie_bar_off_icon ) ? cookie_bar_on_icon : cookie_bar_off_icon;
72
- var original_src = icon.attr('src');
73
- var new_src = original_src.replace(old_icon, new_icon);
74
- icon.attr('src', new_src);
75
- }
76
-
77
-
78
- // Toggle admin display to show/hide action/URL fields
79
- var rows = jQuery('.cli-plugin-row');
80
- var combobox = jQuery('#cli-plugin-button-1-action');
81
-
82
- toggle_combobox();
83
-
84
- combobox.change(function() {
85
- toggle_combobox();
86
- });
87
-
88
- function toggle_combobox() {
89
- var selected = jQuery("#cli-plugin-button-1-action option:selected").val();
90
- if ( selected == "CONSTANT_OPEN_URL" ) {
91
- rows.show();
92
- }
93
- else {
94
- rows.hide();
95
- }
96
- }
97
-
98
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/js/cookielawinfo.js DELETED
@@ -1,139 +0,0 @@
1
- function cli_show_cookiebar( html, json_payload ) {
2
- var ACCEPT_COOKIE_NAME = 'viewed_cookie_policy';
3
- var ACCEPT_COOKIE_EXPIRE = 365;
4
- var settings = eval('(' + json_payload +')');
5
-
6
- jQuery('body').prepend(html);
7
- var cached_header = jQuery(settings.notify_div_id);
8
- var cached_showagain_tab = jQuery(settings.showagain_div_id);
9
- var btn_accept = jQuery('#cookie_hdr_accept');
10
- var btn_decline = jQuery('#cookie_hdr_decline');
11
- var btn_moreinfo = jQuery('#cookie_hdr_moreinfo');
12
- var btn_settings = jQuery('#cookie_hdr_settings');
13
-
14
- cached_header.hide();
15
- if ( !settings.showagain_tab ) {
16
- cached_showagain_tab.hide();
17
- }
18
-
19
- var hdr_args = {
20
- 'background-color': settings.background,
21
- 'color': settings.text,
22
- 'font-family': settings.font_family
23
- };
24
- var showagain_args = {
25
- 'background-color': settings.background,
26
- 'color': l1hs(settings.text),
27
- 'position': 'fixed',
28
- 'font-family': settings.font_family
29
- };
30
- if ( settings.border_on ) {
31
- var border_to_hide = 'border-' + settings.notify_position_vertical;
32
- showagain_args['border'] = '1px solid ' + l1hs(settings.border);
33
- showagain_args[border_to_hide] = 'none';
34
- }
35
- if ( settings.notify_position_vertical == "top" ) {
36
- if ( settings.border_on ) {
37
- hdr_args['border-bottom'] = '4px solid ' + l1hs(settings.border);
38
- }
39
- showagain_args.top = '0';
40
- }
41
- else if ( settings.notify_position_vertical == "bottom" ) {
42
- if ( settings.border_on ) {
43
- hdr_args['border-top'] = '4px solid ' + l1hs(settings.border);
44
- }
45
- hdr_args['position'] = 'fixed';
46
- hdr_args['bottom'] = '0';
47
- showagain_args.bottom = '0';
48
- }
49
- if ( settings.notify_position_horizontal == "left" ) {
50
- showagain_args.left = settings.showagain_x_position;
51
- }
52
- else if ( settings.notify_position_horizontal == "right" ) {
53
- showagain_args.right = settings.showagain_x_position;
54
- }
55
- cached_header.css( hdr_args );
56
- cached_showagain_tab.css( showagain_args );
57
-
58
- if (jQuery.cookie(ACCEPT_COOKIE_NAME) == null) {
59
- displayHeader();
60
- }
61
- else {
62
- cached_header.hide();
63
- }
64
-
65
- var main_button = jQuery('.cli-plugin-main-button');
66
- main_button.css( 'color', settings.button_1_link_colour );
67
-
68
- if ( settings.button_1_as_button ) {
69
- main_button.css('background-color', settings.button_1_button_colour);
70
-
71
- main_button.hover(function() {
72
- jQuery(this).css('background-color', settings.button_1_button_hover);
73
- },
74
- function() {
75
- jQuery(this).css('background-color', settings.button_1_button_colour);
76
- });
77
- }
78
- var main_link = jQuery('.cli-plugin-main-link');
79
- main_link.css( 'color', settings.button_2_link_colour );
80
-
81
- if ( settings.button_2_as_button ) {
82
- main_link.css('background-color', settings.button_2_button_colour);
83
-
84
- main_link.hover(function() {
85
- jQuery(this).css('background-color', settings.button_2_button_hover);
86
- },
87
- function() {
88
- jQuery(this).css('background-color', settings.button_2_button_colour);
89
- });
90
- }
91
-
92
- // Action event listener for "show header" event:
93
- cached_showagain_tab.click(function() {
94
- cached_showagain_tab.slideUp(settings.animate_speed_hide, function slideShow() {
95
- cached_header.slideDown(settings.animate_speed_show);
96
- });
97
- });
98
-
99
- // Action event listener to capture delete cookies shortcode click. This simply deletes the viewed_cookie_policy cookie. To use:
100
- // <a href='#' id='cookielawinfo-cookie-delete' class='cookie_hdr_btn'>Delete Cookies</a>
101
- jQuery("#cookielawinfo-cookie-delete").click(function() {
102
- jQuery.cookie(ACCEPT_COOKIE_NAME, null, { expires: 365, path: '/' });
103
- return false;
104
- });
105
-
106
- // Action event listener for debug cookies value link. To use:
107
- // <a href='#' id='cookielawinfo-debug-cookie'>Show Cookie Value</a>
108
- jQuery("#cookielawinfo-debug-cookie").click(function() {
109
- alert("Cookie value: " + jQuery.cookie(ACCEPT_COOKIE_NAME));
110
- return false;
111
- });
112
-
113
- // action event listeners to capture "accept/continue" events:
114
- jQuery("#cookie_action_close_header").click(function() {
115
- // Set cookie then hide header:
116
- jQuery.cookie(ACCEPT_COOKIE_NAME, 'yes', { expires: ACCEPT_COOKIE_EXPIRE, path: '/' });
117
-
118
- if (settings.notify_animate_hide) {
119
- cached_header.slideUp(settings.animate_speed_hide);
120
- }
121
- else {
122
- cached_header.hide();
123
- }
124
- cached_showagain_tab.slideDown(settings.animate_speed_show);
125
- return false;
126
- });
127
-
128
- function displayHeader() {
129
- if (settings.notify_animate_show) {
130
- cached_header.slideDown(settings.animate_speed_show);
131
- }
132
- else {
133
- cached_header.show();
134
- }
135
- cached_showagain_tab.hide();
136
- }
137
-
138
- };
139
- function l1hs(str){if(str.charAt(0)=="#"){str=str.substring(1,str.length);}else{return "#"+str;}return l1hs(str);}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/js/jquery-ui-1.8.20.custom.min.js DELETED
@@ -1,13 +0,0 @@
1
- /*! jQuery UI - v1.8.20 - 2012-04-30
2
- * https://github.com/jquery/jquery-ui
3
- * Includes: jquery.ui.core.js
4
- * Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
5
- (function(a,b){function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;return!b.href||!g||f.nodeName.toLowerCase()!=="map"?!1:(h=a("img[usemap=#"+g+"]")[0],!!h&&d(h))}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(a.ui.version)return;a.extend(a.ui,{version:"1.8.20",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;return a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0),/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a.each(["Width","Height"],function(c,d){function h(b,c,d,f){return a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)}),c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){return c===b?g["inner"+d].call(this):this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){return typeof b!="number"?g["outer"+d].call(this,b):this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!d||!a.element[0].parentNode)return;for(var e=0;e<d.length;e++)a.options[d[e][0]]&&d[e][1].apply(a.element,c)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(b,c){if(a(b).css("overflow")==="hidden")return!1;var d=c&&c==="left"?"scrollLeft":"scrollTop",e=!1;return b[d]>0?!0:(b[d]=1,e=b[d]>0,b[d]=0,e)},isOverAxis:function(a,b,c){return a>b&&a<b+c},isOver:function(b,c,d,e,f,g){return a.ui.isOverAxis(b,d,f)&&a.ui.isOverAxis(c,e,g)}})})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30
6
- * https://github.com/jquery/jquery-ui
7
- * Includes: jquery.ui.widget.js
8
- * Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
9
- (function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b){for(var d=0,e;(e=b[d])!=null;d++)try{a(e).triggerHandler("remove")}catch(f){}c(b)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){return c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(b){}}),d.call(a(this),b,c)})}}a.widget=function(b,c,d){var e=b.split(".")[0],f;b=b.split(".")[1],f=e+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][f]=function(c){return!!a.data(c,b)},a[e]=a[e]||{},a[e][b]=function(a,b){arguments.length&&this._createWidget(a,b)};var g=new c;g.options=a.extend(!0,{},g.options),a[e][b].prototype=a.extend(!0,g,{namespace:e,widgetName:b,widgetEventPrefix:a[e][b].prototype.widgetEventPrefix||b,widgetBaseClass:f},d),a.widget.bridge(b,a[e][b])},a.widget.bridge=function(c,d){a.fn[c]=function(e){var f=typeof e=="string",g=Array.prototype.slice.call(arguments,1),h=this;return e=!f&&g.length?a.extend.apply(null,[!0,e].concat(g)):e,f&&e.charAt(0)==="_"?h:(f?this.each(function(){var d=a.data(this,c),f=d&&a.isFunction(d[e])?d[e].apply(d,g):d;if(f!==d&&f!==b)return h=f,!1}):this.each(function(){var b=a.data(this,c);b?b.option(e||{})._init():a.data(this,c,new d(e,this))}),h)}},a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)},a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:!1},_createWidget:function(b,c){a.data(c,this.widgetName,this),this.element=a(c),this.options=a.extend(!0,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}),this._create(),this._trigger("create"),this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName),this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+"ui-state-disabled")},widget:function(){return this.element},option:function(c,d){var e=c;if(arguments.length===0)return a.extend({},this.options);if(typeof c=="string"){if(d===b)return this.options[c];e={},e[c]=d}return this._setOptions(e),this},_setOptions:function(b){var c=this;return a.each(b,function(a,b){c._setOption(a,b)}),this},_setOption:function(a,b){return this.options[a]=b,a==="disabled"&&this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled"+" "+"ui-state-disabled").attr("aria-disabled",b),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);return this.element.trigger(c,d),!(a.isFunction(g)&&g.call(this.element[0],c,d)===!1||c.isDefaultPrevented())}}})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30
10
- * https://github.com/jquery/jquery-ui
11
- * Includes: jquery.ui.accordion.js
12
- * Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
13
- (function(a,b){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:!0,clearStyle:!1,collapsible:!1,event:"click",fillSpace:!1,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:!1,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var b=this,c=b.options;b.running=0,b.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix"),b.headers=b.element.find(c.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){if(c.disabled)return;a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){if(c.disabled)return;a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){if(c.disabled)return;a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){if(c.disabled)return;a(this).removeClass("ui-state-focus")}),b.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");if(c.navigation){var d=b.element.find("a").filter(c.navigationFilter).eq(0);if(d.length){var e=d.closest(".ui-accordion-header");e.length?b.active=e:b.active=d.closest(".ui-accordion-content").prev()}}b.active=b._findActive(b.active||c.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top"),b.active.next().addClass("ui-accordion-content-active"),b._createIcons(),b.resize(),b.element.attr("role","tablist"),b.headers.attr("role","tab").bind("keydown.accordion",function(a){return b._keydown(a)}).next().attr("role","tabpanel"),b.headers.not(b.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide(),b.active.length?b.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):b.headers.eq(0).attr("tabIndex",0),a.browser.safari||b.headers.find("a").attr("tabIndex",-1),c.event&&b.headers.bind(c.event.split(" ").join(".accordion ")+".accordion",function(a){b._clickHandler.call(b,a,this),a.preventDefault()})},_createIcons:function(){var b=this.options;b.icons&&(a("<span></span>").addClass("ui-icon "+b.icons.header).prependTo(this.headers),this.active.children(".ui-icon").toggleClass(b.icons.header).toggleClass(b.icons.headerSelected),this.element.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.children(".ui-icon").remove(),this.element.removeClass("ui-accordion-icons")},destroy:function(){var b=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"),this.headers.find("a").removeAttr("tabIndex"),this._destroyIcons();var c=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");return(b.autoHeight||b.fillHeight)&&c.css("height",""),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b=="active"&&this.activate(c),b=="icons"&&(this._destroyIcons(),c&&this._createIcons()),b=="disabled"&&this.headers.add(this.headers.next())[c?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(b){if(this.options.disabled||b.altKey||b.ctrlKey)return;var c=a.ui.keyCode,d=this.headers.length,e=this.headers.index(b.target),f=!1;switch(b.keyCode){case c.RIGHT:case c.DOWN:f=this.headers[(e+1)%d];break;case c.LEFT:case c.UP:f=this.headers[(e-1+d)%d];break;case c.SPACE:case c.ENTER:this._clickHandler({target:b.target},b.target),b.preventDefault()}return f?(a(b.target).attr("tabIndex",-1),a(f).attr("tabIndex",0),f.focus(),!1):!0},resize:function(){var b=this.options,c;if(b.fillSpace){if(a.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}c=this.element.parent().height(),a.browser.msie&&this.element.parent().css("overflow",d),this.headers.each(function(){c-=a(this).outerHeight(!0)}),this.headers.next().each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+a(this).height()))}).css("overflow","auto")}else b.autoHeight&&(c=0,this.headers.next().each(function(){c=Math.max(c,a(this).height("").height())}).height(c));return this},activate:function(a){this.options.active=a;var b=this._findActive(a)[0];return this._clickHandler({target:b},b),this},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===!1?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,c){var d=this.options;if(d.disabled)return;if(!b.target){if(!d.collapsible)return;this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),this.active.next().addClass("ui-accordion-content-active");var e=this.active.next(),f={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:e},g=this.active=a([]);this._toggle(g,e,f);return}var h=a(b.currentTarget||c),i=h[0]===this.active[0];d.active=d.collapsible&&i?!1:this.headers.index(h);if(this.running||!d.collapsible&&i)return;var j=this.active,g=h.next(),e=this.active.next(),f={options:d,newHeader:i&&d.collapsible?a([]):h,oldHeader:this.active,newContent:i&&d.collapsible?a([]):g,oldContent:e},k=this.headers.index(this.active[0])>this.headers.index(h[0]);this.active=i?a([]):h,this._toggle(g,e,f,i,k),j.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),i||(h.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected),h.next().addClass("ui-accordion-content-active"));return},_toggle:function(b,c,d,e,f){var g=this,h=g.options;g.toShow=b,g.toHide=c,g.data=d;var i=function(){if(!g)return;return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data),g.running=c.size()===0?b.size():c.size();if(h.animated){var j={};h.collapsible&&e?j={toShow:a([]),toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace}:j={toShow:b,toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace},h.proxied||(h.proxied=h.animated),h.proxiedDuration||(h.proxiedDuration=h.duration),h.animated=a.isFunction(h.proxied)?h.proxied(j):h.proxied,h.duration=a.isFunction(h.proxiedDuration)?h.proxiedDuration(j):h.proxiedDuration;var k=a.ui.accordion.animations,l=h.duration,m=h.animated;m&&!k[m]&&!a.easing[m]&&(m="slide"),k[m]||(k[m]=function(a){this.slide(a,{easing:m,duration:l||700})}),k[m](j)}else h.collapsible&&e?b.toggle():(c.hide(),b.show()),i(!0);c.prev().attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).blur(),b.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(this.running)return;this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""}),this.toHide.removeClass("ui-accordion-content-active"),this.toHide.length&&(this.toHide.parent()[0].className=this.toHide.parent()[0].className),this._trigger("change",null,this.data)}}),a.extend(a.ui.accordion,{version:"1.8.20",animations:{slide:function(b,c){b=a.extend({easing:"swing",duration:300},b,c);if(!b.toHide.size()){b.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},b);return}if(!b.toShow.size()){b.toHide.animate({height:"hide",paddingTop:"hide",paddingBottom:"hide"},b);return}var d=b.toShow.css("overflow"),e=0,f={},g={},h=["height","paddingTop","paddingBottom"],i,j=b.toShow;i=j[0].style.width,j.width(j.parent().width()-parseFloat(j.css("paddingLeft"))-parseFloat(j.css("paddingRight"))-(parseFloat(j.css("borderLeftWidth"))||0)-(parseFloat(j.css("borderRightWidth"))||0)),a.each(h,function(c,d){g[d]="hide";var e=(""+a.css(b.toShow[0],d)).match(/^([\d+-.]+)(.*)$/);f[d]={value:e[1],unit:e[2]||"px"}}),b.toShow.css({height:0,overflow:"hidden"}).show(),b.toHide.filter(":hidden").each(b.complete).end().filter(":visible").animate(g,{step:function(a,c){c.prop=="height"&&(e=c.end-c.start===0?0:(c.now-c.start)/(c.end-c.start)),b.toShow[0].style[c.prop]=e*f[c.prop].value+f[c.prop].unit},duration:b.duration,easing:b.easing,complete:function(){b.autoHeight||b.toShow.css("height",""),b.toShow.css({width:i,overflow:d}),b.complete()}})},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1e3:200})}}})})(jQuery);;
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/js/jquery.cookie.js DELETED
@@ -1,47 +0,0 @@
1
- /*!
2
- * jQuery Cookie Plugin
3
- * https://github.com/carhartl/jquery-cookie
4
- *
5
- * Copyright 2011, Klaus Hartl
6
- * Dual licensed under the MIT or GPL Version 2 licenses.
7
- * http://www.opensource.org/licenses/mit-license.php
8
- * http://www.opensource.org/licenses/GPL-2.0
9
- */
10
- (function(jQuery) {
11
- jQuery.cookie = function(key, value, options) {
12
-
13
- // key and at least value given, set cookie...
14
- if (arguments.length > 1 && (!/Object/.test(Object.prototype.toString.call(value)) || value === null || value === undefined)) {
15
- options = jQuery.extend({}, options);
16
-
17
- if (value === null || value === undefined) {
18
- options.expires = -1;
19
- }
20
-
21
- if (typeof options.expires === 'number') {
22
- var days = options.expires, t = options.expires = new Date();
23
- t.setDate(t.getDate() + days);
24
- }
25
-
26
- value = String(value);
27
-
28
- return (document.cookie = [
29
- encodeURIComponent(key), '=', options.raw ? value : encodeURIComponent(value),
30
- options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
31
- options.path ? '; path=' + options.path : '',
32
- options.domain ? '; domain=' + options.domain : '',
33
- options.secure ? '; secure' : ''
34
- ].join(''));
35
- }
36
-
37
- // key and possibly options given, get cookie...
38
- options = value || {};
39
- var decode = options.raw ? function(s) { return s; } : decodeURIComponent;
40
-
41
- var pairs = document.cookie.split('; ');
42
- for (var i = 0, pair; pair = pairs[i] && pairs[i].split('='); i++) {
43
- if (decode(pair[0]) === key) return decode(pair[1] || ''); // IE saves cookies with empty string as "c; ", e.g. without "=" as opposed to EOMB, thus pair[1] may be undefined
44
- }
45
- return null;
46
- };
47
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/php/custom-post-types.php DELETED
@@ -1,167 +0,0 @@
1
- <?php
2
- /*
3
- ===============================================================================
4
-
5
- Copyright 2012 Richard Ashby (email : richard.ashby@mediacreek.com)
6
-
7
- This program is free software; you can redistribute it and/or modify
8
- it under the terms of the GNU General Public License, version 2, as
9
- published by the Free Software Foundation.
10
-
11
- This program is distributed in the hope that it will be useful,
12
- but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- GNU General Public License for more details.
15
-
16
- You should have received a copy of the GNU General Public License
17
- along with this program; if not, write to the Free Software
18
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
-
20
- */
21
-
22
- /** Registers custom post type*/
23
- function cookielawinfo_register_custom_post_type() {
24
- $labels = array(
25
- 'name' => _x('Cookie Law Info', 'post type general name'),
26
- 'singular_name' => _x('Cookie', 'post type singular name'),
27
- 'add_new' => _x('Add New', 'cookie type'),
28
- 'add_new_item' => __('Add New Cookie Type'),
29
- 'edit_item' => __('Edit Cookie Type'),
30
- 'new_item' => __('New Cookie Type'),
31
- 'view_item' => __('View Cookie Type'),
32
- 'search_items' => __('Search Cookies'),
33
- 'not_found' => __('Nothing found'),
34
- 'not_found_in_trash' => __('Nothing found in Trash'),
35
- 'parent_item_colon' => ''
36
- );
37
- $args = array(
38
- 'labels' => $labels,
39
- 'public' => true,
40
- 'publicly_queryable' => false,
41
- 'exclude_from_search' => true,
42
- 'show_ui' => true,
43
- 'query_var' => true,
44
- 'rewrite' => true,
45
- 'capability_type' => 'post',
46
- 'hierarchical' => false,
47
- 'menu_position' => null,
48
- 'supports' => array( 'title','editor' )
49
- );
50
- register_post_type( 'cookielawinfo' , $args );
51
-
52
- // Migrate custom meta:
53
- cookielawinfo_migrate_custom_meta();
54
- }
55
-
56
-
57
- /** Updates custom meta to fix bug in version 1.0.1 */
58
- function cookielawinfo_migrate_custom_meta() {
59
- global $post;
60
- $args = array('post_type' => 'cookielawinfo');
61
- $cookies = new WP_Query( $args );
62
-
63
- if ( !$cookies->have_posts() ) {
64
- return;
65
- }
66
-
67
- while ( $cookies->have_posts() ) : $cookies->the_post();
68
- // Get custom fields:
69
- $custom = get_post_custom( $post->ID );
70
- // Look for old values. If they exist, move them to new values then delete old values:
71
- if ( isset ( $custom["cookie_type"][0] ) ) {
72
- update_post_meta( $post->ID, "_cli_cookie_type", sanitize_text_field( $custom["cookie_type"][0] ) );
73
- delete_post_meta( $post->ID, "cookie_type", $custom["cookie_type"][0] );
74
- }
75
- if ( isset ( $custom["cookie_duration"][0] ) ) {
76
- update_post_meta( $post->ID, "_cli_cookie_duration", sanitize_text_field( $custom["cookie_duration"][0] ) );
77
- delete_post_meta( $post->ID, "cookie_duration", $custom["cookie_duration"][0] );
78
- }
79
- endwhile;
80
- }
81
-
82
-
83
- /**
84
- Add custom meta boxes to Cookie Audit custom post type.
85
- - Cookie Type (e.g. session, permanent)
86
- - Cookie Duration (e.g. 2 hours, days, years, etc)
87
- */
88
- function cookielawinfo_custom_posts_admin_init() {
89
- add_meta_box("_cli_cookie_type", "Cookie Type", "cookielawinfo_cookie_type", "cookielawinfo", "side", "default");
90
- add_meta_box("_cli_cookie_duration", "Cookie Duration", "cookielawinfo_cookie_duration", "cookielawinfo", "side", "default");
91
- }
92
-
93
-
94
- /** Display the custom meta box for cookie_type */
95
- function cookielawinfo_cookie_type() {
96
- global $post;
97
- $custom = get_post_custom( $post->ID );
98
- $cookie_type = ( isset ( $custom["_cli_cookie_type"][0] ) ) ? $custom["_cli_cookie_type"][0] : '';
99
- ?>
100
- <label>Cookie Type:</label>
101
- <input name="_cli_cookie_type" value="<?php echo sanitize_text_field( $cookie_type ); ?>" style="width:95%;" />
102
- <?php
103
- }
104
-
105
-
106
- /** Display the custom meta box for cookie_duration */
107
- function cookielawinfo_cookie_duration() {
108
- global $post;
109
- $custom = get_post_custom( $post->ID );
110
- $cookie_duration = ( isset ( $custom["_cli_cookie_duration"][0] ) ) ? $custom["_cli_cookie_duration"][0] : '';
111
- ?>
112
- <label>Cookie Duration:</label>
113
- <input name="_cli_cookie_duration" value="<?php echo sanitize_text_field( $cookie_duration ); ?>" style="width:95%;" />
114
- <?php
115
- }
116
-
117
-
118
- /** Saves all form data from custom post meta boxes, including saitisation of input */
119
- function cookielawinfo_save_custom_metaboxes() {
120
- global $post;
121
-
122
- if ( isset ( $_POST["_cli_cookie_type"] ) ) {
123
- update_post_meta( $post->ID, "_cli_cookie_type", sanitize_text_field( $_POST["_cli_cookie_type"] ) );
124
- }
125
- if ( isset ( $_POST["_cli_cookie_type"] ) ) {
126
- update_post_meta( $post->ID, "_cli_cookie_duration", sanitize_text_field( $_POST["_cli_cookie_duration"] ) );
127
- }
128
- }
129
-
130
-
131
- /** Apply column names to the custom post type table */
132
- function cookielawinfo_edit_columns( $columns ) {
133
- $columns = array(
134
- "cb" => "<input type=\"checkbox\" />",
135
- "title" => "Cookie Name",
136
- "type" => "Type",
137
- "duration" => "Duration",
138
- "description" => "Description"
139
- );
140
- return $columns;
141
- }
142
-
143
-
144
- /** Add column data to custom post type table columns */
145
- function cookielawinfo_custom_columns( $column ) {
146
- global $post;
147
-
148
- switch ( $column ) {
149
- case "description":
150
- the_excerpt();
151
- break;
152
- case "type":
153
- $custom = get_post_custom();
154
- if ( isset ( $custom["_cli_cookie_type"][0] ) ) {
155
- echo $custom["_cli_cookie_type"][0];
156
- }
157
- break;
158
- case "duration":
159
- $custom = get_post_custom();
160
- if ( isset ( $custom["_cli_cookie_duration"][0] ) ) {
161
- echo $custom["_cli_cookie_duration"][0];
162
- }
163
- break;
164
- }
165
- }
166
-
167
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/php/functions.php DELETED
@@ -1,299 +0,0 @@
1
- <?php
2
- /*
3
- Copyright 2012 Richard Ashby (email : richard.ashby@mediacreek.com)
4
-
5
- This program is free software; you can redistribute it and/or modify
6
- it under the terms of the GNU General Public License, version 2, as
7
- published by the Free Software Foundation.
8
-
9
- This program is distributed in the hope that it will be useful,
10
- but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- GNU General Public License for more details.
13
-
14
- You should have received a copy of the GNU General Public License
15
- along with this program; if not, write to the Free Software
16
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
- */
18
-
19
-
20
- /**
21
- Returns JSON object containing the settings for the main script
22
- REFACTOR / DEBUG: may need to use addslashes( ... ) else breaks JSON
23
- */
24
- function cookielawinfo_get_json_settings() {
25
- $settings = cookielawinfo_get_admin_settings();
26
-
27
- // DEBUG hex:
28
- // preg_match('/^#[a-f0-9]{6}|#[a-f0-9]{3}$/i', $hex)
29
- // DEBUG json_encode - issues across different versions of PHP!
30
- // $str = json_encode( $slim_settings, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP );
31
-
32
- // Slim down JSON objects to the bare bones:
33
- $slim_settings = array(
34
- 'animate_speed_hide' => $settings['animate_speed_hide'],
35
- 'animate_speed_show' => $settings['animate_speed_show'],
36
- 'background' => $settings['background'],
37
- 'border' => $settings['border'],
38
- 'border_on' => $settings['border_on'],
39
- 'button_1_button_colour' => $settings['button_1_button_colour'],
40
- 'button_1_button_hover' => (cookielawinfo_su_hex_shift( $settings['button_1_button_colour'], 'down', 20 )),
41
- 'button_1_link_colour' => $settings['button_1_link_colour'],
42
- 'button_1_as_button' => $settings['button_1_as_button'],
43
- 'button_2_button_colour' => $settings['button_2_button_colour'],
44
- 'button_2_button_hover' => (cookielawinfo_su_hex_shift( $settings['button_2_button_colour'], 'down', 20 )),
45
- 'button_2_link_colour' => $settings['button_2_link_colour'],
46
- 'button_2_as_button' => $settings['button_2_as_button'],
47
- 'font_family' => $settings['font_family'],
48
- 'notify_animate_hide' => $settings['notify_animate_hide'],
49
- 'notify_animate_show' => $settings['notify_animate_show'],
50
- 'notify_div_id' => $settings['notify_div_id'],
51
- 'notify_position_horizontal' => $settings['notify_position_horizontal'],
52
- 'notify_position_vertical' => $settings['notify_position_vertical'],
53
- 'showagain_tab' => $settings['showagain_tab'],
54
- 'showagain_background' => $settings['showagain_background'],
55
- 'showagain_border' => $settings['showagain_border'],
56
- 'showagain_div_id' => $settings['showagain_div_id'],
57
- 'showagain_x_position' => $settings['showagain_x_position'],
58
- 'text' => $settings['text']
59
- );
60
- $str = json_encode( $slim_settings );
61
- /*
62
- DEBUG:
63
- if ( $str == null | $str == '') {
64
- $str = 'error: json is empty';
65
- }
66
- */
67
- return $str;
68
- }
69
-
70
-
71
- /**
72
- Outputs the cookie control script in the footer
73
- N.B. This script MUST be output in the footer.
74
-
75
- This function should be attached to the wp_footer action hook.
76
- */
77
- function cookielawinfo_inject_cli_script() {
78
- $the_options = cookielawinfo_get_admin_settings();
79
-
80
- if ( $the_options['is_on'] == true ) {
81
-
82
- // Process string for JavaScript
83
- // REFACTOR / DEBUG:
84
- // Consider using esc_js( $str ) instead of manually correcting (though is > WP v2.8 only, hence doing manually)
85
-
86
- // $str processes shortcodes:
87
- $str = addslashes ( do_shortcode( stripslashes ( $the_options['notify_message'] ) ) );
88
-
89
- // Remove line breaks (breaks JavaScript if param is split over > 1 lines)
90
- $line_breaks = array("\r\n", "\n", "\r");
91
- $str = str_replace($line_breaks, '<br />', $str);
92
-
93
- // You can construct your own HTML and CSS here if needed.
94
- $notify_html = '<div id="' . cookielawinfo_remove_hash( $the_options["notify_div_id"] ) . '"><span>' . $str . '</span></div>';
95
-
96
- if ( $the_options['showagain_tab'] === true ) {
97
- $notify_html .= '<div id="' . cookielawinfo_remove_hash( $the_options["showagain_div_id"] ) . '"><span id="cookie_hdr_showagain">' . $the_options["showagain_text"] . '</span></div>';
98
- }
99
-
100
- ?>
101
-
102
- <script type="text/javascript">
103
- //<![CDATA[
104
- jQuery(document).ready(function() {
105
- var a = '<?php echo $notify_html; ?>';
106
- var b = '<?php echo cookielawinfo_get_json_settings(); ?>';
107
- cli_show_cookiebar(a,b);
108
-
109
- <?php
110
- // Note to developers:
111
- // Here's a debug routine that you can use in case the cookie bar is giving you trouble.
112
- // Switch CLI_PLUGIN_DEVELOPMENT_MODE to true then call as e.g. http://www.yourwebsite.com/?cli-debug=all
113
- // Options: all | html | json
114
- if ( CLI_PLUGIN_DEVELOPMENT_MODE ) {
115
- ?>
116
- function getURLParameter(name){return decodeURI((RegExp(name+'='+'(.+?)(&|$)').exec(location.search)||[,null])[1]);}var p=eval('('+b+')');var t='';for(prop in p){if (!p.hasOwnProperty(prop)){continue;}t+=prop+" = "+p[prop]+"\n";}switch(getURLParameter("cli-debug")){case "json":alert(t);break;case "html":alert(a);break;case "all":alert(t);alert(a);break;default:}
117
- <?php
118
- }
119
- ?>
120
- });
121
- //]]>
122
- </script>
123
-
124
- <?php
125
- }
126
- }
127
-
128
-
129
- /**
130
- Outputs frontend scripts in the header.
131
- N.B. These scripts MUST be output in the header.
132
-
133
- This function should be attached to the wp_enqueue_script action hook, not wp_head!
134
- Else gets output in footer (incorrect).
135
- */
136
- function cookielawinfo_enqueue_frontend_scripts() {
137
- $the_options = cookielawinfo_get_admin_settings();
138
- if ( $the_options['is_on'] == true ) {
139
- wp_enqueue_script( 'jquery-cookie', CLI_PLUGIN_URL . 'js/jquery.cookie.js', array('jquery') );
140
-
141
- wp_register_style( 'cookielawinfo-style', CLI_PLUGIN_URL . 'css/cli-style.css' );
142
- wp_enqueue_style( 'cookielawinfo-style' );
143
-
144
- // 0.9:
145
- wp_enqueue_script( 'cookie-law-info-script', CLI_PLUGIN_URL . 'js/cookielawinfo.js', array( 'jquery' ) );
146
- }
147
- wp_register_style( 'cookielawinfo-table-style', CLI_PLUGIN_URL . 'css/cli-tables.css' );
148
- wp_enqueue_style( 'cookielawinfo-table-style' );
149
- }
150
-
151
-
152
- /**
153
- * Color shift a hex value by a specific percentage factor
154
- * By http://www.phpkode.com/source/s/shortcodes-ultimate/shortcodes-ultimate/lib/color.php
155
- * Adapted by Richard Ashby; amended error handling to use failovers not messages, so app continues
156
- *
157
- * @param string $supplied_hex Any valid hex value. Short forms e.g. #333 accepted.
158
- * @param string $shift_method How to shift the value e.g( +,up,lighter,>)
159
- * @param integer $percentage Percentage in range of [0-100] to shift provided hex value by
160
- * @return string shifted hex value
161
- * @version 1.0 2008-03-28
162
- */
163
- function cookielawinfo_su_hex_shift( $supplied_hex, $shift_method, $percentage = 50 ) {
164
- $shifted_hex_value = null;
165
- $valid_shift_option = FALSE;
166
- $current_set = 1;
167
- $RGB_values = array( );
168
- $valid_shift_up_args = array( 'up', '+', 'lighter', '>' );
169
- $valid_shift_down_args = array( 'down', '-', 'darker', '<' );
170
- $shift_method = strtolower( trim( $shift_method ) );
171
-
172
- // Check Factor
173
- if ( !is_numeric( $percentage ) || ($percentage = ( int ) $percentage) < 0 || $percentage > 100 ) {
174
- //trigger_error( "Invalid factor", E_USER_ERROR );
175
- return $supplied_hex;
176
- }
177
-
178
- // Check shift method
179
- foreach ( array( $valid_shift_down_args, $valid_shift_up_args ) as $options ) {
180
- foreach ( $options as $method ) {
181
- if ( $method == $shift_method ) {
182
- $valid_shift_option = !$valid_shift_option;
183
- $shift_method = ( $current_set === 1 ) ? '+' : '-';
184
- break 2;
185
- }
186
- }
187
- ++$current_set;
188
- }
189
-
190
- if ( !$valid_shift_option ) {
191
- //trigger_error( "Invalid shift method", E_USER_ERROR );
192
- return $supplied_hex;
193
- }
194
-
195
- // Check Hex string
196
- switch ( strlen( $supplied_hex = ( str_replace( '#', '', trim( $supplied_hex ) ) ) ) ) {
197
- case 3:
198
- if ( preg_match( '/^([0-9a-f])([0-9a-f])([0-9a-f])/i', $supplied_hex ) ) {
199
- $supplied_hex = preg_replace( '/^([0-9a-f])([0-9a-f])([0-9a-f])/i', '\\1\\1\\2\\2\\3\\3', $supplied_hex );
200
- } else {
201
- //trigger_error( "Invalid hex color value", E_USER_ERROR );
202
- return $supplied_hex;
203
- }
204
- break;
205
- case 6:
206
- if ( !preg_match( '/^[0-9a-f]{2}[0-9a-f]{2}[0-9a-f]{2}$/i', $supplied_hex ) ) {
207
- //trigger_error( "Invalid hex color value", E_USER_ERROR );
208
- return $supplied_hex;
209
- }
210
- break;
211
- default:
212
- //trigger_error( "Invalid hex color length", E_USER_ERROR );
213
- return $supplied_hex;
214
- }
215
-
216
- // Start shifting
217
- $RGB_values['R'] = hexdec( $supplied_hex{0} . $supplied_hex{1} );
218
- $RGB_values['G'] = hexdec( $supplied_hex{2} . $supplied_hex{3} );
219
- $RGB_values['B'] = hexdec( $supplied_hex{4} . $supplied_hex{5} );
220
-
221
- foreach ( $RGB_values as $c => $v ) {
222
- switch ( $shift_method ) {
223
- case '-':
224
- $amount = round( ((255 - $v) / 100) * $percentage ) + $v;
225
- break;
226
- case '+':
227
- $amount = $v - round( ($v / 100) * $percentage );
228
- break;
229
- default:
230
- // trigger_error( "Oops. Unexpected shift method", E_USER_ERROR );
231
- return $supplied_hex;
232
- }
233
-
234
- $shifted_hex_value .= $current_value = (
235
- strlen( $decimal_to_hex = dechex( $amount ) ) < 2
236
- ) ? '0' . $decimal_to_hex : $decimal_to_hex;
237
- }
238
-
239
- return '#' . $shifted_hex_value;
240
- }
241
-
242
-
243
- /** Removes leading # characters from a string */
244
- function cookielawinfo_remove_hash( $str ) {
245
- if ( $str{0} == "#" ) {
246
- $str = substr( $str, 1, strlen($str) );
247
- }
248
- else {
249
- return $str;
250
- }
251
- return cookielawinfo_remove_hash( $str );
252
- }
253
-
254
-
255
- /**
256
- Explodes hex colour from 3 to 6 characters.
257
- If string is not 3 chars on input, will return original string
258
- */
259
- function cookielawinfo_make_hex_colour_6_chars( $hex ) {
260
- $str = cookielawinfo_remove_hash( $hex );
261
- if ( strlen( $str ) == 3 ) {
262
- $hex = '#' . $str[0] . $str[0] . $str[1] . $str[1] . $str[2] . $str[2];
263
- }
264
- return $hex;
265
- }
266
-
267
-
268
- /** Debug assistance: JS alertbox for any passed value of $gubbins */
269
- function cookielawinfo_debug_alertbox( $gubbins ) {
270
- if ( ! CLI_PLUGIN_DEVELOPMENT_MODE )
271
- return;
272
- echo '<script type="text/javascript"> alert("' . $gubbins .'")</script>';
273
- }
274
-
275
-
276
- /** Echoes out a debug string of your choice (but only if in development mode) */
277
- function cookielawinfo_debug_echo( $gubbins ) {
278
- if ( ! CLI_PLUGIN_DEVELOPMENT_MODE )
279
- return;
280
- echo '<br />START OF DEBUG STRING>>>' . $gubbins . '<<< END OF DEBUG STRING<br />';
281
- }
282
-
283
-
284
- /** Debug: output saved settings to footer of admin panel */
285
- function cookielawinfo_debug_admin_settings( $break ) {
286
- if ( ! CLI_PLUGIN_DEVELOPMENT_MODE )
287
- return;
288
- $settings = cookielawinfo_get_admin_settings();
289
- $ret = '<p>Settings: ';
290
- foreach ( $settings as $key => $option ) {
291
- $ret .= $key . ' = ' . $option . '; ';
292
- if ( $break )
293
- $ret .= '<br />';
294
- }
295
- $ret .= '</p>';
296
- return $ret;
297
- }
298
-
299
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/php/shortcodes.php DELETED
@@ -1,209 +0,0 @@
1
- <?php
2
- /*
3
- ===============================================================================
4
-
5
- Copyright 2012 Richard Ashby (email : richard.ashby@mediacreek.com)
6
-
7
- This program is free software; you can redistribute it and/or modify
8
- it under the terms of the GNU General Public License, version 2, as
9
- published by the Free Software Foundation.
10
-
11
- This program is distributed in the hope that it will be useful,
12
- but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- GNU General Public License for more details.
15
-
16
- You should have received a copy of the GNU General Public License
17
- along with this program; if not, write to the Free Software
18
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
-
20
- */
21
-
22
-
23
- /**
24
- A shortcode that outputs a link which will delete the cookie used to track
25
- whether or not a vistor has dismissed the header message (i.e. so it doesn't
26
- keep on showing on all pages)
27
-
28
- Usage: [delete_cookies]
29
- [delete_cookies linktext="delete cookies"]
30
-
31
- N.B. This shortcut does not block cookies, or delete any other cookies!
32
- */
33
- function cookielawinfo_delete_cookies_shortcode( $atts ) {
34
- extract( shortcode_atts( array(
35
- 'text' => 'Delete Cookies'
36
- ), $atts ) );
37
- return "<a href='' id='cookielawinfo-cookie-delete'>{$text}</a>";
38
- }
39
-
40
-
41
- /**
42
- A nice shortcode to output a table of cookies you have saved, output in ascending
43
- alphabetical order. If there are no cookie records found a single empty row is shown.
44
- You can customise the 'not shown' message (see commented code below)
45
-
46
- N.B. This only shows the information you entered on the "cookie" admin page, it
47
- does not necessarily mean you comply with the cookie law. It is up to you, or
48
- the website owner, to make sure you have conducted an appropriate cookie audit
49
- and are informing website visitors of the actual cookies that are being stored.
50
-
51
- Usage: [cookie_audit]
52
- [cookie_audit style="winter"]
53
- [cookie_audit not_shown_message="No records found"]
54
- [cookie_audit style="winter" not_shown_message="Not found"]
55
-
56
- Styles included: simple, classic, modern, rounded, elegant, winter.
57
- Default style applied: classic.
58
-
59
- Additional styles: You can customise the CSS by editing the CSS file itself,
60
- included with plugin.
61
- */
62
- function cookielawinfo_table_shortcode( $atts ) {
63
- extract( shortcode_atts( array(
64
- 'style' => 'classic',
65
- 'not_shown_message' => ''
66
- ), $atts ) );
67
-
68
- global $post;
69
-
70
- $args = array(
71
- 'post_type' => 'cookielawinfo',
72
- 'posts_per_page' => 10,
73
- 'order' => 'ASC',
74
- 'orderby' => 'title'
75
- );
76
- $cookies = new WP_Query( $args );
77
-
78
- $ret = '<table class="cookielawinfo-' . $style . '"><thead>';
79
- $ret .= '<th class="cookielawinfo-column-1">Cookie</th>';
80
- $ret .= '<th class="cookielawinfo-column-2">Type</th>';
81
- $ret .= '<th class="cookielawinfo-column-3">Duration</th>';
82
- $ret .= '<th class="cookielawinfo-column-4">Description</th>';
83
- $ret .= '</thead><tbody>';
84
-
85
- if ( !$cookies->have_posts() ) {
86
- $ret .= '<tr class="cookielawinfo-row"><td colspan="2" class="cookielawinfo-column-empty">' . $not_shown_message . '</td></tr>';
87
- }
88
-
89
- while ( $cookies->have_posts() ) : $cookies->the_post();
90
- // Get custom fields:
91
- $custom = get_post_custom( $post->ID );
92
- $cookie_type = ( isset ( $custom["_cli_cookie_type"][0] ) ) ? $custom["_cli_cookie_type"][0] : '';
93
- $cookie_duration = ( isset ( $custom["_cli_cookie_duration"][0] ) ) ? $custom["_cli_cookie_duration"][0] : '';
94
- // Output HTML:
95
- $ret .= '<tr class="cookielawinfo-row"><td class="cookielawinfo-column-1">' . get_the_title() . '</td>';
96
- $ret .= '<td class="cookielawinfo-column-2">' . $cookie_type .'</td>';
97
- $ret .= '<td class="cookielawinfo-column-3">' . $cookie_duration .'</td>';
98
- $ret .= '<td class="cookielawinfo-column-4">' . get_the_content() .'</td>';
99
- $ret .= '</tr>';
100
- endwhile;
101
- $ret .= '</tbody></table>';
102
- return $ret;
103
- }
104
-
105
-
106
- /** Returns HTML for a standard (green, medium sized) 'Accept' button */
107
- function cookielawinfo_shortcode_accept_button( $atts ) {
108
- extract( shortcode_atts( array(
109
- 'colour' => 'green'
110
- ), $atts ) );
111
- return '<a href="#" id="cookie_action_close_header" class="medium cli-plugin-button ' . $colour . '">Accept</a>';
112
- }
113
-
114
-
115
- /** Returns HTML for a generic button */
116
- function cookielawinfo_shortcode_more_link( $atts ) {
117
- return cookielawinfo_shortcode_button_DRY_code( 'button_2' );
118
- }
119
-
120
-
121
- /** Returns HTML for a generic button */
122
- function cookielawinfo_shortcode_main_button( $atts ) {
123
- $defaults = array(
124
- 'button_1_text' => 'Accept',
125
- 'button_1_url' => '#',
126
- 'button_1_action' => '#cookie_action_close_header',
127
-
128
- 'button_1_link_colour' => '#fff',
129
- 'button_1_new_win' => false,
130
- 'button_1_as_button' => true,
131
- 'button_1_button_colour' => '0f0',
132
- 'button_1_button_size' => 'medium'
133
- );
134
- $settings = wp_parse_args( cookielawinfo_get_admin_settings(), $defaults );
135
-
136
- $class = '';
137
- if ( $settings['button_1_as_button'] ) {
138
- $class .= ' class="' . $settings['button_1_button_size'] . ' cli-plugin-button cli-plugin-main-button"';
139
- }
140
- else {
141
- $class .= ' class="cli-plugin-main-button" ' ;
142
- }
143
-
144
- // If is action not URL then don't use URL!
145
- $url = ( $settings['button_1_action'] == "CONSTANT_OPEN_URL" ) ? $settings['button_1_url'] : "#";
146
-
147
- $link_tag = '<a href="' . $url . '" id="' . cookielawinfo_remove_hash ( $settings['button_1_action'] ) . '" ';
148
- $link_tag .= ( $settings['button_1_new_win'] ) ? 'target="_new" ' : '' ;
149
- $link_tag .= $class . ' >' . $settings['button_1_text'] . '</a>';
150
-
151
- return $link_tag;
152
- }
153
-
154
-
155
- /** Returns HTML for a generic button */
156
- function cookielawinfo_shortcode_button_DRY_code( $name ) {
157
- $arr = cookielawinfo_get_admin_settings();
158
- $settings = array();
159
- $class_name = '';
160
-
161
- if ( $name == "button_1" ) {
162
- $settings = array(
163
- 'button_x_text' => $arr['button_1_text'],
164
- 'button_x_url' => $arr['button_1_url'],
165
- 'button_x_action' => $arr['button_1_action'],
166
-
167
- 'button_x_link_colour' => $arr['button_1_link_colour'],
168
- 'button_x_new_win' => $arr['button_1_new_win'],
169
- 'button_x_as_button' => $arr['button_1_as_button'],
170
- 'button_x_button_colour' => $arr['button_1_button_colour'],
171
- 'button_x_button_size' => $arr['button_1_button_size']
172
- );
173
- $class_name = 'cli-plugin-main-button';
174
- }
175
- elseif ( $name == "button_2" ) {
176
- $settings = array(
177
- 'button_x_text' => $arr['button_2_text'],
178
- 'button_x_url' => $arr['button_2_url'],
179
- 'button_x_action' => $arr['button_2_action'],
180
-
181
- 'button_x_link_colour' => $arr['button_2_link_colour'],
182
- 'button_x_new_win' => $arr['button_2_new_win'],
183
- 'button_x_as_button' => $arr['button_2_as_button'],
184
- 'button_x_button_colour' => $arr['button_2_button_colour'],
185
- 'button_x_button_size' => $arr['button_2_button_size']
186
- );
187
- $class_name = 'cli-plugin-main-link';
188
- }
189
-
190
- $class = '';
191
- if ( $settings['button_x_as_button'] ) {
192
- $class .= ' class="' . $settings['button_x_button_size'] . ' cli-plugin-button ' . $class_name . '"';
193
- }
194
- else {
195
- $class .= ' class="' . $class_name . '" ' ;
196
- }
197
-
198
- // If is action not URL then don't use URL!
199
- $url = ( $settings['button_x_action'] == "CONSTANT_OPEN_URL" ) ? $settings['button_x_url'] : "#";
200
-
201
- $link_tag = '<a href="' . $url . '" id="' . cookielawinfo_remove_hash ( $settings['button_x_action'] ) . '" ';
202
- $link_tag .= ( $settings['button_x_new_win'] ) ? 'target="_new" ' : '' ;
203
- $link_tag .= $class . ' >' . $settings['button_x_text'] . '</a>';
204
-
205
- return $link_tag;
206
- }
207
-
208
-
209
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/readme.txt DELETED
@@ -1,187 +0,0 @@
1
- === Plugin Name ===
2
- Contributors: richardashby
3
- Donate link: http://mobro.co/richashby
4
- Tags: eu cookie law, cookie law, eu privacy directive, privacy directive, cookies, privacy, compliance
5
- Requires at least: 3.3.1
6
- Tested up to: 3.4
7
- Stable tag: 1.0.3
8
- License: GPLv2
9
- License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
-
11
- A simple way to show how your website complies with the EU Cookie Law. Implied Consent. Style it to match your own website.
12
-
13
- == Description ==
14
-
15
- This plugin uses implied consent, adding a subtle banner to your website either in the header or footer so you can show your compliance status regarding the new EU Cookie Law.
16
-
17
-
18
- You can fully customise the style so it fits in with your existing website- change the colours, fonts, styles, the position on the page and even how it behaves when you click "accept".
19
-
20
-
21
- It also has a Cookie Audit module so you can easily show what cookies your site uses and display them neatly in a table on your Privacy & Cookies Policy page.
22
-
23
-
24
- Inline with official ICO guidelines and current industry best practice, this plugin uses 'implied consent' to aid you in showing your compliance status. This is a deliberate design choice that does not proactively block cookies: it doesn't make your visitors take action before they can use your website, and will not interfere with blog comments and [Google] Analytics. This approach is aimed at reducing website visitor dropout and maintaining your vital analytics data.
25
-
26
-
27
- [Read the ICO's guidelines on implied consent](http://www.ico.gov.uk/news/blog/2012/updated-ico-advice-guidance-e-privacy-directive-eu-cookie-law.aspx "Read the ICO's guidelines on implied consent")
28
-
29
- Note: the EU Cookie Law is officially called the 'EU ePrivacy Directive'.
30
-
31
- For a demo, [check out the EU Cookie Law website](http://www.cookielawinfo.com/ "Demo the EU Cookie Law plugin"), including the table of cookies on the Privacy Policy page.
32
-
33
-
34
- Features:
35
-
36
- * Fully customisable to look just like your own website's style: customise the colours, styles and fonts
37
- * Put the cookie bar in either the header or the footer
38
- * (Optional) cookie bar can be permanently dismissed or accessible through a "show again" tab
39
- * (Optional) "show again" tab is fully customisable including position shown on page and styles
40
- * "Cookie Audit" shortcode to construct a nicely-styled 'Privacy & Cookie Policy'
41
-
42
-
43
- [Read more about the EU Cookie Law](http://www.cookielawinfo.com/ "More information about the EU Cookie Law")
44
-
45
-
46
- == Installation ==
47
-
48
- This section describes how to install the plugin and get it working.
49
-
50
- 1. Upload the `cookie-law-info` folder to the `/wp-content/plugins/` directory
51
- 2. Activate the plugin through the 'Plugins' menu in WordPress
52
- 3. Go to "Cookie Law Info / Cookie Law Settings" to configure the banner with your own text, colours and styles
53
-
54
- To set up your Privacy & Cookie Policy Page:
55
-
56
- 1. Add descriptions of the cookies your site uses. Go to "Cookie Law Info / Add New".
57
- 2. Add a new page called e.g. Privacy and Cookie Policy
58
- 3. Add the [cookie_audit] shortcode to your Privacy & Cookie Policy Page
59
-
60
- Cookie table shortcode usage:
61
-
62
- [cookie_audit]
63
- [cookie_audit style="winter"]
64
- [cookie_audit not_shown_message="No records found"]
65
- [cookie_audit style="winter" not_shown_message="Not found"]
66
-
67
- Parameters:
68
-
69
- style (optional) - choose one of several table styles included with the plugin. Styles included: simple, classic, modern, rounded, elegant, winter (styles are cAsE sensitive). Default style applied: classic.
70
- not_shown_message (optional) - if no cookie records are found, display this text. Default is blank (i.e. no message shown).
71
-
72
-
73
- Delete header cookie usage:
74
-
75
- [delete_cookies]
76
- [delete_cookies linktext="delete cookies"]
77
-
78
- Parameters:
79
-
80
- linktext (optional) - the text shown in the link. Default is "Delete Cookies".
81
-
82
-
83
- == Frequently Asked Questions ==
84
-
85
- = What is the EU Cookie Law? =
86
- More correctly, this is called the 'EU e-Privacy Directive'. Popular media refers to it as the 'EU Cookie Law'.
87
- Under new EU privacy regulations, websites must make it clear to visitors what information about them is being stored. This specifically includes cookies. Even if cookies do not store information identifying an individual, you must still provide your visitor with information on what is being stored, by whom, what for, and so on.
88
-
89
- Certain cookies are exempt from this- those deemed to be "strictly necessary" (e.g. WordPress stores session cookies for authentication, without these it wouldn't work) however cookies stored by analytics software like Google Analytics do not fall into this category.
90
- See www.cookielawinfo.com for more information.
91
-
92
- = What does this plugin do? =
93
- This plugin will:
94
-
95
- 1. Add a banner to the top of all pages on your website, notifying the visitor that you have a clearly defined privacy and cookie policy.
96
- 2. Allow you to record which cookies your site uses, and:
97
- 3. Neatly display a list of these cookies (via a shortcode). You can put this list on your Privacy & Cookie Policy page, for example.
98
-
99
- = Does this plugin block all cookies? =
100
- No, and neither does any other WordPress plugin - be aware that despite what you may believe, it is not currently technically possible to completely block all cookies on your WordPress website without first updating all plugins that use cookies in some way. That is beyond the scope of any single plugin.
101
- A more realistic approach for WordPress website owners is to use what is called "implied consent". This should not be a message buried on your website rather something more prominent that is clear to your visitors. This plugin can be used to highlight your compliance status and use of cookies in this way.
102
-
103
-
104
- = I'm not a UK/EU citizen, how can this law apply to me? =
105
- If you have a significant proportion of visitors from the EU then this law also applies to you.
106
- See www.cookielawinfo.com for more information.
107
-
108
- = My website is not hosted in the UK/EU, am I exempt? =
109
- No. The law is about protecting the privacy of EU citizens, so if your website has a significant proportion of visitors from the EU then this law also applies to you.
110
- See www.cookielawinfo.com for more information.
111
-
112
- = Do visitors now have to accept/refuse cookies in order to use websites? =
113
- In short, no, although there is a great deal of ambiguity and misinformation around this law. What the law really gets at is privacy, not just cookies. The UK government, for example, plan on using a version of what is called "implied consent" on their own websites, which is a technique similar to what this plugin does.
114
-
115
- Online Marketing experts Econsultancy provide their perspective on this interpretation. This plugin follows the same approach.
116
-
117
- Further reading:
118
-
119
- 1. [UK Cabinet Office approach](http://digital.cabinetoffice.gov.uk/2012/03/19/its-not-about-cookies-its-about-privacy/ "UK Government approach to the EU Cookie Law")
120
- 2. [Econsultancy's solution](http://econsultancy.com/us/blog/9453-econsultancy-s-solution-to-eu-e-privacy-directive-compliance/ "Econsultancy's solution")
121
-
122
- = Does this plugin stop cookies from being stored? =
123
- No. Quite intentionally, this plugin will not do that. We have no way of knowing what plugins you use or how they work, so blocking/deleting cookies on a WordPress website/blog would possibly/probably break your site. Larger websites with huge budgets may well invest in such technology, but this plugin aims to help you provide a certain level of compliance without taking drastic action. If you do want blocking/deleting cookie functionality then (for now *) this is not the right plugin for you.
124
-
125
- (*) Depending upon demand, this feature might be included in a future release.
126
-
127
- = Does this plugin guarantee that I comply with this law? =
128
- No.
129
- As a generic plugin there's no way we can know anything about your specific circumstances. It can be used as part of an overall plan of action to comply, but just installing it and doing nothing more does nothing to help you. In all cases, you need to assess your own website's use of cookies and decide an appropriate course of action. If you are looking for specialist legal advice relating to your website you should always consult a lawyer.
130
- See www.cookielawinfo.com for more information on what is required.
131
-
132
- = The cookie law doesn't make much sense. How can we stop it? =
133
- Many people agree with you. However it is here, it is law, and according to the Information Commissioner's Office (AKA 'the ICO') it will be enforced. We think it's best to take action to comply as well as petition. However there's no point just ignoring it, it is already here.
134
-
135
- = How do I comply with the EU e-Privacy Directive (AKA 'the EU Cookie Law')? =
136
- There are various interpretations of the law within the industry, and as such there is no simple answer. But the main way to ensure you are not penalised is to make some attempt at complying- reviewing your cookie use then using a plugin like this one is a good first step.
137
- See www.cookielawinfo.com for more information.
138
-
139
- = The cookie header isn't displaying =
140
- First check you have installed the plugin and have activated it in the plugins panel.
141
- To check if it is switched on or not, go to 'Settings / Cookie Law Info' and then enable the header by setting 'Display cookie bar?' to 'yes'.
142
-
143
- = It would be great if your plugin also did XYZ =
144
- Please email me and I'll consider adding that feature. It would be great to hear suggestions on how to improve it.
145
-
146
- = The header doesn't work on my browser =
147
- Please report a bug on the support forum. Be sure to include the following information:
148
-
149
- * WordPress version e.g. 3.3.2 (found in bottom right hand corner of dashboard)
150
- * Browser name and version e.g. FireFox 4.1
151
- * Describe the problem
152
-
153
- The more information you give, the quicker I can respond.
154
-
155
- == Screenshots ==
156
-
157
- 1. Header (with default styles)
158
- 2. Admin panel
159
- 3. Admin panel - styling the form with colour pickers
160
- 4. Header (with custom styles)
161
-
162
- == Changelog ==
163
-
164
- = 0.8.3 =
165
- * First public release.
166
-
167
- = 0.9 =
168
- * Improved design & appearance
169
- * Cookie Law Info bar can be shown in header or footer
170
- * Customise fonts
171
- * New animations on page load / close header
172
- * Option to switch off "show again tab" - or position it anywhere horizontally in the header or footer. Additionally the styling has been improved and you are now able to customise the message.
173
- * New button styles: better styling and effects, greater control
174
- * Customise your message using HTML and 5 shortcodes with quick-start default options
175
- * "Cookie Audit" module - document the cookies your site uses then display them in your privacy policy via a shortcode
176
- * Enhanced dashboard
177
- * Enhanced help section
178
- * Refactored codebase, improved jQuery performance
179
- * Bugs fixed: no more slashes in Message Box
180
-
181
- = 1.0.3 =
182
- * Fixed bug where JavaScript generated an http 404 error.
183
-
184
- == Upgrade Notice ==
185
-
186
- = 0.9 =
187
- Major upgrade with several new features including show in footer, custom fonts and a new shortcode for Privacy & Cookie policy page.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/screenshot-1.png DELETED
Binary file
trunk/screenshot-2.png DELETED
Binary file
trunk/screenshot-3.png DELETED
Binary file
trunk/screenshot-4.png DELETED
Binary file
trunk/screenshot-5.png DELETED
Binary file