Kirki - Version 0.8.0

Version Description

=

March 30, 2014, dev time: 32 hours

  • Improvement: OOP redesign (props @vpratfr)
  • New: Added Palette control
  • New: Added Editor control (WYSIWYG - uses TinyMCE)
  • New: Added Custom control (free html)
  • New: Added a Kirki_Colourlovers class to use palettes from the colourlovers API
  • New: Added a composer file (props @vpratfr)
  • Fix: Wrong settings IDs
  • Fix: Color calculation on RGBA functions were off
  • Tweak: Restructuring the plugin (props @vpratfr)
  • New: added a functional kirki_get_option() function
  • Tweak: Simplified configuration options.
  • New: Turn Kirki into a singleton and a facade (props @vpratfr)
  • Tweak: Completely re-written the customizer styles
  • New: Using SASS for customizer styles
  • Tweak: Deprecating the group_title control in favor of the new custom control
  • Tweak: Changed the CSS for checkboxes

=

Download this release

Release Info

Developer aristath
Plugin Icon 128x128 Kirki
Version 0.8.0
Comparing to
See all releases

Code changes from version 0.7.1 to 0.8.0

Files changed (67) hide show
  1. assets/css/.sass-cache/c476fc92c5464e1edb465b10e5d2773148db0187/customizer.scssc +0 -0
  2. assets/css/customizer.css +308 -259
  3. assets/css/customizer.scss +406 -0
  4. assets/css/hint.css +0 -293
  5. assets/css/jquery-ui-1.10.0.custom.css +0 -1485
  6. assets/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  7. assets/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  8. assets/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  9. assets/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  10. assets/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  11. assets/images/ui-bg_glass_75_ffffff_1x400.png +0 -0
  12. assets/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  13. assets/images/ui-bg_inset-soft_95_fef1ec_1x100.png +0 -0
  14. assets/images/ui-icons_222222_256x240.png +0 -0
  15. assets/images/ui-icons_2e83ff_256x240.png +0 -0
  16. assets/images/ui-icons_454545_256x240.png +0 -0
  17. assets/images/ui-icons_888888_256x240.png +0 -0
  18. assets/images/ui-icons_cd0a0a_256x240.png +0 -0
  19. assets/images/ui-icons_f6cf3b_256x240.png +0 -0
  20. assets/js/customizer.js +57 -0
  21. assets/xml/colourlovers-top.xml +2501 -0
  22. composer.json +22 -0
  23. config.codekit +928 -0
  24. includes/Config.php +77 -0
  25. includes/{class-kirki-controls.php → Control.php} +99 -74
  26. includes/Controls.php +68 -0
  27. includes/Controls/CustomControl.php +23 -0
  28. includes/Controls/EditorControl.php +28 -0
  29. includes/{controls/class-kirki-customize-multicheck-control.php → Controls/MultiCheckControl.php} +4 -3
  30. includes/Controls/NumberControl.php +25 -0
  31. includes/Controls/PaletteControl.php +46 -0
  32. includes/{controls/class-kirki-customize-radio-buttonset-control.php → Controls/RadioButtonSetControl.php} +3 -1
  33. includes/{controls/class-kirki-customize-radio-image-control.php → Controls/RadioImageControl.php} +3 -1
  34. includes/{controls/class-kirki-customize-slider-control.php → Controls/SliderControl.php} +3 -1
  35. includes/{controls/class-kirki-customize-sortable-control.php → Controls/SortableControl.php} +3 -3
  36. includes/{controls/class-kirki-customize-switch-control.php → Controls/SwitchControl.php} +6 -3
  37. includes/{controls/class-kirki-customize-toggle-control.php → Controls/ToggleControl.php} +3 -1
  38. includes/{class-kirki-fonts.php → Fonts/FontRegistry.php} +91 -114
  39. includes/Helpers/deprecated.php +79 -0
  40. includes/Helpers/helpers.php +107 -0
  41. includes/Helpers/libraries/class-kirki-color.php +465 -0
  42. includes/Helpers/libraries/class-kirki-colourlovers.php +188 -0
  43. includes/Helpers/sanitize.php +121 -0
  44. includes/Kirki.php +135 -0
  45. includes/Scripts/Customizer/Branding.php +37 -0
  46. includes/Scripts/Customizer/Dependencies.php +31 -0
  47. includes/Scripts/Customizer/PostMessage.php +74 -0
  48. includes/Scripts/Customizer/Required.php +130 -0
  49. includes/Scripts/Customizer/Tooltips.php +50 -0
  50. includes/Scripts/EnqueueScript.php +22 -0
  51. includes/{class-kirki-fonts-script.php → Scripts/Frontend/GoogleFonts.php} +12 -21
  52. includes/Scripts/ScriptRegistry.php +25 -0
  53. includes/Setting.php +193 -0
  54. includes/Styles.php +16 -0
  55. includes/Styles/Customizer.php +94 -0
  56. includes/{class-kirki-style.php → Styles/Frontend.php} +93 -66
  57. includes/class-kirki-color.php +0 -121
  58. includes/class-kirki-scripts.php +0 -393
  59. includes/class-kirki-settings.php +0 -245
  60. includes/controls/class-kirki-customize-group-title-control.php +0 -19
  61. includes/controls/class-kirki-customize-number-control.php +0 -23
  62. includes/deprecated.php +0 -21
  63. includes/required.php +0 -57
  64. kirki.php +29 -215
  65. languages/kirki-en_US.mo +0 -0
  66. languages/kirki-en_US.po +185 -0
  67. readme.txt +49 -6
assets/css/.sass-cache/c476fc92c5464e1edb465b10e5d2773148db0187/customizer.scssc ADDED
Binary file
assets/css/customizer.css CHANGED
@@ -1,277 +1,326 @@
1
- li.customize-control.customize-control-slider input[type=text] {
2
- width: 20%;
3
- float: left;
4
- text-align: center;
5
- }
6
-
7
- li.customize-control.customize-control-slider .ss-slider {
8
- width: 70%;
9
- margin-left: 25%;
10
- margin-top: 12px;
11
- }
12
- .wp-core-ui .button.tooltip {
13
- margin-top: 5px;
14
- color: #fff;
15
- border: 0px;
16
- border-radius: 50%;
17
- width: 20px;
18
- height: 20px;
19
- text-align: center;
20
- padding: 0;
21
- line-height: 20px;
22
- font-weight: bold;
23
- -webkit-box-shadow: none;
24
- box-shadow: none;
25
- float: right;
26
- overflow: visible !important;
27
- }
28
-
29
- .customize-control-radio label {
30
- line-height: 22px;
31
- padding: 5px 8px;
32
- }
33
-
34
- .image.ui-buttonset label.ui-button {
35
- padding: 2px;
36
- line-height: 0;
37
- border-radius: 0;
38
- margin-right: 0;
39
- background: #999;
40
- border: 0;
41
- }
42
-
43
- li .image.ui-buttonset label.ui-button {
44
- margin-bottom: 10px;
45
- margin-right: 15px;
46
- }
47
 
48
- div.kirki-customizer {
49
- height: 80px;
50
- }
51
-
52
- .wp-full-overlay.expanded {
53
- margin-left: 330px;
54
- }
55
- .wp-full-overlay-sidebar {
56
- width: 330px;
57
- }
58
-
59
- .wp-core-ui .button-primary {
60
- border: 0px;
61
- }
62
-
63
- .wp-core-ui .button-primary.focus,
64
- .wp-core-ui .button-primary.hover,
65
- .wp-core-ui .button-primary:focus,
66
- .wp-core-ui .button-primary:hover {
67
- border: 0px;
68
- }
69
-
70
- .wp-core-ui .button-primary-disabled,
71
- .wp-core-ui .button-primary.disabled,
72
- .wp-core-ui .button-primary:disabled,
73
- .wp-core-ui .button-primary[disabled] {
74
- border: 0px !important;
75
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
 
77
  li.customize-control {
78
- margin: 5px 0;
79
- }
 
 
 
 
 
 
 
 
 
 
80
 
81
- .wp-full-overlay-sidebar .wp-full-overlay-header,
82
- #customize-info .accordion-section-title,
83
- #customize-theme-controls .control-section:last-of-type .accordion-section-title,
84
- #customize-theme-controls .control-section:last-of-type.open,
85
- div.kirki-customizer {
86
- border-bottom: 1px solid rgba( 255, 255, 255, 0.2 );
87
- }
88
-
89
- .hide {
90
- display: none;
91
- }
92
 
93
- li.customize-control.customize-control-group_title {
94
- background: #f7f7f7;
95
- margin: 20px -20px;
96
- padding: 5px 20px 0;
97
- border-bottom: 1px solid #dedede;
98
- border-top: 1px solid #dedede;
99
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
 
101
- a.hint--left:after {
102
- height: auto;
103
- margin-bottom: -14px;
104
- width: 170px;
105
- max-width: 170px;
106
- display: block;
107
- white-space: normal;
108
- text-align: right;
109
  position: relative;
110
- top: -22px;
111
- left: -190px;
112
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
113
 
114
- ul.ui-sortable li.kirki-sortable-item {
115
- padding: 3px;
116
- }
 
 
 
 
 
 
 
 
117
 
118
- ul.ui-sortable li.kirki-sortable-item .dashicons-menu {
 
 
 
 
 
 
 
 
 
 
 
 
 
119
  float: right;
120
- }
121
-
122
- ul.ui-sortable li.kirki-sortable-item .visibility {
123
- padding-right: 10px;
124
- }
125
-
126
- ul.ui-sortable li.kirki-sortable-item.invisible,
127
- ul.ui-sortable li.kirki-sortable-item.invisible .visibility {
128
- color: #ccc;
129
- border: 1px solid rgba(0,0,0,0);
130
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
131
 
132
- .wp-full-overlay-sidebar {
133
- background: #fff;
134
- }
135
-
136
- .wp-core-ui.wp-customizer .button,
137
- .press-this.wp-core-ui .button,
138
- .press-this input#publish,
139
- .press-this input#save-post,
140
- .press-this a.preview {
141
- border: none;
142
- cursor: pointer;
143
- overflow: hidden;
144
- -webkit-user-select: none;
145
- -moz-user-select: none;
146
- -ms-user-select: none;
147
- user-select: none;
148
- -webkit-tap-highlight-color: transparent;
149
- z-index: 1;
150
- will-change: opacity, transform;
151
- -webkit-transition: all 0.3s ease-out;
152
- -moz-transition: all 0.3s ease-out;
153
- -o-transition: all 0.3s ease-out;
154
- -ms-transition: all 0.3s ease-out;
155
- transition: all 0.3s ease-out;
156
- text-decoration: none;
157
- color: #FFF;
158
- background-color: #26a69a;
159
- text-align: center;
160
- letter-spacing: 0.5px;
161
- -webkit-transition: 0.2s ease-out;
162
- -moz-transition: 0.2s ease-out;
163
- -o-transition: 0.2s ease-out;
164
- -ms-transition: 0.2s ease-out;
165
- transition: 0.2s ease-out;
166
- cursor: pointer;
167
- display: inline-block;
168
- -webkit-border-radius: 2px;
169
- -moz-border-radius: 2px;
170
- border-radius: 2px;
171
- background-clip: padding-box;
172
- border: none;
173
- outline: 0;
174
- -webkit-tap-highlight-color: transparent;
175
 
176
- }
 
177
 
178
- .wp-core-ui.wp-customizer .button:hover,
179
- .press-this.wp-core-ui .button:hover,
180
- .press-this input#publish:hover,
181
- .press-this input#save-post:hover,
182
- .press-this a.preview:hover {
183
- background-color: #2bbbad;
184
- webkit-box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);
185
- -moz-box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);
186
- box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);
187
- }
 
 
 
188
 
189
- .ui-button {
190
- border-color: #f2f2f2;
191
- background-color: #transparent !important;
192
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
193
 
194
- .customize-control input[type="text"] {
195
  border: none;
196
- border-radius: 0;
197
- border-bottom: 1px solid #ccc;
198
- -webkit-box-shadow: none;
 
199
  box-shadow: none;
200
- }
201
-
202
- .customize-control input[type="text"]:focus {
203
- border-color: #333;
204
- }
205
-
206
- /*------------------------------------------------*/
207
- /* Switch SECTION START*/
208
- /*------------------------------------------------*/
209
- .Switch {
210
- position: relative;
211
- display: inline-block;
212
- font-size: 1.6em;
213
- font-weight: bold;
214
- color: #ccc;
215
- text-shadow: 0px 1px 1px rgba(255,255,255,0.8);
216
- height: 18px;
217
- padding: 6px 6px 5px 6px;
218
- border: 1px solid #ccc;
219
- border: 1px solid rgba(0,0,0,0.2);
220
- border-radius: 4px;
221
- background: #ececec;
222
- box-shadow: 0px 0px 4px rgba(0,0,0,0.1), inset 0px 1px 3px 0px rgba(0,0,0,0.1);
223
- cursor: pointer;
224
- font-size: 16px;
225
- float: right;
226
- }
227
- body.IE7 .Switch { width: 78px; }
228
- .Switch span {
229
- display: inline-block;
230
- width: 35px;
231
  position: relative;
232
- top: -5px;
233
- }
234
- .Switch span.On { color: #33d2da; }
235
- .Switch .Toggle {
236
- position: absolute;
237
- top: 1px;
238
- width: 37px;
239
- height: 25px;
240
- border: 1px solid #ccc;
241
- border: 1px solid rgba(0,0,0,0.3);
242
- border-radius: 4px;
243
- background: #fff;
244
- background: -moz-linear-gradient(top, #ececec 0%, #ffffff 100%);
245
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ececec), color-stop(100%, #ffffff));
246
- background: -webkit-linear-gradient(top, #ececec 0%, #ffffff 100%);
247
- background: -o-linear-gradient(top, #ececec 0%, #ffffff 100%);
248
- background: -ms-linear-gradient(top, #ececec 0%, #ffffff 100%);
249
- background: linear-gradient(top, #ececec 0%, #ffffff 100%);
250
- box-shadow: inset 0px 1px 0px 0px rgba(255,255,255,0.5);
251
- z-index: 999;
252
- -webkit-transition: all 0.15s ease-in-out;
253
- -moz-transition: all 0.15s ease-in-out;
254
- -o-transition: all 0.15s ease-in-out;
255
- -ms-transition: all 0.15s ease-in-out;
256
- }
257
- .Switch.On .Toggle { left: 54%; }
258
- .Switch.Off .Toggle { left: 2%; }
259
- /* Round Switch */
260
- .Switch.Round {
261
- padding: 0px 20px;
262
- border-radius: 40px;
263
- margin-top: 5px;
264
- }
265
- body.IE7 .Switch.Round { width: 1px; }
266
- .Switch.Round .Toggle {
267
- border-radius: 40px;
268
- width: 14px;
269
- height: 14px;
270
- }
271
- .Switch.Round.Off .Toggle {
272
- left: 3%;
273
- }
274
- .Switch.Round.On .Toggle { left: 58%; }
275
- .switch-info {
276
- /*float: left;*/
277
- }
1
+ #customize-controls #customize-info .accordion-section-title {
2
+ border-bottom: 1px solid rgba(0, 0, 0, 0.3); }
3
+ #customize-controls #customize-theme-controls .accordion-section > .accordion-section-title {
4
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1); }
5
+ #customize-controls #customize-theme-controls .accordion-section > .accordion-section-title:after {
6
+ border-color: transparent !important;
7
+ border-color: transparent !important; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
 
9
+ .hint, [data-hint] {
10
+ position: relative;
11
+ display: inline-block; }
12
+ .hint:before, .hint:after, [data-hint]:before, [data-hint]:after {
13
+ position: absolute;
14
+ -webkit-transform: translate3d(0, 0, 0);
15
+ -moz-transform: translate3d(0, 0, 0);
16
+ transform: translate3d(0, 0, 0);
17
+ visibility: hidden;
18
+ opacity: 0;
19
+ z-index: 998;
20
+ pointer-events: none;
21
+ transition: 0.3s ease;
22
+ transition-delay: 250ms; }
23
+ .hint:hover:before, .hint:hover:after, .hint:focus:before, .hint:focus:after, [data-hint]:hover:before, [data-hint]:hover:after, [data-hint]:focus:before, [data-hint]:focus:after {
24
+ visibility: visible;
25
+ opacity: 1; }
26
+ .hint:hover:before, .hint:hover:after, [data-hint]:hover:before, [data-hint]:hover:after {
27
+ transition-delay: 0ms; }
28
+ .hint:before, [data-hint]:before {
29
+ content: '';
30
+ position: absolute;
31
+ background: transparent;
32
+ border: none;
33
+ z-index: 999;
34
+ width: 0;
35
+ height: 0;
36
+ border-top: 5px solid transparent;
37
+ border-bottom: 5px solid transparent;
38
+ border-left: 5px solid #333;
39
+ left: -5px;
40
+ top: 5px; }
41
+ .hint:after, [data-hint]:after {
42
+ content: attr(data-hint);
43
+ background: #333;
44
+ color: white;
45
+ padding: 5px 10px;
46
+ font-size: 12px;
47
+ line-height: 14px;
48
+ height: auto;
49
+ margin-bottom: -14px;
50
+ width: 170px;
51
+ max-width: 170px;
52
+ display: block;
53
+ white-space: normal;
54
+ text-align: right;
55
+ position: relative;
56
+ top: -22px;
57
+ left: -195px; }
58
 
59
  li.customize-control {
60
+ position: relative; }
61
+ li.customize-control a.tooltip.hint--left {
62
+ display: block;
63
+ position: absolute;
64
+ top: 5px;
65
+ right: -20px;
66
+ border-radius: 50%;
67
+ color: #999;
68
+ border: none;
69
+ line-height: 8px;
70
+ width: 20px;
71
+ height: 20px; }
72
 
73
+ .customize-control-radio-image .image.ui-buttonset input[type=radio] {
74
+ height: auto; }
75
+ .customize-control-radio-image .image.ui-buttonset label {
76
+ border: 1px solid transparent;
77
+ display: inline-block;
78
+ margin-right: 5px;
79
+ margin-bottom: 5px; }
80
+ .customize-control-radio-image .image.ui-buttonset label.ui-state-active {
81
+ background: none;
82
+ border-color: #333; }
 
83
 
84
+ .customize-control-multicheck input[type="checkbox"] {
85
+ position: relative;
86
+ margin: 0 1rem 0 0;
87
+ cursor: pointer;
88
+ margin-bottom: 5px;
89
+ width: 22px;
90
+ height: 22px; }
91
+ .customize-control-multicheck input[type="checkbox"]:before {
92
+ -webkit-transition: all 0.1s ease-in-out;
93
+ -moz-transition: all 0.1s ease-in-out;
94
+ transition: all 0.1s ease-in-out;
95
+ content: "";
96
+ position: absolute;
97
+ left: 0;
98
+ z-index: 1;
99
+ width: 16px;
100
+ height: 16px;
101
+ border: 2px solid #f2f2f2; }
102
+ .customize-control-multicheck input[type="checkbox"]:checked:before {
103
+ -webkit-transform: rotate(-45deg);
104
+ -moz-transform: rotate(-45deg);
105
+ -ms-transform: rotate(-45deg);
106
+ -o-transform: rotate(-45deg);
107
+ transform: rotate(-45deg);
108
+ height: 8px;
109
+ top: 4px;
110
+ left: 4px;
111
+ border-color: #009688;
112
+ border-top-style: none;
113
+ border-right-style: none; }
114
+ .customize-control-multicheck input[type="checkbox"]:after {
115
+ content: "";
116
+ position: absolute;
117
+ left: 0;
118
+ top: 0;
119
+ width: 18px;
120
+ height: 18px;
121
+ background: #fff;
122
+ cursor: pointer; }
123
 
124
+ .customize-control-checkbox input[type="checkbox"] {
 
 
 
 
 
 
 
125
  position: relative;
126
+ margin: 0 1rem 0 0;
127
+ cursor: pointer;
128
+ margin-bottom: 5px;
129
+ width: 22px;
130
+ height: 22px; }
131
+ .customize-control-checkbox input[type="checkbox"]:before {
132
+ -webkit-transition: all 0.1s ease-in-out;
133
+ -moz-transition: all 0.1s ease-in-out;
134
+ transition: all 0.1s ease-in-out;
135
+ content: "";
136
+ position: absolute;
137
+ left: 0;
138
+ z-index: 1;
139
+ width: 16px;
140
+ height: 16px;
141
+ border: 2px solid #f2f2f2; }
142
+ .customize-control-checkbox input[type="checkbox"]:checked:before {
143
+ -webkit-transform: rotate(-45deg);
144
+ -moz-transform: rotate(-45deg);
145
+ -ms-transform: rotate(-45deg);
146
+ -o-transform: rotate(-45deg);
147
+ transform: rotate(-45deg);
148
+ height: 8px;
149
+ top: 4px;
150
+ left: 4px;
151
+ border-color: #009688;
152
+ border-top-style: none;
153
+ border-right-style: none; }
154
+ .customize-control-checkbox input[type="checkbox"]:after {
155
+ content: "";
156
+ position: absolute;
157
+ left: 0;
158
+ top: 0;
159
+ width: 18px;
160
+ height: 18px;
161
+ background: #fff;
162
+ cursor: pointer; }
163
 
164
+ .customize-control-radio-buttonset label {
165
+ padding: 5px 10px;
166
+ background: #f7f7f7;
167
+ border-left: 1px solid #dedede; }
168
+ .customize-control-radio-buttonset label.ui-state-active {
169
+ background: #dedede; }
170
+ .customize-control-radio-buttonset label.ui-corner-left {
171
+ border-radius: 3px 0 0 3px;
172
+ border-left: 0; }
173
+ .customize-control-radio-buttonset label.ui-corner-right {
174
+ border-radius: 0 3px 3px 0; }
175
 
176
+ .customize-control-switch .Switch,
177
+ .customize-control-toggle .Switch {
178
+ position: relative;
179
+ display: inline-block;
180
+ font-size: 16px;
181
+ font-weight: bold;
182
+ color: #aaa;
183
+ height: 18px;
184
+ line-height: 27px;
185
+ padding: 6px;
186
+ border: 1px solid #ccc;
187
+ border: 1px solid rgba(0, 0, 0, 0.2);
188
+ background: #f2f2f2;
189
+ cursor: pointer;
190
  float: right;
191
+ transition: all 0.15s ease-in-out; }
192
+ .customize-control-switch .Switch .Toggle,
193
+ .customize-control-toggle .Switch .Toggle {
194
+ position: absolute;
195
+ top: 1px;
196
+ width: 37px;
197
+ height: 25px;
198
+ border: 1px solid #aaa;
199
+ border: 1px solid rgba(0, 0, 0, 0.2);
200
+ background: #fff;
201
+ z-index: 989;
202
+ transition: all 0.15s ease-in-out; }
203
+ .customize-control-switch .Switch .On,
204
+ .customize-control-switch .Switch .Off,
205
+ .customize-control-toggle .Switch .On,
206
+ .customize-control-toggle .Switch .Off {
207
+ display: inline-block;
208
+ width: 35px;
209
+ position: relative;
210
+ top: -5px; }
211
+ .customize-control-switch .Switch .On,
212
+ .customize-control-toggle .Switch .On {
213
+ color: #333; }
214
+ .customize-control-switch .Switch.On .Toggle,
215
+ .customize-control-toggle .Switch.On .Toggle {
216
+ left: 54%; }
217
+ .customize-control-switch .Switch.Off .Toggle,
218
+ .customize-control-toggle .Switch.Off .Toggle {
219
+ left: 2%; }
220
+ .customize-control-switch .Switch.Round,
221
+ .customize-control-toggle .Switch.Round {
222
+ padding: 0px 20px;
223
+ border-radius: 40px;
224
+ margin-top: 5px; }
225
+ .customize-control-switch .Switch.Round .Toggle,
226
+ .customize-control-toggle .Switch.Round .Toggle {
227
+ border-radius: 40px;
228
+ width: 14px;
229
+ height: 14px; }
230
+ .customize-control-switch .Switch.Round.Off .Toggle,
231
+ .customize-control-toggle .Switch.Round.Off .Toggle {
232
+ left: 3%; }
233
+ .customize-control-switch .Switch.Round.On,
234
+ .customize-control-toggle .Switch.Round.On {
235
+ color: #fff;
236
+ background: #333; }
237
+ .customize-control-switch .Switch.Round.On .Toggle,
238
+ .customize-control-toggle .Switch.Round.On .Toggle {
239
+ left: 58%; }
240
 
241
+ body.IE7 .Switch {
242
+ width: 78px; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
243
 
244
+ body.IE7 .Switch.Round {
245
+ width: 1px; }
246
 
247
+ .customize-control-sortable ul.ui-sortable li {
248
+ padding: 5px 10px;
249
+ border: 1px solid #333;
250
+ background: #fff; }
251
+ .customize-control-sortable ul.ui-sortable li .dashicons.dashicons-menu {
252
+ float: right; }
253
+ .customize-control-sortable ul.ui-sortable li .dashicons.visibility {
254
+ margin-right: 10px; }
255
+ .customize-control-sortable ul.ui-sortable li.invisible {
256
+ color: #aaa;
257
+ border: 1px dashed #aaa; }
258
+ .customize-control-sortable ul.ui-sortable li.invisible .dashicons.visibility {
259
+ color: #aaa; }
260
 
261
+ .customize-control-palette label.ui-button.ui-widget {
262
+ width: 95%;
263
+ background: none;
264
+ padding: 0; }
265
+ .customize-control-palette label.ui-button.ui-widget .ui-button-text {
266
+ border-top: 3px solid transparent;
267
+ border-bottom: 3px solid transparent;
268
+ margin-bottom: 5px;
269
+ display: flex; }
270
+ .customize-control-palette label.ui-button.ui-widget .ui-button-text span {
271
+ padding: 10px 0;
272
+ flex-grow: 1;
273
+ font-size: 0px;
274
+ line-height: 10px;
275
+ color: transparent;
276
+ -webkit-transition: all 200ms ease-in-out;
277
+ -moz-transition: all 200ms ease-in-out;
278
+ -ms-transition: all 200ms ease-in-out;
279
+ -o-transition: all 200ms ease-in-out;
280
+ transition: all 200ms ease-in-out; }
281
+ .customize-control-palette label.ui-button.ui-widget .ui-button-text span:hover {
282
+ padding: 10px;
283
+ flex-grow: 3;
284
+ min-width: 60px;
285
+ font-size: 10px;
286
+ line-height: 10px;
287
+ color: #000; }
288
+ .customize-control-palette label.ui-state-active.ui-button.ui-widget span.ui-button-text {
289
+ border: 3px solid #333; }
290
 
291
+ .customize-control-slider input[type="text"] {
292
  border: none;
293
+ text-align: center;
294
+ padding: 0;
295
+ margin: 0;
296
+ font-size: 12px;
297
  box-shadow: none;
298
+ color: #333; }
299
+ .customize-control-slider .ui-slider {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
300
  position: relative;
301
+ text-align: left;
302
+ height: 7px;
303
+ border-radius: 3px;
304
+ background: #f2f2f2;
305
+ border: 1px solid #dedede;
306
+ margin-top: 10px;
307
+ margin-bottom: 20px; }
308
+ .customize-control-slider .ui-slider .ui-slider-handle {
309
+ position: absolute;
310
+ z-index: 2;
311
+ width: 15px;
312
+ height: 15px;
313
+ top: -5px;
314
+ border-radius: 50%;
315
+ cursor: default;
316
+ -ms-touch-action: none;
317
+ touch-action: none;
318
+ background: #333;
319
+ border: 1px solid #333; }
320
+ .customize-control-slider .ui-slider .ui-slider-range {
321
+ position: absolute;
322
+ z-index: 1;
323
+ font-size: .7em;
324
+ display: block;
325
+ border: 0;
326
+ background-position: 0 0; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/css/customizer.scss ADDED
@@ -0,0 +1,406 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @mixin material-checkbox() {
2
+ position: relative;
3
+ margin: 0 1rem 0 0;
4
+ cursor: pointer;
5
+ margin-bottom: 5px;
6
+ width: 22px;
7
+ height: 22px;
8
+ &:before {
9
+ -webkit-transition: all 0.1s ease-in-out;
10
+ -moz-transition: all 0.1s ease-in-out;
11
+ transition: all 0.1s ease-in-out;
12
+ content: "";
13
+ position: absolute;
14
+ left: 0;
15
+ z-index: 1;
16
+ width: 16px;
17
+ height: 16px;
18
+ border: 2px solid #f2f2f2;
19
+ }
20
+ &:checked {
21
+ &:before {
22
+ -webkit-transform: rotate(-45deg);
23
+ -moz-transform: rotate(-45deg);
24
+ -ms-transform: rotate(-45deg);
25
+ -o-transform: rotate(-45deg);
26
+ transform: rotate(-45deg);
27
+ height: 8px;
28
+ top:4px;
29
+ left: 4px;
30
+ border-color: #009688;
31
+ border-top-style: none;
32
+ border-right-style: none;
33
+ }
34
+ }
35
+ &:after {
36
+ content: "";
37
+ position: absolute;
38
+ left: 0;
39
+ top: 0;
40
+ width: 18px;
41
+ height: 18px;
42
+ background: #fff;
43
+ cursor: pointer;
44
+ }
45
+ }
46
+
47
+ // Generic styles
48
+ #customize-controls {
49
+ #customize-header-actions {
50
+
51
+ }
52
+ #customize-info {
53
+ .accordion-section-title {
54
+ border-bottom: 1px solid rgba(0,0,0,.3);
55
+ }
56
+ }
57
+ #customize-theme-controls {
58
+ #accordion-section-themes {
59
+
60
+ }
61
+ .accordion-section {
62
+ > .accordion-section-title {
63
+ border-bottom: 1px solid rgba(0,0,0,.1);
64
+ &:after {
65
+ border-color: rgba(0,0,0,0) !important;
66
+ border-color: transparent !important;
67
+ }
68
+ }
69
+ }
70
+ }
71
+ }
72
+
73
+ // Hints/Tooltips
74
+ .hint, [data-hint] {
75
+ position: relative;
76
+ display: inline-block;
77
+
78
+ &:before, &:after {
79
+ position: absolute;
80
+
81
+ // HACK: Trigger hardware accelerated rendering, otherwise transform was not
82
+ // working on a hidden element
83
+ -webkit-transform: translate3d(0, 0, 0);
84
+ -moz-transform: translate3d(0, 0, 0);
85
+ transform: translate3d(0, 0, 0);
86
+
87
+ // HACK: visibility is set to hidden because IE & Opera don't support
88
+ // pointer-events on HTML content yet because of which hovering a hidden tooltip
89
+ // shows the tooltip.
90
+ visibility: hidden;
91
+ opacity: 0;
92
+ z-index: 998;
93
+ // shouldn't receive pointer events, otherwise even hovering tooltip will make it appear
94
+ pointer-events: none;
95
+
96
+ transition: 0.3s ease;
97
+ transition-delay: 250ms;
98
+ }
99
+
100
+ &:hover:before, &:hover:after,
101
+ &:focus:before, &:focus:after {
102
+ visibility: visible;
103
+ opacity: 1;
104
+ }
105
+
106
+ &:hover:before, &:hover:after {
107
+ transition-delay: 0ms;
108
+ }
109
+ // tooltip arrow
110
+ &:before {
111
+ content: '';
112
+ position: absolute;
113
+ background: transparent;
114
+ border: none;
115
+ // move z-index 1 up than :after so that it shows over box-shadow
116
+ z-index: 999;
117
+ width: 0;
118
+ height: 0;
119
+ border-top: 5px solid transparent;
120
+ border-bottom: 5px solid transparent;
121
+ border-left: 5px solid #333;
122
+ left: -5px;
123
+ top: 5px;
124
+ }
125
+ // tooltip body
126
+ &:after {
127
+ content: attr(data-hint); // The magic!
128
+ background: #333;
129
+ color: white;
130
+ padding: 5px 10px;
131
+ font-size: 12px;
132
+ line-height: 14px;
133
+ height: auto;
134
+ margin-bottom: -14px;
135
+ width: 170px;
136
+ max-width: 170px;
137
+ display: block;
138
+ white-space: normal;
139
+ text-align: right;
140
+ position: relative;
141
+ top: -22px;
142
+ left: -195px;
143
+ }
144
+ }
145
+
146
+ // apply to all controls for tooltips
147
+ li.customize-control {
148
+ position: relative;
149
+ a.tooltip.hint--left {
150
+ display: block;
151
+ position: absolute;
152
+ top: 5px;
153
+ right: -20px;
154
+ border-radius: 50%;
155
+ color: #999;
156
+ border: none;
157
+ line-height: 8px;
158
+ width: 20px;
159
+ height: 20px;
160
+ }
161
+ }
162
+
163
+ // Radio-Image Controls
164
+ .customize-control-radio-image {
165
+ .image.ui-buttonset {
166
+ input[type=radio] {
167
+ height: auto;
168
+ }
169
+ label {
170
+ border: 1px solid transparent;
171
+ display: inline-block;
172
+ margin-right: 5px;
173
+ margin-bottom: 5px;
174
+ &.ui-state-active {
175
+ background: none;
176
+ border-color: #333;
177
+ }
178
+ }
179
+ }
180
+ }
181
+
182
+ // Multicheck Controls
183
+ .customize-control-multicheck {
184
+ input[type="checkbox"] {
185
+ @include material-checkbox();
186
+ }
187
+ }
188
+
189
+ // Checkbox Controls
190
+ // Multicheck Controls
191
+ .customize-control-checkbox {
192
+ input[type="checkbox"] {
193
+ @include material-checkbox();
194
+ }
195
+ }
196
+
197
+ // Radio-Buttonset Controls
198
+ .customize-control-radio-buttonset {
199
+ input[type=radio] {
200
+ }
201
+ label {
202
+ padding: 5px 10px;
203
+ background: #f7f7f7;
204
+ border-left: 1px solid #dedede;
205
+ &.ui-state-active {
206
+ background: #dedede;
207
+ }
208
+ &.ui-corner-left {
209
+ border-radius: 3px 0 0 3px;
210
+ border-left: 0;
211
+ }
212
+ &.ui-corner-right {
213
+ border-radius: 0 3px 3px 0;
214
+ }
215
+ }
216
+ }
217
+
218
+ // Switch & toggle Controls
219
+ .customize-control-switch,
220
+ .customize-control-toggle {
221
+ .Switch {
222
+ position: relative;
223
+ display: inline-block;
224
+ font-size: 16px;
225
+ font-weight: bold;
226
+ color: #aaa;
227
+ height: 18px;
228
+ line-height: 27px;
229
+ padding: 6px;
230
+ border: 1px solid #ccc;
231
+ border: 1px solid rgba(0,0,0,0.2);
232
+ background: #f2f2f2;
233
+ cursor: pointer;
234
+ float: right;
235
+ transition: all 0.15s ease-in-out;
236
+ .Toggle {
237
+ position: absolute;
238
+ top: 1px;
239
+ width: 37px;
240
+ height: 25px;
241
+ border: 1px solid #aaa;
242
+ border: 1px solid rgba(0,0,0,0.2);
243
+ background: #fff;
244
+ z-index: 989;
245
+ transition: all 0.15s ease-in-out;
246
+ }
247
+ .On,
248
+ .Off {
249
+ display: inline-block;
250
+ width: 35px;
251
+ position: relative;
252
+ top: -5px;
253
+ }
254
+ .On {
255
+ color: #333;
256
+ }
257
+ &.On {
258
+ .Toggle {
259
+ left: 54%;
260
+ }
261
+ }
262
+ &.Off {
263
+ .Toggle {
264
+ left: 2%;
265
+ }
266
+ }
267
+ &.Round {
268
+ padding: 0px 20px;
269
+ border-radius: 40px;
270
+ margin-top: 5px;
271
+ .Toggle {
272
+ border-radius: 40px;
273
+ width: 14px;
274
+ height: 14px;
275
+ }
276
+ &.Off {
277
+ .Toggle {
278
+ left: 3%;
279
+ }
280
+ }
281
+ &.On {
282
+ color: #fff;
283
+ background: #333;
284
+ .Toggle {
285
+ left: 58%;
286
+ }
287
+ }
288
+ }
289
+ }
290
+ }
291
+ body.IE7 .Switch { width: 78px; }
292
+ body.IE7 .Switch.Round { width: 1px; }
293
+
294
+ // Sortable Controls
295
+ .customize-control-sortable {
296
+ ul.ui-sortable {
297
+ li {
298
+ padding: 5px 10px;
299
+ border: 1px solid #333;
300
+ background: #fff;
301
+ .dashicons {
302
+ &.dashicons-menu {
303
+ float: right;
304
+ }
305
+ &.visibility {
306
+ margin-right: 10px;
307
+ }
308
+ }
309
+ &.invisible {
310
+ color: #aaa;
311
+ border: 1px dashed #aaa;
312
+ .dashicons.visibility {
313
+ color: #aaa;
314
+ }
315
+ }
316
+ }
317
+ }
318
+ }
319
+
320
+ // Palette controls
321
+ .customize-control-palette {
322
+ label {
323
+ &.ui-button.ui-widget {
324
+ width: 95%;
325
+ background: none;
326
+ padding: 0;
327
+ .ui-button-text {
328
+ border-top: 3px solid transparent;
329
+ border-bottom: 3px solid transparent;
330
+ margin-bottom: 5px;
331
+ display: flex;
332
+ span {
333
+ padding: 10px 0;
334
+ flex-grow: 1;
335
+ font-size: 0px;
336
+ line-height: 10px;
337
+ color: rgba(0,0,0,0);
338
+ -webkit-transition: all 200ms ease-in-out;
339
+ -moz-transition: all 200ms ease-in-out;
340
+ -ms-transition: all 200ms ease-in-out;
341
+ -o-transition: all 200ms ease-in-out;
342
+ transition: all 200ms ease-in-out;
343
+ &:hover {
344
+ padding: 10px;
345
+ flex-grow: 3;
346
+ min-width: 60px;
347
+ font-size: 10px;
348
+ line-height: 10px;
349
+ color: #000;
350
+ }
351
+ }
352
+ }
353
+ }
354
+ &.ui-state-active {
355
+ &.ui-button.ui-widget {
356
+ span.ui-button-text {
357
+ border: 3px solid #333;
358
+ }
359
+ }
360
+ }
361
+ }
362
+ }
363
+
364
+ // Slider Controls
365
+ .customize-control-slider {
366
+ input[type="text"] {
367
+ border: none;
368
+ text-align: center;
369
+ padding: 0;
370
+ margin: 0;
371
+ font-size: 12px;
372
+ box-shadow: none;
373
+ color: #333;
374
+ }
375
+ .ui-slider {
376
+ position: relative;
377
+ text-align: left;
378
+ height: 7px;
379
+ border-radius: 3px;
380
+ background: #f2f2f2;
381
+ border: 1px solid #dedede;
382
+ margin-top: 10px;
383
+ margin-bottom: 20px;
384
+ .ui-slider-handle {
385
+ position: absolute;
386
+ z-index: 2;
387
+ width: 15px;
388
+ height: 15px;
389
+ top: -5px;
390
+ border-radius: 50%;
391
+ cursor: default;
392
+ -ms-touch-action: none;
393
+ touch-action: none;
394
+ background: #333;
395
+ border: 1px solid #333;
396
+ }
397
+ .ui-slider-range {
398
+ position: absolute;
399
+ z-index: 1;
400
+ font-size: .7em;
401
+ display: block;
402
+ border: 0;
403
+ background-position: 0 0;
404
+ }
405
+ }
406
+ }
assets/css/hint.css CHANGED
@@ -1,293 +0,0 @@
1
- /*! Hint.css - v1.3.3 - 2014-07-06
2
- * http://kushagragour.in/lab/hint/
3
- * Copyright (c) 2014 Kushagra Gour; Licensed MIT */
4
-
5
- /*-------------------------------------*\
6
- HINT.css - A CSS tooltip library
7
- \*-------------------------------------*/
8
- /**
9
- * HINT.css is a tooltip library made in pure CSS.
10
- *
11
- * Source: https://github.com/chinchang/hint.css
12
- * Demo: http://kushagragour.in/lab/hint/
13
- *
14
- * Release under The MIT License
15
- *
16
- */
17
- /**
18
- * source: hint-core.scss
19
- *
20
- * Defines the basic styling for the tooltip.
21
- * Each tooltip is made of 2 parts:
22
- * 1) body (:after)
23
- * 2) arrow (:before)
24
- *
25
- * Classes added:
26
- * 1) hint
27
- */
28
- .hint, [data-hint] {
29
- position: relative;
30
- display: inline-block;
31
- /**
32
- * tooltip arrow
33
- */
34
- /**
35
- * tooltip body
36
- */ }
37
- .hint:before, .hint:after, [data-hint]:before, [data-hint]:after {
38
- position: absolute;
39
- -webkit-transform: translate3d(0, 0, 0);
40
- -moz-transform: translate3d(0, 0, 0);
41
- transform: translate3d(0, 0, 0);
42
- visibility: hidden;
43
- opacity: 0;
44
- z-index: 1000000;
45
- pointer-events: none;
46
- -webkit-transition: 0.3s ease;
47
- -moz-transition: 0.3s ease;
48
- transition: 0.3s ease;
49
- -webkit-transition-delay: 0ms;
50
- -moz-transition-delay: 0ms;
51
- transition-delay: 0ms; }
52
- .hint:hover:before, .hint:hover:after, .hint:focus:before, .hint:focus:after, [data-hint]:hover:before, [data-hint]:hover:after, [data-hint]:focus:before, [data-hint]:focus:after {
53
- visibility: visible;
54
- opacity: 1; }
55
- .hint:hover:before, .hint:hover:after, [data-hint]:hover:before, [data-hint]:hover:after {
56
- -webkit-transition-delay: 100ms;
57
- -moz-transition-delay: 100ms;
58
- transition-delay: 100ms; }
59
- .hint:before, [data-hint]:before {
60
- content: '';
61
- position: absolute;
62
- background: transparent;
63
- border: 6px solid transparent;
64
- z-index: 1000001; }
65
- .hint:after, [data-hint]:after {
66
- content: attr(data-hint);
67
- background: #383838;
68
- color: white;
69
- padding: 8px 10px;
70
- font-size: 12px;
71
- line-height: 12px;
72
- white-space: nowrap; }
73
-
74
- /**
75
- * source: hint-position.scss
76
- *
77
- * Defines the positoning logic for the tooltips.
78
- *
79
- * Classes added:
80
- * 1) hint--top
81
- * 2) hint--bottom
82
- * 3) hint--left
83
- * 4) hint--right
84
- */
85
- /**
86
- * set default color for tooltip arrows
87
- */
88
- .hint--top:before {
89
- border-top-color: #383838; }
90
-
91
- .hint--bottom:before {
92
- border-bottom-color: #383838; }
93
-
94
- .hint--left:before {
95
- border-left-color: #383838; }
96
-
97
- .hint--right:before {
98
- border-right-color: #383838; }
99
-
100
- /**
101
- * top tooltip
102
- */
103
- .hint--top:before {
104
- margin-bottom: -12px; }
105
- .hint--top:after {
106
- margin-left: -18px; }
107
- .hint--top:before, .hint--top:after {
108
- bottom: 100%;
109
- left: 50%; }
110
- .hint--top:hover:after, .hint--top:hover:before, .hint--top:focus:after, .hint--top:focus:before {
111
- -webkit-transform: translateY(-8px);
112
- -moz-transform: translateY(-8px);
113
- transform: translateY(-8px); }
114
-
115
- /**
116
- * bottom tooltip
117
- */
118
- .hint--bottom:before {
119
- margin-top: -12px; }
120
- .hint--bottom:after {
121
- margin-left: -18px; }
122
- .hint--bottom:before, .hint--bottom:after {
123
- top: 100%;
124
- left: 50%; }
125
- .hint--bottom:hover:after, .hint--bottom:hover:before, .hint--bottom:focus:after, .hint--bottom:focus:before {
126
- -webkit-transform: translateY(8px);
127
- -moz-transform: translateY(8px);
128
- transform: translateY(8px); }
129
-
130
- /**
131
- * right tooltip
132
- */
133
- .hint--right:before {
134
- margin-left: -12px;
135
- margin-bottom: -6px; }
136
- .hint--right:after {
137
- margin-bottom: -14px; }
138
- .hint--right:before, .hint--right:after {
139
- left: 100%;
140
- bottom: 50%; }
141
- .hint--right:hover:after, .hint--right:hover:before, .hint--right:focus:after, .hint--right:focus:before {
142
- -webkit-transform: translateX(8px);
143
- -moz-transform: translateX(8px);
144
- transform: translateX(8px); }
145
-
146
- /**
147
- * left tooltip
148
- */
149
- .hint--left:before {
150
- margin-right: -12px;
151
- margin-bottom: -6px; }
152
- .hint--left:after {
153
- margin-bottom: -14px; }
154
- .hint--left:before, .hint--left:after {
155
- right: 100%;
156
- bottom: 50%; }
157
- .hint--left:hover:after, .hint--left:hover:before, .hint--left:focus:after, .hint--left:focus:before {
158
- -webkit-transform: translateX(-8px);
159
- -moz-transform: translateX(-8px);
160
- transform: translateX(-8px); }
161
-
162
- /**
163
- * source: hint-color-types.scss
164
- *
165
- * Contains tooltips of various types based on color differences.
166
- *
167
- * Classes added:
168
- * 1) hint--error
169
- * 2) hint--warning
170
- * 3) hint--info
171
- * 4) hint--success
172
- *
173
- */
174
- /**
175
- * Error
176
- */
177
- .hint--error:after {
178
- background-color: #b34e4d;
179
- text-shadow: 0 -1px 0px #592726; }
180
- .hint--error.hint--top:before {
181
- border-top-color: #b34e4d; }
182
- .hint--error.hint--bottom:before {
183
- border-bottom-color: #b34e4d; }
184
- .hint--error.hint--left:before {
185
- border-left-color: #b34e4d; }
186
- .hint--error.hint--right:before {
187
- border-right-color: #b34e4d; }
188
-
189
- /**
190
- * Warning
191
- */
192
- .hint--warning:after {
193
- background-color: #c09854;
194
- text-shadow: 0 -1px 0px #6c5328; }
195
- .hint--warning.hint--top:before {
196
- border-top-color: #c09854; }
197
- .hint--warning.hint--bottom:before {
198
- border-bottom-color: #c09854; }
199
- .hint--warning.hint--left:before {
200
- border-left-color: #c09854; }
201
- .hint--warning.hint--right:before {
202
- border-right-color: #c09854; }
203
-
204
- /**
205
- * Info
206
- */
207
- .hint--info:after {
208
- background-color: #3986ac;
209
- text-shadow: 0 -1px 0px #193b4d; }
210
- .hint--info.hint--top:before {
211
- border-top-color: #3986ac; }
212
- .hint--info.hint--bottom:before {
213
- border-bottom-color: #3986ac; }
214
- .hint--info.hint--left:before {
215
- border-left-color: #3986ac; }
216
- .hint--info.hint--right:before {
217
- border-right-color: #3986ac; }
218
-
219
- /**
220
- * Success
221
- */
222
- .hint--success:after {
223
- background-color: #458746;
224
- text-shadow: 0 -1px 0px #1a321a; }
225
- .hint--success.hint--top:before {
226
- border-top-color: #458746; }
227
- .hint--success.hint--bottom:before {
228
- border-bottom-color: #458746; }
229
- .hint--success.hint--left:before {
230
- border-left-color: #458746; }
231
- .hint--success.hint--right:before {
232
- border-right-color: #458746; }
233
-
234
- /**
235
- * source: hint-always.scss
236
- *
237
- * Defines a persisted tooltip which shows always.
238
- *
239
- * Classes added:
240
- * 1) hint--always
241
- *
242
- */
243
- .hint--always:after, .hint--always:before {
244
- opacity: 1;
245
- visibility: visible; }
246
- .hint--always.hint--top:after, .hint--always.hint--top:before {
247
- -webkit-transform: translateY(-8px);
248
- -moz-transform: translateY(-8px);
249
- transform: translateY(-8px); }
250
- .hint--always.hint--bottom:after, .hint--always.hint--bottom:before {
251
- -webkit-transform: translateY(8px);
252
- -moz-transform: translateY(8px);
253
- transform: translateY(8px); }
254
- .hint--always.hint--left:after, .hint--always.hint--left:before {
255
- -webkit-transform: translateX(-8px);
256
- -moz-transform: translateX(-8px);
257
- transform: translateX(-8px); }
258
- .hint--always.hint--right:after, .hint--always.hint--right:before {
259
- -webkit-transform: translateX(8px);
260
- -moz-transform: translateX(8px);
261
- transform: translateX(8px); }
262
-
263
- /**
264
- * source: hint-rounded.scss
265
- *
266
- * Defines rounded corner tooltips.
267
- *
268
- * Classes added:
269
- * 1) hint--rounded
270
- *
271
- */
272
- .hint--rounded:after {
273
- border-radius: 4px; }
274
-
275
- /**
276
- * source: hint-effects.scss
277
- *
278
- * Defines various transition effects for the tooltips.
279
- *
280
- * Classes added:
281
- * 1) hint--no-animate
282
- * 2) hint--bounce
283
- *
284
- */
285
- .hint--no-animate:before, .hint--no-animate:after {
286
- -webkit-transition-duration: 0ms;
287
- -moz-transition-duration: 0ms;
288
- transition-duration: 0ms; }
289
-
290
- .hint--bounce:before, .hint--bounce:after {
291
- -webkit-transition: opacity 0.3s ease, visibility 0.3s ease, -webkit-transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24);
292
- -moz-transition: opacity 0.3s ease, visibility 0.3s ease, -moz-transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24);
293
- transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24); }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/css/jquery-ui-1.10.0.custom.css CHANGED
@@ -1,1485 +0,0 @@
1
- /*!
2
- * jQuery UI Bootstrap (0.5)
3
- * http://addyosmani.github.com/jquery-ui-bootstrap
4
- *
5
- * Copyright 2012 - 2013, Addy Osmani
6
- * Dual licensed under the MIT or GPL Version 2 licenses.
7
- *
8
- * Portions copyright jQuery UI & Twitter Bootstrap
9
- */
10
-
11
-
12
- /* Layout helpers
13
- ----------------------------------*/
14
- .ui-helper-hidden { display: none; }
15
- .ui-helper-hidden-accessible {
16
- border: 0; clip: rect(0 0 0 0);
17
- height: 1px;
18
- margin: -1px;
19
- overflow: hidden;
20
- padding: 0;
21
- position: absolute;
22
- width: 1px;
23
- }
24
- .ui-helper-reset {
25
- margin: 0;
26
- padding: 0;
27
- border: 0;
28
- outline: 0;
29
- line-height: 1.3;
30
- text-decoration: none;
31
- font-size: 100%;
32
- list-style: none;
33
- }
34
- .ui-helper-clearfix:before,
35
- .ui-helper-clearfix:after {
36
- content: "";
37
- display: table;
38
- }
39
- .ui-helper-clearfix:after {
40
- content: ".";
41
- display: block;
42
- height: 0;
43
- clear: both;
44
- visibility: hidden;
45
- }
46
- .ui-helper-clearfix {
47
- /*display: inline-block; */
48
- display:block;
49
- min-height: 0; /* support: IE7 */
50
- }
51
- /* required comment for clearfix to work in Opera \*/
52
- * html .ui-helper-clearfix {
53
- height:1%;
54
- }
55
-
56
- /* end clearfix */
57
- .ui-helper-zfix {
58
- width: 100%;
59
- height: 100%;
60
- top: 0;
61
- left: 0;
62
- position: absolute;
63
- opacity: 0;
64
- filter:Alpha(Opacity=0);
65
- }
66
- .ui-front {
67
- z-index: 100;
68
- }
69
-
70
-
71
- /* Interaction Cues
72
- ----------------------------------*/
73
- .ui-state-disabled { cursor: default !important; }
74
-
75
-
76
- /* Icons
77
- ----------------------------------*/
78
-
79
- /* states and images */
80
- .ui-icon {
81
- display: block;
82
- text-indent: -99999px;
83
- overflow: hidden;
84
- background-repeat: no-repeat;
85
- }
86
-
87
-
88
- /* Misc visuals
89
- ----------------------------------*/
90
-
91
- /* Overlays */
92
- .ui-widget-overlay {
93
- position: absolute;
94
- top: 0;
95
- left: 0;
96
- width: 100%;
97
- height: 100%;
98
- }
99
-
100
- /*
101
- * jQuery UI Resizable 1.10.0
102
- *
103
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
104
- * Dual licensed under the MIT or GPL Version 2 licenses.
105
- * http://jquery.org/license
106
- *
107
- * http://api.jqueryui.com/resizable/
108
- */
109
-
110
- .ui-resizable {
111
- position: relative;
112
- }
113
- .ui-resizable-handle {
114
- position: absolute;
115
- font-size: 0.1px;
116
- z-index: 99999;
117
- display: block;
118
- }
119
- .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle {
120
- display: none;
121
- }
122
- .ui-resizable-n {
123
- cursor: n-resize;
124
- height: 7px;
125
- width: 100%;
126
- top: -5px;
127
- left: 0;
128
- }
129
- .ui-resizable-s {
130
- cursor: s-resize;
131
- height: 7px;
132
- width: 100%;
133
- bottom: -5px;
134
- left: 0;
135
- }
136
- .ui-resizable-e {
137
- cursor: e-resize;
138
- width: 7px;
139
- right: -5px;
140
- top: 0;
141
- height: 100%;
142
- }
143
- .ui-resizable-w {
144
- cursor: w-resize;
145
- width: 7px;
146
- left: -5px;
147
- top: 0;
148
- height: 100%;
149
- }
150
- .ui-resizable-se {
151
- cursor: se-resize;
152
- width: 12px;
153
- height: 12px;
154
- right: 1px;
155
- bottom: 1px;
156
- }
157
- .ui-resizable-sw {
158
- cursor: sw-resize;
159
- width: 9px;
160
- height: 9px;
161
- left: -5px;
162
- bottom: -5px;
163
- }
164
- .ui-resizable-nw {
165
- cursor: nw-resize;
166
- width: 9px;
167
- height: 9px;
168
- left: -5px;
169
- top: -5px;
170
- }
171
- .ui-resizable-ne {
172
- cursor: ne-resize;
173
- width: 9px;
174
- height: 9px;
175
- right: -5px;
176
- top: -5px;
177
- }
178
-
179
- /*
180
- * jQuery UI Selectable 1.10.0
181
- *
182
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
183
- * Dual licensed under the MIT or GPL Version 2 licenses.
184
- * http://jquery.org/license
185
- *
186
- * http://jqueryui.com/selectable/
187
- */
188
- .ui-selectable-helper {
189
- position: absolute;
190
- z-index: 100;
191
- border:1px dotted black;
192
- }
193
-
194
- /*
195
- * jQuery UI CSS Framework 1.10.0
196
- *
197
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
198
- * Dual licensed under the MIT or GPL Version 2 licenses.
199
- * http://jquery.org/license
200
- *
201
- *
202
- *
203
- * To view and modify this theme, visit http://jqueryui.com/themeroller/
204
- */
205
-
206
- /* Component containers
207
- ----------------------------------*/
208
- .ui-widget { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size:13px; }
209
- .ui-widget .ui-widget { font-size: 1em; }
210
- .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 1em; }
211
- .ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(../images/ui-bg_glass_75_ffffff_1x400.png) 50% 50% repeat-x; color: #404040; }
212
- .ui-widget-content a { color: #404040; }
213
- .ui-widget-header {
214
- font-weight:bold;
215
- border-color: #0064cd #0064cd #003f81;
216
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
217
- border:1px solid #666;
218
-
219
- }
220
- .ui-widget-header a { color: #222222; }
221
-
222
- /* Interaction states
223
- ----------------------------------*/
224
- .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {
225
-
226
- background-color: #FF5740;
227
-
228
- color: #333;
229
- font-size: 13px;
230
- line-height: normal;
231
- border: 1px solid #CC1424;
232
- -webkit-transition: 0.1s linear background-image;
233
- -moz-transition: 0.1s linear background-image;
234
- -ms-transition: 0.1s linear background-image;
235
- -o-transition: 0.1s linear background-image;
236
- transition: 0.1s linear background-image;
237
- overflow: visible;
238
-
239
- }
240
-
241
-
242
- .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
243
- .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 {
244
- background-position: 0 -15px;
245
- color: #333;
246
- text-decoration: none;
247
- }
248
-
249
- .ui-state-hover a, .ui-state-hover a:hover, .ui-state-hover a:link, .ui-state-hover a:visited { color: #212121; text-decoration: none; }
250
- .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; font-weight: normal; color: #212121; }
251
- .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
252
- .ui-widget :active { outline: none; }
253
-
254
- /* Interaction Cues
255
- ----------------------------------*/
256
-
257
-
258
- .ui-state-highlight p, .ui-state-error p, .ui-state-default p{
259
- font-size: 13px;
260
- font-weight: normal;
261
- line-height: 18px;
262
- margin:7px 15px;
263
- }
264
- .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {
265
-
266
-
267
- position: relative;
268
- margin-bottom: 18px;
269
- color: #404040;
270
- background-color: #eedc94;
271
- background-repeat: repeat-x;
272
- background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94));
273
- background-image: -moz-linear-gradient(top, #fceec1, #eedc94);
274
- background-image: -ms-linear-gradient(top, #fceec1, #eedc94);
275
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94));
276
- background-image: -webkit-linear-gradient(top, #fceec1, #eedc94);
277
- background-image: -o-linear-gradient(top, #fceec1, #eedc94);
278
- background-image: linear-gradient(top, #fceec1, #eedc94);
279
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0);
280
- border-color: #eedc94 #eedc94 #e4c652;
281
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
282
- border-width: 1px;
283
- border-style: solid;
284
- -webkit-border-radius: 2px;
285
- -moz-border-radius: 2px;
286
- border-radius: 2px;
287
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
288
- -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
289
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
290
-
291
-
292
- }
293
- .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
294
- .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {
295
-
296
-
297
- position: relative;
298
- margin-bottom: 18px;
299
- color: #ffffff;
300
- border-width: 1px;
301
- border-style: solid;
302
- -webkit-border-radius: 2px;
303
- -moz-border-radius: 2px;
304
- border-radius: 2px;
305
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
306
- -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
307
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
308
- background-color: #c43c35;
309
- background-repeat: repeat-x;
310
- background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));
311
- background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
312
- background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
313
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));
314
- background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
315
- background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
316
- background-image: linear-gradient(top, #ee5f5b, #c43c35);
317
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
318
- border-color: #c43c35 #c43c35 #882a25;
319
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
320
-
321
-
322
- }
323
- .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
324
- .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
325
- .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
326
- .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
327
- .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
328
- .ui-state-disabled .ui-icon { filter:Alpha(Opacity=35); } /* For IE8 - See #6059 */
329
-
330
-
331
- /* Icons
332
- ----------------------------------*/
333
-
334
- /* states and images */
335
- .ui-icon { width: 16px; height: 16px; background-image: url(../images/ui-icons_222222_256x240.png); }
336
- .ui-widget-content .ui-icon {background-image: url(../images/ui-icons_222222_256x240.png); }
337
- .ui-widget-header .ui-icon {background-image: url(../images/ui-icons_222222_256x240.png); }
338
- .ui-state-default .ui-icon { background-image: url(../images/ui-icons_888888_256x240.png); }
339
- .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(../images/ui-icons_454545_256x240.png); }
340
- .ui-state-active .ui-icon {background-image: url(../images/ui-icons_454545_256x240.png); }
341
- .ui-state-highlight .ui-icon {background-image: url(../images/ui-icons_2e83ff_256x240.png); }
342
- .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(../images/ui-icons_f6cf3b_256x240.png); }
343
-
344
- /* positioning */
345
- .ui-icon-carat-1-n { background-position: 0 0; }
346
- .ui-icon-carat-1-ne { background-position: -16px 0; }
347
- .ui-icon-carat-1-e { background-position: -32px 0; }
348
- .ui-icon-carat-1-se { background-position: -48px 0; }
349
- .ui-icon-carat-1-s { background-position: -64px 0; }
350
- .ui-icon-carat-1-sw { background-position: -80px 0; }
351
- .ui-icon-carat-1-w { background-position: -96px 0; }
352
- .ui-icon-carat-1-nw { background-position: -112px 0; }
353
- .ui-icon-carat-2-n-s { background-position: -128px 0; }
354
- .ui-icon-carat-2-e-w { background-position: -144px 0; }
355
- .ui-icon-triangle-1-n { background-position: 0 -16px; }
356
- .ui-icon-triangle-1-ne { background-position: -16px -16px; }
357
- .ui-icon-triangle-1-e { background-position: -32px -16px; }
358
- .ui-icon-triangle-1-se { background-position: -48px -16px; }
359
- .ui-icon-triangle-1-s { background-position: -64px -16px; }
360
- .ui-icon-triangle-1-sw { background-position: -80px -16px; }
361
- .ui-icon-triangle-1-w { background-position: -96px -16px; }
362
- .ui-icon-triangle-1-nw { background-position: -112px -16px; }
363
- .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
364
- .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
365
- .ui-icon-arrow-1-n { background-position: 0 -32px; }
366
- .ui-icon-arrow-1-ne { background-position: -16px -32px; }
367
- .ui-icon-arrow-1-e { background-position: -32px -32px; }
368
- .ui-icon-arrow-1-se { background-position: -48px -32px; }
369
- .ui-icon-arrow-1-s { background-position: -64px -32px; }
370
- .ui-icon-arrow-1-sw { background-position: -80px -32px; }
371
- .ui-icon-arrow-1-w { background-position: -96px -32px; }
372
- .ui-icon-arrow-1-nw { background-position: -112px -32px; }
373
- .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
374
- .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
375
- .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
376
- .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
377
- .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
378
- .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
379
- .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
380
- .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
381
- .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
382
- .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
383
- .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
384
- .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
385
- .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
386
- .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
387
- .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
388
- .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
389
- .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
390
- .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
391
- .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
392
- .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
393
- .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
394
- .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
395
- .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
396
- .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
397
- .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
398
- .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
399
- .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
400
- .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
401
- .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
402
- .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
403
- .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
404
- .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
405
- .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
406
- .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
407
- .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
408
- .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
409
- .ui-icon-arrow-4 { background-position: 0 -80px; }
410
- .ui-icon-arrow-4-diag { background-position: -16px -80px; }
411
- .ui-icon-extlink { background-position: -32px -80px; }
412
- .ui-icon-newwin { background-position: -48px -80px; }
413
- .ui-icon-refresh { background-position: -64px -80px; }
414
- .ui-icon-shuffle { background-position: -80px -80px; }
415
- .ui-icon-transfer-e-w { background-position: -96px -80px; }
416
- .ui-icon-transferthick-e-w { background-position: -112px -80px; }
417
- .ui-icon-folder-collapsed { background-position: 0 -96px; }
418
- .ui-icon-folder-open { background-position: -16px -96px; }
419
- .ui-icon-document { background-position: -32px -96px; }
420
- .ui-icon-document-b { background-position: -48px -96px; }
421
- .ui-icon-note { background-position: -64px -96px; }
422
- .ui-icon-mail-closed { background-position: -80px -96px; }
423
- .ui-icon-mail-open { background-position: -96px -96px; }
424
- .ui-icon-suitcase { background-position: -112px -96px; }
425
- .ui-icon-comment { background-position: -128px -96px; }
426
- .ui-icon-person { background-position: -144px -96px; }
427
- .ui-icon-print { background-position: -160px -96px; }
428
- .ui-icon-trash { background-position: -176px -96px; }
429
- .ui-icon-locked { background-position: -192px -96px; }
430
- .ui-icon-unlocked { background-position: -208px -96px; }
431
- .ui-icon-bookmark { background-position: -224px -96px; }
432
- .ui-icon-tag { background-position: -240px -96px; }
433
- .ui-icon-home { background-position: 0 -112px; }
434
- .ui-icon-flag { background-position: -16px -112px; }
435
- .ui-icon-calendar { background-position: -32px -112px; }
436
- .ui-icon-cart { background-position: -48px -112px; }
437
- .ui-icon-pencil { background-position: -64px -112px; }
438
- .ui-icon-clock { background-position: -80px -112px; }
439
- .ui-icon-disk { background-position: -96px -112px; }
440
- .ui-icon-calculator { background-position: -112px -112px; }
441
- .ui-icon-zoomin { background-position: -128px -112px; }
442
- .ui-icon-zoomout { background-position: -144px -112px; }
443
- .ui-icon-search { background-position: -160px -112px; }
444
- .ui-icon-wrench { background-position: -176px -112px; }
445
- .ui-icon-gear { background-position: -192px -112px; }
446
- .ui-icon-heart { background-position: -208px -112px; }
447
- .ui-icon-star { background-position: -224px -112px; }
448
- .ui-icon-link { background-position: -240px -112px; }
449
- .ui-icon-cancel { background-position: 0 -128px; }
450
- .ui-icon-plus { background-position: -16px -128px; }
451
- .ui-icon-plusthick { background-position: -32px -128px; }
452
- .ui-icon-minus { background-position: -48px -128px; }
453
- .ui-icon-minusthick { background-position: -64px -128px; }
454
- .ui-icon-close { background-position: -80px -128px; }
455
- .ui-icon-closethick { background-position: -96px -128px; }
456
- .ui-icon-key { background-position: -112px -128px; }
457
- .ui-icon-lightbulb { background-position: -128px -128px; }
458
- .ui-icon-scissors { background-position: -144px -128px; }
459
- .ui-icon-clipboard { background-position: -160px -128px; }
460
- .ui-icon-copy { background-position: -176px -128px; }
461
- .ui-icon-contact { background-position: -192px -128px; }
462
- .ui-icon-image { background-position: -208px -128px; }
463
- .ui-icon-video { background-position: -224px -128px; }
464
- .ui-icon-script { background-position: -240px -128px; }
465
- .ui-icon-alert { background-position: 0 -144px; }
466
- .ui-icon-info { background-position: -16px -144px; }
467
- .ui-icon-notice { background-position: -32px -144px; }
468
- .ui-icon-help { background-position: -48px -144px; }
469
- .ui-icon-check { background-position: -64px -144px; }
470
- .ui-icon-bullet { background-position: -80px -144px; }
471
- .ui-icon-radio-off { background-position: -96px -144px; }
472
- .ui-icon-radio-on { background-position: -112px -144px; }
473
- .ui-icon-pin-w { background-position: -128px -144px; }
474
- .ui-icon-pin-s { background-position: -144px -144px; }
475
- .ui-icon-play { background-position: 0 -160px; }
476
- .ui-icon-pause { background-position: -16px -160px; }
477
- .ui-icon-seek-next { background-position: -32px -160px; }
478
- .ui-icon-seek-prev { background-position: -48px -160px; }
479
- .ui-icon-seek-end { background-position: -64px -160px; }
480
- .ui-icon-seek-start { background-position: -80px -160px; }
481
- /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
482
- .ui-icon-seek-first { background-position: -80px -160px; }
483
- .ui-icon-stop { background-position: -96px -160px; }
484
- .ui-icon-eject { background-position: -112px -160px; }
485
- .ui-icon-volume-off { background-position: -128px -160px; }
486
- .ui-icon-volume-on { background-position: -144px -160px; }
487
- .ui-icon-power { background-position: 0 -176px; }
488
- .ui-icon-signal-diag { background-position: -16px -176px; }
489
- .ui-icon-signal { background-position: -32px -176px; }
490
- .ui-icon-battery-0 { background-position: -48px -176px; }
491
- .ui-icon-battery-1 { background-position: -64px -176px; }
492
- .ui-icon-battery-2 { background-position: -80px -176px; }
493
- .ui-icon-battery-3 { background-position: -96px -176px; }
494
- .ui-icon-circle-plus { background-position: 0 -192px; }
495
- .ui-icon-circle-minus { background-position: -16px -192px; }
496
- .ui-icon-circle-close { background-position: -32px -192px; }
497
- .ui-icon-circle-triangle-e { background-position: -48px -192px; }
498
- .ui-icon-circle-triangle-s { background-position: -64px -192px; }
499
- .ui-icon-circle-triangle-w { background-position: -80px -192px; }
500
- .ui-icon-circle-triangle-n { background-position: -96px -192px; }
501
- .ui-icon-circle-arrow-e { background-position: -112px -192px; }
502
- .ui-icon-circle-arrow-s { background-position: -128px -192px; }
503
- .ui-icon-circle-arrow-w { background-position: -144px -192px; }
504
- .ui-icon-circle-arrow-n { background-position: -160px -192px; }
505
- .ui-icon-circle-zoomin { background-position: -176px -192px; }
506
- .ui-icon-circle-zoomout { background-position: -192px -192px; }
507
- .ui-icon-circle-check { background-position: -208px -192px; }
508
- .ui-icon-circlesmall-plus { background-position: 0 -208px; }
509
- .ui-icon-circlesmall-minus { background-position: -16px -208px; }
510
- .ui-icon-circlesmall-close { background-position: -32px -208px; }
511
- .ui-icon-squaresmall-plus { background-position: -48px -208px; }
512
- .ui-icon-squaresmall-minus { background-position: -64px -208px; }
513
- .ui-icon-squaresmall-close { background-position: -80px -208px; }
514
- .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
515
- .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
516
- .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
517
- .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
518
- .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
519
- .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
520
-
521
-
522
- /* Misc visuals
523
- ----------------------------------*/
524
-
525
- /* Corner radius */
526
- .ui-corner-all,
527
- .ui-corner-top,
528
- .ui-corner-left,
529
- .ui-corner-tl {
530
- -moz-border-radius-topleft: 2px;
531
- -webkit-border-top-left-radius: 2px;
532
- -khtml-border-top-left-radius: 2px;
533
- border-top-left-radius: 2px;
534
- }
535
- .ui-corner-all,
536
- .ui-corner-top,
537
- .ui-corner-right,
538
- .ui-corner-tr {
539
- -moz-border-radius-topright: 2px;
540
- -webkit-border-top-right-radius: 2px;
541
- -khtml-border-top-right-radius: 2px;
542
- border-top-right-radius: 2px;
543
- }
544
- .ui-corner-all,
545
- .ui-corner-bottom,
546
- .ui-corner-left,
547
- .ui-corner-bl {
548
- -moz-border-radius-bottomleft: 2px;
549
- -webkit-border-bottom-left-radius: 2px;
550
- -khtml-border-bottom-left-radius: 2px;
551
- border-bottom-left-radius: 2px;
552
- }
553
- .ui-corner-all,
554
- .ui-corner-bottom,
555
- .ui-corner-right,
556
- .ui-corner-br {
557
- -moz-border-radius-bottomright: 2px;
558
- -webkit-border-bottom-right-radius: 2px;
559
- -khtml-border-bottom-right-radius: 2px;
560
- border-bottom-right-radius: 2px;
561
- }
562
-
563
-
564
- /* Overlays */
565
-
566
- .ui-widget-overlay {
567
- background: #aaaaaa url(../images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;
568
- opacity: .30;
569
- filter:Alpha(Opacity=30);
570
- }
571
-
572
- .ui-widget-shadow {
573
- margin: -8px 0 0 -8px;
574
- padding: 8px;
575
- background: #aaaaaa;
576
- opacity: .30;filter:Alpha(Opacity=30);
577
- -moz-border-radius: 2px;
578
- -khtml-border-radius: 2px;
579
- -webkit-border-radius: 2px;
580
- border-radius: 2px;
581
- }
582
-
583
- /*
584
- * jQuery UI Accordion 1.10.0
585
- *
586
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
587
- * Dual licensed under the MIT or GPL Version 2 licenses.
588
- * http://jquery.org/license
589
- *
590
- * http://jqueryui.com/accordion/
591
- */
592
-
593
- /* IE/Win - Fix animation bug - #4615 */
594
-
595
- .ui-accordion {
596
- width: 100%;
597
- }
598
- .ui-accordion .ui-accordion-header {
599
- cursor: pointer;
600
- position: relative;
601
- margin-top: 1px;
602
- zoom: 1;
603
- font-weight:bold;
604
- }
605
- .ui-accordion .ui-accordion-li-fix {
606
- display: inline;
607
- }
608
- .ui-accordion .ui-accordion-header-active {
609
- border-bottom: 0 !important;
610
- }
611
- .ui-accordion .ui-accordion-header a {
612
- display: block;
613
- font-size: 1em;
614
- padding: .5em .5em .5em 1.7em;
615
- }
616
- .ui-accordion-icons .ui-accordion-header a {
617
- padding-left: 2.2em;
618
- }
619
- .ui-accordion .ui-accordion-header .ui-icon {
620
- position: absolute;
621
- left: .5em;
622
- top: 50%;
623
- margin-top: -8px;
624
- }
625
- .ui-accordion .ui-accordion-content {
626
- padding: 1em 2.2em;
627
- border-top: 0;
628
- margin-top: -2px;
629
- position: relative;
630
- top: 1px;
631
- margin-bottom: 2px;
632
- overflow: auto;
633
- display: none;
634
- zoom: 1;
635
- }
636
- .ui-accordion .ui-accordion-content-active {
637
- display: block;
638
- }
639
-
640
- /*
641
- * jQuery UI Autocomplete 1.10.0
642
- *
643
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
644
- * Dual licensed under the MIT or GPL Version 2 licenses.
645
- * http://jquery.org/license
646
- *
647
- * http://jqueryui.com/autocomplete/
648
- */
649
-
650
- .ui-autocomplete {
651
- position: absolute;
652
- top: 0;
653
- left: 0;
654
- cursor: default;
655
- }
656
-
657
- /*
658
- * jQuery UI Button 1.10.0
659
- *
660
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
661
- * Dual licensed under the MIT or GPL Version 2 licenses.
662
- * http://jquery.org/license
663
- *
664
- * http://docs.jquery.com/UI/Button#theming
665
- */
666
-
667
- .ui-button {
668
-
669
- cursor: pointer;
670
- display: inline-block;
671
- background-color: #f7f7f7;
672
- background-repeat: no-repeat;
673
- padding: 5px 14px 6px;
674
- margin: 0;
675
- color: #333;
676
- font-size: 13px;
677
- line-height: normal;
678
- border: 1px solid #efefef;
679
-
680
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
681
- -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
682
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
683
- -webkit-transition: 0.1s linear background-image;
684
- -moz-transition: 0.1s linear background-image;
685
- -ms-transition: 0.1s linear background-image;
686
- -o-transition: 0.1s linear background-image;
687
- transition: 0.1s linear background-image;
688
- overflow: visible;
689
- } /* the overflow property removes extra width in IE */
690
-
691
- .ui-button-primary {
692
- color: #ffffff;
693
- background-color: #0064cd;
694
- border-color: #0064cd #0064cd #003f81;
695
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
696
- }
697
-
698
-
699
- .ui-button-success{
700
- color:#ffffff;
701
- background-color: #57a957;
702
- background-repeat: repeat-x;
703
- border-color: #57a957 #57a957 #3d773d;
704
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
705
- }
706
-
707
- .ui-button-error{
708
- color:#ffffff;
709
- background-color: #c43c35;
710
- border-color: #c43c35 #c43c35 #882a25;
711
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
712
- }
713
-
714
- .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
715
- button.ui-button-icon-only { } /* button elements seem to need a little more width */
716
- .ui-button-icons-only { width: 3.4em; }
717
- button.ui-button-icons-only { width: 3.7em; }
718
-
719
- /*button text element */
720
-
721
- .ui-button .ui-button-text { display: block; }
722
- .ui-button-text-only .ui-button-text { }
723
- .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; /*tempfix*/ display:none;}
724
- .ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
725
- .ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
726
- .ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
727
- /* no icon support for input elements, provide padding by default */
728
- /* input.ui-button { padding: .4em 1em; } */
729
-
730
- /*button icon element(s) */
731
- .ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { top: 50%; margin-top:-3px; margin-bottom:3px; }
732
- .ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
733
- .ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
734
- .ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
735
- .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
736
-
737
- /*button sets*/
738
-
739
-
740
- .ui-buttonset { margin-right: 7px; }
741
- .ui-buttonset .ui-state-active {
742
- color: #ffffff;
743
- background-color: #34495e;
744
- background-repeat: repeat-x;
745
- }
746
- .ui-buttonset .ui-button { margin-left: 0; margin-right: -.4em; }
747
-
748
- /* workarounds */
749
- button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
750
-
751
-
752
- /*
753
- * jQuery UI Menu 1.10.0
754
- *
755
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
756
- * Dual licensed under the MIT or GPL Version 2 licenses.
757
- * http://jquery.org/license
758
- *
759
- * http://docs.jquery.com/UI/Menu#theming
760
- */
761
-
762
- .ui-menu { list-style:none; padding: 2px; margin: 0; display:block; float:left; outline: none; }
763
- .ui-menu .ui-menu { margin-top: -3px; position: absolute; }
764
- .ui-menu .ui-menu-item { margin: 0; padding: 0; zoom: 1;float: left;clear: left; width: 100%; }
765
- .ui-menu .ui-menu-divider { margin: 5px -2px 5px -2px; height: 0; font-size: 0; line-height: 0; border-width: 1px 0 0 0; }
766
- .ui-menu .ui-menu-item a { text-decoration: none; display: block; padding: 2px .4em; line-height: 1.5; zoom: 1; font-weight: normal; }
767
- .ui-menu .ui-menu-item a.ui-state-focus,
768
- .ui-menu .ui-menu-item a.ui-state-active {
769
- font-weight: normal;
770
- margin: 0;
771
- color: #ffffff;
772
- background: #0064cd;
773
- background-color: #0064cd;
774
- background-repeat: repeat-x;
775
- background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));
776
- background-image: -moz-linear-gradient(top, #049cdb, #0064cd);
777
- background-image: -ms-linear-gradient(top, #049cdb, #0064cd);
778
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));
779
- background-image: -webkit-linear-gradient(top, #049cdb, #0064cd);
780
- background-image: -o-linear-gradient(top, #049cdb, #0064cd);
781
- background-image: linear-gradient(top, #049cdb, #0064cd);
782
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0);
783
- border-color: #0064cd #0064cd #003f81;
784
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
785
- }
786
- /* Fix problem with border in ui-state-active */
787
- .ui-menu .ui-menu-item a.ui-state-active {
788
- padding: 1px .4em;
789
- }
790
-
791
- .ui-menu .ui-state-disabled { font-weight: normal; margin: .4em 0 .2em; line-height: 1.5; }
792
- .ui-menu .ui-state-disabled a { cursor: default; }
793
-
794
- /* icon support */
795
- .ui-menu-icons { position: relative; }
796
- .ui-menu-icons .ui-menu-item a { position: relative; padding-left: 2em; }
797
-
798
- /* left-aligned */
799
- .ui-menu .ui-icon { position: absolute; top: .2em; left: .2em; }
800
-
801
- /* right-aligned */
802
- .ui-menu .ui-menu-icon { position: static; float: right; }
803
-
804
- .ui-menu { width: 200px; margin-bottom: 2em; }
805
-
806
-
807
- /*
808
- * jQuery UI spinner 1.10.0
809
- *
810
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
811
- * Dual licensed under the MIT or GPL Version 2 licenses.
812
- * http://jquery.org/license
813
- *
814
- * http://docs.jquery.com/UI/Menu#theming
815
- */
816
-
817
- .ui-spinner { position:relative; display: inline-block; overflow: hidden; padding: 0; vertical-align: middle; }
818
- .ui-spinner-input { border: none; background: none; padding: 0; margin: .2em 0; vertical-align: middle; margin-left: .4em; margin-right: 22px; }
819
- .ui-spinner{}
820
- .ui-spinner-button { width: 16px; height: 50%; font-size: .5em; padding: 0; margin: 0; text-align: center; position: absolute; cursor: default; display: block; overflow: hidden; right: 0; }
821
- .ui-spinner a.ui-spinner-button { border-top: none; border-bottom: none; border-right: none; } /* more specificity required here to overide default borders */
822
- .ui-spinner .ui-icon { position: absolute; margin-top: -8px; top: 50%; left: 0; } /* vertical centre icon */
823
- .ui-spinner-up { top: 0; }
824
- .ui-spinner-down { bottom: 0; }
825
-
826
- /* TR overrides */
827
- .ui-spinner .ui-icon-triangle-1-s {
828
- /* need to fix icons sprite */
829
- background-position:-65px -16px;
830
- }
831
-
832
- /*
833
- * jQuery UI Dialog 1.10.0
834
- *
835
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
836
- * Dual licensed under the MIT or GPL Version 2 licenses.
837
- * http://jquery.org/license
838
- *
839
- * http://docs.jquery.com/UI/Dialog#theming
840
- */
841
- .ui-dialog {
842
- position: absolute;
843
- top: 0;
844
- left: 0;
845
- padding: .2em;
846
- width: 300px;
847
- overflow: hidden;
848
- outline: 0;
849
- background-clip: padding-box;
850
- background-color: #FFFFFF;
851
- border: 1px solid rgba(0, 0, 0, 0.3);
852
- border-radius: 2px;
853
- box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
854
- /*left: 50%;
855
- margin-left: -280px;*/
856
- outline: medium none;
857
- position: fixed;
858
- /*top: 10%;
859
- width: 560px;*/
860
- z-index: 1050;
861
- }
862
- .ui-dialog .ui-dialog-titlebar { /*padding: .4em 1em;*/
863
- position: relative;
864
- padding:5px 15px;
865
- border:0px 0px 0px 1px solid;
866
- border-color: white;
867
- padding: 5px 15px;
868
- font-size: 18px;
869
- text-decoration:none;
870
- background:none;
871
- -moz-border-radius-bottomright: 0px;
872
- -webkit-border-bottom-right-radius: 0px;
873
- -khtml-border-bottom-right-radius: 0px;
874
-
875
- -moz-border-radius-bottomleft: 0px;
876
- -webkit-border-bottom-left-radius: 0px;
877
- -khtml-border-bottom-left-radius: 0px;
878
- border-bottom-left-radius: 0px;
879
- border-bottom:1px solid #ccc;
880
- }
881
- .ui-dialog .ui-dialog-title {
882
- float: left;
883
- color:#404040;
884
- font-weight:bold;
885
- margin-top:5px;
886
- margin-bottom:5px;
887
- padding:5px;
888
- text-overflow: ellipsis;
889
- overflow: hidden;
890
- }
891
- .ui-dialog .ui-dialog-titlebar-close {
892
- position: absolute;
893
- right: .3em;
894
- top: 50%;
895
- width: 19px;
896
- margin: -20px 0 0 0;
897
- padding: 1px;
898
- height: 18px;
899
- font-size: 20px;
900
- font-weight: bold;
901
- line-height: 13.5px;
902
- filter: alpha(opacity=25);
903
- -khtml-opacity: 0.25;
904
- -moz-opacity: 0.25;
905
- opacity: 0.25;
906
- background:none;
907
- border-width: 0;
908
- border:none;
909
- box-shadow: none;
910
- }
911
-
912
- .ui-dialog .ui-dialog-titlebar-close span {
913
- display: block;
914
- margin: 1px;
915
- text-indent: 9999px;
916
- }
917
-
918
- .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 1px; filter: alpha(opacity=90);
919
- -khtml-opacity: 0.90;
920
- -moz-opacity: 0.90;
921
- opacity: 0.90;
922
- }
923
-
924
- .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
925
-
926
- .ui-dialog .ui-dialog-buttonpane {
927
- text-align: left;
928
- border-width: 1px 0 0 0;
929
- background-image: none;
930
- margin: .5em 0 0 0;
931
- background-color: #f5f5f5;
932
- padding: 5px 15px 5px;
933
- border-top: 1px solid #ddd;
934
- -webkit-border-radius: 0 0 2px 2px;
935
- -moz-border-radius: 0 0 2px 2px;
936
- border-radius: 0 0 2px 2px;
937
- -webkit-box-shadow: inset 0 1px 0 #ffffff;
938
- -moz-box-shadow: inset 0 1px 0 #ffffff;
939
- box-shadow: inset 0 1px 0 #ffffff;
940
- zoom: 1;
941
- margin-bottom: 0;
942
-
943
- }
944
- .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
945
- .ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
946
- .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
947
- .ui-draggable .ui-dialog-titlebar { cursor: move; }
948
-
949
- .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button{
950
- color: #ffffff;
951
- background-color: #0064cd;
952
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
953
- }
954
- /*
955
- * jQuery UI Slider 1.8.16
956
- *
957
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
958
- * Dual licensed under the MIT or GPL Version 2 licenses.
959
- * http://jquery.org/license
960
- *
961
- * http://docs.jquery.com/UI/Slider#theming
962
- */
963
- .ui-slider { position: relative; text-align: left; }
964
- .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
965
- .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0;
966
-
967
- color: #ffffff;
968
- background-color: #0064cd;
969
-
970
- }
971
-
972
- .ui-slider-horizontal { height: .8em; }
973
- .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; border-radius: 50%; }
974
- .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
975
- .ui-slider-horizontal .ui-slider-range-min { left: 0; }
976
- .ui-slider-horizontal .ui-slider-range-max { right: 0; }
977
-
978
- .ui-slider-vertical { width: .8em; height: 100px; }
979
- .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
980
- .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
981
- .ui-slider-vertical .ui-slider-range-min { bottom: 0; }
982
- .ui-slider-vertical .ui-slider-range-max { top: 0; }
983
-
984
- /*
985
- * jQuery UI Tabs 1.9.2
986
- *
987
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
988
- * Dual licensed under the MIT or GPL Version 2 licenses.
989
- * http://jquery.org/license
990
- *
991
- * http://jqueryui.com/tabs/
992
- */
993
- .ui-tabs .ui-tabs-nav{ background:none; border-color: #ddd;border-style: solid;border-width: 0 0 1px;}
994
- .ui-tabs { position: relative; padding: .2em; zoom: 1; border:0px;} /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
995
-
996
-
997
- .ui-tabs .ui-tabs-nav li:hover, .ui-tabs .ui-tabs-nav li a:hover{
998
- background:whiteSmoke;
999
- border-bottom:1px solid #ddd;
1000
- padding-bottom:0px;
1001
- color:#00438A;
1002
- }
1003
-
1004
- .ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; border-bottom:1px solid #DDD; }
1005
- .ui-tabs .ui-tabs-nav li { text-decoration: none; list-style: none; float: left; position: relative; top: 1px; padding: 0px 0px 1px 0px; white-space: nowrap; background:none; border:0px; }
1006
-
1007
- .ui-tabs-nav .ui-state-default{
1008
- -webkit-box-shadow: 0px 0px 0px #ffffff; /* Saf3-4, iOS 4.0.2 - 4.2, Android 2.3+ */
1009
- -moz-box-shadow: 0px 0px 0px #ffffff; /* FF3.5 - 3.6 */
1010
- box-shadow: 0px 0px 0px #ffffff; /* Opera 10.5, IE9, FF4+, Chrome 6+, iOS 5 */
1011
- }
1012
- .ui-tabs .ui-tabs-nav li a {
1013
- float: left;
1014
- text-decoration: none;
1015
- cursor: text;
1016
- padding: 0 15px;
1017
- margin-right: 2px;
1018
- line-height: 34px;
1019
- border: 1px solid transparent;
1020
- -webkit-border-radius: 2px 2px 0 0;
1021
- -moz-border-radius: 2px 2px 0 0;
1022
- border-radius: 2px 2px 0 0;
1023
-
1024
-
1025
- }
1026
-
1027
- .ui-tabs .ui-tabs-nav li.ui-tabs-active { margin-bottom: 0; padding-bottom: 0px; outline:none;}
1028
- .ui-tabs .ui-tabs-nav li.ui-tabs-active , .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a {
1029
- background-color: #ffffff;
1030
- border: 1px solid #ddd;
1031
- border-bottom-color: #ffffff;
1032
- cursor: default;
1033
- color:gray;
1034
- outline:none;
1035
- }
1036
- .ui-tabs .ui-tabs-nav li.ui-tabs-active a{background-color: #ffffff;outline:none;border:none;}
1037
- .ui-tabs .ui-tabs-nav li.ui-tabs-active:hover{
1038
- background:#ffffff;
1039
- outline:none;
1040
- margin-bottom:0px;
1041
- }
1042
- .ui-tabs .ui-tabs-nav li.ui-tabs-active a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-tabs-loading a { cursor: text; }
1043
- .ui-tabs .ui-tabs-nav li a, .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { cursor: pointer; color:#0069D6; background:none; font-weight:normal; margin-bottom:-1px;}
1044
- /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
1045
- .ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
1046
- .ui-tabs-panel .ui-button{text-decoration:none;}
1047
- .ui-tabs .ui-tabs-hide { display: none !important; }
1048
-
1049
-
1050
- /* IE fix for background inheritance from ui-widget*/
1051
- .ui-tabs .ui-tabs-nav li{
1052
- filter:none;
1053
- }
1054
-
1055
- /*
1056
- * jQuery UI Tooltip 1.9.0
1057
- *
1058
- * Copyright 2012-10-11, AUTHORS.txt (http://jqueryui.com/about)
1059
- * Dual licensed under the MIT or GPL Version 2 licenses.
1060
- * http://jquery.org/license
1061
- *
1062
- * http://jqueryui.com/tooltip/
1063
- */
1064
- .ui-tooltip {
1065
- padding:8px;
1066
- position:absolute;
1067
- z-index:9999;
1068
- max-width: 300px;
1069
- -o-box-shadow: 0 0 5px #ddd;
1070
- -moz-box-shadow: 0 0 5px #ddd;
1071
- -webkit-box-shadow: 0 0 5px #ddd;
1072
- /*box-shadow: 0 2px 5px #ddd;*/
1073
- box-shadow: inset 0 1px 0 #ffffff;
1074
- }
1075
-
1076
- body .ui-tooltip { border-width:2px; }
1077
-
1078
- /*
1079
- * jQuery UI Datepicker 1.9.0
1080
- *
1081
- * Copyright 2012-10-11, AUTHORS.txt (http://jqueryui.com/about)
1082
- * Dual licensed under the MIT or GPL Version 2 licenses.
1083
- * http://jquery.org/license
1084
- *
1085
- * http://jqueryui.com/datepicker/
1086
- */
1087
- .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
1088
- .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; border:0px; font-weight: bold; width: 100%; padding: 4px 0; background-color: #f5f5f5; color: #808080; }
1089
- .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
1090
-
1091
- .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { /*top: 1px;*/ }
1092
- .ui-datepicker .ui-datepicker-prev { left:2px; }
1093
- .ui-datepicker .ui-datepicker-next { right:2px; }
1094
-
1095
- .ui-datepicker .ui-datepicker-prev-hover { /*left:1px;*/ }
1096
- .ui-datepicker .ui-datepicker-next-hover { /*right:1px;*/ }
1097
-
1098
- .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
1099
- .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
1100
- .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
1101
- .ui-datepicker select.ui-datepicker-month-year {width: 100%;}
1102
- .ui-datepicker select.ui-datepicker-month,
1103
- .ui-datepicker select.ui-datepicker-year { width: 49%;}
1104
- .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
1105
- .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
1106
- .ui-datepicker td { border: 0; padding: 1px; }
1107
- .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
1108
- .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
1109
- .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
1110
- .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
1111
-
1112
- /* with multiple calendars */
1113
- .ui-datepicker.ui-datepicker-multi { width:auto; }
1114
- .ui-datepicker-multi .ui-datepicker-group { float:left; }
1115
- .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
1116
- .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
1117
- .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
1118
- .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
1119
- .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
1120
- .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
1121
- .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
1122
- .ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
1123
-
1124
- /* RTL support */
1125
- .ui-datepicker-rtl { direction: rtl; }
1126
- .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
1127
- .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
1128
- .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
1129
- .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
1130
- .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
1131
- .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
1132
- .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
1133
- .ui-datepicker-rtl .ui-datepicker-group { float:right; }
1134
- .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
1135
- .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
1136
-
1137
- /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
1138
- .ui-datepicker-cover {
1139
- display: none; /*sorry for IE5*/
1140
- display/**/: block; /*sorry for IE5*/
1141
- position: absolute; /*must have*/
1142
- z-index: -1; /*must have*/
1143
- filter: mask(); /*must have*/
1144
- top: -4px; /*must have*/
1145
- left: -4px; /*must have*/
1146
- width: 200px; /*must have*/
1147
- height: 200px; /*must have*/
1148
- }
1149
-
1150
- .ui-datepicker th{
1151
- font-weight: bold;
1152
- color: gray;
1153
- }
1154
-
1155
- .ui-datepicker-today a:hover{
1156
- background-color: #808080;
1157
- color: #ffffff;
1158
-
1159
- }
1160
- .ui-datepicker-today a{
1161
- background-color: #BFBFBF;
1162
- cursor: pointer;
1163
- padding: 0 4px;
1164
- margin-bottom:0px;
1165
-
1166
- }
1167
-
1168
-
1169
- .ui-datepicker td a{
1170
- margin-bottom:0px;
1171
- border:0px;
1172
- }
1173
-
1174
- .ui-datepicker td:hover{
1175
- color: #ffffff;
1176
- }
1177
-
1178
- .ui-datepicker td .ui-state-default {
1179
- border:0px;
1180
- background:none;
1181
- margin-bottom:0px;
1182
- padding:5px;
1183
- color:gray;
1184
- text-align: center;
1185
- filter:none;
1186
- }
1187
-
1188
-
1189
- .ui-datepicker td .ui-state-active{
1190
- background:#BFBFBF;
1191
- margin-bottom:0px;
1192
- font-size:normal;
1193
- color: #ffffff;
1194
- -webkit-border-radius: 2px;
1195
- -moz-border-radius: 2px;
1196
- border-radius: 2px;
1197
- }
1198
-
1199
- .ui-datepicker td .ui-state-hover {
1200
- color: #ffffff;
1201
- background: #0064cd;
1202
- background-color: #0064cd;
1203
- -webkit-border-radius: 2px;
1204
- -moz-border-radius: 2px;
1205
- -khtml-border-radius: 2px;
1206
- border-radius: 2px;
1207
- }
1208
-
1209
- /*
1210
- * jQuery UI Progressbar 1.8.16
1211
- *
1212
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
1213
- * Dual licensed under the MIT or GPL Version 2 licenses.
1214
- * http://jquery.org/license
1215
- *
1216
- * http://docs.jquery.com/UI/Progressbar#theming
1217
- */
1218
- .ui-progressbar { height:2em; text-align: left; }
1219
- .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%;
1220
-
1221
- /*this can be removed if ui-widget-header is blue*/
1222
- color: #ffffff;
1223
- background-color: #0064cd;
1224
- }
1225
-
1226
-
1227
-
1228
- /*** Input field styling from Bootstrap **/
1229
- input, textarea {
1230
- -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
1231
- -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
1232
- -ms-transition: border linear 0.2s, box-shadow linear 0.2s;
1233
- -o-transition: border linear 0.2s, box-shadow linear 0.2s;
1234
- transition: border linear 0.2s, box-shadow linear 0.2s;
1235
- -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
1236
- -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
1237
- box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
1238
- }
1239
- input:focus, textarea:focus {
1240
- outline: 0;
1241
- border-color: rgba(82, 168, 236, 0.8);
1242
- -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
1243
- -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
1244
- box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
1245
- }
1246
- input[type=file]:focus, input[type=checkbox]:focus, select:focus {
1247
- -webkit-box-shadow: none;
1248
- -moz-box-shadow: none;
1249
- box-shadow: none;
1250
- outline: 1px dotted #666;
1251
- }
1252
-
1253
- input[type="text"],
1254
- input[type="password"],
1255
- .ui-autocomplete-input,
1256
- textarea,
1257
- .uneditable-input {
1258
- display: inline-block;
1259
- padding: 4px;
1260
- font-size: 13px;
1261
- line-height: 18px;
1262
- color: #808080;
1263
- border: 1px solid #ccc;
1264
- -webkit-border-radius: 2px;
1265
- -moz-border-radius: 2px;
1266
- border-radius: 2px;
1267
- }
1268
-
1269
-
1270
-
1271
- /**Toolbar**/
1272
-
1273
- .ui-toolbar{
1274
- padding: 7px 14px;
1275
- margin: 0 0 18px;
1276
- background-color: #f5f5f5;
1277
- background-repeat: repeat-x;
1278
- background-image: -khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f5f5f5));
1279
- background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5);
1280
- background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5);
1281
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f5f5f5));
1282
- background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5);
1283
- background-image: -o-linear-gradient(top, #ffffff, #f5f5f5);
1284
- background-image: linear-gradient(top, #ffffff, #f5f5f5);
1285
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);
1286
- border: 1px solid #ddd;
1287
- -webkit-border-radius: 2px;
1288
- -moz-border-radius: 2px;
1289
- border-radius: 2px;
1290
- -webkit-box-shadow: inset 0 1px 0 #ffffff;
1291
- -moz-box-shadow: inset 0 1px 0 #ffffff;
1292
- box-shadow: inset 0 1px 0 #ffffff;
1293
- }
1294
-
1295
-
1296
- /***Dialog fixes**/
1297
-
1298
- .ui-dialog-buttonset .ui-button:nth-child(2){
1299
- cursor: pointer;
1300
- display: inline-block;
1301
- background-color: #f2f2f2;
1302
- padding: 5px 14px 6px;
1303
- color: #333;
1304
- font-size: 13px;
1305
- line-height: normal;
1306
- border: 1px solid #ccc;
1307
- border-bottom-color: #bbb;
1308
- -webkit-border-radius: 2px;
1309
- -moz-border-radius: 2px;
1310
- border-radius: 2px;
1311
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
1312
- -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
1313
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
1314
- -webkit-transition: 0.1s linear all;
1315
- -moz-transition: 0.1s linear all;
1316
- -ms-transition: 0.1s linear all;
1317
- -o-transition: 0.1s linear all;
1318
- transition: 0.1s linear all;
1319
- overflow: visible;
1320
- }
1321
-
1322
-
1323
-
1324
- /***Wijmo Theming**/
1325
-
1326
- div.wijmo-wijmenu{
1327
- padding:0 20px;
1328
- background-color: #222;
1329
- background-color: #222222;
1330
- background-repeat: repeat-x;
1331
- background-image: -khtml-gradient(linear, left top, left bottom, from(#333333), to(#222222));
1332
- background-image: -moz-linear-gradient(top, #333333, #222222);
1333
- background-image: -ms-linear-gradient(top, #333333, #222222);
1334
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #333333), color-stop(100%, #222222));
1335
- background-image: -webkit-linear-gradient(top, #333333, #222222);
1336
- background-image: -o-linear-gradient(top, #333333, #222222);
1337
- background-image: linear-gradient(top, #333333, #222222);
1338
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
1339
- -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
1340
- -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
1341
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
1342
- }
1343
-
1344
- .wijmo-wijmenu .ui-state-default{
1345
- box-shadow: none;
1346
- color:#BFBFBF;
1347
- }
1348
-
1349
- .wijmo-wijmenu .ui-state-default .wijmo-wijmenu-text{
1350
- color:#BFBFBF;
1351
- }
1352
-
1353
- .wijmo-wijmenu .ui-state-hover{
1354
- background: #444;
1355
- background: rgba(255, 255, 255, 0.05);
1356
- }
1357
-
1358
- .wijmo-wijmenu .ui-state-hover .wijmo-wijmenu-text{
1359
- color:#ffffff;
1360
- }
1361
-
1362
- div.wijmo-wijmenu .ui-widget-header h3{
1363
- position: relative;
1364
- margin-top:1px;
1365
- padding:0;
1366
- }
1367
-
1368
- .wijmo-wijmenu h3 a{
1369
- color: #FFFFFF;
1370
- display: block;
1371
- float: left;
1372
- font-size: 20px;
1373
- font-weight: 200;
1374
- line-height: 1;
1375
- margin-left: -20px;
1376
- margin-top:1px;
1377
- padding: 8px 20px 12px;
1378
- }
1379
-
1380
- .wijmo-wijmenu h3 a:hover{
1381
- background-color: rgba(255, 255, 255, 0.05);
1382
- color: #FFFFFF;
1383
- text-decoration: none;
1384
- }
1385
-
1386
- .wijmo-wijmenu .ui-widget-header{
1387
- border:0px;
1388
- }
1389
-
1390
- .wijmo-wijmenu .wijmo-wijmenu-parent .wijmo-wijmenu-child{
1391
- padding: 0.3em 0;
1392
- }
1393
-
1394
- div.wijmo-wijmenu .wijmo-wijmenu-item .wijmo-wijmenu-child{
1395
- background: #333;
1396
- border:0;
1397
- margin:0;
1398
- padding: 6px 0;
1399
- width:160px;
1400
- -webkit-border-radius: 0 0 2px 2px;
1401
- -moz-border-radius: 0 0 2px 2px;
1402
- border-radius: 0 0 2px 2px;
1403
- -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
1404
- -moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
1405
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
1406
- }
1407
-
1408
- div.wijmo-wijmenu .wijmo-wijmenu-item{
1409
- margin:0;
1410
- border:0;
1411
- }
1412
-
1413
- .wijmo-wijmenu a.wijmo-wijmenu-link{
1414
- margin:0;
1415
- line-height: 19px;
1416
- padding: 10px 10px 11px;
1417
- border:0;
1418
- -webkit-border-radius: 0;
1419
- -moz-border-radius: 0;
1420
- border-radius:0;
1421
- }
1422
-
1423
- div.wijmo-wijmenu .wijmo-wijmenu-child .wijmo-wijmenu-link{
1424
- display:block;
1425
- float:none;
1426
- padding: 4px 15px;
1427
- width:auto;
1428
- }
1429
-
1430
- div.wijmo-wijmenu .wijmo-wijmenu-child .wijmo-wijmenu-text
1431
- {
1432
- float:none;
1433
- }
1434
-
1435
- .wijmo-wijmenu .wijmo-wijmenu-item .wijmo-wijmenu-child .ui-state-hover {
1436
- background: #191919;
1437
- }
1438
-
1439
- .wijmo-wijmenu .wijmo-wijmenu-item .wijmo-wijmenu-separator{
1440
- padding: 5px 0;
1441
- background-image: none;
1442
- background-color: #222;
1443
- border-top: 1px solid #444;
1444
- border-bottom:0;
1445
- border-left:0;
1446
- border-right:0;
1447
- }
1448
-
1449
- .wijmo-wijmenu .wijmo-wijmenu-item input {
1450
- -moz-transition: none 0s ease 0s;
1451
- background-color: rgba(255, 255, 255, 0.3);
1452
- border: 1px solid #111111;
1453
- border-radius: 2px;
1454
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) inset, 0 1px 0 rgba(255, 255, 255, 0.25);
1455
- color: rgba(255, 255, 255, 0.75);
1456
- font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
1457
- line-height: 1;
1458
- margin: 5px 10px 0 10px;
1459
- padding: 4px 9px;
1460
- width:100px;
1461
- }
1462
-
1463
- .wijmo-wijmenu .wijmo-wijmenu-item input:hover {
1464
- background-color: rgba(255, 255, 255, 0.5);
1465
- color: #FFFFFF;
1466
- }
1467
-
1468
- .wijmo-wijmenu .wijmo-wijmenu-item input:focus {
1469
- background-color: #FFFFFF;
1470
- border: 0 none;
1471
- box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
1472
- color: #404040;
1473
- outline: 0 none;
1474
- padding: 5px 10px;
1475
- }
1476
-
1477
- .wijmo-wijmenu .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {
1478
- text-shadow:none;
1479
- }
1480
-
1481
- .wijmo-wijmenu .ui-state-default{
1482
- box-shadow: none;
1483
- color:#BFBFBF;
1484
- filter: none;
1485
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/images/ui-bg_flat_0_aaaaaa_40x100.png DELETED
Binary file
assets/images/ui-bg_glass_55_fbf9ee_1x400.png DELETED
Binary file
assets/images/ui-bg_glass_65_ffffff_1x400.png DELETED
Binary file
assets/images/ui-bg_glass_75_dadada_1x400.png DELETED
Binary file
assets/images/ui-bg_glass_75_e6e6e6_1x400.png DELETED
Binary file
assets/images/ui-bg_glass_75_ffffff_1x400.png DELETED
Binary file
assets/images/ui-bg_highlight-soft_75_cccccc_1x100.png DELETED
Binary file
assets/images/ui-bg_inset-soft_95_fef1ec_1x100.png DELETED
Binary file
assets/images/ui-icons_222222_256x240.png DELETED
Binary file
assets/images/ui-icons_2e83ff_256x240.png DELETED
Binary file
assets/images/ui-icons_454545_256x240.png DELETED
Binary file
assets/images/ui-icons_888888_256x240.png DELETED
Binary file
assets/images/ui-icons_cd0a0a_256x240.png DELETED
Binary file
assets/images/ui-icons_f6cf3b_256x240.png DELETED
Binary file
assets/js/customizer.js CHANGED
@@ -60,3 +60,60 @@ function kirkiUpdateSortable(ul) {
60
  });
61
  ul.siblings('input').eq(0).val( serialize( values ) ).trigger('change');
62
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  });
61
  ul.siblings('input').eq(0).val( serialize( values ) ).trigger('change');
62
  }
63
+
64
+
65
+ ( function( $ ) {
66
+ wp.customizerCtrlEditor = {
67
+
68
+ init: function() {
69
+
70
+ $(window).load(function(){
71
+
72
+ $('textarea.wp-editor-area').each(function(){
73
+ var tArea = $(this),
74
+ id = tArea.attr('id'),
75
+ input = $('input[data-customize-setting-link="'+ id +'"]'),
76
+ editor = tinyMCE.get(id),
77
+ setChange,
78
+ content;
79
+
80
+ if(editor){
81
+ editor.onChange.add(function (ed, e) {
82
+ ed.save();
83
+ content = editor.getContent();
84
+ clearTimeout(setChange);
85
+ setChange = setTimeout(function(){
86
+ input.val(content).trigger('change');
87
+ },500);
88
+ });
89
+ }
90
+
91
+ if(editor){
92
+ editor.onChange.add(function (ed, e) {
93
+ ed.save();
94
+ content = editor.getContent();
95
+ clearTimeout(setChange);
96
+ setChange = setTimeout(function(){
97
+ input.val(content).trigger('change');
98
+ },500);
99
+ });
100
+ }
101
+
102
+ tArea.css({
103
+ visibility: 'visible'
104
+ }).on('keyup', function(){
105
+ content = tArea.val();
106
+ clearTimeout(setChange);
107
+ setChange = setTimeout(function(){
108
+ input.val(content).trigger('change');
109
+ },500);
110
+ });
111
+ });
112
+ });
113
+ }
114
+
115
+ };
116
+
117
+ wp.customizerCtrlEditor.init();
118
+
119
+ } )( jQuery );
assets/xml/colourlovers-top.xml ADDED
@@ -0,0 +1,2501 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2
+ <palettes numResults="100" totalResults="1000">
3
+ <palette>
4
+ <id>3483276</id>
5
+ <title><![CDATA[Lovely Love]]></title>
6
+ <userName><![CDATA[tmo51]]></userName>
7
+ <numViews>5731</numViews>
8
+ <numVotes>16777215</numVotes>
9
+ <numComments>4</numComments>
10
+ <numHearts>0</numHearts>
11
+ <rank>0</rank>
12
+ <dateCreated>2014-09-13 23:27:06</dateCreated>
13
+ <colors>
14
+ <hex>DB3E3E</hex>
15
+ <hex>030000</hex>
16
+ <hex>E97070</hex>
17
+ <hex>FEBCA3</hex>
18
+ <hex>6E0E0E</hex>
19
+ </colors>
20
+ <description><![CDATA[]]></description>
21
+ <url><![CDATA[http://www.colourlovers.com/palette/3483276/Lovely_Love]]></url>
22
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/DB3E3E/030000/E97070/FEBCA3/6E0E0E/Lovely_Love.png]]></imageUrl>
23
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/3483/3483276_Lovely_Love.png]]></badgeUrl>
24
+ <apiUrl>http://www.colourlovers.com/api/palette/3483276</apiUrl>
25
+ </palette>
26
+ <palette>
27
+ <id>3609015</id>
28
+ <title><![CDATA[Indie Lemon]]></title>
29
+ <userName><![CDATA[M00nSlippers]]></userName>
30
+ <numViews>9528</numViews>
31
+ <numVotes>16777215</numVotes>
32
+ <numComments>14</numComments>
33
+ <numHearts>0</numHearts>
34
+ <rank>0</rank>
35
+ <dateCreated>2015-01-05 18:38:22</dateCreated>
36
+ <colors>
37
+ <hex>D7E8D5</hex>
38
+ <hex>E6F0AF</hex>
39
+ <hex>E8ED76</hex>
40
+ <hex>FFCD57</hex>
41
+ <hex>4A3A47</hex>
42
+ </colors>
43
+ <description><![CDATA[]]></description>
44
+ <url><![CDATA[http://www.colourlovers.com/palette/3609015/Indie_Lemon]]></url>
45
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/D7E8D5/E6F0AF/E8ED76/FFCD57/4A3A47/Indie_Lemon.png]]></imageUrl>
46
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/3609/3609015_Indie_Lemon.png]]></badgeUrl>
47
+ <apiUrl>http://www.colourlovers.com/api/palette/3609015</apiUrl>
48
+ </palette>
49
+ <palette>
50
+ <id>92095</id>
51
+ <title><![CDATA[Giant Goldfish]]></title>
52
+ <userName><![CDATA[manekineko]]></userName>
53
+ <numViews>669347</numViews>
54
+ <numVotes>9647</numVotes>
55
+ <numComments>732</numComments>
56
+ <numHearts>4.5</numHearts>
57
+ <rank>1</rank>
58
+ <dateCreated>2007-07-03 10:42:02</dateCreated>
59
+ <colors>
60
+ <hex>69D2E7</hex>
61
+ <hex>A7DBD8</hex>
62
+ <hex>E0E4CC</hex>
63
+ <hex>F38630</hex>
64
+ <hex>FA6900</hex>
65
+ </colors>
66
+ <description><![CDATA[]]></description>
67
+ <url><![CDATA[http://www.colourlovers.com/palette/92095/Giant_Goldfish]]></url>
68
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/69D2E7/A7DBD8/E0E4CC/F38630/FA6900/Giant_Goldfish.png]]></imageUrl>
69
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/92/92095_Giant_Goldfish.png]]></badgeUrl>
70
+ <apiUrl>http://www.colourlovers.com/api/palette/92095</apiUrl>
71
+ </palette>
72
+ <palette>
73
+ <id>629637</id>
74
+ <title><![CDATA[(◕〝◕)]]></title>
75
+ <userName><![CDATA[sugar!]]></userName>
76
+ <numViews>247609</numViews>
77
+ <numVotes>7142</numVotes>
78
+ <numComments>382</numComments>
79
+ <numHearts>5</numHearts>
80
+ <rank>2</rank>
81
+ <dateCreated>2008-12-02 09:31:23</dateCreated>
82
+ <colors>
83
+ <hex>FE4365</hex>
84
+ <hex>FC9D9A</hex>
85
+ <hex>F9CDAD</hex>
86
+ <hex>C8C8A9</hex>
87
+ <hex>83AF9B</hex>
88
+ </colors>
89
+ <description><![CDATA[*plays happy music*
90
+
91
+ To all sugar lovers out there, sugar hearts you! ♥
92
+
93
+ Cheers,
94
+ (◕〝◕) sugar!!
95
+
96
+ <a href="http://www.colourlovers.com/palette/629637/(◕〝◕)?c=1" target="_blank"><img src="http://www.colourlovers.com/images/badges/pw/629/629637_().png" style="width: 240px; height: 120px; border: 0 none;" alt="(◕〝◕)" /></a>
97
+ <a href="http://www.colourlovers.com/palette/629637/(◕〝◕)" target="_blank"><img src="http://www.colourlovers.com/images/badges/p/629/629637_().png" style="width: 240px; height: 120px; border: 0 none;" alt="(◕〝◕)" /></a>
98
+ <a href="http://www.colourlovers.com/pattern/302242/(◕〝◕)" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/302/302242_().png" style="width: 240px; height: 120px; border: 0 none;" alt="(◕〝◕)" /></a>
99
+ <a href="http://www.colourlovers.com/pattern/306013/(◕〝◕)" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/306/306013_().png" style="width: 240px; height: 120px; border: 0 none;" alt="(◕〝◕)" /></a>]]></description>
100
+ <url><![CDATA[http://www.colourlovers.com/palette/629637/(◕〝◕)]]></url>
101
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/FE4365/FC9D9A/F9CDAD/C8C8A9/83AF9B/(◕〝◕).png]]></imageUrl>
102
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/629/629637_().png]]></badgeUrl>
103
+ <apiUrl>http://www.colourlovers.com/api/palette/629637</apiUrl>
104
+ </palette>
105
+ <palette>
106
+ <id>694737</id>
107
+ <title><![CDATA[Thought Provoking]]></title>
108
+ <userName><![CDATA[Miss_Anthropy]]></userName>
109
+ <numViews>311209</numViews>
110
+ <numVotes>6765</numVotes>
111
+ <numComments>381</numComments>
112
+ <numHearts>5</numHearts>
113
+ <rank>3</rank>
114
+ <dateCreated>2009-02-03 16:46:36</dateCreated>
115
+ <colors>
116
+ <hex>ECD078</hex>
117
+ <hex>D95B43</hex>
118
+ <hex>C02942</hex>
119
+ <hex>542437</hex>
120
+ <hex>53777A</hex>
121
+ </colors>
122
+ <description><![CDATA[A theme palette centered around the word thought.]]></description>
123
+ <url><![CDATA[http://www.colourlovers.com/palette/694737/Thought_Provoking]]></url>
124
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/ECD078/D95B43/C02942/542437/53777A/Thought_Provoking.png]]></imageUrl>
125
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/694/694737_Thought_Provoking.png]]></badgeUrl>
126
+ <apiUrl>http://www.colourlovers.com/api/palette/694737</apiUrl>
127
+ </palette>
128
+ <palette>
129
+ <id>1930</id>
130
+ <title><![CDATA[cheer up emo kid]]></title>
131
+ <userName><![CDATA[electrikmonk]]></userName>
132
+ <numViews>314973</numViews>
133
+ <numVotes>5654</numVotes>
134
+ <numComments>242</numComments>
135
+ <numHearts>3.5</numHearts>
136
+ <rank>4</rank>
137
+ <dateCreated>2005-08-20 06:19:40</dateCreated>
138
+ <colors>
139
+ <hex>556270</hex>
140
+ <hex>4ECDC4</hex>
141
+ <hex>C7F464</hex>
142
+ <hex>FF6B6B</hex>
143
+ <hex>C44D58</hex>
144
+ </colors>
145
+ <description><![CDATA[]]></description>
146
+ <url><![CDATA[http://www.colourlovers.com/palette/1930/cheer_up_emo_kid]]></url>
147
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/556270/4ECDC4/C7F464/FF6B6B/C44D58/cheer_up_emo_kid.png]]></imageUrl>
148
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/1/1930_cheer_up_emo_kid.png]]></badgeUrl>
149
+ <apiUrl>http://www.colourlovers.com/api/palette/1930</apiUrl>
150
+ </palette>
151
+ <palette>
152
+ <id>49963</id>
153
+ <title><![CDATA[let them eat cake]]></title>
154
+ <userName><![CDATA[lunalein]]></userName>
155
+ <numViews>189995</numViews>
156
+ <numVotes>4705</numVotes>
157
+ <numComments>276</numComments>
158
+ <numHearts>5</numHearts>
159
+ <rank>6</rank>
160
+ <dateCreated>2007-03-01 11:08:04</dateCreated>
161
+ <colors>
162
+ <hex>774F38</hex>
163
+ <hex>E08E79</hex>
164
+ <hex>F1D4AF</hex>
165
+ <hex>ECE5CE</hex>
166
+ <hex>C5E0DC</hex>
167
+ </colors>
168
+ <description><![CDATA[Sofia Coppola started it!]]></description>
169
+ <url><![CDATA[http://www.colourlovers.com/palette/49963/let_them_eat_cake]]></url>
170
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/774F38/E08E79/F1D4AF/ECE5CE/C5E0DC/let_them_eat_cake.png]]></imageUrl>
171
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/49/49963_let_them_eat_cake.png]]></badgeUrl>
172
+ <apiUrl>http://www.colourlovers.com/api/palette/49963</apiUrl>
173
+ </palette>
174
+ <palette>
175
+ <id>292482</id>
176
+ <title><![CDATA[Terra?]]></title>
177
+ <userName><![CDATA[GlueStudio]]></userName>
178
+ <numViews>233022</numViews>
179
+ <numVotes>4182</numVotes>
180
+ <numComments>564</numComments>
181
+ <numHearts>4.5</numHearts>
182
+ <rank>7</rank>
183
+ <dateCreated>2008-02-29 08:37:21</dateCreated>
184
+ <colors>
185
+ <hex>E8DDCB</hex>
186
+ <hex>CDB380</hex>
187
+ <hex>036564</hex>
188
+ <hex>033649</hex>
189
+ <hex>031634</hex>
190
+ </colors>
191
+ <description><![CDATA[The Heart]]></description>
192
+ <url><![CDATA[http://www.colourlovers.com/palette/292482/Terra]]></url>
193
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/E8DDCB/CDB380/036564/033649/031634/Terra.png]]></imageUrl>
194
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/292/292482_Terra.png]]></badgeUrl>
195
+ <apiUrl>http://www.colourlovers.com/api/palette/292482</apiUrl>
196
+ </palette>
197
+ <palette>
198
+ <id>848743</id>
199
+ <title><![CDATA[(◕ ” ◕)]]></title>
200
+ <userName><![CDATA[sugar!]]></userName>
201
+ <numViews>178299</numViews>
202
+ <numVotes>3966</numVotes>
203
+ <numComments>266</numComments>
204
+ <numHearts>4.5</numHearts>
205
+ <rank>9</rank>
206
+ <dateCreated>2009-06-05 00:38:14</dateCreated>
207
+ <colors>
208
+ <hex>490A3D</hex>
209
+ <hex>BD1550</hex>
210
+ <hex>E97F02</hex>
211
+ <hex>F8CA00</hex>
212
+ <hex>8A9B0F</hex>
213
+ </colors>
214
+ <description><![CDATA[*plays happy music*
215
+
216
+ To all sugar lovers out there, sugar hearts you! ♥
217
+
218
+ Cheers,
219
+ (◕〝◕) sugar!!
220
+
221
+
222
+ ** Sugar is not much good at colours any more. Sorry, everyone!]]></description>
223
+ <url><![CDATA[http://www.colourlovers.com/palette/848743/(◕_”_◕)]]></url>
224
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/490A3D/BD1550/E97F02/F8CA00/8A9B0F/(◕_”_◕).png]]></imageUrl>
225
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/848/848743_(__).png]]></badgeUrl>
226
+ <apiUrl>http://www.colourlovers.com/api/palette/848743</apiUrl>
227
+ </palette>
228
+ <palette>
229
+ <id>443995</id>
230
+ <title><![CDATA[i demand a pancake]]></title>
231
+ <userName><![CDATA[alpen]]></userName>
232
+ <numViews>151228</numViews>
233
+ <numVotes>3859</numVotes>
234
+ <numComments>414</numComments>
235
+ <numHearts>5</numHearts>
236
+ <rank>10</rank>
237
+ <dateCreated>2008-07-03 13:30:31</dateCreated>
238
+ <colors>
239
+ <hex>594F4F</hex>
240
+ <hex>547980</hex>
241
+ <hex>45ADA8</hex>
242
+ <hex>9DE0AD</hex>
243
+ <hex>E5FCC2</hex>
244
+ </colors>
245
+ <description><![CDATA[]]></description>
246
+ <url><![CDATA[http://www.colourlovers.com/palette/443995/i_demand_a_pancake]]></url>
247
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/594F4F/547980/45ADA8/9DE0AD/E5FCC2/i_demand_a_pancake.png]]></imageUrl>
248
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/443/443995_i_demand_a_pancake.png]]></badgeUrl>
249
+ <apiUrl>http://www.colourlovers.com/api/palette/443995</apiUrl>
250
+ </palette>
251
+ <palette>
252
+ <id>1473</id>
253
+ <title><![CDATA[Ocean Five]]></title>
254
+ <userName><![CDATA[DESIGNJUNKEE]]></userName>
255
+ <numViews>192023</numViews>
256
+ <numVotes>3660</numVotes>
257
+ <numComments>107</numComments>
258
+ <numHearts>0</numHearts>
259
+ <rank>11</rank>
260
+ <dateCreated>2005-08-13 14:25:49</dateCreated>
261
+ <colors>
262
+ <hex>00A0B0</hex>
263
+ <hex>6A4A3C</hex>
264
+ <hex>CC333F</hex>
265
+ <hex>EB6841</hex>
266
+ <hex>EDC951</hex>
267
+ </colors>
268
+ <description><![CDATA[]]></description>
269
+ <url><![CDATA[http://www.colourlovers.com/palette/1473/Ocean_Five]]></url>
270
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/00A0B0/6A4A3C/CC333F/EB6841/EDC951/Ocean_Five.png]]></imageUrl>
271
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/1/1473_Ocean_Five.png]]></badgeUrl>
272
+ <apiUrl>http://www.colourlovers.com/api/palette/1473</apiUrl>
273
+ </palette>
274
+ <palette>
275
+ <id>867235</id>
276
+ <title><![CDATA[LoversInJapan]]></title>
277
+ <userName><![CDATA[lovelyrita]]></userName>
278
+ <numViews>103725</numViews>
279
+ <numVotes>3351</numVotes>
280
+ <numComments>129</numComments>
281
+ <numHearts>4.5</numHearts>
282
+ <rank>12</rank>
283
+ <dateCreated>2009-06-21 16:16:32</dateCreated>
284
+ <colors>
285
+ <hex>E94E77</hex>
286
+ <hex>D68189</hex>
287
+ <hex>C6A49A</hex>
288
+ <hex>C6E5D9</hex>
289
+ <hex>F4EAD5</hex>
290
+ </colors>
291
+ <description><![CDATA[]]></description>
292
+ <url><![CDATA[http://www.colourlovers.com/palette/867235/LoversInJapan]]></url>
293
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/E94E77/D68189/C6A49A/C6E5D9/F4EAD5/LoversInJapan.png]]></imageUrl>
294
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/867/867235_LoversInJapan.png]]></badgeUrl>
295
+ <apiUrl>http://www.colourlovers.com/api/palette/867235</apiUrl>
296
+ </palette>
297
+ <palette>
298
+ <id>77121</id>
299
+ <title><![CDATA[Good Friends]]></title>
300
+ <userName><![CDATA[Yasmino]]></userName>
301
+ <numViews>172819</numViews>
302
+ <numVotes>3141</numVotes>
303
+ <numComments>106</numComments>
304
+ <numHearts>5</numHearts>
305
+ <rank>13</rank>
306
+ <dateCreated>2007-06-01 14:42:04</dateCreated>
307
+ <colors>
308
+ <hex>D9CEB2</hex>
309
+ <hex>948C75</hex>
310
+ <hex>D5DED9</hex>
311
+ <hex>7A6A53</hex>
312
+ <hex>99B2B7</hex>
313
+ </colors>
314
+ <description><![CDATA[Good friends are hard to find, harder to leave, and impossible to forget.]]></description>
315
+ <url><![CDATA[http://www.colourlovers.com/palette/77121/Good_Friends]]></url>
316
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/D9CEB2/948C75/D5DED9/7A6A53/99B2B7/Good_Friends.png]]></imageUrl>
317
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/77/77121_Good_Friends.png]]></badgeUrl>
318
+ <apiUrl>http://www.colourlovers.com/api/palette/77121</apiUrl>
319
+ </palette>
320
+ <palette>
321
+ <id>932683</id>
322
+ <title><![CDATA[Compatible]]></title>
323
+ <userName><![CDATA[joy_of_summer]]></userName>
324
+ <numViews>111737</numViews>
325
+ <numVotes>3004</numVotes>
326
+ <numComments>112</numComments>
327
+ <numHearts>5</numHearts>
328
+ <rank>16</rank>
329
+ <dateCreated>2009-08-22 02:38:51</dateCreated>
330
+ <colors>
331
+ <hex>3FB8AF</hex>
332
+ <hex>7FC7AF</hex>
333
+ <hex>DAD8A7</hex>
334
+ <hex>FF9E9D</hex>
335
+ <hex>FF3D7F</hex>
336
+ </colors>
337
+ <description><![CDATA[]]></description>
338
+ <url><![CDATA[http://www.colourlovers.com/palette/932683/Compatible]]></url>
339
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/3FB8AF/7FC7AF/DAD8A7/FF9E9D/FF3D7F/Compatible.png]]></imageUrl>
340
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/932/932683_Compatible.png]]></badgeUrl>
341
+ <apiUrl>http://www.colourlovers.com/api/palette/932683</apiUrl>
342
+ </palette>
343
+ <palette>
344
+ <id>359978</id>
345
+ <title><![CDATA[w o r d l e s s .]]></title>
346
+ <userName><![CDATA[tvr]]></userName>
347
+ <numViews>132714</numViews>
348
+ <numVotes>2993</numVotes>
349
+ <numComments>227</numComments>
350
+ <numHearts>5</numHearts>
351
+ <rank>14</rank>
352
+ <dateCreated>2008-05-01 15:49:22</dateCreated>
353
+ <colors>
354
+ <hex>FFFFFF</hex>
355
+ <hex>CBE86B</hex>
356
+ <hex>F2E9E1</hex>
357
+ <hex>1C140D</hex>
358
+ <hex>CBE86B</hex>
359
+ </colors>
360
+ <description><![CDATA[]]></description>
361
+ <url><![CDATA[http://www.colourlovers.com/palette/359978/w_o_r_d_l_e_s_s_.]]></url>
362
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/FFFFFF/CBE86B/F2E9E1/1C140D/CBE86B/w_o_r_d_l_e_s_s_..png]]></imageUrl>
363
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/359/359978_w_o_r_d_l_e_s_s_..png]]></badgeUrl>
364
+ <apiUrl>http://www.colourlovers.com/api/palette/359978</apiUrl>
365
+ </palette>
366
+ <palette>
367
+ <id>444487</id>
368
+ <title><![CDATA[Curiosity Killed]]></title>
369
+ <userName><![CDATA[Miaka]]></userName>
370
+ <numViews>109778</numViews>
371
+ <numVotes>2949</numVotes>
372
+ <numComments>189</numComments>
373
+ <numHearts>5</numHearts>
374
+ <rank>15</rank>
375
+ <dateCreated>2008-07-03 18:47:51</dateCreated>
376
+ <colors>
377
+ <hex>EFFFCD</hex>
378
+ <hex>DCE9BE</hex>
379
+ <hex>555152</hex>
380
+ <hex>2E2633</hex>
381
+ <hex>99173C</hex>
382
+ </colors>
383
+ <description><![CDATA[Curiosity Killed- From season 4 of Tales from the Crypt (my fave show).
384
+
385
+ #18 in my TFTC Series.]]></description>
386
+ <url><![CDATA[http://www.colourlovers.com/palette/444487/Curiosity_Killed]]></url>
387
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/EFFFCD/DCE9BE/555152/2E2633/99173C/Curiosity_Killed.png]]></imageUrl>
388
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/444/444487_Curiosity_Killed.png]]></badgeUrl>
389
+ <apiUrl>http://www.colourlovers.com/api/palette/444487</apiUrl>
390
+ </palette>
391
+ <palette>
392
+ <id>482774</id>
393
+ <title><![CDATA[dream magnet]]></title>
394
+ <userName><![CDATA[lagunabeach]]></userName>
395
+ <numViews>146796</numViews>
396
+ <numVotes>2551</numVotes>
397
+ <numComments>201</numComments>
398
+ <numHearts>0</numHearts>
399
+ <rank>17</rank>
400
+ <dateCreated>2008-08-01 19:26:37</dateCreated>
401
+ <colors>
402
+ <hex>343838</hex>
403
+ <hex>005F6B</hex>
404
+ <hex>008C9E</hex>
405
+ <hex>00B4CC</hex>
406
+ <hex>00DFFC</hex>
407
+ </colors>
408
+ <description><![CDATA[]]></description>
409
+ <url><![CDATA[http://www.colourlovers.com/palette/482774/dream_magnet]]></url>
410
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/343838/005F6B/008C9E/00B4CC/00DFFC/dream_magnet.png]]></imageUrl>
411
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/482/482774_dream_magnet.png]]></badgeUrl>
412
+ <apiUrl>http://www.colourlovers.com/api/palette/482774</apiUrl>
413
+ </palette>
414
+ <palette>
415
+ <id>723615</id>
416
+ <title><![CDATA[clairedelune]]></title>
417
+ <userName><![CDATA[lovelyrita]]></userName>
418
+ <numViews>74492</numViews>
419
+ <numVotes>2501</numVotes>
420
+ <numComments>177</numComments>
421
+ <numHearts>5</numHearts>
422
+ <rank>18</rank>
423
+ <dateCreated>2009-02-26 21:33:49</dateCreated>
424
+ <colors>
425
+ <hex>413E4A</hex>
426
+ <hex>73626E</hex>
427
+ <hex>B38184</hex>
428
+ <hex>F0B49E</hex>
429
+ <hex>F7E4BE</hex>
430
+ </colors>
431
+ <description><![CDATA[]]></description>
432
+ <url><![CDATA[http://www.colourlovers.com/palette/723615/clairedelune]]></url>
433
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/413E4A/73626E/B38184/F0B49E/F7E4BE/clairedelune.png]]></imageUrl>
434
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/723/723615_clairedelune.png]]></badgeUrl>
435
+ <apiUrl>http://www.colourlovers.com/api/palette/723615</apiUrl>
436
+ </palette>
437
+ <palette>
438
+ <id>1098589</id>
439
+ <title><![CDATA[coup de grâce]]></title>
440
+ <userName><![CDATA[pseudonympho]]></userName>
441
+ <numViews>64884</numViews>
442
+ <numVotes>2336</numVotes>
443
+ <numComments>59</numComments>
444
+ <numHearts>4.5</numHearts>
445
+ <rank>19</rank>
446
+ <dateCreated>2010-02-04 18:22:24</dateCreated>
447
+ <colors>
448
+ <hex>99B898</hex>
449
+ <hex>FECEA8</hex>
450
+ <hex>FF847C</hex>
451
+ <hex>E84A5F</hex>
452
+ <hex>2A363B</hex>
453
+ </colors>
454
+ <description><![CDATA[]]></description>
455
+ <url><![CDATA[http://www.colourlovers.com/palette/1098589/coup_de_grâce]]></url>
456
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/99B898/FECEA8/FF847C/E84A5F/2A363B/coup_de_grâce.png]]></imageUrl>
457
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/1098/1098589_coup_de_grce.png]]></badgeUrl>
458
+ <apiUrl>http://www.colourlovers.com/api/palette/1098589</apiUrl>
459
+ </palette>
460
+ <palette>
461
+ <id>937624</id>
462
+ <title><![CDATA[Dance To Forget]]></title>
463
+ <userName><![CDATA[joy_of_summer]]></userName>
464
+ <numViews>101344</numViews>
465
+ <numVotes>2185</numVotes>
466
+ <numComments>52</numComments>
467
+ <numHearts>5</numHearts>
468
+ <rank>20</rank>
469
+ <dateCreated>2009-08-27 03:25:37</dateCreated>
470
+ <colors>
471
+ <hex>FF4E50</hex>
472
+ <hex>FC913A</hex>
473
+ <hex>F9D423</hex>
474
+ <hex>EDE574</hex>
475
+ <hex>E1F5C4</hex>
476
+ </colors>
477
+ <description><![CDATA[]]></description>
478
+ <url><![CDATA[http://www.colourlovers.com/palette/937624/Dance_To_Forget]]></url>
479
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/FF4E50/FC913A/F9D423/EDE574/E1F5C4/Dance_To_Forget.png]]></imageUrl>
480
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/937/937624_Dance_To_Forget.png]]></badgeUrl>
481
+ <apiUrl>http://www.colourlovers.com/api/palette/937624</apiUrl>
482
+ </palette>
483
+ <palette>
484
+ <id>940086</id>
485
+ <title><![CDATA[mystery machine]]></title>
486
+ <userName><![CDATA[valeryanaglz]]></userName>
487
+ <numViews>66423</numViews>
488
+ <numVotes>2151</numVotes>
489
+ <numComments>101</numComments>
490
+ <numHearts>5</numHearts>
491
+ <rank>21</rank>
492
+ <dateCreated>2009-08-29 11:04:04</dateCreated>
493
+ <colors>
494
+ <hex>554236</hex>
495
+ <hex>F77825</hex>
496
+ <hex>D3CE3D</hex>
497
+ <hex>F1EFA5</hex>
498
+ <hex>60B99A</hex>
499
+ </colors>
500
+ <description><![CDATA[<a href="http://www.colourlovers.com/palette/940086/mystery_machine?c=1" target="_blank"><img src="http://www.colourlovers.com/images/badges/pw/940/940086_mystery_machine.png" style="width: 240px; height: 120px; border: 0 none;" alt="mystery_machine" /></a>
501
+ <a href="http://www.colourlovers.com/pattern/622752/mystery_machine" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/622/622752_mystery_machine.png" style="width: 240px; height: 120px; border: 0 none;" alt="mystery_machine" /></a>
502
+ <a href="http://www.colourlovers.com/palette/993798/mystery_machine?c=1" target="_blank"><img src="http://www.colourlovers.com/images/badges/pw/993/993798_mystery_machine.png" style="width: 240px; height: 120px; border: 0 none;" alt="mystery_machine" /></a>
503
+ <a href="http://www.colourlovers.com/palette/993801/mystery_machine?c=1" target="_blank"><img src="http://www.colourlovers.com/images/badges/pw/993/993801_mystery_machine.png" style="width: 240px; height: 120px; border: 0 none;" alt="mystery_machine" /></a>
504
+ <a href="http://www.colourlovers.com/palette/993800/mystery_machine?c=1" target="_blank"><img src="http://www.colourlovers.com/images/badges/pw/993/993800_mystery_machine.png" style="width: 240px; height: 120px; border: 0 none;" alt="mystery_machine" /></a>
505
+ <a href="http://www.colourlovers.com/palette/993799/mystery_machine?c=1" target="_blank"><img src="http://www.colourlovers.com/images/badges/pw/993/993799_mystery_machine.png" style="width: 240px; height: 120px; border: 0 none;" alt="mystery_machine" /></a>
506
+ <a href="http://www.colourlovers.com/palette/993802/mystery_machine?c=1" target="_blank"><img src="http://www.colourlovers.com/images/badges/pw/993/993802_mystery_machine.png" style="width: 240px; height: 120px; border: 0 none;" alt="mystery_machine" /></a>
507
+
508
+ the wonderful pattern of candycrack
509
+ <a href="http://www.colourlovers.com/pattern/182/Mystery_Machine" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/0/182_Mystery_Machine.png" style="width: 240px; height: 120px; border: 0 none;" alt="Mystery_Machine" /></a>]]></description>
510
+ <url><![CDATA[http://www.colourlovers.com/palette/940086/mystery_machine]]></url>
511
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/554236/F77825/D3CE3D/F1EFA5/60B99A/mystery_machine.png]]></imageUrl>
512
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/940/940086_mystery_machine.png]]></badgeUrl>
513
+ <apiUrl>http://www.colourlovers.com/api/palette/940086</apiUrl>
514
+ </palette>
515
+ <palette>
516
+ <id>379413</id>
517
+ <title><![CDATA[you are beautiful]]></title>
518
+ <userName><![CDATA[Sanguine]]></userName>
519
+ <numViews>72566</numViews>
520
+ <numVotes>2091</numVotes>
521
+ <numComments>81</numComments>
522
+ <numHearts>5</numHearts>
523
+ <rank>22</rank>
524
+ <dateCreated>2008-05-17 01:20:13</dateCreated>
525
+ <colors>
526
+ <hex>351330</hex>
527
+ <hex>424254</hex>
528
+ <hex>64908A</hex>
529
+ <hex>E8CAA4</hex>
530
+ <hex>CC2A41</hex>
531
+ </colors>
532
+ <description><![CDATA[Yes you, right there, reading this: you are beautiful.
533
+
534
+ Smile.]]></description>
535
+ <url><![CDATA[http://www.colourlovers.com/palette/379413/you_are_beautiful]]></url>
536
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/351330/424254/64908A/E8CAA4/CC2A41/you_are_beautiful.png]]></imageUrl>
537
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/379/379413_you_are_beautiful.png]]></badgeUrl>
538
+ <apiUrl>http://www.colourlovers.com/api/palette/379413</apiUrl>
539
+ </palette>
540
+ <palette>
541
+ <id>46688</id>
542
+ <title><![CDATA[fresh cut day]]></title>
543
+ <userName><![CDATA[electrikmonk]]></userName>
544
+ <numViews>108616</numViews>
545
+ <numVotes>2030</numVotes>
546
+ <numComments>60</numComments>
547
+ <numHearts>0</numHearts>
548
+ <rank>24</rank>
549
+ <dateCreated>2007-02-08 23:25:19</dateCreated>
550
+ <colors>
551
+ <hex>00A8C6</hex>
552
+ <hex>40C0CB</hex>
553
+ <hex>F9F2E7</hex>
554
+ <hex>AEE239</hex>
555
+ <hex>8FBE00</hex>
556
+ </colors>
557
+ <description><![CDATA[]]></description>
558
+ <url><![CDATA[http://www.colourlovers.com/palette/46688/fresh_cut_day]]></url>
559
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/00A8C6/40C0CB/F9F2E7/AEE239/8FBE00/fresh_cut_day.png]]></imageUrl>
560
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/46/46688_fresh_cut_day.png]]></badgeUrl>
561
+ <apiUrl>http://www.colourlovers.com/api/palette/46688</apiUrl>
562
+ </palette>
563
+ <palette>
564
+ <id>953498</id>
565
+ <title><![CDATA[Headache]]></title>
566
+ <userName><![CDATA[joy_of_summer]]></userName>
567
+ <numViews>93464</numViews>
568
+ <numVotes>1983</numVotes>
569
+ <numComments>30</numComments>
570
+ <numHearts>5</numHearts>
571
+ <rank>26</rank>
572
+ <dateCreated>2009-09-11 08:20:27</dateCreated>
573
+ <colors>
574
+ <hex>655643</hex>
575
+ <hex>80BCA3</hex>
576
+ <hex>F6F7BD</hex>
577
+ <hex>E6AC27</hex>
578
+ <hex>BF4D28</hex>
579
+ </colors>
580
+ <description><![CDATA[]]></description>
581
+ <url><![CDATA[http://www.colourlovers.com/palette/953498/Headache]]></url>
582
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/655643/80BCA3/F6F7BD/E6AC27/BF4D28/Headache.png]]></imageUrl>
583
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/953/953498_Headache.png]]></badgeUrl>
584
+ <apiUrl>http://www.colourlovers.com/api/palette/953498</apiUrl>
585
+ </palette>
586
+ <palette>
587
+ <id>482416</id>
588
+ <title><![CDATA[Wasabi Suicide]]></title>
589
+ <userName><![CDATA[Miaka]]></userName>
590
+ <numViews>58988</numViews>
591
+ <numVotes>1957</numVotes>
592
+ <numComments>161</numComments>
593
+ <numHearts>5</numHearts>
594
+ <rank>25</rank>
595
+ <dateCreated>2008-08-01 14:53:42</dateCreated>
596
+ <colors>
597
+ <hex>FF4242</hex>
598
+ <hex>F4FAD2</hex>
599
+ <hex>D4EE5E</hex>
600
+ <hex>E1EDB9</hex>
601
+ <hex>F0F2EB</hex>
602
+ </colors>
603
+ <description><![CDATA[]]></description>
604
+ <url><![CDATA[http://www.colourlovers.com/palette/482416/Wasabi_Suicide]]></url>
605
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/FF4242/F4FAD2/D4EE5E/E1EDB9/F0F2EB/Wasabi_Suicide.png]]></imageUrl>
606
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/482/482416_Wasabi_Suicide.png]]></badgeUrl>
607
+ <apiUrl>http://www.colourlovers.com/api/palette/482416</apiUrl>
608
+ </palette>
609
+ <palette>
610
+ <id>110225</id>
611
+ <title><![CDATA[Vintage Modern]]></title>
612
+ <userName><![CDATA[ericaspooner]]></userName>
613
+ <numViews>110397</numViews>
614
+ <numVotes>1948</numVotes>
615
+ <numComments>95</numComments>
616
+ <numHearts>5</numHearts>
617
+ <rank>27</rank>
618
+ <dateCreated>2007-08-01 11:47:38</dateCreated>
619
+ <colors>
620
+ <hex>8C2318</hex>
621
+ <hex>5E8C6A</hex>
622
+ <hex>88A65E</hex>
623
+ <hex>BFB35A</hex>
624
+ <hex>F2C45A</hex>
625
+ </colors>
626
+ <description><![CDATA[]]></description>
627
+ <url><![CDATA[http://www.colourlovers.com/palette/110225/Vintage_Modern]]></url>
628
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/8C2318/5E8C6A/88A65E/BFB35A/F2C45A/Vintage_Modern.png]]></imageUrl>
629
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/110/110225_Vintage_Modern.png]]></badgeUrl>
630
+ <apiUrl>http://www.colourlovers.com/api/palette/110225</apiUrl>
631
+ </palette>
632
+ <palette>
633
+ <id>131576</id>
634
+ <title><![CDATA[Maddening Caravan]]></title>
635
+ <userName><![CDATA[manekineko]]></userName>
636
+ <numViews>63126</numViews>
637
+ <numVotes>1930</numVotes>
638
+ <numComments>104</numComments>
639
+ <numHearts>5</numHearts>
640
+ <rank>28</rank>
641
+ <dateCreated>2007-08-29 19:18:57</dateCreated>
642
+ <colors>
643
+ <hex>FAD089</hex>
644
+ <hex>FF9C5B</hex>
645
+ <hex>F5634A</hex>
646
+ <hex>ED303C</hex>
647
+ <hex>3B8183</hex>
648
+ </colors>
649
+ <description><![CDATA[<br /><br />This palette reached #89 in September 2007.<br /><br />This palette reached #34 in October 2007.<br /><br />This palette reached #37 in February 2008.<br /><br />This palette reached #82 in March 2008.<br /><br />This palette reached #83 in April 2008.<BR /><BR />This palette reached #24 in May 2008.<br /><br />This palette reached #61 in June 2008.<br /><br />This palette reached #6 in July 2008.<br /><br />This palette reached #22 in August 2008.<br /><br />This palette reached #22 in September 2008.<br /><br />This palette reached #22 in October 2008.<br /><br />This palette reached #19 in November 2008.<br /><br />This palette reached #21 in December 2008.<br /><br />This palette reached #32 in March 2009.<br /><br />This palette reached #37 in April 2009.<br /><br />This palette reached #25 in May 2009.<br /><br />This palette reached #50 in June 2009.<br /><br />This palette reached #34 in July 2009.<br /><br />This palette reached #25 in August 2009.<br /><br />This palette reached #24 in September 2009.<br /><br />
650
+
651
+ <br /><br />The Caravan locates its debatable cash source below the pretty amateur.<br /><br />]]></description>
652
+ <url><![CDATA[http://www.colourlovers.com/palette/131576/Maddening_Caravan]]></url>
653
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/FAD089/FF9C5B/F5634A/ED303C/3B8183/Maddening_Caravan.png]]></imageUrl>
654
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/131/131576_Maddening_Caravan.png]]></badgeUrl>
655
+ <apiUrl>http://www.colourlovers.com/api/palette/131576</apiUrl>
656
+ </palette>
657
+ <palette>
658
+ <id>15</id>
659
+ <title><![CDATA[tech light]]></title>
660
+ <userName><![CDATA[COLOURlover]]></userName>
661
+ <numViews>140641</numViews>
662
+ <numVotes>1874</numVotes>
663
+ <numComments>59</numComments>
664
+ <numHearts>4.5</numHearts>
665
+ <rank>31</rank>
666
+ <dateCreated>2004-12-29 20:08:40</dateCreated>
667
+ <colors>
668
+ <hex>D1E751</hex>
669
+ <hex>FFFFFF</hex>
670
+ <hex>000000</hex>
671
+ <hex>4DBCE9</hex>
672
+ <hex>26ADE4</hex>
673
+ </colors>
674
+ <description><![CDATA[i found these colours in a banner ad for i think AT&T. these were a few of the colours that i thuoght worked well.]]></description>
675
+ <url><![CDATA[http://www.colourlovers.com/palette/15/tech_light]]></url>
676
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/D1E751/FFFFFF/000000/4DBCE9/26ADE4/tech_light.png]]></imageUrl>
677
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/0/15_tech_light.png]]></badgeUrl>
678
+ <apiUrl>http://www.colourlovers.com/api/palette/15</apiUrl>
679
+ </palette>
680
+ <palette>
681
+ <id>522000</id>
682
+ <title><![CDATA[Storming Psychedelia]]></title>
683
+ <userName><![CDATA[Bionic Blender]]></userName>
684
+ <numViews>61191</numViews>
685
+ <numVotes>1833</numVotes>
686
+ <numComments>200</numComments>
687
+ <numHearts>5</numHearts>
688
+ <rank>30</rank>
689
+ <dateCreated>2008-09-02 07:37:49</dateCreated>
690
+ <colors>
691
+ <hex>BCBDAC</hex>
692
+ <hex>CFBE27</hex>
693
+ <hex>F27435</hex>
694
+ <hex>F02475</hex>
695
+ <hex>3B2D38</hex>
696
+ </colors>
697
+ <description><![CDATA[]]></description>
698
+ <url><![CDATA[http://www.colourlovers.com/palette/522000/Storming_Psychedelia]]></url>
699
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/BCBDAC/CFBE27/F27435/F02475/3B2D38/Storming_Psychedelia.png]]></imageUrl>
700
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/522/522000_Storming_Psychedelia.png]]></badgeUrl>
701
+ <apiUrl>http://www.colourlovers.com/api/palette/522000</apiUrl>
702
+ </palette>
703
+ <palette>
704
+ <id>148712</id>
705
+ <title><![CDATA[Gamebookers]]></title>
706
+ <userName><![CDATA[plamenj]]></userName>
707
+ <numViews>153833</numViews>
708
+ <numVotes>1808</numVotes>
709
+ <numComments>25</numComments>
710
+ <numHearts>0</numHearts>
711
+ <rank>32</rank>
712
+ <dateCreated>2007-09-19 08:10:02</dateCreated>
713
+ <colors>
714
+ <hex>FF9900</hex>
715
+ <hex>424242</hex>
716
+ <hex>E9E9E9</hex>
717
+ <hex>BCBCBC</hex>
718
+ <hex>3299BB</hex>
719
+ </colors>
720
+ <description><![CDATA[Orange highlights on a comforting grey background
721
+
722
+ Sports betting premium site]]></description>
723
+ <url><![CDATA[http://www.colourlovers.com/palette/148712/Gamebookers]]></url>
724
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/FF9900/424242/E9E9E9/BCBCBC/3299BB/Gamebookers.png]]></imageUrl>
725
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/148/148712_Gamebookers.png]]></badgeUrl>
726
+ <apiUrl>http://www.colourlovers.com/api/palette/148712</apiUrl>
727
+ </palette>
728
+ <palette>
729
+ <id>944213</id>
730
+ <title><![CDATA[forever lost]]></title>
731
+ <userName><![CDATA[agia]]></userName>
732
+ <numViews>44042</numViews>
733
+ <numVotes>1805</numVotes>
734
+ <numComments>61</numComments>
735
+ <numHearts>5</numHearts>
736
+ <rank>33</rank>
737
+ <dateCreated>2009-09-02 04:59:44</dateCreated>
738
+ <colors>
739
+ <hex>5D4157</hex>
740
+ <hex>838689</hex>
741
+ <hex>A8CABA</hex>
742
+ <hex>CAD7B2</hex>
743
+ <hex>EBE3AA</hex>
744
+ </colors>
745
+ <description><![CDATA[<a href="http://www.colourlovers.com/palette/944213/forever_lost?c=1" target="_blank"><img src="http://www.colourlovers.com/images/badges/pw/944/944213_forever_lost.png" style="width: 240px; height: 120px; border: 0 none;" alt="forever_lost" /></a>]]></description>
746
+ <url><![CDATA[http://www.colourlovers.com/palette/944213/forever_lost]]></url>
747
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/5D4157/838689/A8CABA/CAD7B2/EBE3AA/forever_lost.png]]></imageUrl>
748
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/944/944213_forever_lost.png]]></badgeUrl>
749
+ <apiUrl>http://www.colourlovers.com/api/palette/944213</apiUrl>
750
+ </palette>
751
+ <palette>
752
+ <id>919313</id>
753
+ <title><![CDATA[Papua New Guinea]]></title>
754
+ <userName><![CDATA[smitt]]></userName>
755
+ <numViews>58098</numViews>
756
+ <numVotes>1669</numVotes>
757
+ <numComments>41</numComments>
758
+ <numHearts>4.5</numHearts>
759
+ <rank>35</rank>
760
+ <dateCreated>2009-08-09 11:13:12</dateCreated>
761
+ <colors>
762
+ <hex>5E412F</hex>
763
+ <hex>FCEBB6</hex>
764
+ <hex>78C0A8</hex>
765
+ <hex>F07818</hex>
766
+ <hex>F0A830</hex>
767
+ </colors>
768
+ <description><![CDATA[]]></description>
769
+ <url><![CDATA[http://www.colourlovers.com/palette/919313/Papua_New_Guinea]]></url>
770
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/5E412F/FCEBB6/78C0A8/F07818/F0A830/Papua_New_Guinea.png]]></imageUrl>
771
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/919/919313_Papua_New_Guinea.png]]></badgeUrl>
772
+ <apiUrl>http://www.colourlovers.com/api/palette/919313</apiUrl>
773
+ </palette>
774
+ <palette>
775
+ <id>1811244</id>
776
+ <title><![CDATA[1001 Stories]]></title>
777
+ <userName><![CDATA[GabsGiggles]]></userName>
778
+ <numViews>22770</numViews>
779
+ <numVotes>1603</numVotes>
780
+ <numComments>135</numComments>
781
+ <numHearts>0</numHearts>
782
+ <rank>38</rank>
783
+ <dateCreated>2011-10-19 01:22:54</dateCreated>
784
+ <colors>
785
+ <hex>F8B195</hex>
786
+ <hex>F67280</hex>
787
+ <hex>C06C84</hex>
788
+ <hex>6C5B7B</hex>
789
+ <hex>355C7D</hex>
790
+ </colors>
791
+ <description><![CDATA[This palette is dedicated to each one of my 1,000+ followers. I'm grateful for the love and support over these last 7 months. 1001 different worlds to learn from.
792
+ Thank you so much, Gabrielle❤
793
+
794
+ -❤-]]></description>
795
+ <url><![CDATA[http://www.colourlovers.com/palette/1811244/1001_Stories]]></url>
796
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/F8B195/F67280/C06C84/6C5B7B/355C7D/1001_Stories.png]]></imageUrl>
797
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/1811/1811244_1001_Stories.png]]></badgeUrl>
798
+ <apiUrl>http://www.colourlovers.com/api/palette/1811244</apiUrl>
799
+ </palette>
800
+ <palette>
801
+ <id>871636</id>
802
+ <title><![CDATA[A Dream in Color]]></title>
803
+ <userName><![CDATA[madmod001]]></userName>
804
+ <numViews>112169</numViews>
805
+ <numVotes>1594</numVotes>
806
+ <numComments>97</numComments>
807
+ <numHearts>5</numHearts>
808
+ <rank>37</rank>
809
+ <dateCreated>2009-06-25 08:00:12</dateCreated>
810
+ <colors>
811
+ <hex>1B676B</hex>
812
+ <hex>519548</hex>
813
+ <hex>88C425</hex>
814
+ <hex>BEF202</hex>
815
+ <hex>EAFDE6</hex>
816
+ </colors>
817
+ <description><![CDATA[Had a dream last night about colors, don't seem to recall the exact details, however i do remember this Palette vividly.]]></description>
818
+ <url><![CDATA[http://www.colourlovers.com/palette/871636/A_Dream_in_Color]]></url>
819
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/1B676B/519548/88C425/BEF202/EAFDE6/A_Dream_in_Color.png]]></imageUrl>
820
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/871/871636_A_Dream_in_Color.png]]></badgeUrl>
821
+ <apiUrl>http://www.colourlovers.com/api/palette/871636</apiUrl>
822
+ </palette>
823
+ <palette>
824
+ <id>90734</id>
825
+ <title><![CDATA[Newly Risen Moon]]></title>
826
+ <userName><![CDATA[Steph6]]></userName>
827
+ <numViews>56173</numViews>
828
+ <numVotes>1567</numVotes>
829
+ <numComments>131</numComments>
830
+ <numHearts>5</numHearts>
831
+ <rank>36</rank>
832
+ <dateCreated>2007-07-01 00:33:24</dateCreated>
833
+ <colors>
834
+ <hex>EEE6AB</hex>
835
+ <hex>C5BC8E</hex>
836
+ <hex>696758</hex>
837
+ <hex>45484B</hex>
838
+ <hex>36393B</hex>
839
+ </colors>
840
+ <description><![CDATA[]]></description>
841
+ <url><![CDATA[http://www.colourlovers.com/palette/90734/Newly_Risen_Moon]]></url>
842
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/EEE6AB/C5BC8E/696758/45484B/36393B/Newly_Risen_Moon.png]]></imageUrl>
843
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/90/90734_Newly_Risen_Moon.png]]></badgeUrl>
844
+ <apiUrl>http://www.colourlovers.com/api/palette/90734</apiUrl>
845
+ </palette>
846
+ <palette>
847
+ <id>594151</id>
848
+ <title><![CDATA[t r a n c e]]></title>
849
+ <userName><![CDATA[electroluv]]></userName>
850
+ <numViews>43643</numViews>
851
+ <numVotes>1482</numVotes>
852
+ <numComments>125</numComments>
853
+ <numHearts>5</numHearts>
854
+ <rank>39</rank>
855
+ <dateCreated>2008-11-01 08:36:29</dateCreated>
856
+ <colors>
857
+ <hex>452632</hex>
858
+ <hex>91204D</hex>
859
+ <hex>E4844A</hex>
860
+ <hex>E8BF56</hex>
861
+ <hex>E2F7CE</hex>
862
+ </colors>
863
+ <description><![CDATA[]]></description>
864
+ <url><![CDATA[http://www.colourlovers.com/palette/594151/t_r_a_n_c_e]]></url>
865
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/452632/91204D/E4844A/E8BF56/E2F7CE/t_r_a_n_c_e.png]]></imageUrl>
866
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/594/594151_t_r_a_n_c_e.png]]></badgeUrl>
867
+ <apiUrl>http://www.colourlovers.com/api/palette/594151</apiUrl>
868
+ </palette>
869
+ <palette>
870
+ <id>1097823</id>
871
+ <title><![CDATA[Lena's Love Letter]]></title>
872
+ <userName><![CDATA[LovelyLena]]></userName>
873
+ <numViews>38526</numViews>
874
+ <numVotes>1435</numVotes>
875
+ <numComments>60</numComments>
876
+ <numHearts>4.5</numHearts>
877
+ <rank>40</rank>
878
+ <dateCreated>2010-02-04 02:13:53</dateCreated>
879
+ <colors>
880
+ <hex>F04155</hex>
881
+ <hex>FF823A</hex>
882
+ <hex>F2F26F</hex>
883
+ <hex>FFF7BD</hex>
884
+ <hex>95CFB7</hex>
885
+ </colors>
886
+ <description><![CDATA[To: My Dearest Lovely Lovers
887
+
888
+ I would like to like to thank you all ,my awesome, wonderful, lovely lovers, so very much for all the love and support you give me. I would also like to thank you all for always inspiring me, brightening up my dull days and for letting me know that someone cares. I am so very grateful to you all.
889
+ So from the bottom of the muscular organ that pumps blood throughout my blood vessels, a.k.a my heart, thank you!
890
+
891
+ L❤VE,
892
+ Lena
893
+
894
+ P.s- I know this is really cheesy and tacky, but I'm no good with this touchy talking about your feelings stuff so no need tell me what I already know and stuff. It's embarrassing enough I even let myself post it.
895
+
896
+ Ranked #3 on 2.4.2010
897
+ Ranked #1 on 2.15.2010]]></description>
898
+ <url><![CDATA[http://www.colourlovers.com/palette/1097823/Lenas_Love_Letter]]></url>
899
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/F04155/FF823A/F2F26F/FFF7BD/95CFB7/Lenas_Love_Letter.png]]></imageUrl>
900
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/1097/1097823_Lenas_Love_Letter.png]]></badgeUrl>
901
+ <apiUrl>http://www.colourlovers.com/api/palette/1097823</apiUrl>
902
+ </palette>
903
+ <palette>
904
+ <id>656966</id>
905
+ <title><![CDATA[Koi Carp]]></title>
906
+ <userName><![CDATA[Tzadkiel]]></userName>
907
+ <numViews>58546</numViews>
908
+ <numVotes>1407</numVotes>
909
+ <numComments>104</numComments>
910
+ <numHearts>5</numHearts>
911
+ <rank>41</rank>
912
+ <dateCreated>2008-12-29 15:04:22</dateCreated>
913
+ <colors>
914
+ <hex>F0D8A8</hex>
915
+ <hex>3D1C00</hex>
916
+ <hex>86B8B1</hex>
917
+ <hex>F2D694</hex>
918
+ <hex>FA2A00</hex>
919
+ </colors>
920
+ <description><![CDATA[]]></description>
921
+ <url><![CDATA[http://www.colourlovers.com/palette/656966/Koi_Carp]]></url>
922
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/F0D8A8/3D1C00/86B8B1/F2D694/FA2A00/Koi_Carp.png]]></imageUrl>
923
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/656/656966_Koi_Carp.png]]></badgeUrl>
924
+ <apiUrl>http://www.colourlovers.com/api/palette/656966</apiUrl>
925
+ </palette>
926
+ <palette>
927
+ <id>81885</id>
928
+ <title><![CDATA[Hymn For My Soul]]></title>
929
+ <userName><![CDATA[faded jeans]]></userName>
930
+ <numViews>76969</numViews>
931
+ <numVotes>1387</numVotes>
932
+ <numComments>124</numComments>
933
+ <numHearts>5</numHearts>
934
+ <rank>42</rank>
935
+ <dateCreated>2007-06-13 02:51:01</dateCreated>
936
+ <colors>
937
+ <hex>2A044A</hex>
938
+ <hex>0B2E59</hex>
939
+ <hex>0D6759</hex>
940
+ <hex>7AB317</hex>
941
+ <hex>A0C55F</hex>
942
+ </colors>
943
+ <description><![CDATA[spiritual, deep, passionate, energetic, alive, celebratory
944
+
945
+ Hymn For My Soul CD - latest by Joe Cocker;
946
+ Heard a couple of tracks off this new cd today and really enjoyed hearing the old guy again -- very nice]]></description>
947
+ <url><![CDATA[http://www.colourlovers.com/palette/81885/Hymn_For_My_Soul]]></url>
948
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/2A044A/0B2E59/0D6759/7AB317/A0C55F/Hymn_For_My_Soul.png]]></imageUrl>
949
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/81/81885_Hymn_For_My_Soul.png]]></badgeUrl>
950
+ <apiUrl>http://www.colourlovers.com/api/palette/81885</apiUrl>
951
+ </palette>
952
+ <palette>
953
+ <id>559428</id>
954
+ <title><![CDATA[lucky bubble gum]]></title>
955
+ <userName><![CDATA[tvr]]></userName>
956
+ <numViews>61341</numViews>
957
+ <numVotes>1342</numVotes>
958
+ <numComments>300</numComments>
959
+ <numHearts>5</numHearts>
960
+ <rank>43</rank>
961
+ <dateCreated>2008-10-02 15:28:27</dateCreated>
962
+ <colors>
963
+ <hex>67917A</hex>
964
+ <hex>170409</hex>
965
+ <hex>B8AF03</hex>
966
+ <hex>CCBF82</hex>
967
+ <hex>E33258</hex>
968
+ </colors>
969
+ <description><![CDATA[2 n 2 with alpen
970
+
971
+ round 6 . season 7]]></description>
972
+ <url><![CDATA[http://www.colourlovers.com/palette/559428/lucky_bubble_gum]]></url>
973
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/67917A/170409/B8AF03/CCBF82/E33258/lucky_bubble_gum.png]]></imageUrl>
974
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/559/559428_lucky_bubble_gum.png]]></badgeUrl>
975
+ <apiUrl>http://www.colourlovers.com/api/palette/559428</apiUrl>
976
+ </palette>
977
+ <palette>
978
+ <id>903157</id>
979
+ <title><![CDATA[Entrapped InAPalette]]></title>
980
+ <userName><![CDATA[annajak]]></userName>
981
+ <numViews>49604</numViews>
982
+ <numVotes>1332</numVotes>
983
+ <numComments>214</numComments>
984
+ <numHearts>4.5</numHearts>
985
+ <rank>45</rank>
986
+ <dateCreated>2009-07-25 11:45:43</dateCreated>
987
+ <colors>
988
+ <hex>B9D7D9</hex>
989
+ <hex>668284</hex>
990
+ <hex>2A2829</hex>
991
+ <hex>493736</hex>
992
+ <hex>7B3B3B</hex>
993
+ </colors>
994
+ <description><![CDATA[World entrapped in a palette.
995
+
996
+
997
+ 20 Oct, 2009.
998
+ For my friend <strong><a href="http://www.colourlovers.com/lover/GlueStudio">GlueStudio</a></strong>: because he's the fan n.1 of this palette and because he's a treasure!
999
+ <3
1000
+
1001
+ Use Image:
1002
+ <img src="http://static.colourlovers.com/images/palettes/903/903157u.jpg" alt=" " />]]></description>
1003
+ <url><![CDATA[http://www.colourlovers.com/palette/903157/Entrapped_InAPalette]]></url>
1004
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/B9D7D9/668284/2A2829/493736/7B3B3B/Entrapped_InAPalette.png]]></imageUrl>
1005
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/903/903157_Entrapped_InAPalette.png]]></badgeUrl>
1006
+ <apiUrl>http://www.colourlovers.com/api/palette/903157</apiUrl>
1007
+ </palette>
1008
+ <palette>
1009
+ <id>87946</id>
1010
+ <title><![CDATA[Very]]></title>
1011
+ <userName><![CDATA[manekineko]]></userName>
1012
+ <numViews>26858</numViews>
1013
+ <numVotes>1289</numVotes>
1014
+ <numComments>104</numComments>
1015
+ <numHearts>0</numHearts>
1016
+ <rank>46</rank>
1017
+ <dateCreated>2007-06-26 01:20:34</dateCreated>
1018
+ <colors>
1019
+ <hex>BBBB88</hex>
1020
+ <hex>CCC68D</hex>
1021
+ <hex>EEDD99</hex>
1022
+ <hex>EEC290</hex>
1023
+ <hex>EEAA88</hex>
1024
+ </colors>
1025
+ <description><![CDATA[<br /><br />This palette reached #4 in August 2007.<br /><br />This palette reached #22 in September 2007.<br /><br />This palette reached #18 in October 2007.<br /><br />This palette reached #23 in November 2007.<br /><br />This palette reached #17 in December 2007.<br /><br />This palette reached #15 in January 2008.<br /><br />This palette reached #43 in February 2008.<br /><br />This palette reached #26 in March 2008.<br /><br />his palette reached #20 in April 2008.<BR /><BR />This palette reached #20 in May 2008.<br /><br />This palette reached #35 in June 2008.<br /><br />This palette reached #32 in July 2008.<br /><br />This palette reached #26 in August 2008.<br /><br />This palette reached #25 in September 2008.<br /><br />This palette reached #26 in October 2008.<br /><br />This palette reached #21 in November 2008.<br /><br />This palette reached #25 in December 2008.<br /><br />This palette reached #35 in March 2009.<br /><br />This palette reached #39 in April 2009.<br /><br />This palette reached #27 in May 2009.<br /><br />This palette reached #53 in June 2009.<br /><br />This palette reached #36 in July 2009.<br /><br />This palette reached #29 in August 2009.<br /><br />This palette reached #27 in September 2009.<br /><br />
1026
+
1027
+ <br /><br />The galactic bomb sweeps under the unsupported alliance.<br /><br />]]></description>
1028
+ <url><![CDATA[http://www.colourlovers.com/palette/87946/Very]]></url>
1029
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/BBBB88/CCC68D/EEDD99/EEC290/EEAA88/Very.png]]></imageUrl>
1030
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/87/87946_Very.png]]></badgeUrl>
1031
+ <apiUrl>http://www.colourlovers.com/api/palette/87946</apiUrl>
1032
+ </palette>
1033
+ <palette>
1034
+ <id>845564</id>
1035
+ <title><![CDATA[it's raining love]]></title>
1036
+ <userName><![CDATA[tvr]]></userName>
1037
+ <numViews>38794</numViews>
1038
+ <numVotes>1284</numVotes>
1039
+ <numComments>76</numComments>
1040
+ <numHearts>5</numHearts>
1041
+ <rank>47</rank>
1042
+ <dateCreated>2009-06-02 15:54:01</dateCreated>
1043
+ <colors>
1044
+ <hex>A3A948</hex>
1045
+ <hex>EDB92E</hex>
1046
+ <hex>F85931</hex>
1047
+ <hex>CE1836</hex>
1048
+ <hex>009989</hex>
1049
+ </colors>
1050
+ <description><![CDATA[I love you.]]></description>
1051
+ <url><![CDATA[http://www.colourlovers.com/palette/845564/its_raining_love]]></url>
1052
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/A3A948/EDB92E/F85931/CE1836/009989/its_raining_love.png]]></imageUrl>
1053
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/845/845564_its_raining_love.png]]></badgeUrl>
1054
+ <apiUrl>http://www.colourlovers.com/api/palette/845564</apiUrl>
1055
+ </palette>
1056
+ <palette>
1057
+ <id>540619</id>
1058
+ <title><![CDATA[Funny Like the Moon]]></title>
1059
+ <userName><![CDATA[GlueStudio]]></userName>
1060
+ <numViews>35202</numViews>
1061
+ <numVotes>1231</numVotes>
1062
+ <numComments>120</numComments>
1063
+ <numHearts>5</numHearts>
1064
+ <rank>48</rank>
1065
+ <dateCreated>2008-09-17 06:44:28</dateCreated>
1066
+ <colors>
1067
+ <hex>E8D5B7</hex>
1068
+ <hex>0E2430</hex>
1069
+ <hex>FC3A51</hex>
1070
+ <hex>F5B349</hex>
1071
+ <hex>E8D5B9</hex>
1072
+ </colors>
1073
+ <description><![CDATA[]]></description>
1074
+ <url><![CDATA[http://www.colourlovers.com/palette/540619/Funny_Like_the_Moon]]></url>
1075
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/E8D5B7/0E2430/FC3A51/F5B349/E8D5B9/Funny_Like_the_Moon.png]]></imageUrl>
1076
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/540/540619_Funny_Like_the_Moon.png]]></badgeUrl>
1077
+ <apiUrl>http://www.colourlovers.com/api/palette/540619</apiUrl>
1078
+ </palette>
1079
+ <palette>
1080
+ <id>962376</id>
1081
+ <title><![CDATA[I like your Smile]]></title>
1082
+ <userName><![CDATA[joy_of_summer]]></userName>
1083
+ <numViews>53859</numViews>
1084
+ <numVotes>1201</numVotes>
1085
+ <numComments>20</numComments>
1086
+ <numHearts>5</numHearts>
1087
+ <rank>50</rank>
1088
+ <dateCreated>2009-09-20 14:46:18</dateCreated>
1089
+ <colors>
1090
+ <hex>B3CC57</hex>
1091
+ <hex>ECF081</hex>
1092
+ <hex>FFBE40</hex>
1093
+ <hex>EF746F</hex>
1094
+ <hex>AB3E5B</hex>
1095
+ </colors>
1096
+ <description><![CDATA[]]></description>
1097
+ <url><![CDATA[http://www.colourlovers.com/palette/962376/I_like_your_Smile]]></url>
1098
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/B3CC57/ECF081/FFBE40/EF746F/AB3E5B/I_like_your_Smile.png]]></imageUrl>
1099
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/962/962376_I_like_your_Smile.png]]></badgeUrl>
1100
+ <apiUrl>http://www.colourlovers.com/api/palette/962376</apiUrl>
1101
+ </palette>
1102
+ <palette>
1103
+ <id>634148</id>
1104
+ <title><![CDATA[Thumbelina]]></title>
1105
+ <userName><![CDATA[angelafaye]]></userName>
1106
+ <numViews>24810</numViews>
1107
+ <numVotes>1188</numVotes>
1108
+ <numComments>121</numComments>
1109
+ <numHearts>5</numHearts>
1110
+ <rank>52</rank>
1111
+ <dateCreated>2008-12-06 15:47:57</dateCreated>
1112
+ <colors>
1113
+ <hex>AB526B</hex>
1114
+ <hex>BCA297</hex>
1115
+ <hex>C5CEAE</hex>
1116
+ <hex>F0E2A4</hex>
1117
+ <hex>F4EBC3</hex>
1118
+ </colors>
1119
+ <description><![CDATA[a tribute to Lacey
1120
+ a series of Fairy Tales
1121
+ chosen colour of the day
1122
+ <a href="http://www.colourlovers.com/color/F4EBC3/snow" target="_blank"><img src="http://www.colourlovers.com/images/badges/c/1603/1603453_snow.png" style="width: 240px; height: 120px; border: 0 none;" alt="snow" /></a>
1123
+
1124
+ <a href="http://www.colourlovers.com/palette/634148/Thumbelina?c=1" target="_blank"><img src="http://www.colourlovers.com/images/badges/pw/634/634148_Thumbelina.png" style="width: 240px; height: 120px; border: 0 none;" alt="Thumbelina" /></a>
1125
+ <a href="http://www.colourlovers.com/pattern/306324/Thumbelina" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/306/306324_Thumbelina.png" style="width: 240px; height: 120px; border: 0 none;" alt="Thumbelina" /></a>]]></description>
1126
+ <url><![CDATA[http://www.colourlovers.com/palette/634148/Thumbelina]]></url>
1127
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/AB526B/BCA297/C5CEAE/F0E2A4/F4EBC3/Thumbelina.png]]></imageUrl>
1128
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/634/634148_Thumbelina.png]]></badgeUrl>
1129
+ <apiUrl>http://www.colourlovers.com/api/palette/634148</apiUrl>
1130
+ </palette>
1131
+ <palette>
1132
+ <id>100694</id>
1133
+ <title><![CDATA[Machu Picchu]]></title>
1134
+ <userName><![CDATA[ruecian]]></userName>
1135
+ <numViews>65277</numViews>
1136
+ <numVotes>1151</numVotes>
1137
+ <numComments>35</numComments>
1138
+ <numHearts>0</numHearts>
1139
+ <rank>54</rank>
1140
+ <dateCreated>2007-07-18 07:58:13</dateCreated>
1141
+ <colors>
1142
+ <hex>607848</hex>
1143
+ <hex>789048</hex>
1144
+ <hex>C0D860</hex>
1145
+ <hex>F0F0D8</hex>
1146
+ <hex>604848</hex>
1147
+ </colors>
1148
+ <description><![CDATA[http://www.new7wonders.com/index.php?id=373]]></description>
1149
+ <url><![CDATA[http://www.colourlovers.com/palette/100694/Machu_Picchu]]></url>
1150
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/607848/789048/C0D860/F0F0D8/604848/Machu_Picchu.png]]></imageUrl>
1151
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/100/100694_Machu_Picchu.png]]></badgeUrl>
1152
+ <apiUrl>http://www.colourlovers.com/api/palette/100694</apiUrl>
1153
+ </palette>
1154
+ <palette>
1155
+ <id>174686</id>
1156
+ <title><![CDATA[She Is French, Yes?]]></title>
1157
+ <userName><![CDATA[circuscarnival]]></userName>
1158
+ <numViews>59869</numViews>
1159
+ <numVotes>1144</numVotes>
1160
+ <numComments>77</numComments>
1161
+ <numHearts>5</numHearts>
1162
+ <rank>56</rank>
1163
+ <dateCreated>2007-10-14 23:39:23</dateCreated>
1164
+ <colors>
1165
+ <hex>3E4147</hex>
1166
+ <hex>FFFEDF</hex>
1167
+ <hex>DFBA69</hex>
1168
+ <hex>5A2E2E</hex>
1169
+ <hex>2A2C31</hex>
1170
+ </colors>
1171
+ <description><![CDATA[Elle est française, oui?]]></description>
1172
+ <url><![CDATA[http://www.colourlovers.com/palette/174686/She_Is_French_Yes]]></url>
1173
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/3E4147/FFFEDF/DFBA69/5A2E2E/2A2C31/She_Is_French_Yes.png]]></imageUrl>
1174
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/174/174686_She_Is_French_Yes.png]]></badgeUrl>
1175
+ <apiUrl>http://www.colourlovers.com/api/palette/174686</apiUrl>
1176
+ </palette>
1177
+ <palette>
1178
+ <id>1</id>
1179
+ <title><![CDATA[metro]]></title>
1180
+ <userName><![CDATA[COLOURlover]]></userName>
1181
+ <numViews>71135</numViews>
1182
+ <numVotes>1131</numVotes>
1183
+ <numComments>42</numComments>
1184
+ <numHearts>5</numHearts>
1185
+ <rank>55</rank>
1186
+ <dateCreated>2004-12-27 14:53:30</dateCreated>
1187
+ <colors>
1188
+ <hex>515151</hex>
1189
+ <hex>FFFFFF</hex>
1190
+ <hex>00B4FF</hex>
1191
+ <hex>EEEEEE</hex>
1192
+ </colors>
1193
+ <description><![CDATA[Our first palette. I made this with the colors I was using on a site I was building for Metrosexual Men. (Yes, this was back when I was in fashion school and the metro trend was on full... My eyebrows were well shaped back then too :)]]></description>
1194
+ <url><![CDATA[http://www.colourlovers.com/palette/1/metro]]></url>
1195
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/515151/FFFFFF/00B4FF/EEEEEE/metro.png]]></imageUrl>
1196
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/0/1_metro.png]]></badgeUrl>
1197
+ <apiUrl>http://www.colourlovers.com/api/palette/1</apiUrl>
1198
+ </palette>
1199
+ <palette>
1200
+ <id>301154</id>
1201
+ <title><![CDATA[Influenza]]></title>
1202
+ <userName><![CDATA[Miaka]]></userName>
1203
+ <numViews>38126</numViews>
1204
+ <numVotes>1105</numVotes>
1205
+ <numComments>97</numComments>
1206
+ <numHearts>5</numHearts>
1207
+ <rank>58</rank>
1208
+ <dateCreated>2008-03-09 23:02:58</dateCreated>
1209
+ <colors>
1210
+ <hex>300030</hex>
1211
+ <hex>480048</hex>
1212
+ <hex>601848</hex>
1213
+ <hex>C04848</hex>
1214
+ <hex>F07241</hex>
1215
+ </colors>
1216
+ <description><![CDATA[]]></description>
1217
+ <url><![CDATA[http://www.colourlovers.com/palette/301154/Influenza]]></url>
1218
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/300030/480048/601848/C04848/F07241/Influenza.png]]></imageUrl>
1219
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/301/301154_Influenza.png]]></badgeUrl>
1220
+ <apiUrl>http://www.colourlovers.com/api/palette/301154</apiUrl>
1221
+ </palette>
1222
+ <palette>
1223
+ <id>1058739</id>
1224
+ <title><![CDATA[[p] Wintry Magic]]></title>
1225
+ <userName><![CDATA[Xxtayce]]></userName>
1226
+ <numViews>41177</numViews>
1227
+ <numVotes>1087</numVotes>
1228
+ <numComments>37</numComments>
1229
+ <numHearts>5</numHearts>
1230
+ <rank>63</rank>
1231
+ <dateCreated>2009-12-24 23:31:25</dateCreated>
1232
+ <colors>
1233
+ <hex>AAB3AB</hex>
1234
+ <hex>C4CBB7</hex>
1235
+ <hex>EBEFC9</hex>
1236
+ <hex>EEE0B7</hex>
1237
+ <hex>E8CAAF</hex>
1238
+ </colors>
1239
+ <description><![CDATA[Merry Christmas to all my lovers!
1240
+
1241
+ Sometimes the smallest things can bring the biggest memories. Happy Holidays!]]></description>
1242
+ <url><![CDATA[http://www.colourlovers.com/palette/1058739/[p]_Wintry_Magic]]></url>
1243
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/AAB3AB/C4CBB7/EBEFC9/EEE0B7/E8CAAF/[p]_Wintry_Magic.png]]></imageUrl>
1244
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/1058/1058739_[p]_Wintry_Magic.png]]></badgeUrl>
1245
+ <apiUrl>http://www.colourlovers.com/api/palette/1058739</apiUrl>
1246
+ </palette>
1247
+ <palette>
1248
+ <id>1722286</id>
1249
+ <title><![CDATA[400 unique artists ♥]]></title>
1250
+ <userName><![CDATA[Aurelliana]]></userName>
1251
+ <numViews>14353</numViews>
1252
+ <numVotes>1074</numVotes>
1253
+ <numComments>59</numComments>
1254
+ <numHearts>0</numHearts>
1255
+ <rank>60</rank>
1256
+ <dateCreated>2011-08-25 22:08:59</dateCreated>
1257
+ <colors>
1258
+ <hex>A8E6CE</hex>
1259
+ <hex>DCEDC2</hex>
1260
+ <hex>FFD3B5</hex>
1261
+ <hex>FFAAA6</hex>
1262
+ <hex>FF8C94</hex>
1263
+ </colors>
1264
+ <description><![CDATA[Another big date... well...
1265
+ I just want to thank you all for sharing colors, creativity, smiles and good mood!
1266
+ Summer is almost over, so this palette is a peace of sweetness & sunlight to all my wonderfull followers =)
1267
+
1268
+ <center>Million of smiles to each of you for lovely gifts ♥</center>
1269
+ <a href="http://www.colourlovers.com/pattern/1750032/400_for_Aurelliana!" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1750/1750032_400_for_Aurelliana!.png" style="width: 239px; height: 120px; border: 0 none;" alt="400_for_Aurelliana!" /></a><a href="http://www.colourlovers.com/pattern/1750119/Love_Me_Tender" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1750/1750119_Love_Me_Tender.png" style="width: 239px; height: 120px; border: 0 none;" alt="Love_Me_Tender" /></a><a href="http://www.colourlovers.com/pattern/1750143/Aurellianas_heaven" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1750/1750143_Aurellianas_heaven.png" style="width: 239px; height: 120px; border: 0 none;" alt="Aurellianas_heaven" /></a><a href="http://www.colourlovers.com/pattern/1750221/Aurellianas_400" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1750/1750221_Aurellianas_400.png" style="width: 239px; height: 120px; border: 0 none;" alt="Aurellianas_400" /></a><a href="http://www.colourlovers.com/pattern/1750246/Aura" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1750/1750246_Aura.png" style="width: 239px; height: 120px; border: 0 none;" alt="Aura" /></a><a href="http://www.colourlovers.com/pattern/1750280/400_4_Aurelliana" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1750/1750280_400_4_Aurelliana.png" style="width: 239px; height: 120px; border: 0 none;" alt="400_4_Aurelliana" /></a><a href="http://www.colourlovers.com/pattern/1750361/Baby_Bedding" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1750/1750361_Baby_Bedding.png" style="width: 239px; height: 120px; border: 0 none;" alt="Baby_Bedding" /></a><a href="http://www.colourlovers.com/pattern/1750487/Sweet_and_Straw" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1750/1750487_Sweet_and_Straw.png" style="width: 239px; height: 120px; border: 0 none;" alt="Sweet_and_Straw" /></a><a href="http://www.colourlovers.com/pattern/1750593/400_for_Aurelliana" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1750/1750593_400_for_Aurelliana.png" style="width: 239px; height: 120px; border: 0 none;" alt="400_for_Aurelliana" /></a><a href="http://www.colourlovers.com/pattern/1750632/Unique_love*" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1750/1750632_Unique_love*.png" style="width: 239px; height: 120px; border: 0 none;" alt="Unique_love*" /></a><a href="http://www.colourlovers.com/pattern/1750636/AURELIANA_400_!" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1750/1750636_AURELIANA_400_!.png" style="width: 239px; height: 120px; border: 0 none;" alt="AURELIANA_400_!" /></a><a href="http://www.colourlovers.com/pattern/1750653/Aures_Circle_of_400" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1750/1750653_Aures_Circle_of_400.png" style="width: 239px; height: 120px; border: 0 none;" alt="Aures_Circle_of_400" /></a><a href="http://www.colourlovers.com/pattern/1750851/Aurellianas_400" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1750/1750851_Aurellianas_400.png" style="width: 239px; height: 120px; border: 0 none;" alt="Aurellianas_400" /></a><a href="http://www.colourlovers.com/pattern/1750930/400_pastel_rainbows" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1750/1750930_400_pastel_rainbows.png" style="width: 239px; height: 120px; border: 0 none;" alt="400_pastel_rainbows" /></a><a href="http://www.colourlovers.com/pattern/1751127/400HugsAurelliana!" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1751/1751127_400HugsAurelliana!.png" style="width: 239px; height: 120px; border: 0 none;" alt="400HugsAurelliana!" /></a><a href="http://www.colourlovers.com/pattern/1751181/400_Congratulations!" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1751/1751181_400_Congratulations!.png" style="width: 239px; height: 120px; border: 0 none;" alt="400_Congratulations!" /></a><a href="http://www.colourlovers.com/pattern/1751278/The_aurelliana_zing!" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1751/1751278_The_aurelliana_zing!.png" style="width: 239px; height: 120px; border: 0 none;" alt="The_aurelliana_zing!" /></a><a href="http://www.colourlovers.com/pattern/1751289/Is_It_True" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1751/1751289_Is_It_True.png" style="width: 239px; height: 120px; border: 0 none;" alt="Is_It_True" /></a><a href="http://www.colourlovers.com/pattern/1751414/gift_4_unique_U" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1751/1751414_gift_4_unique_U.png" style="width: 239px; height: 120px; border: 0 none;" alt="gift_4_unique_U" /></a><a href="http://www.colourlovers.com/pattern/1751432/Aurelliana" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1751/1751432_Aurelliana.png" style="width: 239px; height: 120px; border: 0 none;" alt="Aurelliana" /></a><a href="http://www.colourlovers.com/pattern/1751488/400_for_aurelliana" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1751/1751488_400_for_aurelliana.png" style="width: 239px; height: 120px; border: 0 none;" alt="400_for_aurelliana" /></a><a href="http://www.colourlovers.com/pattern/1751180/400sCLParty@Nature" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1751/1751180_400sCLParty@Nature.png" style="width: 239px; height: 120px; border: 0 none;" alt="400sCLParty@Nature" /></a><a href="http://www.colourlovers.com/pattern/1751780/Sweet_Aurelliana" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1751/1751780_Sweet_Aurelliana.png" style="width: 239px; height: 120px; border: 0 none;" alt="Sweet_Aurelliana" /></a><a href="http://www.colourlovers.com/pattern/1751983/400s_romance" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1751/1751983_400s_romance.png" style="width: 239px; height: 120px; border: 0 none;" alt="400s_romance" /></a><a href="http://www.colourlovers.com/pattern/1753691/AurellianaRESPLONKED" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1753/1753691_AurellianaRESPLONKED.png" style="width: 239px; height: 120px; border: 0 none;" alt="AurellianaRESPLONKED" /></a><a href="http://www.colourlovers.com/pattern/1755103/A_Toast_to_400!" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1755/1755103_A_Toast_to_400!.png" style="width: 239px; height: 120px; border: 0 none;" alt="A_Toast_to_400!" /></a><a href="http://www.colourlovers.com/pattern/1754562/Team_400_Ts" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1754/1754562_Team_400_Ts.png" style="width: 239px; height: 120px; border: 0 none;" alt="Team_400_Ts" /></a><a href="http://www.colourlovers.com/pattern/1755261/For_Aurelliana" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1755/1755261_For_Aurelliana.png" style="width: 239px; height: 120px; border: 0 none;" alt="For_Aurelliana" /></a><a href="http://www.colourlovers.com/pattern/1756171/for_Aurelliana" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1756/1756171_for_Aurelliana.png" style="width: 239px; height: 120px; border: 0 none;" alt="for_Aurelliana" /></a><a href="http://www.colourlovers.com/pattern/1756221/400_see_you" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1756/1756221_400_see_you.png" style="width: 239px; height: 120px; border: 0 none;" alt="400_see_you" /></a><a href="http://www.colourlovers.com/pattern/1757852/Loving_Aurelliana" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1757/1757852_Loving_Aurelliana.png" style="width: 239px; height: 120px; border: 0 none;" alt="Loving_Aurelliana" /></a><a href="http://www.colourlovers.com/pattern/1771601/Aurellianas_400!!!!" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1771/1771601_Aurellianas_400!!!!.png" style="width: 239px; height: 120px; border: 0 none;" alt="Aurellianas_400!!!!" /></a><a href="http://www.colourlovers.com/pattern/1778045/fairy_aureliana" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1778/1778045_fairy_aureliana.png" style="width: 239px; height: 120px; border: 0 none;" alt="fairy_aureliana" /></a><a href="http://www.colourlovers.com/pattern/1788400/chewing_car" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1788/1788400_chewing_car.png" style="width: 239px; height: 120px; border: 0 none;" alt="chewing_car" /></a><a href="http://www.colourlovers.com/pattern/1751195/Late_Summer_Kerchief" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1751/1751195_Late_Summer_Kerchief.png" style="width: 239px; height: 120px; border: 0 none;" alt="Late_Summer_Kerchief" /></a><a href="http://www.colourlovers.com/pattern/1750567/For_Aureliana" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1750/1750567_For_Aureliana.png" style="width: 239px; height: 120px; border: 0 none;" alt="For_Aureliana" /></a>]]></description>
1270
+ <url><![CDATA[http://www.colourlovers.com/palette/1722286/400_unique_artists_♥]]></url>
1271
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/A8E6CE/DCEDC2/FFD3B5/FFAAA6/FF8C94/400_unique_artists_♥.png]]></imageUrl>
1272
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/1722/1722286_400_unique_artists_.png]]></badgeUrl>
1273
+ <apiUrl>http://www.colourlovers.com/api/palette/1722286</apiUrl>
1274
+ </palette>
1275
+ <palette>
1276
+ <id>625987</id>
1277
+ <title><![CDATA[don't you go down]]></title>
1278
+ <userName><![CDATA[granola]]></userName>
1279
+ <numViews>35464</numViews>
1280
+ <numVotes>1067</numVotes>
1281
+ <numComments>55</numComments>
1282
+ <numHearts>5</numHearts>
1283
+ <rank>61</rank>
1284
+ <dateCreated>2008-11-29 08:37:28</dateCreated>
1285
+ <colors>
1286
+ <hex>EDEBE6</hex>
1287
+ <hex>D6E1C7</hex>
1288
+ <hex>94C7B6</hex>
1289
+ <hex>403B33</hex>
1290
+ <hex>D3643B</hex>
1291
+ </colors>
1292
+ <description><![CDATA[]]></description>
1293
+ <url><![CDATA[http://www.colourlovers.com/palette/625987/dont_you_go_down]]></url>
1294
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/EDEBE6/D6E1C7/94C7B6/403B33/D3643B/dont_you_go_down.png]]></imageUrl>
1295
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/625/625987_dont_you_go_down.png]]></badgeUrl>
1296
+ <apiUrl>http://www.colourlovers.com/api/palette/625987</apiUrl>
1297
+ </palette>
1298
+ <palette>
1299
+ <id>1283145</id>
1300
+ <title><![CDATA[The Way You Love Me]]></title>
1301
+ <userName><![CDATA[sunmeadow]]></userName>
1302
+ <numViews>20409</numViews>
1303
+ <numVotes>1067</numVotes>
1304
+ <numComments>30</numComments>
1305
+ <numHearts>0</numHearts>
1306
+ <rank>59</rank>
1307
+ <dateCreated>2010-09-01 11:09:13</dateCreated>
1308
+ <colors>
1309
+ <hex>1C2130</hex>
1310
+ <hex>028F76</hex>
1311
+ <hex>B3E099</hex>
1312
+ <hex>FFEAAD</hex>
1313
+ <hex>D14334</hex>
1314
+ </colors>
1315
+ <description><![CDATA[]]></description>
1316
+ <url><![CDATA[http://www.colourlovers.com/palette/1283145/The_Way_You_Love_Me]]></url>
1317
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/1C2130/028F76/B3E099/FFEAAD/D14334/The_Way_You_Love_Me.png]]></imageUrl>
1318
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/1283/1283145_The_Way_You_Love_Me.png]]></badgeUrl>
1319
+ <apiUrl>http://www.colourlovers.com/api/palette/1283145</apiUrl>
1320
+ </palette>
1321
+ <palette>
1322
+ <id>1597233</id>
1323
+ <title><![CDATA[500 honies❣]]></title>
1324
+ <userName><![CDATA[earlgrey]]></userName>
1325
+ <numViews>14820</numViews>
1326
+ <numVotes>1046</numVotes>
1327
+ <numComments>110</numComments>
1328
+ <numHearts>0</numHearts>
1329
+ <rank>62</rank>
1330
+ <dateCreated>2011-05-30 11:29:43</dateCreated>
1331
+ <colors>
1332
+ <hex>FDF1CC</hex>
1333
+ <hex>C6D6B8</hex>
1334
+ <hex>987F69</hex>
1335
+ <hex>E3AD40</hex>
1336
+ <hex>FCD036</hex>
1337
+ </colors>
1338
+ <description><![CDATA[<em><strong>I'm not really shy
1339
+ in any kind of way
1340
+ see you soon
1341
+ I'm yours now
1342
+ Honey</strong></em>
1343
+
1344
+ Oh well! Thank you for making my life so colourful and sweet (as honey) ♥ :)
1345
+ Love you all.
1346
+
1347
+ /Sorry in advance people who don't like all these <em>numbers</em>-palettes ^^'/]]></description>
1348
+ <url><![CDATA[http://www.colourlovers.com/palette/1597233/500_honies❣]]></url>
1349
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/FDF1CC/C6D6B8/987F69/E3AD40/FCD036/500_honies❣.png]]></imageUrl>
1350
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/1597/1597233_500_honies.png]]></badgeUrl>
1351
+ <apiUrl>http://www.colourlovers.com/api/palette/1597233</apiUrl>
1352
+ </palette>
1353
+ <palette>
1354
+ <id>778713</id>
1355
+ <title><![CDATA[Miaka]]></title>
1356
+ <userName><![CDATA[GlueStudio]]></userName>
1357
+ <numViews>24419</numViews>
1358
+ <numVotes>1018</numVotes>
1359
+ <numComments>87</numComments>
1360
+ <numHearts>5</numHearts>
1361
+ <rank>67</rank>
1362
+ <dateCreated>2009-04-10 08:13:35</dateCreated>
1363
+ <colors>
1364
+ <hex>FC354C</hex>
1365
+ <hex>29221F</hex>
1366
+ <hex>13747D</hex>
1367
+ <hex>0ABFBC</hex>
1368
+ <hex>FCF7C5</hex>
1369
+ </colors>
1370
+ <description><![CDATA[This is for Miaka, cause she is so talented!
1371
+
1372
+ <a href="http://www.colourlovers.com/palette/702402/One_Year_of_Love?c=1" target="_blank"><img src="http://www.colourlovers.com/images/badges/pw/702/702402_One_Year_of_Love.png" style="width: 240px; height: 120px; border: 0 none;" alt="One_Year_of_Love" /></a>]]></description>
1373
+ <url><![CDATA[http://www.colourlovers.com/palette/778713/Miaka]]></url>
1374
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/FC354C/29221F/13747D/0ABFBC/FCF7C5/Miaka.png]]></imageUrl>
1375
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/778/778713_Miaka.png]]></badgeUrl>
1376
+ <apiUrl>http://www.colourlovers.com/api/palette/778713</apiUrl>
1377
+ </palette>
1378
+ <palette>
1379
+ <id>557539</id>
1380
+ <title><![CDATA[vivacious]]></title>
1381
+ <userName><![CDATA[plch]]></userName>
1382
+ <numViews>37155</numViews>
1383
+ <numVotes>1017</numVotes>
1384
+ <numComments>93</numComments>
1385
+ <numHearts>0</numHearts>
1386
+ <rank>64</rank>
1387
+ <dateCreated>2008-10-01 03:56:51</dateCreated>
1388
+ <colors>
1389
+ <hex>CC0C39</hex>
1390
+ <hex>E6781E</hex>
1391
+ <hex>C8CF02</hex>
1392
+ <hex>F8FCC1</hex>
1393
+ <hex>1693A7</hex>
1394
+ </colors>
1395
+ <description><![CDATA[]]></description>
1396
+ <url><![CDATA[http://www.colourlovers.com/palette/557539/vivacious]]></url>
1397
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/CC0C39/E6781E/C8CF02/F8FCC1/1693A7/vivacious.png]]></imageUrl>
1398
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/557/557539_vivacious.png]]></badgeUrl>
1399
+ <apiUrl>http://www.colourlovers.com/api/palette/557539</apiUrl>
1400
+ </palette>
1401
+ <palette>
1402
+ <id>143880</id>
1403
+ <title><![CDATA[still be friends?]]></title>
1404
+ <userName><![CDATA[pdadams88]]></userName>
1405
+ <numViews>28163</numViews>
1406
+ <numVotes>992</numVotes>
1407
+ <numComments>140</numComments>
1408
+ <numHearts>5</numHearts>
1409
+ <rank>65</rank>
1410
+ <dateCreated>2007-09-13 15:45:02</dateCreated>
1411
+ <colors>
1412
+ <hex>3A111C</hex>
1413
+ <hex>574951</hex>
1414
+ <hex>83988E</hex>
1415
+ <hex>BCDEA5</hex>
1416
+ <hex>E6F9BC</hex>
1417
+ </colors>
1418
+ <description><![CDATA[Inspired by the Todd Rundgren song "Can We Still Be Friends?".]]></description>
1419
+ <url><![CDATA[http://www.colourlovers.com/palette/143880/still_be_friends]]></url>
1420
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/3A111C/574951/83988E/BCDEA5/E6F9BC/still_be_friends.png]]></imageUrl>
1421
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/143/143880_still_be_friends.png]]></badgeUrl>
1422
+ <apiUrl>http://www.colourlovers.com/api/palette/143880</apiUrl>
1423
+ </palette>
1424
+ <palette>
1425
+ <id>1676466</id>
1426
+ <title><![CDATA[A Kiss To Awake]]></title>
1427
+ <userName><![CDATA[GabsGiggles]]></userName>
1428
+ <numViews>8066</numViews>
1429
+ <numVotes>985</numVotes>
1430
+ <numComments>56</numComments>
1431
+ <numHearts>0</numHearts>
1432
+ <rank>68</rank>
1433
+ <dateCreated>2011-07-25 16:39:04</dateCreated>
1434
+ <colors>
1435
+ <hex>B9D3B0</hex>
1436
+ <hex>81BDA4</hex>
1437
+ <hex>B28774</hex>
1438
+ <hex>F88F79</hex>
1439
+ <hex>F6AA93</hex>
1440
+ </colors>
1441
+ <description><![CDATA[<a href="http://www.colourlovers.com/group/Interpretation_Fun/conversations/12107/IF52-FLOWER" target="_blank" title="IF52-FLOWERS"><img style="max-width:100%;" src="http://i55.tinypic.com/313lngn.jpg" alt="IF51-FLOWERS" /></a>]]></description>
1442
+ <url><![CDATA[http://www.colourlovers.com/palette/1676466/A_Kiss_To_Awake]]></url>
1443
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/B9D3B0/81BDA4/B28774/F88F79/F6AA93/A_Kiss_To_Awake.png]]></imageUrl>
1444
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/1676/1676466_A_Kiss_To_Awake.png]]></badgeUrl>
1445
+ <apiUrl>http://www.colourlovers.com/api/palette/1676466</apiUrl>
1446
+ </palette>
1447
+ <palette>
1448
+ <id>678929</id>
1449
+ <title><![CDATA[War]]></title>
1450
+ <userName><![CDATA[annajak]]></userName>
1451
+ <numViews>23240</numViews>
1452
+ <numVotes>955</numVotes>
1453
+ <numComments>153</numComments>
1454
+ <numHearts>5</numHearts>
1455
+ <rank>70</rank>
1456
+ <dateCreated>2009-01-20 09:05:39</dateCreated>
1457
+ <colors>
1458
+ <hex>230F2B</hex>
1459
+ <hex>F21D41</hex>
1460
+ <hex>EBEBBC</hex>
1461
+ <hex>BCE3C5</hex>
1462
+ <hex>82B3AE</hex>
1463
+ </colors>
1464
+ <description><![CDATA[Against the war.]]></description>
1465
+ <url><![CDATA[http://www.colourlovers.com/palette/678929/War]]></url>
1466
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/230F2B/F21D41/EBEBBC/BCE3C5/82B3AE/War.png]]></imageUrl>
1467
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/678/678929_War.png]]></badgeUrl>
1468
+ <apiUrl>http://www.colourlovers.com/api/palette/678929</apiUrl>
1469
+ </palette>
1470
+ <palette>
1471
+ <id>599215</id>
1472
+ <title><![CDATA[My November.]]></title>
1473
+ <userName><![CDATA[MissGibbon]]></userName>
1474
+ <numViews>24766</numViews>
1475
+ <numVotes>954</numVotes>
1476
+ <numComments>51</numComments>
1477
+ <numHearts>0</numHearts>
1478
+ <rank>69</rank>
1479
+ <dateCreated>2008-11-05 13:31:03</dateCreated>
1480
+ <colors>
1481
+ <hex>5E3929</hex>
1482
+ <hex>CD8C52</hex>
1483
+ <hex>B7D1A3</hex>
1484
+ <hex>DEE8BE</hex>
1485
+ <hex>FCF7D3</hex>
1486
+ </colors>
1487
+ <description><![CDATA[Color Combat Contest: November 2008 - Warmth
1488
+
1489
+ November is our last month of autumn (here in the northern hemisphere), a softly swirling junction of warm colors and cool air. This month's contest is all about warmth. Warm colors, warm feelings, warm words. It's up to you.]]></description>
1490
+ <url><![CDATA[http://www.colourlovers.com/palette/599215/My_November.]]></url>
1491
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/5E3929/CD8C52/B7D1A3/DEE8BE/FCF7D3/My_November..png]]></imageUrl>
1492
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/599/599215_My_November..png]]></badgeUrl>
1493
+ <apiUrl>http://www.colourlovers.com/api/palette/599215</apiUrl>
1494
+ </palette>
1495
+ <palette>
1496
+ <id>1015109</id>
1497
+ <title><![CDATA[All Eyes On You]]></title>
1498
+ <userName><![CDATA[joy_of_summer]]></userName>
1499
+ <numViews>36139</numViews>
1500
+ <numVotes>945</numVotes>
1501
+ <numComments>7</numComments>
1502
+ <numHearts>5</numHearts>
1503
+ <rank>71</rank>
1504
+ <dateCreated>2009-11-10 12:34:50</dateCreated>
1505
+ <colors>
1506
+ <hex>5C323E</hex>
1507
+ <hex>A82743</hex>
1508
+ <hex>E15E32</hex>
1509
+ <hex>C0D23E</hex>
1510
+ <hex>E5F04C</hex>
1511
+ </colors>
1512
+ <description><![CDATA[]]></description>
1513
+ <url><![CDATA[http://www.colourlovers.com/palette/1015109/All_Eyes_On_You]]></url>
1514
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/5C323E/A82743/E15E32/C0D23E/E5F04C/All_Eyes_On_You.png]]></imageUrl>
1515
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/1015/1015109_All_Eyes_On_You.png]]></badgeUrl>
1516
+ <apiUrl>http://www.colourlovers.com/api/palette/1015109</apiUrl>
1517
+ </palette>
1518
+ <palette>
1519
+ <id>1041410</id>
1520
+ <title><![CDATA[undecided]]></title>
1521
+ <userName><![CDATA[Tzadkiel]]></userName>
1522
+ <numViews>28470</numViews>
1523
+ <numVotes>936</numVotes>
1524
+ <numComments>55</numComments>
1525
+ <numHearts>5</numHearts>
1526
+ <rank>75</rank>
1527
+ <dateCreated>2009-12-06 15:40:44</dateCreated>
1528
+ <colors>
1529
+ <hex>DAD6CA</hex>
1530
+ <hex>1BB0CE</hex>
1531
+ <hex>4F8699</hex>
1532
+ <hex>6A5E72</hex>
1533
+ <hex>563444</hex>
1534
+ </colors>
1535
+ <description><![CDATA[]]></description>
1536
+ <url><![CDATA[http://www.colourlovers.com/palette/1041410/undecided]]></url>
1537
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/DAD6CA/1BB0CE/4F8699/6A5E72/563444/undecided.png]]></imageUrl>
1538
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/1041/1041410_undecided.png]]></badgeUrl>
1539
+ <apiUrl>http://www.colourlovers.com/api/palette/1041410</apiUrl>
1540
+ </palette>
1541
+ <palette>
1542
+ <id>1663351</id>
1543
+ <title><![CDATA[Blue Gum Dreams]]></title>
1544
+ <userName><![CDATA[Luna Rosa]]></userName>
1545
+ <numViews>11000</numViews>
1546
+ <numVotes>931</numVotes>
1547
+ <numComments>26</numComments>
1548
+ <numHearts>0</numHearts>
1549
+ <rank>74</rank>
1550
+ <dateCreated>2011-07-16 01:29:13</dateCreated>
1551
+ <colors>
1552
+ <hex>5B527F</hex>
1553
+ <hex>9A8194</hex>
1554
+ <hex>C6A9A3</hex>
1555
+ <hex>EBD8B7</hex>
1556
+ <hex>99BBAD</hex>
1557
+ </colors>
1558
+ <description><![CDATA[<a href="http://www.colourlovers.com/pattern/1304506/Bluegum_Daze" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1304/1304506_Bluegum_Daze.png" style="width: 240px; height: 120px; border: 0 none;" alt="Bluegum_Daze" /></a>
1559
+ <a href="http://www.colourlovers.com/group/Interpretation_Fun/conversations/12627/IF56-ENDANGERED_SPECIES" target="_blank" title="IF56-ENDANGERED SPECIES"><img style="max-width:100%;" src="http://i.imgur.com/NexVG.png" alt="IF56-ENDANGERED SPECIES" /></a>]]></description>
1560
+ <url><![CDATA[http://www.colourlovers.com/palette/1663351/Blue_Gum_Dreams]]></url>
1561
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/5B527F/9A8194/C6A9A3/EBD8B7/99BBAD/Blue_Gum_Dreams.png]]></imageUrl>
1562
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/1663/1663351_Blue_Gum_Dreams.png]]></badgeUrl>
1563
+ <apiUrl>http://www.colourlovers.com/api/palette/1663351</apiUrl>
1564
+ </palette>
1565
+ <palette>
1566
+ <id>2562636</id>
1567
+ <title><![CDATA[Christina]]></title>
1568
+ <userName><![CDATA[davidgav]]></userName>
1569
+ <numViews>5982</numViews>
1570
+ <numVotes>890</numVotes>
1571
+ <numComments>0</numComments>
1572
+ <numHearts>0</numHearts>
1573
+ <rank>72</rank>
1574
+ <dateCreated>2012-12-03 11:53:26</dateCreated>
1575
+ <colors>
1576
+ <hex>4E395D</hex>
1577
+ <hex>827085</hex>
1578
+ <hex>8EBE94</hex>
1579
+ <hex>CCFC8E</hex>
1580
+ <hex>DC5B3E</hex>
1581
+ </colors>
1582
+ <description><![CDATA[]]></description>
1583
+ <url><![CDATA[http://www.colourlovers.com/palette/2562636/Christina]]></url>
1584
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/4E395D/827085/8EBE94/CCFC8E/DC5B3E/Christina.png]]></imageUrl>
1585
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/2562/2562636_Christina.png]]></badgeUrl>
1586
+ <apiUrl>http://www.colourlovers.com/api/palette/2562636</apiUrl>
1587
+ </palette>
1588
+ <palette>
1589
+ <id>919419</id>
1590
+ <title><![CDATA[An Old Friend]]></title>
1591
+ <userName><![CDATA[joy_of_summer]]></userName>
1592
+ <numViews>20263</numViews>
1593
+ <numVotes>879</numVotes>
1594
+ <numComments>23</numComments>
1595
+ <numHearts>5</numHearts>
1596
+ <rank>84</rank>
1597
+ <dateCreated>2009-08-09 13:21:01</dateCreated>
1598
+ <colors>
1599
+ <hex>B6D8C0</hex>
1600
+ <hex>C8D9BF</hex>
1601
+ <hex>DADABD</hex>
1602
+ <hex>ECDBBC</hex>
1603
+ <hex>FEDCBA</hex>
1604
+ </colors>
1605
+ <description><![CDATA[]]></description>
1606
+ <url><![CDATA[http://www.colourlovers.com/palette/919419/An_Old_Friend]]></url>
1607
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/B6D8C0/C8D9BF/DADABD/ECDBBC/FEDCBA/An_Old_Friend.png]]></imageUrl>
1608
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/919/919419_An_Old_Friend.png]]></badgeUrl>
1609
+ <apiUrl>http://www.colourlovers.com/api/palette/919419</apiUrl>
1610
+ </palette>
1611
+ <palette>
1612
+ <id>1606220</id>
1613
+ <title><![CDATA[colorful banaani]]></title>
1614
+ <userName><![CDATA[svartedauden]]></userName>
1615
+ <numViews>31739</numViews>
1616
+ <numVotes>866</numVotes>
1617
+ <numComments>12</numComments>
1618
+ <numHearts>0</numHearts>
1619
+ <rank>86</rank>
1620
+ <dateCreated>2011-06-05 15:06:16</dateCreated>
1621
+ <colors>
1622
+ <hex>A7C5BD</hex>
1623
+ <hex>E5DDCB</hex>
1624
+ <hex>EB7B59</hex>
1625
+ <hex>CF4647</hex>
1626
+ <hex>524656</hex>
1627
+ </colors>
1628
+ <description><![CDATA[<center><div style="width: 250px; max-width:100%; min-height: 64px; padding:5px; text-align:center; font-size:1.1em; font-weight:bold; color:#563A3C; background-color:#EDD0C2; border: 3px ridge #DBA4A8; "><a style="border-bottom:1px dotted #7F131D; color:#9D0B19; " href="/group/1_Lover_Color_Palette/">ONE LOVER PALETTE [1LP]</a><p style="margin:0;">All the colours are created by: <a style="border-bottom:1px dotted #7F131D; color:#9D0B19" href="http://www.colourlovers.com/lover/ycc2106" target="_blank">YCC2106</a></p></div></center>]]></description>
1629
+ <url><![CDATA[http://www.colourlovers.com/palette/1606220/colorful_banaani]]></url>
1630
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/A7C5BD/E5DDCB/EB7B59/CF4647/524656/colorful_banaani.png]]></imageUrl>
1631
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/1606/1606220_colorful_banaani.png]]></badgeUrl>
1632
+ <apiUrl>http://www.colourlovers.com/api/palette/1606220</apiUrl>
1633
+ </palette>
1634
+ <palette>
1635
+ <id>1981521</id>
1636
+ <title><![CDATA[The Key]]></title>
1637
+ <userName><![CDATA[GabsGiggles]]></userName>
1638
+ <numViews>8488</numViews>
1639
+ <numVotes>857</numVotes>
1640
+ <numComments>50</numComments>
1641
+ <numHearts>0</numHearts>
1642
+ <rank>80</rank>
1643
+ <dateCreated>2012-02-05 11:16:11</dateCreated>
1644
+ <colors>
1645
+ <hex>8DCCAD</hex>
1646
+ <hex>988864</hex>
1647
+ <hex>FEA6A2</hex>
1648
+ <hex>F9D6AC</hex>
1649
+ <hex>FFE9AF</hex>
1650
+ </colors>
1651
+ <description><![CDATA[]]></description>
1652
+ <url><![CDATA[http://www.colourlovers.com/palette/1981521/The_Key]]></url>
1653
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/8DCCAD/988864/FEA6A2/F9D6AC/FFE9AF/The_Key.png]]></imageUrl>
1654
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/1981/1981521_The_Key.png]]></badgeUrl>
1655
+ <apiUrl>http://www.colourlovers.com/api/palette/1981521</apiUrl>
1656
+ </palette>
1657
+ <palette>
1658
+ <id>401946</id>
1659
+ <title><![CDATA[s e x ' n . r o l l ]]></title>
1660
+ <userName><![CDATA[tvr]]></userName>
1661
+ <numViews>55897</numViews>
1662
+ <numVotes>855</numVotes>
1663
+ <numComments>94</numComments>
1664
+ <numHearts>0</numHearts>
1665
+ <rank>79</rank>
1666
+ <dateCreated>2008-06-03 23:09:56</dateCreated>
1667
+ <colors>
1668
+ <hex>1C0113</hex>
1669
+ <hex>6B0103</hex>
1670
+ <hex>A30006</hex>
1671
+ <hex>C21A01</hex>
1672
+ <hex>F03C02</hex>
1673
+ </colors>
1674
+ <description><![CDATA[]]></description>
1675
+ <url><![CDATA[http://www.colourlovers.com/palette/401946/s_e_x_n_._r_o_l_l]]></url>
1676
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/1C0113/6B0103/A30006/C21A01/F03C02/s_e_x_n_._r_o_l_l.png]]></imageUrl>
1677
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/401/401946_s_e_x_n_._r_o_l_l.png]]></badgeUrl>
1678
+ <apiUrl>http://www.colourlovers.com/api/palette/401946</apiUrl>
1679
+ </palette>
1680
+ <palette>
1681
+ <id>2350697</id>
1682
+ <title><![CDATA[This is for YOU!]]></title>
1683
+ <userName><![CDATA[davidgav]]></userName>
1684
+ <numViews>6726</numViews>
1685
+ <numVotes>854</numVotes>
1686
+ <numComments>0</numComments>
1687
+ <numHearts>0</numHearts>
1688
+ <rank>77</rank>
1689
+ <dateCreated>2012-08-18 16:30:32</dateCreated>
1690
+ <colors>
1691
+ <hex>D1313D</hex>
1692
+ <hex>E5625C</hex>
1693
+ <hex>F9BF76</hex>
1694
+ <hex>8EB2C5</hex>
1695
+ <hex>615375</hex>
1696
+ </colors>
1697
+ <description><![CDATA[http://1582.tk/rc/1000.php
1698
+
1699
+ <a href="http://www.colourlovers.com/pattern/2823026/For_You!" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/2823/2823026_For_You!.png" style="width: 240px; height: 120px; border: 0 none;" alt="For_You!" /></a>]]></description>
1700
+ <url><![CDATA[http://www.colourlovers.com/palette/2350697/This_is_for_YOU!]]></url>
1701
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/D1313D/E5625C/F9BF76/8EB2C5/615375/This_is_for_YOU!.png]]></imageUrl>
1702
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/2350/2350697_This_is_for_YOU!.png]]></badgeUrl>
1703
+ <apiUrl>http://www.colourlovers.com/api/palette/2350697</apiUrl>
1704
+ </palette>
1705
+ <palette>
1706
+ <id>2840532</id>
1707
+ <title><![CDATA[Omega Nebula]]></title>
1708
+ <userName><![CDATA[davidgav]]></userName>
1709
+ <numViews>6622</numViews>
1710
+ <numVotes>850</numVotes>
1711
+ <numComments>1</numComments>
1712
+ <numHearts>0</numHearts>
1713
+ <rank>78</rank>
1714
+ <dateCreated>2013-05-07 12:08:48</dateCreated>
1715
+ <colors>
1716
+ <hex>9D7E79</hex>
1717
+ <hex>CCAC95</hex>
1718
+ <hex>9A947C</hex>
1719
+ <hex>748B83</hex>
1720
+ <hex>5B756C</hex>
1721
+ </colors>
1722
+ <description><![CDATA[]]></description>
1723
+ <url><![CDATA[http://www.colourlovers.com/palette/2840532/Omega_Nebula]]></url>
1724
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/9D7E79/CCAC95/9A947C/748B83/5B756C/Omega_Nebula.png]]></imageUrl>
1725
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/2840/2840532_Omega_Nebula.png]]></badgeUrl>
1726
+ <apiUrl>http://www.colourlovers.com/api/palette/2840532</apiUrl>
1727
+ </palette>
1728
+ <palette>
1729
+ <id>2319650</id>
1730
+ <title><![CDATA[Liars and Monsters]]></title>
1731
+ <userName><![CDATA[davidgav]]></userName>
1732
+ <numViews>4838</numViews>
1733
+ <numVotes>846</numVotes>
1734
+ <numComments>5</numComments>
1735
+ <numHearts>0</numHearts>
1736
+ <rank>76</rank>
1737
+ <dateCreated>2012-08-04 11:29:12</dateCreated>
1738
+ <colors>
1739
+ <hex>C2412D</hex>
1740
+ <hex>D1AA34</hex>
1741
+ <hex>A7A844</hex>
1742
+ <hex>A46583</hex>
1743
+ <hex>5A1E4A</hex>
1744
+ </colors>
1745
+ <description><![CDATA[]]></description>
1746
+ <url><![CDATA[http://www.colourlovers.com/palette/2319650/Liars_and_Monsters]]></url>
1747
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/C2412D/D1AA34/A7A844/A46583/5A1E4A/Liars_and_Monsters.png]]></imageUrl>
1748
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/2319/2319650_Liars_and_Monsters.png]]></badgeUrl>
1749
+ <apiUrl>http://www.colourlovers.com/api/palette/2319650</apiUrl>
1750
+ </palette>
1751
+ <palette>
1752
+ <id>803797</id>
1753
+ <title><![CDATA[Salt With Battery]]></title>
1754
+ <userName><![CDATA[leadwhite]]></userName>
1755
+ <numViews>20354</numViews>
1756
+ <numVotes>837</numVotes>
1757
+ <numComments>83</numComments>
1758
+ <numHearts>5</numHearts>
1759
+ <rank>81</rank>
1760
+ <dateCreated>2009-04-30 17:46:52</dateCreated>
1761
+ <colors>
1762
+ <hex>CFFFDD</hex>
1763
+ <hex>B4DEC1</hex>
1764
+ <hex>5C5863</hex>
1765
+ <hex>A85163</hex>
1766
+ <hex>FF1F4C</hex>
1767
+ </colors>
1768
+ <description><![CDATA[]]></description>
1769
+ <url><![CDATA[http://www.colourlovers.com/palette/803797/Salt_With_Battery]]></url>
1770
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/CFFFDD/B4DEC1/5C5863/A85163/FF1F4C/Salt_With_Battery.png]]></imageUrl>
1771
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/803/803797_Salt_With_Battery.png]]></badgeUrl>
1772
+ <apiUrl>http://www.colourlovers.com/api/palette/803797</apiUrl>
1773
+ </palette>
1774
+ <palette>
1775
+ <id>520649</id>
1776
+ <title><![CDATA[Good Friends]]></title>
1777
+ <userName><![CDATA[GlueStudio]]></userName>
1778
+ <numViews>22229</numViews>
1779
+ <numVotes>830</numVotes>
1780
+ <numComments>143</numComments>
1781
+ <numHearts>5</numHearts>
1782
+ <rank>90</rank>
1783
+ <dateCreated>2008-09-01 06:44:42</dateCreated>
1784
+ <colors>
1785
+ <hex>A8A7A7</hex>
1786
+ <hex>CC527A</hex>
1787
+ <hex>E8175D</hex>
1788
+ <hex>474747</hex>
1789
+ <hex>363636</hex>
1790
+ </colors>
1791
+ <description><![CDATA[]]></description>
1792
+ <url><![CDATA[http://www.colourlovers.com/palette/520649/Good_Friends]]></url>
1793
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/A8A7A7/CC527A/E8175D/474747/363636/Good_Friends.png]]></imageUrl>
1794
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/520/520649_Good_Friends.png]]></badgeUrl>
1795
+ <apiUrl>http://www.colourlovers.com/api/palette/520649</apiUrl>
1796
+ </palette>
1797
+ <palette>
1798
+ <id>765305</id>
1799
+ <title><![CDATA[japan9]]></title>
1800
+ <userName><![CDATA[ksantipa]]></userName>
1801
+ <numViews>23561</numViews>
1802
+ <numVotes>830</numVotes>
1803
+ <numComments>116</numComments>
1804
+ <numHearts>5</numHearts>
1805
+ <rank>85</rank>
1806
+ <dateCreated>2009-03-30 16:57:06</dateCreated>
1807
+ <colors>
1808
+ <hex>E3DFBA</hex>
1809
+ <hex>C8D6BF</hex>
1810
+ <hex>93CCC6</hex>
1811
+ <hex>6CBDB5</hex>
1812
+ <hex>1A1F1E</hex>
1813
+ </colors>
1814
+ <description><![CDATA[<a href="http://www.colourlovers.com/pattern/426817/morning_mist" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/426/426817_morning_mist.png" style="width: 240px; height: 120px; border: 0 none;" alt="morning_mist" /></a>
1815
+ <a href="http://www.colourlovers.com/pattern/426841/Patsy" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/426/426841_Patsy.png" style="width: 240px; height: 120px; border: 0 none;" alt="Patsy" /></a>
1816
+ <a href="http://www.colourlovers.com/pattern/453480/Ice-eyes" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/453/453480_Ice-eyes.png" style="width: 240px; height: 120px; border: 0 none;" alt="Ice-eyes" /></a>
1817
+ <a href="http://www.colourlovers.com/pattern/430269/Kalyde" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/430/430269_Kalyde.png" style="width: 240px; height: 120px; border: 0 none;" alt="Kalyde" /></a>
1818
+ <a href="http://www.colourlovers.com/pattern/439890/Sandy_Planktin_Said" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/439/439890_Sandy_Planktin_Said.png" style="width: 240px; height: 120px; border: 0 none;" alt="Sandy_Planktin_Said" /></a>
1819
+ <a href="http://www.colourlovers.com/palette/841870/Hokusai?c=1" target="_blank"><img src="http://www.colourlovers.com/images/badges/pw/841/841870_Hokusai.png" style="width: 240px; height: 120px; border: 0 none;" alt="Hokusai" /></a>
1820
+ <a href="http://www.colourlovers.com/palette/810493/kamikaze?c=1" target="_blank"><img src="http://www.colourlovers.com/images/badges/pw/810/810493_kamikaze.png" style="width: 240px; height: 120px; border: 0 none;" alt="kamikaze" /></a>
1821
+ <a href="http://www.colourlovers.com/pattern/467104/9apan" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/467/467104_9apan.png" style="width: 240px; height: 120px; border: 0 none;" alt="9apan" /></a>
1822
+ <a href="http://www.colourlovers.com/pattern/631471/break_fast." target="_blank"><img src="http://www.colourlovers.com/images/badges/n/631/631471_break_fast..png" style="width: 240px; height: 120px; border: 0 none;" alt="break_fast." /></a>
1823
+ <a href="http://www.colourlovers.com/palette/990661/in_j_a_p_a_n?c=1" target="_blank"><img src="http://www.colourlovers.com/images/badges/pw/990/990661_in_j_a_p_a_n.png" style="width: 240px; height: 120px; border: 0 none;" alt="in_j_a_p_a_n" /></a>
1824
+ <a href="http://www.colourlovers.com/pattern/635983/svn98" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/635/635983_svn98.png" style="width: 240px; height: 120px; border: 0 none;" alt="svn98" /></a>
1825
+ <a href="http://www.colourlovers.com/pattern/638181/oxford" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/638/638181_oxford.png" style="width: 240px; height: 120px; border: 0 none;" alt="oxford" /></a>
1826
+ <a href="http://www.colourlovers.com/pattern/638493/blues" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/638/638493_blues.png" style="width: 240px; height: 120px; border: 0 none;" alt="blues" /></a>
1827
+ <a href="http://www.colourlovers.com/pattern/638854/vertep2" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/638/638854_vertep2.png" style="width: 240px; height: 120px; border: 0 none;" alt="vertep2" /></a>
1828
+ <a href="http://www.colourlovers.com/pattern/639584/цветочный_луг" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/639/639584__.png" style="width: 240px; height: 120px; border: 0 none;" alt="цветочный_луг" /></a>
1829
+ <a href="http://www.colourlovers.com/pattern/639582/ретро_обои" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/639/639582__.png" style="width: 240px; height: 120px; border: 0 none;" alt="ретро_обои" /></a>
1830
+ <a href="http://www.colourlovers.com/pattern/639581/морские_полоски" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/639/639581__.png" style="width: 240px; height: 120px; border: 0 none;" alt="морские_полоски" /></a>
1831
+ <a href="http://www.colourlovers.com/pattern/639578/огурчики" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/639/639578_.png" style="width: 240px; height: 120px; border: 0 none;" alt="огурчики" /></a>
1832
+ <a href="http://www.colourlovers.com/pattern/639576/under_the_sea" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/639/639576_under_the_sea.png" style="width: 240px; height: 120px; border: 0 none;" alt="under_the_sea" /></a>
1833
+ <a href="http://www.colourlovers.com/pattern/641574/delicate" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/641/641574_delicate.png" style="width: 240px; height: 120px; border: 0 none;" alt="delicate" /></a>
1834
+ <a href="http://www.colourlovers.com/palette/1002921/Wordpress_Pallette" target="_blank"><img src="http://www.colourlovers.com/images/badges/p/1002/1002921_Wordpress_Pallette.png" style="width: 240px; height: 120px; border: 0 none;" alt="Wordpress_Pallette" /></a>]]></description>
1835
+ <url><![CDATA[http://www.colourlovers.com/palette/765305/japan9]]></url>
1836
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/E3DFBA/C8D6BF/93CCC6/6CBDB5/1A1F1E/japan9.png]]></imageUrl>
1837
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/765/765305_japan9.png]]></badgeUrl>
1838
+ <apiUrl>http://www.colourlovers.com/api/palette/765305</apiUrl>
1839
+ </palette>
1840
+ <palette>
1841
+ <id>530</id>
1842
+ <title><![CDATA[victoria's secret]]></title>
1843
+ <userName><![CDATA[COLOURlover]]></userName>
1844
+ <numViews>38976</numViews>
1845
+ <numVotes>828</numVotes>
1846
+ <numComments>20</numComments>
1847
+ <numHearts>0</numHearts>
1848
+ <rank>83</rank>
1849
+ <dateCreated>2005-07-20 05:51:22</dateCreated>
1850
+ <colors>
1851
+ <hex>382F32</hex>
1852
+ <hex>FFEAF2</hex>
1853
+ <hex>FCD9E5</hex>
1854
+ <hex>FBC5D8</hex>
1855
+ <hex>F1396D</hex>
1856
+ </colors>
1857
+ <description><![CDATA[victoria's secret website, summer 05]]></description>
1858
+ <url><![CDATA[http://www.colourlovers.com/palette/530/victorias_secret]]></url>
1859
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/382F32/FFEAF2/FCD9E5/FBC5D8/F1396D/victorias_secret.png]]></imageUrl>
1860
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/0/530_victorias_secret.png]]></badgeUrl>
1861
+ <apiUrl>http://www.colourlovers.com/api/palette/530</apiUrl>
1862
+ </palette>
1863
+ <palette>
1864
+ <id>2105064</id>
1865
+ <title><![CDATA[sands of time]]></title>
1866
+ <userName><![CDATA[desvil]]></userName>
1867
+ <numViews>15036</numViews>
1868
+ <numVotes>826</numVotes>
1869
+ <numComments>26</numComments>
1870
+ <numHearts>0</numHearts>
1871
+ <rank>93</rank>
1872
+ <dateCreated>2012-04-09 04:12:27</dateCreated>
1873
+ <colors>
1874
+ <hex>C1B398</hex>
1875
+ <hex>605951</hex>
1876
+ <hex>FBEEC2</hex>
1877
+ <hex>61A6AB</hex>
1878
+ <hex>ACCEC0</hex>
1879
+ </colors>
1880
+ <description><![CDATA[<div align="center"><span style="color:#5AA0A5; font-size:medium; font-family:calibri, helvetica, sans-serif; letter-spacing:1pt; word-spacing:3pt; line-height:1.5;">You can try my <a href="http://desvil.url.ph/profile_maker.htm" target="_blank" style="color:#96C2B1; font-weight:bold;">javascript's tool</a> for making profile or description of palette.
1881
+ And <a href="http://desvil.url.ph/resizable_com.htm" target="_blank" style="color:#96C2B1; font-weight:bold;">here</a> I have another tool for creating comment with resizable pictures.
1882
+
1883
+ <div style="height:100px;"><a href="/pattern/2386999/" target="_blank"><span style="width:170px; height:100px; display:block; float: left; border-radius:10px; -moz-border-radius:10px; background-image:url('http://colourlovers.com.s3.amazonaws.com/images/patterns/2386/2386999.png');border: 1px solid #2D231E;">
1884
+ </span></a><a href="http://www.colourlovers.com/pattern/2388623/" target="_blank"><span style="width:170px; height:100px; display:block; float: right; border-radius:10px; -moz-border-radius:10px; background-image:url('http://colourlovers.com.s3.amazonaws.com/images/patterns/2388/2388623.png'); border: 1px solid #4A443E;">
1885
+ </span></a></div>
1886
+ <div style="height:100px;"><a href="http://www.colourlovers.com/pattern/2387809/" target="_blank"><span style="width:170px; height:100px; display:block; float: left; background-image:url('http://colourlovers.com.s3.amazonaws.com/images/patterns/2387/2387809.png'); border: 1px solid #2D231E; border-radius:10px; -moz-border-radius:10px;">
1887
+ </span></a><a href="http://www.colourlovers.com/pattern/2387125/" target="_blank"><span style="width:170px; height:100px; display:block; float: right; border-radius:10px; -moz-border-radius:10px; background-image:url('http://colourlovers.com.s3.amazonaws.com/images/patterns/2387/2387125.png');border: 1px solid #2D231E;">
1888
+ </span></a></div>
1889
+ <div style="height:100px;"><a href="http://www.colourlovers.com/pattern/2392234/" target="_blank"><span style="width:170px; height:100px; display:block; border-radius:10px; -moz-border-radius:10px; float: left; background-image:url('http://colourlovers.com.s3.amazonaws.com/images/patterns/2392/2392234.png'); border: 1px solid #4A443E;"></span></a><a href="http://www.colourlovers.com/pattern/2391916/" target="_blank"><span style="width:170px; height:100px; display:block; float: right; background-image:url('http://colourlovers.com.s3.amazonaws.com/images/patterns/2391/2391916.png');border: 1px solid #2D231E; float: right; border-radius:10px; -moz-border-radius:10px;"></span></a></div>
1890
+ <div style="height:100px;"><a href="http://www.colourlovers.com/pattern/2395104/" target="_blank"><span style="width:170px; height:100px; display:block; border-radius:10px; -moz-border-radius:10px; float: left; background-image:url('http://colourlovers.com.s3.amazonaws.com/images/patterns/2395/2395104.png'); border: 1px solid #4A443E;"></span></a><a href="http://www.colourlovers.com/pattern/2391167/" target="_blank"><span style="width:170px; height:100px; display:block; float: right; background-image:url('http://colourlovers.com.s3.amazonaws.com/images/patterns/2391/2391167.png');border: 1px solid #2D231E; float: right; border-radius:10px; -moz-border-radius:10px;"></span></a></div>
1891
+ <div style="height:100px;"><a href="http://www.colourlovers.com/pattern/2384572/" target="_blank"><span style="width:170px; height:100px; display:block; float: left; border-radius:10px; -moz-border-radius:10px; background-image:url('http://colourlovers.com.s3.amazonaws.com/images/patterns/2384/2384572.png');border: 1px solid #2D231E;"></span></a><a href="http://www.colourlovers.com/pattern/2384570/" target="_blank"><span style="width:170px; height:100px; display:block; float: right; border-radius:10px; -moz-border-radius:10px; background-image:url('http://colourlovers.com.s3.amazonaws.com/images/patterns/2384/2384570.png');border: 1px solid #2D231E;"></span></a></div>
1892
+ <div style="height:100px;"><a href="http://www.colourlovers.com/pattern/2384692/" target="_blank"><span style="width:170px; height:100px; display:block; float: left; border-radius:10px; -moz-border-radius:10px; background-image:url('http://colourlovers.com.s3.amazonaws.com/images/patterns/2384/2384692.png');border: 1px solid #2D231E;"></span></a><a href="http://www.colourlovers.com/pattern/2387135/" target="_blank"><span style="width:170px; height:100px; display:block; float: right; border-radius:10px; -moz-border-radius:10px; background-image:url('http://colourlovers.com.s3.amazonaws.com/images/patterns/2387/2387135.png');border: 1px solid #2D231E;"></span></a></div>
1893
+ <div style="height:100px;"><a href="http://www.colourlovers.com/pattern/2388654/" target="_blank"><span style="width:170px; height:100px; display:block; float: left; border-radius:10px; -moz-border-radius:10px; background-image:url('http://colourlovers.com.s3.amazonaws.com/images/patterns/2388/2388654.png'); border: 1px solid #4A443E;"></span></a><a href="http://www.colourlovers.com/pattern/2388327/" target="_blank"><span style="width:170px; height:100px; display:block; float: right; border-radius:10px; -moz-border-radius:10px; background-image:url('http://colourlovers.com.s3.amazonaws.com/images/patterns/2388/2388327.png'); border: 1px solid #4A443E;"></span></a></div>
1894
+ <div style="height:100px;"><a href="http://www.colourlovers.com/pattern/2388228/" target="_blank"><span style="width:170px; height:100px; display:block; border-radius:10px; -moz-border-radius:10px; float: left; background-image:url('http://colourlovers.com.s3.amazonaws.com/images/patterns/2388/2388228.png'); border: 1px solid #4A443E;"></span></a><a href="http://www.colourlovers.com/pattern/2388219/" target="_blank"><span style="width:170px; height:100px; display:block; float: right; background-image:url('http://colourlovers.com.s3.amazonaws.com/images/patterns/2388/2388219.png');border: 1px solid #2D231E; float: right; border-radius:10px; -moz-border-radius:10px;"></span></a></div>
1895
+
1896
+ Blue strings by <a href="http://www.colourlovers.com/lover/yoksel" target="_blank">yoksel</a>:
1897
+ <a href="http://www.colourlovers.com/pattern/2387773/" target="_blank"><span style="width:300px; height:100px; display:block; border-radius:10px; -moz-border-radius:10px; background-image:url('http://colourlovers.com.s3.amazonaws.com/images/patterns/2387/2387773.png');border: 1px solid #2D231E;"></span></a>
1898
+ </div>]]></description>
1899
+ <url><![CDATA[http://www.colourlovers.com/palette/2105064/sands_of_time]]></url>
1900
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/C1B398/605951/FBEEC2/61A6AB/ACCEC0/sands_of_time.png]]></imageUrl>
1901
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/2105/2105064_sands_of_time.png]]></badgeUrl>
1902
+ <apiUrl>http://www.colourlovers.com/api/palette/2105064</apiUrl>
1903
+ </palette>
1904
+ <palette>
1905
+ <id>109188</id>
1906
+ <title><![CDATA[antidesign]]></title>
1907
+ <userName><![CDATA[death—of—design]]></userName>
1908
+ <numViews>69984</numViews>
1909
+ <numVotes>825</numVotes>
1910
+ <numComments>30</numComments>
1911
+ <numHearts>0</numHearts>
1912
+ <rank>88</rank>
1913
+ <dateCreated>2007-07-30 23:19:27</dateCreated>
1914
+ <colors>
1915
+ <hex>413D3D</hex>
1916
+ <hex>040004</hex>
1917
+ <hex>C8FF00</hex>
1918
+ <hex>FA023C</hex>
1919
+ <hex>4B000F</hex>
1920
+ </colors>
1921
+ <description><![CDATA[<font color="black" size="10">wicked</font>
1922
+ <p />
1923
+ <font color="gray" size="10">awesome..</font>
1924
+
1925
+ <a href="http://www.squidoo.com/antidesign">
1926
+ <img src="http://logo.cafepress.com/nocache/7/2700057.jpg" width="250" height="50" />
1927
+ <font size="5"><strong>
1928
+ T's.</a></font></strong>]]></description>
1929
+ <url><![CDATA[http://www.colourlovers.com/palette/109188/antidesign]]></url>
1930
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/413D3D/040004/C8FF00/FA023C/4B000F/antidesign.png]]></imageUrl>
1931
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/109/109188_antidesign.png]]></badgeUrl>
1932
+ <apiUrl>http://www.colourlovers.com/api/palette/109188</apiUrl>
1933
+ </palette>
1934
+ <palette>
1935
+ <id>1223060</id>
1936
+ <title><![CDATA[Carrot Cafe]]></title>
1937
+ <userName><![CDATA[Twinklemittens]]></userName>
1938
+ <numViews>11305</numViews>
1939
+ <numVotes>824</numVotes>
1940
+ <numComments>34</numComments>
1941
+ <numHearts>0</numHearts>
1942
+ <rank>87</rank>
1943
+ <dateCreated>2010-06-28 21:35:45</dateCreated>
1944
+ <colors>
1945
+ <hex>9DC9AC</hex>
1946
+ <hex>FFFEC7</hex>
1947
+ <hex>F56218</hex>
1948
+ <hex>FF9D2E</hex>
1949
+ <hex>919167</hex>
1950
+ </colors>
1951
+ <description><![CDATA[]]></description>
1952
+ <url><![CDATA[http://www.colourlovers.com/palette/1223060/Carrot_Cafe]]></url>
1953
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/9DC9AC/FFFEC7/F56218/FF9D2E/919167/Carrot_Cafe.png]]></imageUrl>
1954
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/1223/1223060_Carrot_Cafe.png]]></badgeUrl>
1955
+ <apiUrl>http://www.colourlovers.com/api/palette/1223060</apiUrl>
1956
+ </palette>
1957
+ <palette>
1958
+ <id>41095</id>
1959
+ <title><![CDATA[leatherbound]]></title>
1960
+ <userName><![CDATA[nancythequilt]]></userName>
1961
+ <numViews>41653</numViews>
1962
+ <numVotes>817</numVotes>
1963
+ <numComments>33</numComments>
1964
+ <numHearts>0</numHearts>
1965
+ <rank>95</rank>
1966
+ <dateCreated>2007-01-01 13:18:13</dateCreated>
1967
+ <colors>
1968
+ <hex>951F2B</hex>
1969
+ <hex>F5F4D7</hex>
1970
+ <hex>E0DFB1</hex>
1971
+ <hex>A5A36C</hex>
1972
+ <hex>535233</hex>
1973
+ </colors>
1974
+ <description><![CDATA[]]></description>
1975
+ <url><![CDATA[http://www.colourlovers.com/palette/41095/leatherbound]]></url>
1976
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/951F2B/F5F4D7/E0DFB1/A5A36C/535233/leatherbound.png]]></imageUrl>
1977
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/41/41095_leatherbound.png]]></badgeUrl>
1978
+ <apiUrl>http://www.colourlovers.com/api/palette/41095</apiUrl>
1979
+ </palette>
1980
+ <palette>
1981
+ <id>2452235</id>
1982
+ <title><![CDATA[Numb]]></title>
1983
+ <userName><![CDATA[davidgav]]></userName>
1984
+ <numViews>4848</numViews>
1985
+ <numVotes>815</numVotes>
1986
+ <numComments>0</numComments>
1987
+ <numHearts>0</numHearts>
1988
+ <rank>82</rank>
1989
+ <dateCreated>2012-10-04 08:48:30</dateCreated>
1990
+ <colors>
1991
+ <hex>75616B</hex>
1992
+ <hex>BFCFF7</hex>
1993
+ <hex>DCE4F7</hex>
1994
+ <hex>F8F3BF</hex>
1995
+ <hex>D34017</hex>
1996
+ </colors>
1997
+ <description><![CDATA[]]></description>
1998
+ <url><![CDATA[http://www.colourlovers.com/palette/2452235/Numb]]></url>
1999
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/75616B/BFCFF7/DCE4F7/F8F3BF/D34017/Numb.png]]></imageUrl>
2000
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/2452/2452235_Numb.png]]></badgeUrl>
2001
+ <apiUrl>http://www.colourlovers.com/api/palette/2452235</apiUrl>
2002
+ </palette>
2003
+ <palette>
2004
+ <id>577622</id>
2005
+ <title><![CDATA[One Sixty-Eight ☆]]></title>
2006
+ <userName><![CDATA[sugar!]]></userName>
2007
+ <numViews>15733</numViews>
2008
+ <numVotes>811</numVotes>
2009
+ <numComments>100</numComments>
2010
+ <numHearts>0</numHearts>
2011
+ <rank>94</rank>
2012
+ <dateCreated>2008-10-18 00:40:40</dateCreated>
2013
+ <colors>
2014
+ <hex>5E9FA3</hex>
2015
+ <hex>DCD1B4</hex>
2016
+ <hex>FAB87F</hex>
2017
+ <hex>F87E7B</hex>
2018
+ <hex>B05574</hex>
2019
+ </colors>
2020
+ <description><![CDATA[For brown-sugar's one hundred and sixty-eight lovers ♥. Because we all love colours. Thank you so muchh.
2021
+
2022
+ Why 168? ♥ It's my lucky number. Can?
2023
+
2024
+ Ranked #5 on 20.10.2008
2025
+ Ranked #4 on 21.10.2008
2026
+ Ranked #4 on 23.10.2008
2027
+
2028
+ <a href="http://www.colourlovers.com/pattern/259209/One_Sixty-Eight_☆" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/259/259209_One_Sixty-Eight_.png" style="width: 240px; height: 120px; border: 0 none;" alt="One_Sixty-Eight_☆" /></a>]]></description>
2029
+ <url><![CDATA[http://www.colourlovers.com/palette/577622/One_Sixty-Eight_☆]]></url>
2030
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/5E9FA3/DCD1B4/FAB87F/F87E7B/B05574/One_Sixty-Eight_☆.png]]></imageUrl>
2031
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/577/577622_One_Sixty-Eight_.png]]></badgeUrl>
2032
+ <apiUrl>http://www.colourlovers.com/api/palette/577622</apiUrl>
2033
+ </palette>
2034
+ <palette>
2035
+ <id>806955</id>
2036
+ <title><![CDATA[[slow motion]]]></title>
2037
+ <userName><![CDATA[tvr]]></userName>
2038
+ <numViews>35416</numViews>
2039
+ <numVotes>811</numVotes>
2040
+ <numComments>85</numComments>
2041
+ <numHearts>5</numHearts>
2042
+ <rank>92</rank>
2043
+ <dateCreated>2009-05-03 12:28:40</dateCreated>
2044
+ <colors>
2045
+ <hex>FFEDBF</hex>
2046
+ <hex>F7803C</hex>
2047
+ <hex>F54828</hex>
2048
+ <hex>2E0D23</hex>
2049
+ <hex>F8E4C1</hex>
2050
+ </colors>
2051
+ <description><![CDATA[underwater swimming is like a slow motion dream.
2052
+
2053
+ our senses are taken to another level.
2054
+
2055
+ weird, but feels so good.
2056
+
2057
+ Use Image:
2058
+ <img src="http://static.colourlovers.com/images/palettes/806/806955u.jpg" alt=" " />]]></description>
2059
+ <url><![CDATA[http://www.colourlovers.com/palette/806955/[slow_motion]]]></url>
2060
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/FFEDBF/F7803C/F54828/2E0D23/F8E4C1/[slow_motion].png]]></imageUrl>
2061
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/806/806955_[slow_motion].png]]></badgeUrl>
2062
+ <apiUrl>http://www.colourlovers.com/api/palette/806955</apiUrl>
2063
+ </palette>
2064
+ <palette>
2065
+ <id>803258</id>
2066
+ <title><![CDATA[french kiss]]></title>
2067
+ <userName><![CDATA[valeryanaglz]]></userName>
2068
+ <numViews>22517</numViews>
2069
+ <numVotes>808</numVotes>
2070
+ <numComments>122</numComments>
2071
+ <numHearts>5</numHearts>
2072
+ <rank>89</rank>
2073
+ <dateCreated>2009-04-30 10:11:09</dateCreated>
2074
+ <colors>
2075
+ <hex>EDF6EE</hex>
2076
+ <hex>D1C089</hex>
2077
+ <hex>B3204D</hex>
2078
+ <hex>412E28</hex>
2079
+ <hex>151101</hex>
2080
+ </colors>
2081
+ <description><![CDATA[<a href="http://www.colourlovers.com/palette/803258/french_kiss?c=1" target="_blank"><img src="http://www.colourlovers.com/images/badges/pw/803/803258_french_kiss.png" style="width: 240px; height: 120px; border: 0 none;" alt="french_kiss" /></a>
2082
+ <a href="http://www.colourlovers.com/pattern/462353/french_flowers" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/462/462353_french_flowers.png" style="width: 240px; height: 120px; border: 0 none;" alt="french_flowers" /></a>
2083
+ <a href="http://www.colourlovers.com/pattern/427013/little_kisses" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/427/427013_little_kisses.png" style="width: 240px; height: 120px; border: 0 none;" alt="little_kisses" /></a>
2084
+ <a href="http://www.colourlovers.com/pattern/620381/french_me_..." target="_blank"><img src="http://www.colourlovers.com/images/badges/n/620/620381_french_me_....png" style="width: 240px; height: 120px; border: 0 none;" alt="french_me_..." /></a>
2085
+ <a href="http://www.colourlovers.com/palette/936888/french_kiss?c=1" target="_blank"><img src="http://www.colourlovers.com/images/badges/pw/936/936888_french_kiss.png" style="width: 240px; height: 120px; border: 0 none;" alt="french_kiss" /></a>
2086
+ <a href="http://www.colourlovers.com/palette/936893/french_kiss?c=1" target="_blank"><img src="http://www.colourlovers.com/images/badges/pw/936/936893_french_kiss.png" style="width: 240px; height: 120px; border: 0 none;" alt="french_kiss" /></a>
2087
+ <a href="http://www.colourlovers.com/palette/936896/french_kiss?c=1" target="_blank"><img src="http://www.colourlovers.com/images/badges/pw/936/936896_french_kiss.png" style="width: 240px; height: 120px; border: 0 none;" alt="french_kiss" /></a>
2088
+ <a href="http://www.colourlovers.com/palette/936900/french_kiss?c=1" target="_blank"><img src="http://www.colourlovers.com/images/badges/pw/936/936900_french_kiss.png" style="width: 240px; height: 120px; border: 0 none;" alt="french_kiss" /></a>
2089
+ <a href="http://www.colourlovers.com/palette/936912/french_kiss?c=1" target="_blank"><img src="http://www.colourlovers.com/images/badges/pw/936/936912_french_kiss.png" style="width: 240px; height: 120px; border: 0 none;" alt="french_kiss" /></a>]]></description>
2090
+ <url><![CDATA[http://www.colourlovers.com/palette/803258/french_kiss]]></url>
2091
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/EDF6EE/D1C089/B3204D/412E28/151101/french_kiss.png]]></imageUrl>
2092
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/803/803258_french_kiss.png]]></badgeUrl>
2093
+ <apiUrl>http://www.colourlovers.com/api/palette/803258</apiUrl>
2094
+ </palette>
2095
+ <palette>
2096
+ <id>10</id>
2097
+ <title><![CDATA[american idiot]]></title>
2098
+ <userName><![CDATA[COLOURlover]]></userName>
2099
+ <numViews>58079</numViews>
2100
+ <numVotes>793</numVotes>
2101
+ <numComments>36</numComments>
2102
+ <numHearts>5</numHearts>
2103
+ <rank>97</rank>
2104
+ <dateCreated>2004-12-28 10:11:18</dateCreated>
2105
+ <colors>
2106
+ <hex>000000</hex>
2107
+ <hex>9F111B</hex>
2108
+ <hex>B11623</hex>
2109
+ <hex>292C37</hex>
2110
+ <hex>CCCCCC</hex>
2111
+ </colors>
2112
+ <description><![CDATA[the colours used in the layout
2113
+ for a political / humour site.
2114
+
2115
+ Use Link: <a href="http://www.thejackasswon.com" target="_blank">www.thejackasswon.com</a>]]></description>
2116
+ <url><![CDATA[http://www.colourlovers.com/palette/10/american_idiot]]></url>
2117
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/000000/9F111B/B11623/292C37/CCCCCC/american_idiot.png]]></imageUrl>
2118
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/0/10_american_idiot.png]]></badgeUrl>
2119
+ <apiUrl>http://www.colourlovers.com/api/palette/10</apiUrl>
2120
+ </palette>
2121
+ <palette>
2122
+ <id>2316406</id>
2123
+ <title><![CDATA[G2K Followers]]></title>
2124
+ <userName><![CDATA[GabsGiggles]]></userName>
2125
+ <numViews>6682</numViews>
2126
+ <numVotes>788</numVotes>
2127
+ <numComments>108</numComments>
2128
+ <numHearts>0</numHearts>
2129
+ <rank>96</rank>
2130
+ <dateCreated>2012-08-02 15:45:19</dateCreated>
2131
+ <colors>
2132
+ <hex>FFFBB7</hex>
2133
+ <hex>A6F6AF</hex>
2134
+ <hex>66B6AB</hex>
2135
+ <hex>5B7C8D</hex>
2136
+ <hex>4F2958</hex>
2137
+ </colors>
2138
+ <description><![CDATA[<p style="font-weight:normal;color:#5B7C8D;letter-spacing:1pt;word-spacing:1pt;font-size:14px;text-align:left;font-family:arial, helvetica, sans-serif;line-height:1;"> <b />I just reached 2,000+ lovely followers and I’m still wondering how did this happened. So here’s a humble and cheery palette dedicated to all of you who put a smile on my face with every love and every comment. Thanks so so so so so∞ much my colourfriends❤
2139
+ Lots and lots of kisses,
2140
+ Gabs.
2141
+
2142
+ I'll be keeping your precious gifts here:
2143
+ </p><a href="http://www.colourlovers.com/group/Giggless_Keepsakes_%E2%9D%A4" /><img class="photo-border" img="WIDTH: 263px; HEIGHT: 93px" src="http://static.colourlovers.com/images/groups/4/4129f.jpg?1339819745" />]]></description>
2144
+ <url><![CDATA[http://www.colourlovers.com/palette/2316406/G2K_Followers]]></url>
2145
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/FFFBB7/A6F6AF/66B6AB/5B7C8D/4F2958/G2K_Followers.png]]></imageUrl>
2146
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/2316/2316406_G2K_Followers.png]]></badgeUrl>
2147
+ <apiUrl>http://www.colourlovers.com/api/palette/2316406</apiUrl>
2148
+ </palette>
2149
+ <palette>
2150
+ <id>1040266</id>
2151
+ <title><![CDATA[Outer Rings]]></title>
2152
+ <userName><![CDATA[parafinity]]></userName>
2153
+ <numViews>15367</numViews>
2154
+ <numVotes>787</numVotes>
2155
+ <numComments>34</numComments>
2156
+ <numHearts>5</numHearts>
2157
+ <rank>99</rank>
2158
+ <dateCreated>2009-12-05 13:10:54</dateCreated>
2159
+ <colors>
2160
+ <hex>EFF3CD</hex>
2161
+ <hex>B2D5BA</hex>
2162
+ <hex>61ADA0</hex>
2163
+ <hex>248F8D</hex>
2164
+ <hex>605063</hex>
2165
+ </colors>
2166
+ <description><![CDATA[<a href="http://www.colourlovers.com/pattern/682255/Ice_Rings" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/682/682255_Ice_Rings.png" style="width: 240px; height: 120px; border: 0 none;" alt="Ice_Rings" /></a>
2167
+
2168
+ And thank you for the pattern!!
2169
+ <a href="http://www.colourlovers.com/pattern/707582/Retro_Melancholy" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/707/707582_Retro_Melancholy.png" style="width: 240px; height: 120px; border: 0 none;" alt="Retro_Melancholy" /></a><a href="http://www.colourlovers.com/pattern/714477/Vintage_Wedding" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/714/714477_Vintage_Wedding.png" style="width: 240px; height: 120px; border: 0 none;" alt="Vintage_Wedding" /></a>]]></description>
2170
+ <url><![CDATA[http://www.colourlovers.com/palette/1040266/Outer_Rings]]></url>
2171
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/EFF3CD/B2D5BA/61ADA0/248F8D/605063/Outer_Rings.png]]></imageUrl>
2172
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/1040/1040266_Outer_Rings.png]]></badgeUrl>
2173
+ <apiUrl>http://www.colourlovers.com/api/palette/1040266</apiUrl>
2174
+ </palette>
2175
+ <palette>
2176
+ <id>2641140</id>
2177
+ <title><![CDATA[Burning Love]]></title>
2178
+ <userName><![CDATA[davidgav]]></userName>
2179
+ <numViews>4583</numViews>
2180
+ <numVotes>785</numVotes>
2181
+ <numComments>0</numComments>
2182
+ <numHearts>0</numHearts>
2183
+ <rank>91</rank>
2184
+ <dateCreated>2013-01-18 08:12:11</dateCreated>
2185
+ <colors>
2186
+ <hex>7E5686</hex>
2187
+ <hex>A5AAD9</hex>
2188
+ <hex>E8F9A2</hex>
2189
+ <hex>F8A13F</hex>
2190
+ <hex>BA3C3D</hex>
2191
+ </colors>
2192
+ <description><![CDATA[]]></description>
2193
+ <url><![CDATA[http://www.colourlovers.com/palette/2641140/Burning_Love]]></url>
2194
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/7E5686/A5AAD9/E8F9A2/F8A13F/BA3C3D/Burning_Love.png]]></imageUrl>
2195
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/2641/2641140_Burning_Love.png]]></badgeUrl>
2196
+ <apiUrl>http://www.colourlovers.com/api/palette/2641140</apiUrl>
2197
+ </palette>
2198
+ <palette>
2199
+ <id>692385</id>
2200
+ <title><![CDATA[Making Coffee]]></title>
2201
+ <userName><![CDATA[Tzadkiel]]></userName>
2202
+ <numViews>19136</numViews>
2203
+ <numVotes>771</numVotes>
2204
+ <numComments>69</numComments>
2205
+ <numHearts>0</numHearts>
2206
+ <rank>102</rank>
2207
+ <dateCreated>2009-02-01 16:28:26</dateCreated>
2208
+ <colors>
2209
+ <hex>0CA5B0</hex>
2210
+ <hex>4E3F30</hex>
2211
+ <hex>FEFEEB</hex>
2212
+ <hex>F8F4E4</hex>
2213
+ <hex>A5B3AA</hex>
2214
+ </colors>
2215
+ <description><![CDATA[Making Coffee with color names...]]></description>
2216
+ <url><![CDATA[http://www.colourlovers.com/palette/692385/Making_Coffee]]></url>
2217
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/0CA5B0/4E3F30/FEFEEB/F8F4E4/A5B3AA/Making_Coffee.png]]></imageUrl>
2218
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/692/692385_Making_Coffee.png]]></badgeUrl>
2219
+ <apiUrl>http://www.colourlovers.com/api/palette/692385</apiUrl>
2220
+ </palette>
2221
+ <palette>
2222
+ <id>196117</id>
2223
+ <title><![CDATA[Japanese Bath]]></title>
2224
+ <userName><![CDATA[caori]]></userName>
2225
+ <numViews>16157</numViews>
2226
+ <numVotes>770</numVotes>
2227
+ <numComments>136</numComments>
2228
+ <numHearts>5</numHearts>
2229
+ <rank>98</rank>
2230
+ <dateCreated>2007-11-04 08:51:35</dateCreated>
2231
+ <colors>
2232
+ <hex>9CDDC8</hex>
2233
+ <hex>BFD8AD</hex>
2234
+ <hex>DDD9AB</hex>
2235
+ <hex>F7AF63</hex>
2236
+ <hex>633D2E</hex>
2237
+ </colors>
2238
+ <description><![CDATA[<a href="http://www.colourlovers.com/palette/789854/Redefinition?c=1" target="_blank"><img src="http://www.colourlovers.com/images/badges/pw/789/789854_Redefinition.png" style="width: 240px; height: 120px; border: 0 none;" alt="Redefinition" /></a>
2239
+
2240
+ <a href="http://www.colourlovers.com/pattern/681686/Japanese_Bath" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/681/681686_Japanese_Bath.png" style="width: 240px; height: 120px; border: 0 none;" alt="Japanese_Bath" /></a>
2241
+
2242
+ <a href="http://www.colourlovers.com/pattern/876280/Flower_Bath" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/876/876280_Flower_Bath.png" style="width: 240px; height: 120px; border: 0 none;" alt="Flower_Bath" /></a>
2243
+
2244
+ <a href="http://www.colourlovers.com/pattern/1843048/Japanese_Bath" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1843/1843048_Japanese_Bath.png" style="width: 240px; height: 120px; border: 0 none;" alt="Japanese_Bath" /></a>
2245
+
2246
+ <a href="http://www.colourlovers.com/pattern/1843066/Japanese_Bath" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1843/1843066_Japanese_Bath.png" style="width: 240px; height: 120px; border: 0 none;" alt="Japanese_Bath" /></a>
2247
+
2248
+ <a href="http://www.colourlovers.com/pattern/1982378/Retro_swirls" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1982/1982378_Retro_swirls.png" style="width: 240px; height: 120px; border: 0 none;" alt="Retro_swirls" /></a>
2249
+
2250
+ <a href="http://www.colourlovers.com/pattern/1982385/Flower_Fireworks" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1982/1982385_Flower_Fireworks.png" style="width: 240px; height: 120px; border: 0 none;" alt="Flower_Fireworks" /></a>
2251
+
2252
+ <a href="http://www.colourlovers.com/pattern/1982391/Retro_Bath" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/1982/1982391_Retro_Bath.png" style="width: 240px; height: 120px; border: 0 none;" alt="Retro_Bath" /></a>]]></description>
2253
+ <url><![CDATA[http://www.colourlovers.com/palette/196117/Japanese_Bath]]></url>
2254
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/9CDDC8/BFD8AD/DDD9AB/F7AF63/633D2E/Japanese_Bath.png]]></imageUrl>
2255
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/196/196117_Japanese_Bath.png]]></badgeUrl>
2256
+ <apiUrl>http://www.colourlovers.com/api/palette/196117</apiUrl>
2257
+ </palette>
2258
+ <palette>
2259
+ <id>38562</id>
2260
+ <title><![CDATA[Hands On]]></title>
2261
+ <userName><![CDATA[COLOURlover]]></userName>
2262
+ <numViews>64079</numViews>
2263
+ <numVotes>758</numVotes>
2264
+ <numComments>11</numComments>
2265
+ <numHearts>0</numHearts>
2266
+ <rank>107</rank>
2267
+ <dateCreated>2006-12-12 00:27:03</dateCreated>
2268
+ <colors>
2269
+ <hex>4E4D4A</hex>
2270
+ <hex>353432</hex>
2271
+ <hex>94BA65</hex>
2272
+ <hex>2790B0</hex>
2273
+ <hex>2B4E72</hex>
2274
+ </colors>
2275
+ <description><![CDATA[The new layout colours for Hands On Disaster Response, my Non-Profit... and it looks like COLOURlover will be in the philippines in 2 weeks responding to Typhoon Durian.]]></description>
2276
+ <url><![CDATA[http://www.colourlovers.com/palette/38562/Hands_On]]></url>
2277
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/4E4D4A/353432/94BA65/2790B0/2B4E72/Hands_On.png]]></imageUrl>
2278
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/38/38562_Hands_On.png]]></badgeUrl>
2279
+ <apiUrl>http://www.colourlovers.com/api/palette/38562</apiUrl>
2280
+ </palette>
2281
+ <palette>
2282
+ <id>670816</id>
2283
+ <title><![CDATA[i n v i s i b l e]]></title>
2284
+ <userName><![CDATA[tvr]]></userName>
2285
+ <numViews>24520</numViews>
2286
+ <numVotes>753</numVotes>
2287
+ <numComments>81</numComments>
2288
+ <numHearts>4</numHearts>
2289
+ <rank>101</rank>
2290
+ <dateCreated>2009-01-12 14:48:45</dateCreated>
2291
+ <colors>
2292
+ <hex>FCFEF5</hex>
2293
+ <hex>E9FFE1</hex>
2294
+ <hex>CDCFB7</hex>
2295
+ <hex>D6E6C3</hex>
2296
+ <hex>FAFBE3</hex>
2297
+ </colors>
2298
+ <description><![CDATA[]]></description>
2299
+ <url><![CDATA[http://www.colourlovers.com/palette/670816/i_n_v_i_s_i_b_l_e]]></url>
2300
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/FCFEF5/E9FFE1/CDCFB7/D6E6C3/FAFBE3/i_n_v_i_s_i_b_l_e.png]]></imageUrl>
2301
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/670/670816_i_n_v_i_s_i_b_l_e.png]]></badgeUrl>
2302
+ <apiUrl>http://www.colourlovers.com/api/palette/670816</apiUrl>
2303
+ </palette>
2304
+ <palette>
2305
+ <id>1260807</id>
2306
+ <title><![CDATA[a lost memory.]]></title>
2307
+ <userName><![CDATA[X-EcutionerStyle]]></userName>
2308
+ <numViews>11484</numViews>
2309
+ <numVotes>747</numVotes>
2310
+ <numComments>19</numComments>
2311
+ <numHearts>0</numHearts>
2312
+ <rank>103</rank>
2313
+ <dateCreated>2010-08-09 17:37:38</dateCreated>
2314
+ <colors>
2315
+ <hex>4D3B3B</hex>
2316
+ <hex>DE6262</hex>
2317
+ <hex>FFB88C</hex>
2318
+ <hex>FFD0B3</hex>
2319
+ <hex>F5E0D3</hex>
2320
+ </colors>
2321
+ <description><![CDATA[]]></description>
2322
+ <url><![CDATA[http://www.colourlovers.com/palette/1260807/a_lost_memory.]]></url>
2323
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/4D3B3B/DE6262/FFB88C/FFD0B3/F5E0D3/a_lost_memory..png]]></imageUrl>
2324
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/1260/1260807_a_lost_memory..png]]></badgeUrl>
2325
+ <apiUrl>http://www.colourlovers.com/api/palette/1260807</apiUrl>
2326
+ </palette>
2327
+ <palette>
2328
+ <id>1263209</id>
2329
+ <title><![CDATA[Where's the rum?]]></title>
2330
+ <userName><![CDATA[Northern Dancer]]></userName>
2331
+ <numViews>7264</numViews>
2332
+ <numVotes>746</numVotes>
2333
+ <numComments>39</numComments>
2334
+ <numHearts>0</numHearts>
2335
+ <rank>100</rank>
2336
+ <dateCreated>2010-08-12 11:42:38</dateCreated>
2337
+ <colors>
2338
+ <hex>84B295</hex>
2339
+ <hex>ECCF8D</hex>
2340
+ <hex>BB8138</hex>
2341
+ <hex>AC2005</hex>
2342
+ <hex>2C1507</hex>
2343
+ </colors>
2344
+ <description><![CDATA[]]></description>
2345
+ <url><![CDATA[http://www.colourlovers.com/palette/1263209/Wheres_the_rum]]></url>
2346
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/84B295/ECCF8D/BB8138/AC2005/2C1507/Wheres_the_rum.png]]></imageUrl>
2347
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/1263/1263209_Wheres_the_rum.png]]></badgeUrl>
2348
+ <apiUrl>http://www.colourlovers.com/api/palette/1263209</apiUrl>
2349
+ </palette>
2350
+ <palette>
2351
+ <id>559067</id>
2352
+ <title><![CDATA[Nobody ♥ Sugar]]></title>
2353
+ <userName><![CDATA[sugar!]]></userName>
2354
+ <numViews>24820</numViews>
2355
+ <numVotes>738</numVotes>
2356
+ <numComments>64</numComments>
2357
+ <numHearts>0</numHearts>
2358
+ <rank>110</rank>
2359
+ <dateCreated>2008-10-02 10:15:01</dateCreated>
2360
+ <colors>
2361
+ <hex>2D2D29</hex>
2362
+ <hex>215A6D</hex>
2363
+ <hex>3CA2A2</hex>
2364
+ <hex>92C7A3</hex>
2365
+ <hex>DFECE6</hex>
2366
+ </colors>
2367
+ <description><![CDATA[Too much sugar is not good. ♥
2368
+
2369
+ Dump-site is black 'coz it's a dump-site! What are you expecting?
2370
+ Sugar Factory is blue. It's located wayyy up, hidden between the clouds.
2371
+ Nobody ♥ Sugar is (happy blue). Yay!
2372
+ Wonderland is almost green. Land has to be green. Mmm.
2373
+ Brown Sugar is white. She wants to be Icing Sugar, can? ♥
2374
+
2375
+ Ranked #6 on 07.10.2008
2376
+ Ranked #6 on 11.10.2008
2377
+
2378
+ <a href="http://www.colourlovers.com/pattern/244838/Nobody_♥_Sugar" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/244/244838_Nobody__Sugar.png" style="width: 240px; height: 120px; border: 0 none;" alt="Nobody_♥_Sugar" /></a>
2379
+ <a href="http://www.colourlovers.com/pattern/244168/Sugar_Factory" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/244/244168_Sugar_Factory.png" style="width: 240px; height: 120px; border: 0 none;" alt="Sugar Factory" /></a>
2380
+ <a href="http://www.colourlovers.com/pattern/244833/Sugar_♥_Sugar" target="_blank"><img src="http://www.colourlovers.com/images/badges/n/244/244833_Sugar__Sugar.png" style="width: 240px; height: 120px; border: 0 none;" alt="Sugar_♥_Sugar" /></a>]]></description>
2381
+ <url><![CDATA[http://www.colourlovers.com/palette/559067/Nobody_♥_Sugar]]></url>
2382
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/2D2D29/215A6D/3CA2A2/92C7A3/DFECE6/Nobody_♥_Sugar.png]]></imageUrl>
2383
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/559/559067_Nobody__Sugar.png]]></badgeUrl>
2384
+ <apiUrl>http://www.colourlovers.com/api/palette/559067</apiUrl>
2385
+ </palette>
2386
+ <palette>
2387
+ <id>234090</id>
2388
+ <title><![CDATA[[CHIC] Dreamer]]></title>
2389
+ <userName><![CDATA[candycrack]]></userName>
2390
+ <numViews>18826</numViews>
2391
+ <numVotes>736</numVotes>
2392
+ <numComments>36</numComments>
2393
+ <numHearts>0</numHearts>
2394
+ <rank>111</rank>
2395
+ <dateCreated>2007-12-13 11:11:28</dateCreated>
2396
+ <colors>
2397
+ <hex>F38A8A</hex>
2398
+ <hex>55443D</hex>
2399
+ <hex>A0CAB5</hex>
2400
+ <hex>CDE9CA</hex>
2401
+ <hex>F1EDD0</hex>
2402
+ </colors>
2403
+ <description><![CDATA[<a href="http://www.colourlovers.com/pattern/5008/[CHIC]_Dreamer" target="_blank"><img src="http://www.colourlovers.com/badge/n/5008/[CHIC]_Dreamer.png" style="width: 240px; height: 120px; border: 0 none;" alt="[CHIC] Dreamer" /></a>]]></description>
2404
+ <url><![CDATA[http://www.colourlovers.com/palette/234090/[CHIC]_Dreamer]]></url>
2405
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/F38A8A/55443D/A0CAB5/CDE9CA/F1EDD0/[CHIC]_Dreamer.png]]></imageUrl>
2406
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/p/234/234090_[CHIC]_Dreamer.png]]></badgeUrl>
2407
+ <apiUrl>http://www.colourlovers.com/api/palette/234090</apiUrl>
2408
+ </palette>
2409
+ <palette>
2410
+ <id>804674</id>
2411
+ <title><![CDATA[mai]]></title>
2412
+ <userName><![CDATA[lovelyrita]]></userName>
2413
+ <numViews>20934</numViews>
2414
+ <numVotes>735</numVotes>
2415
+ <numComments>66</numComments>
2416
+ <numHearts>0</numHearts>
2417
+ <rank>108</rank>
2418
+ <dateCreated>2009-05-01 13:58:26</dateCreated>
2419
+ <colors>
2420
+ <hex>A70267</hex>
2421
+ <hex>F10C49</hex>
2422
+ <hex>FB6B41</hex>
2423
+ <hex>F6D86B</hex>
2424
+ <hex>339194</hex>
2425
+ </colors>
2426
+ <description><![CDATA[Thank you so much everybody, this palette reached number 1 on may 5th, and it was all thanks to you! ^^]]></description>
2427
+ <url><![CDATA[http://www.colourlovers.com/palette/804674/mai]]></url>
2428
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/A70267/F10C49/FB6B41/F6D86B/339194/mai.png]]></imageUrl>
2429
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/804/804674_mai.png]]></badgeUrl>
2430
+ <apiUrl>http://www.colourlovers.com/api/palette/804674</apiUrl>
2431
+ </palette>
2432
+ <palette>
2433
+ <id>1585870</id>
2434
+ <title><![CDATA[after the heist]]></title>
2435
+ <userName><![CDATA[Tzadkiel]]></userName>
2436
+ <numViews>15785</numViews>
2437
+ <numVotes>731</numVotes>
2438
+ <numComments>9</numComments>
2439
+ <numHearts>0</numHearts>
2440
+ <rank>118</rank>
2441
+ <dateCreated>2011-05-22 13:49:18</dateCreated>
2442
+ <colors>
2443
+ <hex>F8EDD1</hex>
2444
+ <hex>D88A8A</hex>
2445
+ <hex>474843</hex>
2446
+ <hex>9D9D93</hex>
2447
+ <hex>C5CFC6</hex>
2448
+ </colors>
2449
+ <description><![CDATA[]]></description>
2450
+ <url><![CDATA[http://www.colourlovers.com/palette/1585870/after_the_heist]]></url>
2451
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/F8EDD1/D88A8A/474843/9D9D93/C5CFC6/after_the_heist.png]]></imageUrl>
2452
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/1585/1585870_after_the_heist.png]]></badgeUrl>
2453
+ <apiUrl>http://www.colourlovers.com/api/palette/1585870</apiUrl>
2454
+ </palette>
2455
+ <palette>
2456
+ <id>603439</id>
2457
+ <title><![CDATA[blue chocolate]]></title>
2458
+ <userName><![CDATA[dmercer]]></userName>
2459
+ <numViews>20502</numViews>
2460
+ <numVotes>730</numVotes>
2461
+ <numComments>79</numComments>
2462
+ <numHearts>5</numHearts>
2463
+ <rank>109</rank>
2464
+ <dateCreated>2008-11-09 00:33:58</dateCreated>
2465
+ <colors>
2466
+ <hex>30261C</hex>
2467
+ <hex>403831</hex>
2468
+ <hex>36544F</hex>
2469
+ <hex>1F5F61</hex>
2470
+ <hex>0B8185</hex>
2471
+ </colors>
2472
+ <description><![CDATA[]]></description>
2473
+ <url><![CDATA[http://www.colourlovers.com/palette/603439/blue_chocolate]]></url>
2474
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/30261C/403831/36544F/1F5F61/0B8185/blue_chocolate.png]]></imageUrl>
2475
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/603/603439_blue_chocolate.png]]></badgeUrl>
2476
+ <apiUrl>http://www.colourlovers.com/api/palette/603439</apiUrl>
2477
+ </palette>
2478
+ <palette>
2479
+ <id>1148698</id>
2480
+ <title><![CDATA[Lemon Sorbet]]></title>
2481
+ <userName><![CDATA[Zlaika]]></userName>
2482
+ <numViews>193074</numViews>
2483
+ <numVotes>728</numVotes>
2484
+ <numComments>19</numComments>
2485
+ <numHearts>0</numHearts>
2486
+ <rank>106</rank>
2487
+ <dateCreated>2010-04-01 14:01:05</dateCreated>
2488
+ <colors>
2489
+ <hex>FFE181</hex>
2490
+ <hex>EEE9E5</hex>
2491
+ <hex>FAD3B2</hex>
2492
+ <hex>FFBA7F</hex>
2493
+ <hex>FF9C97</hex>
2494
+ </colors>
2495
+ <description><![CDATA[I hate this palette. Why is it on top? Stop loving it please]]></description>
2496
+ <url><![CDATA[http://www.colourlovers.com/palette/1148698/Lemon_Sorbet]]></url>
2497
+ <imageUrl><![CDATA[http://www.colourlovers.com/paletteImg/FFE181/EEE9E5/FAD3B2/FFBA7F/FF9C97/Lemon_Sorbet.png]]></imageUrl>
2498
+ <badgeUrl><![CDATA[http://www.colourlovers.com/images/badges/pw/1148/1148698_Lemon_Sorbet.png]]></badgeUrl>
2499
+ <apiUrl>http://www.colourlovers.com/api/palette/1148698</apiUrl>
2500
+ </palette>
2501
+ </palettes>
composer.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "aristath/kirki",
3
+ "type": "library",
4
+ "description": "Extending the WordPress customizer",
5
+ "homepage": "http://kirki.org",
6
+ "license": "GPLv2 or later",
7
+ "authors": [
8
+ {
9
+ "name" : "aristath",
10
+ "email" : "aristath@gmail.com",
11
+ "homepage" : "http://aristeides.com"
12
+ },
13
+ {
14
+ "name" : "fovoc",
15
+ "email" : "kalliris.d@gmail.com",
16
+ "homepage" : "https://github.com/fovoc"
17
+ }
18
+ ],
19
+ "require": {
20
+ "php": ">=5.3"
21
+ }
22
+ }
config.codekit ADDED
@@ -0,0 +1,928 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "CodeKitInfo": "This is a CodeKit 2.x project configuration file. It is designed to sync project settings across multiple machines. MODIFYING THE CONTENTS OF THIS FILE IS A POOR LIFE DECISION. If you do so, you will likely cause CodeKit to crash. This file is not useful unless accompanied by the project that created it in CodeKit 2. This file is not backwards-compatible with CodeKit 1.x. For more information, see: http:\/\/incident57.com\/codekit",
3
+ "creatorBuild": "18493",
4
+ "files": {
5
+ "\/assets\/css\/kirki-styles.css": {
6
+ "fileType": 16,
7
+ "ignore": 0,
8
+ "ignoreWasSetByUser": 0,
9
+ "inputAbbreviatedPath": "\/assets\/css\/kirki-styles.css",
10
+ "outputAbbreviatedPath": "No Output Path",
11
+ "outputPathIsOutsideProject": 0,
12
+ "outputPathIsSetByUser": 0
13
+ },
14
+ "\/assets\/images\/1c.png": {
15
+ "fileType": 32768,
16
+ "ignore": 0,
17
+ "ignoreWasSetByUser": 0,
18
+ "initialSize": 138,
19
+ "inputAbbreviatedPath": "\/assets\/images\/1c.png",
20
+ "outputAbbreviatedPath": "\/assets\/images\/1c.png",
21
+ "outputPathIsOutsideProject": 0,
22
+ "outputPathIsSetByUser": 0,
23
+ "processed": 0
24
+ },
25
+ "\/assets\/images\/2cl.png": {
26
+ "fileType": 32768,
27
+ "ignore": 0,
28
+ "ignoreWasSetByUser": 0,
29
+ "initialSize": 2984,
30
+ "inputAbbreviatedPath": "\/assets\/images\/2cl.png",
31
+ "outputAbbreviatedPath": "\/assets\/images\/2cl.png",
32
+ "outputPathIsOutsideProject": 0,
33
+ "outputPathIsSetByUser": 0,
34
+ "processed": 0
35
+ },
36
+ "\/assets\/images\/2cr.png": {
37
+ "fileType": 32768,
38
+ "ignore": 0,
39
+ "ignoreWasSetByUser": 0,
40
+ "initialSize": 2985,
41
+ "inputAbbreviatedPath": "\/assets\/images\/2cr.png",
42
+ "outputAbbreviatedPath": "\/assets\/images\/2cr.png",
43
+ "outputPathIsOutsideProject": 0,
44
+ "outputPathIsSetByUser": 0,
45
+ "processed": 0
46
+ },
47
+ "\/assets\/images\/3cl.png": {
48
+ "fileType": 32768,
49
+ "ignore": 0,
50
+ "ignoreWasSetByUser": 0,
51
+ "initialSize": 3156,
52
+ "inputAbbreviatedPath": "\/assets\/images\/3cl.png",
53
+ "outputAbbreviatedPath": "\/assets\/images\/3cl.png",
54
+ "outputPathIsOutsideProject": 0,
55
+ "outputPathIsSetByUser": 0,
56
+ "processed": 0
57
+ },
58
+ "\/assets\/images\/3cm.png": {
59
+ "fileType": 32768,
60
+ "ignore": 0,
61
+ "ignoreWasSetByUser": 0,
62
+ "initialSize": 3036,
63
+ "inputAbbreviatedPath": "\/assets\/images\/3cm.png",
64
+ "outputAbbreviatedPath": "\/assets\/images\/3cm.png",
65
+ "outputPathIsOutsideProject": 0,
66
+ "outputPathIsSetByUser": 0,
67
+ "processed": 0
68
+ },
69
+ "\/assets\/images\/3cr.png": {
70
+ "fileType": 32768,
71
+ "ignore": 0,
72
+ "ignoreWasSetByUser": 0,
73
+ "initialSize": 3050,
74
+ "inputAbbreviatedPath": "\/assets\/images\/3cr.png",
75
+ "outputAbbreviatedPath": "\/assets\/images\/3cr.png",
76
+ "outputPathIsOutsideProject": 0,
77
+ "outputPathIsSetByUser": 0,
78
+ "processed": 0
79
+ },
80
+ "\/assets\/js\/customizer.js": {
81
+ "fileType": 64,
82
+ "ignore": 0,
83
+ "ignoreWasSetByUser": 0,
84
+ "inputAbbreviatedPath": "\/assets\/js\/customizer.js",
85
+ "outputAbbreviatedPath": "\/assets\/js\/min\/customizer-min.js",
86
+ "outputPathIsOutsideProject": 0,
87
+ "outputPathIsSetByUser": 0,
88
+ "outputStyle": 1,
89
+ "syntaxCheckerStyle": 1
90
+ },
91
+ "\/assets\/js\/serialize.js": {
92
+ "fileType": 64,
93
+ "ignore": 0,
94
+ "ignoreWasSetByUser": 0,
95
+ "inputAbbreviatedPath": "\/assets\/js\/serialize.js",
96
+ "outputAbbreviatedPath": "\/assets\/js\/min\/serialize-min.js",
97
+ "outputPathIsOutsideProject": 0,
98
+ "outputPathIsSetByUser": 0,
99
+ "outputStyle": 1,
100
+ "syntaxCheckerStyle": 1
101
+ }
102
+ },
103
+ "hooks": [
104
+ ],
105
+ "lastSavedByUser": "Aristeides",
106
+ "manualImportLinks": {
107
+ },
108
+ "projectAttributes": {
109
+ "bowerAbbreviatedPath": "",
110
+ "displayValue": "kirki",
111
+ "displayValueWasSetByUser": 0,
112
+ "iconImageName": "globe_brown"
113
+ },
114
+ "projectSettings": {
115
+ "alwaysUseExternalServer": 0,
116
+ "animateCSSInjections": 1,
117
+ "autoApplyPSLanguageSettingsStyle": 0,
118
+ "autoprefixerBrowserString": "> 1%, last 2 versions, Firefox ESR, Opera 12.1",
119
+ "autoSyncProjectSettingsFile": 1,
120
+ "browserRefreshDelay": 0,
121
+ "coffeeAutoOutputPathEnabled": 1,
122
+ "coffeeAutoOutputPathFilenamePattern": "*.js",
123
+ "coffeeAutoOutputPathRelativePath": "",
124
+ "coffeeAutoOutputPathReplace1": "",
125
+ "coffeeAutoOutputPathReplace2": "",
126
+ "coffeeAutoOutputPathStyle": 0,
127
+ "coffeeCreateSourceMap": 0,
128
+ "coffeeLintFlags2": {
129
+ "arrow_spacing": {
130
+ "active": 0,
131
+ "flagValue": -1
132
+ },
133
+ "camel_case_classes": {
134
+ "active": 1,
135
+ "flagValue": -1
136
+ },
137
+ "colon_assignment_spacing": {
138
+ "active": 0,
139
+ "flagValue": 1
140
+ },
141
+ "cyclomatic_complexity": {
142
+ "active": 0,
143
+ "flagValue": 10
144
+ },
145
+ "duplicate_key": {
146
+ "active": 1,
147
+ "flagValue": -1
148
+ },
149
+ "empty_constructor_needs_parens": {
150
+ "active": 0,
151
+ "flagValue": -1
152
+ },
153
+ "ensure_comprehensions": {
154
+ "active": 1,
155
+ "flagValue": -1
156
+ },
157
+ "indentation": {
158
+ "active": 1,
159
+ "flagValue": 2
160
+ },
161
+ "line_endings": {
162
+ "active": 0,
163
+ "flagValue": 0
164
+ },
165
+ "max_line_length": {
166
+ "active": 0,
167
+ "flagValue": 150
168
+ },
169
+ "missing_fat_arrows": {
170
+ "active": 0,
171
+ "flagValue": -1
172
+ },
173
+ "newlines_after_classes": {
174
+ "active": 0,
175
+ "flagValue": 3
176
+ },
177
+ "no_backticks": {
178
+ "active": 1,
179
+ "flagValue": -1
180
+ },
181
+ "no_debugger": {
182
+ "active": 1,
183
+ "flagValue": -1
184
+ },
185
+ "no_empty_functions": {
186
+ "active": 0,
187
+ "flagValue": -1
188
+ },
189
+ "no_empty_param_list": {
190
+ "active": 0,
191
+ "flagValue": -1
192
+ },
193
+ "no_implicit_braces": {
194
+ "active": 1,
195
+ "flagValue": -1
196
+ },
197
+ "no_implicit_parens": {
198
+ "active": 0,
199
+ "flagValue": -1
200
+ },
201
+ "no_interpolation_in_single_quotes": {
202
+ "active": 0,
203
+ "flagValue": -1
204
+ },
205
+ "no_plusplus": {
206
+ "active": 0,
207
+ "flagValue": -1
208
+ },
209
+ "no_stand_alone_at": {
210
+ "active": 1,
211
+ "flagValue": -1
212
+ },
213
+ "no_tabs": {
214
+ "active": 1,
215
+ "flagValue": -1
216
+ },
217
+ "no_throwing_strings": {
218
+ "active": 1,
219
+ "flagValue": -1
220
+ },
221
+ "no_trailing_semicolons": {
222
+ "active": 1,
223
+ "flagValue": -1
224
+ },
225
+ "no_trailing_whitespace": {
226
+ "active": 1,
227
+ "flagValue": -1
228
+ },
229
+ "no_unnecessary_double_quotes": {
230
+ "active": 0,
231
+ "flagValue": -1
232
+ },
233
+ "no_unnecessary_fat_arrows": {
234
+ "active": 1,
235
+ "flagValue": -1
236
+ },
237
+ "non_empty_constructor_needs_parens": {
238
+ "active": 0,
239
+ "flagValue": -1
240
+ },
241
+ "prefer_english_operator": {
242
+ "active": 0,
243
+ "flagValue": -1
244
+ },
245
+ "space_operators": {
246
+ "active": 0,
247
+ "flagValue": -1
248
+ },
249
+ "spacing_after_comma": {
250
+ "active": 1,
251
+ "flagValue": -1
252
+ }
253
+ },
254
+ "coffeeMinifyOutput": 1,
255
+ "coffeeOutputStyle": 0,
256
+ "coffeeSyntaxCheckerStyle": 1,
257
+ "externalServerAddress": "http:\/\/localhost:8888",
258
+ "externalServerPreviewPathAddition": "",
259
+ "genericWebpageFileExtensionsString": "html, htm, shtml, shtm, xhtml, php, jsp, asp, aspx, erb, ctp",
260
+ "hamlAutoOutputPathEnabled": 1,
261
+ "hamlAutoOutputPathFilenamePattern": "*.html",
262
+ "hamlAutoOutputPathRelativePath": "",
263
+ "hamlAutoOutputPathReplace1": "",
264
+ "hamlAutoOutputPathReplace2": "",
265
+ "hamlAutoOutputPathStyle": 0,
266
+ "hamlEscapeHTMLCharacters": 0,
267
+ "hamlNoEscapeInAttributes": 0,
268
+ "hamlOutputFormat": 2,
269
+ "hamlOutputStyle": 0,
270
+ "hamlUseCDATA": 0,
271
+ "hamlUseDoubleQuotes": 0,
272
+ "hamlUseUnixNewlines": 0,
273
+ "jadeAutoOutputPathEnabled": 1,
274
+ "jadeAutoOutputPathFilenamePattern": "*.html",
275
+ "jadeAutoOutputPathRelativePath": "",
276
+ "jadeAutoOutputPathReplace1": "",
277
+ "jadeAutoOutputPathReplace2": "",
278
+ "jadeAutoOutputPathStyle": 0,
279
+ "jadeCompileDebug": 1,
280
+ "jadeOutputStyle": 0,
281
+ "javascriptAutoOutputPathEnabled": 1,
282
+ "javascriptAutoOutputPathFilenamePattern": "*-min.js",
283
+ "javascriptAutoOutputPathRelativePath": "\/min",
284
+ "javascriptAutoOutputPathReplace1": "",
285
+ "javascriptAutoOutputPathReplace2": "",
286
+ "javascriptAutoOutputPathStyle": 2,
287
+ "javascriptCreateSourceMap": 1,
288
+ "javascriptOutputStyle": 1,
289
+ "javascriptSyntaxCheckerStyle": 1,
290
+ "jsCheckerReservedNamesString": "",
291
+ "jsHintFlags2": {
292
+ "asi": {
293
+ "active": 0,
294
+ "flagValue": -1
295
+ },
296
+ "bitwise": {
297
+ "active": 1,
298
+ "flagValue": -1
299
+ },
300
+ "boss": {
301
+ "active": 0,
302
+ "flagValue": -1
303
+ },
304
+ "browser": {
305
+ "active": 1,
306
+ "flagValue": -1
307
+ },
308
+ "browserify": {
309
+ "active": 0,
310
+ "flagValue": -1
311
+ },
312
+ "camelcase": {
313
+ "active": 0,
314
+ "flagValue": -1
315
+ },
316
+ "couch": {
317
+ "active": 0,
318
+ "flagValue": -1
319
+ },
320
+ "curly": {
321
+ "active": 1,
322
+ "flagValue": -1
323
+ },
324
+ "debug": {
325
+ "active": 0,
326
+ "flagValue": -1
327
+ },
328
+ "devel": {
329
+ "active": 0,
330
+ "flagValue": -1
331
+ },
332
+ "dojo": {
333
+ "active": 0,
334
+ "flagValue": -1
335
+ },
336
+ "elision": {
337
+ "active": 1,
338
+ "flagValue": -1
339
+ },
340
+ "eqeqeq": {
341
+ "active": 1,
342
+ "flagValue": -1
343
+ },
344
+ "eqnull": {
345
+ "active": 0,
346
+ "flagValue": -1
347
+ },
348
+ "es3": {
349
+ "active": 0,
350
+ "flagValue": -1
351
+ },
352
+ "esnext": {
353
+ "active": 0,
354
+ "flagValue": -1
355
+ },
356
+ "evil": {
357
+ "active": 0,
358
+ "flagValue": -1
359
+ },
360
+ "expr": {
361
+ "active": 0,
362
+ "flagValue": -1
363
+ },
364
+ "forin": {
365
+ "active": 0,
366
+ "flagValue": -1
367
+ },
368
+ "freeze": {
369
+ "active": 1,
370
+ "flagValue": -1
371
+ },
372
+ "funcscope": {
373
+ "active": 0,
374
+ "flagValue": -1
375
+ },
376
+ "globalstrict": {
377
+ "active": 0,
378
+ "flagValue": -1
379
+ },
380
+ "immed": {
381
+ "active": 0,
382
+ "flagValue": -1
383
+ },
384
+ "indent": {
385
+ "active": 0,
386
+ "flagValue": 4
387
+ },
388
+ "iterator": {
389
+ "active": 0,
390
+ "flagValue": -1
391
+ },
392
+ "jasmine": {
393
+ "active": 0,
394
+ "flagValue": -1
395
+ },
396
+ "jquery": {
397
+ "active": 1,
398
+ "flagValue": -1
399
+ },
400
+ "lastsemic": {
401
+ "active": 0,
402
+ "flagValue": -1
403
+ },
404
+ "latedef": {
405
+ "active": 1,
406
+ "flagValue": -1
407
+ },
408
+ "laxbreak": {
409
+ "active": 0,
410
+ "flagValue": -1
411
+ },
412
+ "laxcomma": {
413
+ "active": 0,
414
+ "flagValue": -1
415
+ },
416
+ "loopfunc": {
417
+ "active": 0,
418
+ "flagValue": -1
419
+ },
420
+ "maxcomplexity": {
421
+ "active": 0,
422
+ "flagValue": 10
423
+ },
424
+ "maxdepth": {
425
+ "active": 0,
426
+ "flagValue": 3
427
+ },
428
+ "maxlen": {
429
+ "active": 0,
430
+ "flagValue": 150
431
+ },
432
+ "maxparams": {
433
+ "active": 0,
434
+ "flagValue": 3
435
+ },
436
+ "maxstatements": {
437
+ "active": 0,
438
+ "flagValue": 4
439
+ },
440
+ "mocha": {
441
+ "active": 0,
442
+ "flagValue": -1
443
+ },
444
+ "mootools": {
445
+ "active": 0,
446
+ "flagValue": -1
447
+ },
448
+ "moz": {
449
+ "active": 0,
450
+ "flagValue": -1
451
+ },
452
+ "multistr": {
453
+ "active": 0,
454
+ "flagValue": -1
455
+ },
456
+ "newcap": {
457
+ "active": 1,
458
+ "flagValue": -1
459
+ },
460
+ "noarg": {
461
+ "active": 1,
462
+ "flagValue": -1
463
+ },
464
+ "node": {
465
+ "active": 0,
466
+ "flagValue": -1
467
+ },
468
+ "noempty": {
469
+ "active": 0,
470
+ "flagValue": -1
471
+ },
472
+ "nonbsp": {
473
+ "active": 0,
474
+ "flagValue": -1
475
+ },
476
+ "nonew": {
477
+ "active": 1,
478
+ "flagValue": -1
479
+ },
480
+ "nonstandard": {
481
+ "active": 0,
482
+ "flagValue": -1
483
+ },
484
+ "notypeof": {
485
+ "active": 1,
486
+ "flagValue": -1
487
+ },
488
+ "noyield": {
489
+ "active": 0,
490
+ "flagValue": -1
491
+ },
492
+ "onecase": {
493
+ "active": 0,
494
+ "flagValue": -1
495
+ },
496
+ "phantom": {
497
+ "active": 0,
498
+ "flagValue": -1
499
+ },
500
+ "plusplus": {
501
+ "active": 0,
502
+ "flagValue": -1
503
+ },
504
+ "proto": {
505
+ "active": 0,
506
+ "flagValue": -1
507
+ },
508
+ "prototypejs": {
509
+ "active": 0,
510
+ "flagValue": -1
511
+ },
512
+ "qunit": {
513
+ "active": 0,
514
+ "flagValue": -1
515
+ },
516
+ "regexp": {
517
+ "active": 1,
518
+ "flagValue": -1
519
+ },
520
+ "rhino": {
521
+ "active": 0,
522
+ "flagValue": -1
523
+ },
524
+ "scripturl": {
525
+ "active": 0,
526
+ "flagValue": -1
527
+ },
528
+ "shadow": {
529
+ "active": 0,
530
+ "flagValue": -1
531
+ },
532
+ "shelljs": {
533
+ "active": 0,
534
+ "flagValue": -1
535
+ },
536
+ "singleGroups": {
537
+ "active": 0,
538
+ "flagValue": -1
539
+ },
540
+ "strict": {
541
+ "active": 0,
542
+ "flagValue": -1
543
+ },
544
+ "sub": {
545
+ "active": 0,
546
+ "flagValue": -1
547
+ },
548
+ "supernew": {
549
+ "active": 0,
550
+ "flagValue": -1
551
+ },
552
+ "typed": {
553
+ "active": 0,
554
+ "flagValue": -1
555
+ },
556
+ "undef": {
557
+ "active": 1,
558
+ "flagValue": -1
559
+ },
560
+ "unused": {
561
+ "active": 1,
562
+ "flagValue": -1
563
+ },
564
+ "withstmt": {
565
+ "active": 0,
566
+ "flagValue": -1
567
+ },
568
+ "worker": {
569
+ "active": 0,
570
+ "flagValue": -1
571
+ },
572
+ "wsh": {
573
+ "active": 0,
574
+ "flagValue": -1
575
+ },
576
+ "yui": {
577
+ "active": 0,
578
+ "flagValue": -1
579
+ }
580
+ },
581
+ "jsLintFlags2": {
582
+ "ass": {
583
+ "active": 0,
584
+ "flagValue": -1
585
+ },
586
+ "bitwise": {
587
+ "active": 0,
588
+ "flagValue": -1
589
+ },
590
+ "browser": {
591
+ "active": 1,
592
+ "flagValue": -1
593
+ },
594
+ "closure": {
595
+ "active": 0,
596
+ "flagValue": -1
597
+ },
598
+ "continue": {
599
+ "active": 0,
600
+ "flagValue": -1
601
+ },
602
+ "debug": {
603
+ "active": 0,
604
+ "flagValue": -1
605
+ },
606
+ "devel": {
607
+ "active": 0,
608
+ "flagValue": -1
609
+ },
610
+ "eqeq": {
611
+ "active": 0,
612
+ "flagValue": -1
613
+ },
614
+ "evil": {
615
+ "active": 0,
616
+ "flagValue": -1
617
+ },
618
+ "forin": {
619
+ "active": 0,
620
+ "flagValue": -1
621
+ },
622
+ "indent": {
623
+ "active": 0,
624
+ "flagValue": 4
625
+ },
626
+ "maxlen": {
627
+ "active": 0,
628
+ "flagValue": 150
629
+ },
630
+ "newcap": {
631
+ "active": 0,
632
+ "flagValue": -1
633
+ },
634
+ "node": {
635
+ "active": 0,
636
+ "flagValue": -1
637
+ },
638
+ "nomen": {
639
+ "active": 0,
640
+ "flagValue": -1
641
+ },
642
+ "plusplus": {
643
+ "active": 0,
644
+ "flagValue": -1
645
+ },
646
+ "properties": {
647
+ "active": 0,
648
+ "flagValue": -1
649
+ },
650
+ "regexp": {
651
+ "active": 0,
652
+ "flagValue": -1
653
+ },
654
+ "rhino": {
655
+ "active": 0,
656
+ "flagValue": -1
657
+ },
658
+ "sloppy": {
659
+ "active": 0,
660
+ "flagValue": -1
661
+ },
662
+ "stupid": {
663
+ "active": 0,
664
+ "flagValue": -1
665
+ },
666
+ "sub": {
667
+ "active": 0,
668
+ "flagValue": -1
669
+ },
670
+ "todo": {
671
+ "active": 0,
672
+ "flagValue": -1
673
+ },
674
+ "unparam": {
675
+ "active": 0,
676
+ "flagValue": -1
677
+ },
678
+ "vars": {
679
+ "active": 0,
680
+ "flagValue": -1
681
+ },
682
+ "white": {
683
+ "active": 0,
684
+ "flagValue": -1
685
+ }
686
+ },
687
+ "kitAutoOutputPathEnabled": 1,
688
+ "kitAutoOutputPathFilenamePattern": "*.html",
689
+ "kitAutoOutputPathRelativePath": "",
690
+ "kitAutoOutputPathReplace1": "",
691
+ "kitAutoOutputPathReplace2": "",
692
+ "kitAutoOutputPathStyle": 0,
693
+ "lessAllowInsecureImports": 0,
694
+ "lessAutoOutputPathEnabled": 1,
695
+ "lessAutoOutputPathFilenamePattern": "*.css",
696
+ "lessAutoOutputPathRelativePath": "..\/css",
697
+ "lessAutoOutputPathReplace1": "less",
698
+ "lessAutoOutputPathReplace2": "css",
699
+ "lessAutoOutputPathStyle": 2,
700
+ "lessCreateSourceMap": 0,
701
+ "lessDisableJavascript": 0,
702
+ "lessIeCompatibility": 1,
703
+ "lessOutputStyle": 0,
704
+ "lessRelativeURLS": 0,
705
+ "lessStrictImports": 0,
706
+ "lessStrictMath": 0,
707
+ "lessStrictUnits": 0,
708
+ "markdownAutoOutputPathEnabled": 1,
709
+ "markdownAutoOutputPathFilenamePattern": "*.html",
710
+ "markdownAutoOutputPathRelativePath": "",
711
+ "markdownAutoOutputPathReplace1": "",
712
+ "markdownAutoOutputPathReplace2": "",
713
+ "markdownAutoOutputPathStyle": 0,
714
+ "markdownEnableFootnotes": 0,
715
+ "markdownEnableSmartyPants": 1,
716
+ "markdownExpandTabs": 1,
717
+ "reloadFileURLs": 0,
718
+ "sassAutoOutputPathEnabled": 1,
719
+ "sassAutoOutputPathFilenamePattern": "*.css",
720
+ "sassAutoOutputPathRelativePath": "..\/css",
721
+ "sassAutoOutputPathReplace1": "sass",
722
+ "sassAutoOutputPathReplace2": "css",
723
+ "sassAutoOutputPathStyle": 2,
724
+ "sassCreateSourceMap": 0,
725
+ "sassDebugStyle": 0,
726
+ "sassDecimalPrecision": 10,
727
+ "sassOutputStyle": 0,
728
+ "sassUseLibsass": 0,
729
+ "shouldRunAutoprefixer": 0,
730
+ "shouldRunBless": 0,
731
+ "skippedItemsString": ".svn, .git, .hg, log, _logs, _cache, cache, logs, node_modules",
732
+ "slimAutoOutputPathEnabled": 1,
733
+ "slimAutoOutputPathFilenamePattern": "*.html",
734
+ "slimAutoOutputPathRelativePath": "",
735
+ "slimAutoOutputPathReplace1": "",
736
+ "slimAutoOutputPathReplace2": "",
737
+ "slimAutoOutputPathStyle": 0,
738
+ "slimCompileOnly": 0,
739
+ "slimLogicless": 0,
740
+ "slimOutputFormat": 0,
741
+ "slimOutputStyle": 1,
742
+ "slimRailsCompatible": 0,
743
+ "stylusAutoOutputPathEnabled": 1,
744
+ "stylusAutoOutputPathFilenamePattern": "*.css",
745
+ "stylusAutoOutputPathRelativePath": "..\/css",
746
+ "stylusAutoOutputPathReplace1": "stylus",
747
+ "stylusAutoOutputPathReplace2": "css",
748
+ "stylusAutoOutputPathStyle": 2,
749
+ "stylusCreateSourceMap": 0,
750
+ "stylusDebugStyle": 0,
751
+ "stylusImportCSS": 0,
752
+ "stylusOutputStyle": 0,
753
+ "stylusResolveRelativeURLS": 0,
754
+ "typescriptAutoOutputPathEnabled": 1,
755
+ "typescriptAutoOutputPathFilenamePattern": "*.js",
756
+ "typescriptAutoOutputPathRelativePath": "\/js",
757
+ "typescriptAutoOutputPathReplace1": "",
758
+ "typescriptAutoOutputPathReplace2": "",
759
+ "typescriptAutoOutputPathStyle": 2,
760
+ "typescriptCreateDeclarationFile": 0,
761
+ "typescriptCreateSourceMap": 0,
762
+ "typescriptMinifyOutput": 0,
763
+ "typescriptModuleType": 0,
764
+ "typescriptNoImplicitAny": 0,
765
+ "typescriptPreserveConstEnums": 0,
766
+ "typescriptRemoveComments": 0,
767
+ "typescriptSuppressImplicitAnyIndexErrors": 0,
768
+ "typescriptTargetECMAVersion": 0,
769
+ "uglifyDefinesString": "",
770
+ "uglifyFlags2": {
771
+ "ascii-only": {
772
+ "active": 0,
773
+ "flagValue": -1
774
+ },
775
+ "booleans": {
776
+ "active": 1,
777
+ "flagValue": -1
778
+ },
779
+ "bracketize": {
780
+ "active": 0,
781
+ "flagValue": -1
782
+ },
783
+ "cascade": {
784
+ "active": 1,
785
+ "flagValue": -1
786
+ },
787
+ "comments": {
788
+ "active": 1,
789
+ "flagValue": -1
790
+ },
791
+ "comparisons": {
792
+ "active": 1,
793
+ "flagValue": -1
794
+ },
795
+ "compress": {
796
+ "active": 1,
797
+ "flagValue": -1
798
+ },
799
+ "conditionals": {
800
+ "active": 1,
801
+ "flagValue": -1
802
+ },
803
+ "dead_code": {
804
+ "active": 0,
805
+ "flagValue": -1
806
+ },
807
+ "drop_console": {
808
+ "active": 0,
809
+ "flagValue": -1
810
+ },
811
+ "drop_debugger": {
812
+ "active": 1,
813
+ "flagValue": -1
814
+ },
815
+ "eval": {
816
+ "active": 0,
817
+ "flagValue": -1
818
+ },
819
+ "evaluate": {
820
+ "active": 1,
821
+ "flagValue": -1
822
+ },
823
+ "hoist_funs": {
824
+ "active": 1,
825
+ "flagValue": -1
826
+ },
827
+ "hoist_vars": {
828
+ "active": 0,
829
+ "flagValue": -1
830
+ },
831
+ "if_return": {
832
+ "active": 1,
833
+ "flagValue": -1
834
+ },
835
+ "indent-level": {
836
+ "active": 0,
837
+ "flagValue": 4
838
+ },
839
+ "indent-start": {
840
+ "active": 0,
841
+ "flagValue": 0
842
+ },
843
+ "inline-script": {
844
+ "active": 0,
845
+ "flagValue": -1
846
+ },
847
+ "join_vars": {
848
+ "active": 1,
849
+ "flagValue": -1
850
+ },
851
+ "keep_fargs": {
852
+ "active": 0,
853
+ "flagValue": -1
854
+ },
855
+ "loops": {
856
+ "active": 1,
857
+ "flagValue": -1
858
+ },
859
+ "mangle": {
860
+ "active": 1,
861
+ "flagValue": -1
862
+ },
863
+ "max-line-len": {
864
+ "active": 1,
865
+ "flagValue": 32000
866
+ },
867
+ "negate_iife": {
868
+ "active": 1,
869
+ "flagValue": -1
870
+ },
871
+ "properties": {
872
+ "active": 1,
873
+ "flagValue": -1
874
+ },
875
+ "pure_getters": {
876
+ "active": 0,
877
+ "flagValue": -1
878
+ },
879
+ "quote-keys": {
880
+ "active": 0,
881
+ "flagValue": -1
882
+ },
883
+ "screw-ie8": {
884
+ "active": 0,
885
+ "flagValue": -1
886
+ },
887
+ "semicolons": {
888
+ "active": 1,
889
+ "flagValue": -1
890
+ },
891
+ "sequences": {
892
+ "active": 1,
893
+ "flagValue": -1
894
+ },
895
+ "sort": {
896
+ "active": 0,
897
+ "flagValue": -1
898
+ },
899
+ "space-colon": {
900
+ "active": 1,
901
+ "flagValue": -1
902
+ },
903
+ "toplevel": {
904
+ "active": 0,
905
+ "flagValue": -1
906
+ },
907
+ "unsafe": {
908
+ "active": 0,
909
+ "flagValue": -1
910
+ },
911
+ "unused": {
912
+ "active": 0,
913
+ "flagValue": -1
914
+ },
915
+ "warnings": {
916
+ "active": 0,
917
+ "flagValue": -1
918
+ },
919
+ "width": {
920
+ "active": 1,
921
+ "flagValue": 80
922
+ }
923
+ },
924
+ "uglifyReservedNamesString": "$",
925
+ "websiteRelativeRoot": ""
926
+ },
927
+ "settingsFileVersion": "2"
928
+ }
includes/Config.php ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Kirki;
4
+
5
+ class Config {
6
+
7
+ /** @var array The configuration values for Kirki */
8
+ private $config = null;
9
+
10
+ /**
11
+ * Constructor
12
+ */
13
+ public function __construct() {
14
+ }
15
+
16
+ /**
17
+ * Get a configuration value
18
+ *
19
+ * @param string $key The configuration key we are interested in
20
+ * @param string $default The default value if that configuration is not set
21
+ *
22
+ * @return mixed
23
+ */
24
+ public function get( $key, $default='' ) {
25
+
26
+ $cfg = $this->get_all();
27
+ return isset( $cfg[$key] ) ? $cfg[$key] : $default;
28
+
29
+ }
30
+
31
+ /**
32
+ * Get a configuration value or throw an exception if that value is mandatory
33
+ *
34
+ * @param string $key The configuration key we are interested in
35
+ *
36
+ * @return mixed
37
+ */
38
+ public function getOrThrow( $key ) {
39
+
40
+ $cfg = $this->get_all();
41
+ if ( isset( $cfg[$key] ) ) {
42
+ return $cfg[$key];
43
+ }
44
+
45
+ throw new RuntimeException( sprintf( "Configuration key %s is mandatory and has not been specified", $key ) );
46
+
47
+ }
48
+
49
+ /**
50
+ * Get the configuration options for the Kirki customizer.
51
+ *
52
+ * @uses 'kirki/config' filter.
53
+ */
54
+ public function get_all() {
55
+
56
+ if ( is_null( $this->config ) ) {
57
+
58
+ // Get configuration from the filter
59
+ $this->config = apply_filters( 'kirki/config', array() );
60
+
61
+ // Merge a default configuration with the one we got from the user to make sure nothing is missing
62
+ $default_config = array(
63
+ 'stylesheet_id' => 'kirki-styles'
64
+ );
65
+ $this->config = array_merge( $default_config, $this->config );
66
+ if ( isset( $this->config['logo_image'] ) ) {
67
+ $this->config['logo_image'] = esc_url_raw( $this->config['logo_image'] );
68
+ }
69
+ if ( isset( $this->config['description'] ) ) {
70
+ $this->config['description'] = esc_html( $this->config['description'] );
71
+ }
72
+
73
+ }
74
+
75
+ return $this->config;
76
+ }
77
+ }
includes/{class-kirki-controls.php → Control.php} RENAMED
@@ -1,9 +1,25 @@
1
  <?php
2
 
3
-
4
- class Kirki_Controls {
5
-
6
- public static function control_clean( $control ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
  /**
9
  * If ['default'] is not set, set an empty value
@@ -12,6 +28,16 @@ class Kirki_Controls {
12
  $control['default'] = '';
13
  }
14
 
 
 
 
 
 
 
 
 
 
 
15
  /**
16
  * Compatibility tweak
17
  *
@@ -26,9 +52,7 @@ class Kirki_Controls {
26
  $control['description'] = $control['subtitle'];
27
  }
28
  $control['description'] = isset( $control['description'] ) ? $control['description'] : '';
29
- $control['help'] = isset( $control['help'] ) ? $control['help'] : '';
30
-
31
- $control['label'] = isset( $control['label'] ) ? $control['label'] : '';
32
 
33
  /**
34
  * Compatibility tweak
@@ -54,89 +78,90 @@ class Kirki_Controls {
54
 
55
  }
56
 
57
- function add_control( $wp_customize, $control ) {
 
 
 
 
 
58
 
59
- $control = self::control_clean( $control );
60
 
61
- /**
62
- * Add our fields.
63
- * We use the default WordPress Core Customizer fields when possible
64
- * and only add our own custom controls when needed.
65
- */
 
66
 
67
  // Color controls
68
- if ( 'color' == $control['type'] ) {
69
- $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, $control['settings'] . '_color', $control ) );
70
  }
71
 
72
  // Image Controls
73
  elseif ( 'image' == $control['type'] ) {
74
- $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, $control['settings'] . '_color', $control ) );
75
- }
76
-
77
- // Text, Dropdown Pages, Textarea and Select controls
78
- elseif ( in_array( $control['type'], array( 'text', 'dropdown-pages', 'textarea', 'select' ) ) ) {
79
- $wp_customize->add_control( new WP_Customize_Control( $wp_customize, $control['settings'], $control ) );
80
  }
81
 
82
  // Upload Controls
83
  elseif ( 'upload' == $control['type'] ) {
84
- $wp_customize->add_control( new WP_Customize_Upload_Control( $wp_customize, $control['settings'], $control ) );
85
  }
86
 
87
  // Switch Controls
88
  elseif ( 'switch' == $control['type'] || ( 'checkbox' == $control['type'] && isset( $control['mode'] ) && 'switch' == $control['mode'] ) ) {
89
- $wp_customize->add_control( new Kirki_Customize_Switch_Control( $wp_customize, $control['settings'], $control ) );
90
  }
91
 
92
  // Toggle Controls
93
  elseif ( 'toggle' == $control['type'] || ( 'checkbox' == $control['type'] && isset( $control['mode'] ) && 'toggle' == $control['mode'] ) ) {
94
- $wp_customize->add_control( new Kirki_Customize_Toggle_Control( $wp_customize, $control['settings'], $control ) );
95
- }
96
-
97
- // Checkbox Controls
98
- elseif ( 'checkbox' == $control['type'] ) {
99
- $wp_customize->add_control( new WP_Customize_Control( $wp_customize, $control['settings'], $control ) );
100
  }
101
 
102
  // Radio-Buttonset Controls
103
  elseif ( 'radio-buttonset' == $control['type'] || ( 'radio' == $control['type'] && isset( $control['mode'] ) && 'buttonset' == $control['mode'] ) ) {
104
- $wp_customize->add_control( new Kirki_Customize_Radio_Buttonset_Control( $wp_customize, $control['settings'], $control ) );
105
  }
106
 
107
  // Radio-Image Controls
108
  elseif ( 'radio-image' == $control['type'] || ( 'radio' == $control['type'] && isset( $control['mode'] ) && 'image' == $control['mode'] ) ) {
109
- $wp_customize->add_control( new Kirki_Customize_Radio_Image_Control( $wp_customize, $control['settings'], $control ) );
110
- }
111
-
112
- // Radio Controls
113
- elseif ( 'radio' == $control['type'] ) {
114
- $wp_customize->add_control( new WP_Customize_Control( $wp_customize, $control['settings'], $control ) );
115
  }
116
 
117
  // Sortable Controls
118
  elseif ( 'sortable' == $control['type'] ) {
119
- $wp_customize->add_control( new Kirki_Customize_Sortable_Control( $wp_customize, $control['settings'], $control ) );
120
  }
121
 
122
  // Slider Controls
123
  elseif ( 'slider' == $control['type'] ) {
124
- $wp_customize->add_control( new Kirki_Customize_Slider_Control( $wp_customize, $control['settings'], $control ) );
125
  }
126
 
127
  // Number Controls
128
  elseif ( 'number' == $control['type'] ) {
129
- $wp_customize->add_control( new Kirki_Customize_Number_Control( $wp_customize, $control['settings'], $control ) );
130
  }
131
 
132
  // Multicheck Controls
133
  elseif ( 'multicheck' == $control['type'] ) {
134
- $wp_customize->add_control( new Kirki_Customize_Multicheck_Control( $wp_customize, $control['settings'], $control ) );
 
 
 
 
 
 
 
 
 
 
135
  }
136
 
137
- // Group-Title Controls
138
- elseif ( 'group-title' == $control['type'] ) {
139
- $wp_customize->add_control( new Kirki_Customize_Group_Title_Control( $wp_customize, $control['settings'], $control ) );
140
  }
141
 
142
  // Background Controls
@@ -146,26 +171,26 @@ class Kirki_Controls {
146
  * so it requires extra steps to be created
147
  */
148
  if ( isset( $control['default']['color'] ) ) {
149
- $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, $control['settings'] . '_color', array(
150
  'label' => isset( $control['label'] ) ? $control['label'] : '',
151
  'section' => $control['section'],
152
  'settings' => $control['settings'] . '_color',
153
  'priority' => $control['priority'],
154
  'help' => $control['help'],
155
- 'description' => __( 'Background Color', 'kirki' ),
156
  'required' => $control['required'],
157
  'transport' => $control['transport']
158
  ) ) );
159
  }
160
 
161
  if ( isset( $control['default']['image'] ) ) {
162
- $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, $control['settings'] . '_image', array(
163
  'label' => '',
164
  'section' => $control['section'],
165
  'settings' => $control['settings'] . '_image',
166
  'priority' => $control['priority'] + 1,
167
  'help' => '',
168
- 'description' => __( 'Background Image', 'kirki' ),
169
  'required' => $control['required'],
170
  'transport' => $control['transport']
171
  ) ) );
@@ -179,14 +204,14 @@ class Kirki_Controls {
179
  'settings' => $control['settings'] . '_repeat',
180
  'priority' => $control['priority'] + 2,
181
  'choices' => array(
182
- 'no-repeat' => __( 'No Repeat', 'kirki' ),
183
- 'repeat' => __( 'Repeat All', 'kirki' ),
184
- 'repeat-x' => __( 'Repeat Horizontally', 'kirki' ),
185
- 'repeat-y' => __( 'Repeat Vertically', 'kirki' ),
186
- 'inherit' => __( 'Inherit', 'kirki' )
187
  ),
188
  'help' => '',
189
- 'description' => __( 'Background Repeat', 'kirki' ),
190
  'required' => $control['required'],
191
  'transport' => $control['transport']
192
  ) );
@@ -200,13 +225,13 @@ class Kirki_Controls {
200
  'settings' => $control['settings'] . '_size',
201
  'priority' => $control['priority'] + 3,
202
  'choices' => array(
203
- 'inherit' => __( 'Inherit', 'kirki' ),
204
- 'cover' => __( 'Cover', 'kirki' ),
205
- 'contain' => __( 'Contain', 'kirki' ),
206
  ),
207
  'help' => '',
208
  'mode' => 'buttonset',
209
- 'description' => __( 'Background Size', 'kirki' ),
210
  'required' => $control['required'],
211
  'transport' => $control['transport']
212
  ) );
@@ -220,13 +245,13 @@ class Kirki_Controls {
220
  'settings' => $control['settings'] . '_attach',
221
  'priority' => $control['priority'] + 4,
222
  'choices' => array(
223
- 'inherit' => __( 'Inherit', 'kirki' ),
224
- 'fixed' => __( 'Fixed', 'kirki' ),
225
- 'scroll' => __( 'Scroll', 'kirki' ),
226
  ),
227
  'help' => '',
228
  'mode' => 'buttonset',
229
- 'description' => __( 'Background Attachment', 'kirki' ),
230
  'required' => $control['required'],
231
  'transport' => $control['transport']
232
  ) );
@@ -240,25 +265,25 @@ class Kirki_Controls {
240
  'settings' => $control['settings'] . '_position',
241
  'priority' => $control['priority'] + 5,
242
  'choices' => array(
243
- 'left-top' => __( 'Left Top', 'kirki' ),
244
- 'left-center' => __( 'Left Center', 'kirki' ),
245
- 'left-bottom' => __( 'Left Bottom', 'kirki' ),
246
- 'right-top' => __( 'Right Top', 'kirki' ),
247
- 'right-center' => __( 'Right Center', 'kirki' ),
248
- 'right-bottom' => __( 'Right Bottom', 'kirki' ),
249
- 'center-top' => __( 'Center Top', 'kirki' ),
250
- 'center-center' => __( 'Center Center', 'kirki' ),
251
- 'center-bottom' => __( 'Center Bottom', 'kirki' ),
252
  ),
253
  'help' => '',
254
- 'description' => __( 'Background Position', 'kirki' ),
255
  'required' => $control['required'],
256
  'transport' => $control['transport']
257
  ) );
258
  }
259
 
260
  if ( isset( $control['default']['opacity'] ) && $control['default']['opacity'] ) {
261
- $wp_customize->add_control( new Kirki_Customize_Slider_Control( $wp_customize, $control['settings'] . '_opacity', array(
262
  'label' => '',
263
  'section' => $control['section'],
264
  'settings' => $control['settings'] . '_opacity',
@@ -269,7 +294,7 @@ class Kirki_Controls {
269
  'step' => 1,
270
  ),
271
  'help' => '',
272
- 'description' => __( 'Background Opacity', 'kirki' ),
273
  'required' => $control['required'],
274
  'transport' => $control['transport']
275
  ) ) );
1
  <?php
2
 
3
+ namespace Kirki;
4
+
5
+ use Kirki\Controls\CustomControl;
6
+ use Kirki\Controls\EditorControl;
7
+ use Kirki\Controls\MultiCheckControl;
8
+ use Kirki\Controls\NumberControl;
9
+ use Kirki\Controls\PaletteControl;
10
+ use Kirki\Controls\RadioButtonSetControl;
11
+ use Kirki\Controls\RadioImageControl;
12
+ use Kirki\Controls\SliderControl;
13
+ use Kirki\Controls\SortableControl;
14
+ use Kirki\Controls\SwitchControl;
15
+ use Kirki\Controls\ToggleControl;
16
+
17
+ class Control {
18
+
19
+ /**
20
+ * Cleanup a single controls.
21
+ */
22
+ public static function sanitize( $control ) {
23
 
24
  /**
25
  * If ['default'] is not set, set an empty value
28
  $control['default'] = '';
29
  }
30
 
31
+ /**
32
+ * Sanitize label
33
+ */
34
+ $control['label'] = ( isset( $control['label'] ) ) ? esc_html( $control['label'] ) : '';
35
+
36
+ /**
37
+ * sanitize description
38
+ */
39
+ $control['description'] = ( isset( $control['description'] ) ) ? esc_html( $control['description'] ) : '';
40
+
41
  /**
42
  * Compatibility tweak
43
  *
52
  $control['description'] = $control['subtitle'];
53
  }
54
  $control['description'] = isset( $control['description'] ) ? $control['description'] : '';
55
+ $control['help'] = isset( $control['help'] ) ? esc_html( $control['help'] ) : '';
 
 
56
 
57
  /**
58
  * Compatibility tweak
78
 
79
  }
80
 
81
+ /**
82
+ * Add our fields.
83
+ * We use the default WordPress Core Customizer fields when possible
84
+ * and only add our own custom controls when needed.
85
+ */
86
+ public function add( $wp_customize, $control ) {
87
 
88
+ $textdomain = kirki_textdomain();
89
 
90
+ $control = self::sanitize( $control );
91
+
92
+ // Text, Dropdown Pages, Textarea, Select, checkbox & radio controls
93
+ if ( in_array( $control['type'], array( 'text', 'dropdown-pages', 'textarea', 'select', 'checkbox', 'radio' ) ) ) {
94
+ $wp_customize->add_control( new \WP_Customize_Control( $wp_customize, $control['settings'], $control ) );
95
+ }
96
 
97
  // Color controls
98
+ elseif ( 'color' == $control['type'] ) {
99
+ $wp_customize->add_control( new \WP_Customize_Color_Control( $wp_customize, $control['settings'], $control ) );
100
  }
101
 
102
  // Image Controls
103
  elseif ( 'image' == $control['type'] ) {
104
+ $wp_customize->add_control( new \WP_Customize_Image_Control( $wp_customize, $control['settings'], $control ) );
 
 
 
 
 
105
  }
106
 
107
  // Upload Controls
108
  elseif ( 'upload' == $control['type'] ) {
109
+ $wp_customize->add_control( new \WP_Customize_Upload_Control( $wp_customize, $control['settings'], $control ) );
110
  }
111
 
112
  // Switch Controls
113
  elseif ( 'switch' == $control['type'] || ( 'checkbox' == $control['type'] && isset( $control['mode'] ) && 'switch' == $control['mode'] ) ) {
114
+ $wp_customize->add_control( new SwitchControl( $wp_customize, $control['settings'], $control ) );
115
  }
116
 
117
  // Toggle Controls
118
  elseif ( 'toggle' == $control['type'] || ( 'checkbox' == $control['type'] && isset( $control['mode'] ) && 'toggle' == $control['mode'] ) ) {
119
+ $wp_customize->add_control( new ToggleControl( $wp_customize, $control['settings'], $control ) );
 
 
 
 
 
120
  }
121
 
122
  // Radio-Buttonset Controls
123
  elseif ( 'radio-buttonset' == $control['type'] || ( 'radio' == $control['type'] && isset( $control['mode'] ) && 'buttonset' == $control['mode'] ) ) {
124
+ $wp_customize->add_control( new RadioButtonSetControl( $wp_customize, $control['settings'], $control ) );
125
  }
126
 
127
  // Radio-Image Controls
128
  elseif ( 'radio-image' == $control['type'] || ( 'radio' == $control['type'] && isset( $control['mode'] ) && 'image' == $control['mode'] ) ) {
129
+ $wp_customize->add_control( new RadioImageControl( $wp_customize, $control['settings'], $control ) );
 
 
 
 
 
130
  }
131
 
132
  // Sortable Controls
133
  elseif ( 'sortable' == $control['type'] ) {
134
+ $wp_customize->add_control( new SortableControl( $wp_customize, $control['settings'], $control ) );
135
  }
136
 
137
  // Slider Controls
138
  elseif ( 'slider' == $control['type'] ) {
139
+ $wp_customize->add_control( new SliderControl( $wp_customize, $control['settings'], $control ) );
140
  }
141
 
142
  // Number Controls
143
  elseif ( 'number' == $control['type'] ) {
144
+ $wp_customize->add_control( new NumberControl( $wp_customize, $control['settings'], $control ) );
145
  }
146
 
147
  // Multicheck Controls
148
  elseif ( 'multicheck' == $control['type'] ) {
149
+ $wp_customize->add_control( new MultiCheckControl( $wp_customize, $control['settings'], $control ) );
150
+ }
151
+
152
+ // Palette Control
153
+ elseif ( 'palette' == $control['type'] ) {
154
+ $wp_customize->add_control( new PaletteControl( $wp_customize, $control['settings'], $control ) );
155
+ }
156
+
157
+ // Custom Control
158
+ elseif ( in_array( $control['type'], array( 'custom', 'group-title', 'group_title' ) ) ) {
159
+ $wp_customize->add_control( new CustomControl( $wp_customize, $control['settings'], $control ) );
160
  }
161
 
162
+ // Custom Control
163
+ elseif ( 'editor' == $control['type'] ) {
164
+ $wp_customize->add_control( new EditorControl( $wp_customize, $control['settings'], $control ) );
165
  }
166
 
167
  // Background Controls
171
  * so it requires extra steps to be created
172
  */
173
  if ( isset( $control['default']['color'] ) ) {
174
+ $wp_customize->add_control( new \WP_Customize_Color_Control( $wp_customize, $control['settings'] . '_color', array(
175
  'label' => isset( $control['label'] ) ? $control['label'] : '',
176
  'section' => $control['section'],
177
  'settings' => $control['settings'] . '_color',
178
  'priority' => $control['priority'],
179
  'help' => $control['help'],
180
+ 'description' => __( 'Background Color', $textdomain ),
181
  'required' => $control['required'],
182
  'transport' => $control['transport']
183
  ) ) );
184
  }
185
 
186
  if ( isset( $control['default']['image'] ) ) {
187
+ $wp_customize->add_control( new \WP_Customize_Image_Control( $wp_customize, $control['settings'] . '_image', array(
188
  'label' => '',
189
  'section' => $control['section'],
190
  'settings' => $control['settings'] . '_image',
191
  'priority' => $control['priority'] + 1,
192
  'help' => '',
193
+ 'description' => __( 'Background Image', $textdomain ),
194
  'required' => $control['required'],
195
  'transport' => $control['transport']
196
  ) ) );
204
  'settings' => $control['settings'] . '_repeat',
205
  'priority' => $control['priority'] + 2,
206
  'choices' => array(
207
+ 'no-repeat' => __( 'No Repeat', $textdomain ),
208
+ 'repeat' => __( 'Repeat All', $textdomain ),
209
+ 'repeat-x' => __( 'Repeat Horizontally', $textdomain ),
210
+ 'repeat-y' => __( 'Repeat Vertically', $textdomain ),
211
+ 'inherit' => __( 'Inherit', $textdomain )
212
  ),
213
  'help' => '',
214
+ 'description' => __( 'Background Repeat', $textdomain ),
215
  'required' => $control['required'],
216
  'transport' => $control['transport']
217
  ) );
225
  'settings' => $control['settings'] . '_size',
226
  'priority' => $control['priority'] + 3,
227
  'choices' => array(
228
+ 'inherit' => __( 'Inherit', $textdomain ),
229
+ 'cover' => __( 'Cover', $textdomain ),
230
+ 'contain' => __( 'Contain', $textdomain ),
231
  ),
232
  'help' => '',
233
  'mode' => 'buttonset',
234
+ 'description' => __( 'Background Size', $textdomain ),
235
  'required' => $control['required'],
236
  'transport' => $control['transport']
237
  ) );
245
  'settings' => $control['settings'] . '_attach',
246
  'priority' => $control['priority'] + 4,
247
  'choices' => array(
248
+ 'inherit' => __( 'Inherit', $textdomain ),
249
+ 'fixed' => __( 'Fixed', $textdomain ),
250
+ 'scroll' => __( 'Scroll', $textdomain ),
251
  ),
252
  'help' => '',
253
  'mode' => 'buttonset',
254
+ 'description' => __( 'Background Attachment', $textdomain ),
255
  'required' => $control['required'],
256
  'transport' => $control['transport']
257
  ) );
265
  'settings' => $control['settings'] . '_position',
266
  'priority' => $control['priority'] + 5,
267
  'choices' => array(
268
+ 'left-top' => __( 'Left Top', $textdomain ),
269
+ 'left-center' => __( 'Left Center', $textdomain ),
270
+ 'left-bottom' => __( 'Left Bottom', $textdomain ),
271
+ 'right-top' => __( 'Right Top', $textdomain ),
272
+ 'right-center' => __( 'Right Center', $textdomain ),
273
+ 'right-bottom' => __( 'Right Bottom', $textdomain ),
274
+ 'center-top' => __( 'Center Top', $textdomain ),
275
+ 'center-center' => __( 'Center Center', $textdomain ),
276
+ 'center-bottom' => __( 'Center Bottom', $textdomain ),
277
  ),
278
  'help' => '',
279
+ 'description' => __( 'Background Position', $textdomain ),
280
  'required' => $control['required'],
281
  'transport' => $control['transport']
282
  ) );
283
  }
284
 
285
  if ( isset( $control['default']['opacity'] ) && $control['default']['opacity'] ) {
286
+ $wp_customize->add_control( new SliderControl( $wp_customize, $control['settings'] . '_opacity', array(
287
  'label' => '',
288
  'section' => $control['section'],
289
  'settings' => $control['settings'] . '_opacity',
294
  'step' => 1,
295
  ),
296
  'help' => '',
297
+ 'description' => __( 'Background Opacity', $textdomain ),
298
  'required' => $control['required'],
299
  'transport' => $control['transport']
300
  ) ) );
includes/Controls.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Kirki;
4
+
5
+ class Controls {
6
+
7
+ /** @var array An array that defines which custom control types are available and the corresponding class name */
8
+ public static $CONTROL_TYPES = array(
9
+ 'multicheck' => 'MultiCheckControl',
10
+ 'number' => 'NumberControl',
11
+ 'radio-buttonset' => 'RadioButtonSetControl',
12
+ 'radio-image' => 'RadioImageControl',
13
+ 'slider' => 'SliderControl',
14
+ 'sortable' => 'SortableControl',
15
+ 'switch' => 'SwitchControl',
16
+ 'toggle' => 'ToggleControl',
17
+ 'palette' => 'PaletteControl',
18
+ 'custom' => 'CustomControl',
19
+ 'editor' => 'EditorControl',
20
+ );
21
+
22
+ /** @var array The controls */
23
+ private $controls = null;
24
+
25
+ /**
26
+ * Constructor
27
+ */
28
+ public function __construct() {
29
+ // Hook into WP
30
+ $this->register_hooks();
31
+ }
32
+
33
+ /**
34
+ * Get the controls for the Kirki customizer.
35
+ *
36
+ * @uses 'kirki/controls' filter.
37
+ */
38
+ public function get_all() {
39
+ if ( $this->controls == null ) {
40
+ $user_controls = apply_filters( 'kirki/controls', array() );
41
+
42
+ $this->controls = array();
43
+ foreach ( $user_controls as $control ) {
44
+ $this->controls[] = Control::sanitize( $control );
45
+ }
46
+ }
47
+
48
+ return $this->controls;
49
+ }
50
+
51
+ /**
52
+ * Hook into WP
53
+ */
54
+ private function register_hooks() {
55
+ add_action( 'customize_register', array( $this, 'include_files' ), 99 );
56
+ }
57
+
58
+ /**
59
+ * Include the custom control files. Because they depend on the WP_Cs
60
+ */
61
+ public function include_files() {
62
+ $path = KIRKI_PATH . '/includes/Controls';
63
+ foreach ( self::$CONTROL_TYPES as $typeId => $className ) {
64
+ include_once( $path . '/' . $className . '.php' );
65
+ }
66
+ }
67
+
68
+ }
includes/Controls/CustomControl.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Kirki\Controls;
4
+
5
+ class CustomControl extends \WP_Customize_Control {
6
+
7
+ public $type = 'custom';
8
+
9
+ public function render_content() { ?>
10
+ <label>
11
+ <?php if ( ! empty( $this->label ) ) : ?>
12
+ <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
13
+ <?php endif;
14
+ if ( ! empty( $this->description ) ) : ?>
15
+ <span class="description customize-control-description"><?php echo $this->description; ?></span>
16
+ <?php endif; ?>
17
+ <?php echo $this->value(); ?>
18
+ </label>
19
+ <?php
20
+
21
+ }
22
+
23
+ }
includes/Controls/EditorControl.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Kirki\Controls;
4
+
5
+ class EditorControl extends \WP_Customize_Control {
6
+
7
+ public $type = 'editor';
8
+
9
+ public function render_content() { ?>
10
+
11
+ <label>
12
+ <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
13
+ <input type="hidden" <?php $this->link(); ?> value="<?php echo esc_textarea( $this->value() ); ?>">
14
+ <?php
15
+ $settings = array(
16
+ 'textarea_name' => $this->id,
17
+ 'teeny' => true
18
+ );
19
+ wp_editor( $this->value(), $this->id, $settings );
20
+
21
+ do_action('admin_footer');
22
+ do_action('admin_print_footer_scripts');
23
+ ?>
24
+ </label>
25
+ <?php
26
+ }
27
+
28
+ }
includes/{controls/class-kirki-customize-multicheck-control.php → Controls/MultiCheckControl.php} RENAMED
@@ -1,11 +1,12 @@
1
  <?php
2
 
 
 
3
  /**
4
- * Control inspired by the Titan Framework Multicheck control.
5
  * See https://github.com/gambitph/Titan-Framework/blob/v1.4.2/class-option-multicheck.php for more details.
6
  */
7
-
8
- class Kirki_Customize_Multicheck_Control extends WP_Customize_Control {
9
 
10
  public $type = 'multicheck';
11
 
1
  <?php
2
 
3
+ namespace Kirki\Controls;
4
+
5
  /**
6
+ * Control inspired by the Titan Framework MultiCheck control.
7
  * See https://github.com/gambitph/Titan-Framework/blob/v1.4.2/class-option-multicheck.php for more details.
8
  */
9
+ class MultiCheckControl extends \WP_Customize_Control {
 
10
 
11
  public $type = 'multicheck';
12
 
includes/Controls/NumberControl.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Kirki\Controls;
4
+
5
+ class NumberControl extends \WP_Customize_Control {
6
+
7
+ public $type = 'number';
8
+
9
+ public function content_template() { ?>
10
+
11
+ <label class="customizer-text">
12
+ <span class="customize-control-title">
13
+ <# if ( data.label ) { #>{{ data.label }}<# } #>
14
+ <# if ( data.description ) { #>
15
+ <span class="description customize-control-description">{{ data.description }}</span>
16
+ <# } #>
17
+ </span>
18
+ <input type="number" <?php $this->link(); ?> value="<?php echo intval( $this->value() ); ?>"/>
19
+ <# if ( data.help ) { #>
20
+ <a href="#" class="button tooltip hint--left" data-hint="{{ data.help }}">?</a>
21
+ <# } #>
22
+ </label>
23
+ <?php
24
+ }
25
+ }
includes/Controls/PaletteControl.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Kirki\Controls;
4
+
5
+ class PaletteControl extends \WP_Customize_Control {
6
+
7
+ public $type = 'palette';
8
+
9
+ public function enqueue() {
10
+ wp_enqueue_script( 'jquery-ui-button' );
11
+ }
12
+
13
+ public function render_content() {
14
+
15
+ if ( empty( $this->choices ) ) {
16
+ return;
17
+ }
18
+
19
+ $name = '_customize-palette-' . $this->id;
20
+
21
+ ?>
22
+ <span class="customize-control-title">
23
+ <?php echo esc_html( $this->label ); ?>
24
+ <?php if ( ! empty( $this->description ) ) : ?>
25
+ <span class="description customize-control-description"><?php echo $this->description; ?></span>
26
+ <?php endif; ?>
27
+ </span>
28
+
29
+ <div id="input_<?php echo $this->id; ?>" class="buttonset">
30
+ <?php foreach ( $this->choices as $value => $colorSet ) : ?>
31
+ <input type="radio" value="<?php echo esc_attr( $value ); ?>" name="<?php echo esc_attr( $name ); ?>" id="<?php echo $this->id . $value; ?>" <?php $this->link(); checked( $this->value(), $value ); ?>>
32
+ <label for="<?php echo $this->id . $value; ?>">
33
+ <?php
34
+ foreach ( $colorSet as $color ) {
35
+ printf( "<span style='background: {$color}'>{$color}</span>" );
36
+ }
37
+ ?>
38
+ </label>
39
+ </input>
40
+ <?php endforeach; ?>
41
+ </div>
42
+ <script>jQuery(document).ready(function($) { $( '[id="input_<?php echo $this->id; ?>"]' ).buttonset(); });</script>
43
+
44
+ <?php
45
+ }
46
+ }
includes/{controls/class-kirki-customize-radio-buttonset-control.php → Controls/RadioButtonSetControl.php} RENAMED
@@ -1,6 +1,8 @@
1
  <?php
2
 
3
- class Kirki_Customize_Radio_Buttonset_Control extends WP_Customize_Control {
 
 
4
 
5
  public $type = 'radio-buttonset';
6
 
1
  <?php
2
 
3
+ namespace Kirki\Controls;
4
+
5
+ class RadioButtonSetControl extends \WP_Customize_Control {
6
 
7
  public $type = 'radio-buttonset';
8
 
includes/{controls/class-kirki-customize-radio-image-control.php → Controls/RadioImageControl.php} RENAMED
@@ -1,6 +1,8 @@
1
  <?php
2
 
3
- class Kirki_Customize_Radio_Image_Control extends WP_Customize_Control {
 
 
4
 
5
  public $type = 'radio-image';
6
 
1
  <?php
2
 
3
+ namespace Kirki\Controls;
4
+
5
+ class RadioImageControl extends \WP_Customize_Control {
6
 
7
  public $type = 'radio-image';
8
 
includes/{controls/class-kirki-customize-slider-control.php → Controls/SliderControl.php} RENAMED
@@ -1,6 +1,8 @@
1
  <?php
2
 
3
- class Kirki_Customize_Slider_Control extends WP_Customize_Control {
 
 
4
 
5
  public $type = 'slider';
6
 
1
  <?php
2
 
3
+ namespace Kirki\Controls;
4
+
5
+ class SliderControl extends \WP_Customize_Control {
6
 
7
  public $type = 'slider';
8
 
includes/{controls/class-kirki-customize-sortable-control.php → Controls/SortableControl.php} RENAMED
@@ -1,6 +1,8 @@
1
  <?php
2
 
3
- class Kirki_Customize_Sortable_Control extends WP_Customize_Control {
 
 
4
 
5
  public $type = 'sortable';
6
 
@@ -11,8 +13,6 @@ class Kirki_Customize_Sortable_Control extends WP_Customize_Control {
11
 
12
 
13
  public function render_content() {
14
- global $kirki;
15
-
16
  if ( ! is_array( $this->choices ) ) {
17
  return;
18
  }
1
  <?php
2
 
3
+ namespace Kirki\Controls;
4
+
5
+ class SortableControl extends \WP_Customize_Control {
6
 
7
  public $type = 'sortable';
8
 
13
 
14
 
15
  public function render_content() {
 
 
16
  if ( ! is_array( $this->choices ) ) {
17
  return;
18
  }
includes/{controls/class-kirki-customize-switch-control.php → Controls/SwitchControl.php} RENAMED
@@ -1,6 +1,8 @@
1
  <?php
2
 
3
- class Kirki_Customize_Switch_Control extends WP_Customize_Control {
 
 
4
 
5
  public $type = 'switch';
6
 
@@ -8,6 +10,7 @@ class Kirki_Customize_Switch_Control extends WP_Customize_Control {
8
  * Render the control's content.
9
  */
10
  protected function render_content() { ?>
 
11
  <label>
12
  <div class="switch-info">
13
  <input style="display: none;" type="checkbox" value="<?php echo esc_attr( $this->value() ); ?>" <?php $this->link(); checked( $this->value() ); ?> />
@@ -19,8 +22,8 @@ class Kirki_Customize_Switch_Control extends WP_Customize_Control {
19
  <?php $classes = ( esc_attr( $this->value() ) ) ? ' On' : ' Off'; ?>
20
  <div class="Switch <?php echo $classes; ?>">
21
  <div class="Toggle"></div>
22
- <span class="On"><?php _e( 'ON', 'kirki' ); ?></span>
23
- <span class="Off"><?php _e( 'OFF', 'kirki' ); ?></span>
24
  </div>
25
  </label>
26
  <?php
1
  <?php
2
 
3
+ namespace Kirki\Controls;
4
+
5
+ class SwitchControl extends \WP_Customize_Control {
6
 
7
  public $type = 'switch';
8
 
10
  * Render the control's content.
11
  */
12
  protected function render_content() { ?>
13
+ <?php $textdomain = kirki_textdomain(); ?>
14
  <label>
15
  <div class="switch-info">
16
  <input style="display: none;" type="checkbox" value="<?php echo esc_attr( $this->value() ); ?>" <?php $this->link(); checked( $this->value() ); ?> />
22
  <?php $classes = ( esc_attr( $this->value() ) ) ? ' On' : ' Off'; ?>
23
  <div class="Switch <?php echo $classes; ?>">
24
  <div class="Toggle"></div>
25
+ <span class="On"><?php _e( 'ON', $textdomain ); ?></span>
26
+ <span class="Off"><?php _e( 'OFF', $textdomain ); ?></span>
27
  </div>
28
  </label>
29
  <?php
includes/{controls/class-kirki-customize-toggle-control.php → Controls/ToggleControl.php} RENAMED
@@ -1,6 +1,8 @@
1
  <?php
2
 
3
- class Kirki_Customize_Toggle_Control extends WP_Customize_Control {
 
 
4
 
5
  public $type = 'toggle';
6
 
1
  <?php
2
 
3
+ namespace Kirki\Controls;
4
+
5
+ class ToggleControl extends \WP_Customize_Control {
6
 
7
  public $type = 'toggle';
8
 
includes/{class-kirki-fonts.php → Fonts/FontRegistry.php} RENAMED
@@ -1,26 +1,37 @@
1
  <?php
 
 
 
2
  /**
3
- * Theme Customizer Fonts
 
4
  *
5
- * @package Customizer_Library
6
- * @author The Theme Foundry
7
  */
 
8
 
 
 
9
 
10
- class Kirki_Fonts {
 
11
 
12
- /**
 
 
 
 
 
 
13
  * Compile font options from different sources.
14
  *
15
  * @return array All available fonts.
16
  */
17
- public static function get_all_fonts() {
18
-
19
- $standard_fonts = self::get_standard_fonts();
20
- $google_fonts = self::get_google_fonts();
21
-
22
- return apply_filters( 'kirki/fonts/all', array_merge( $standard_fonts, $google_fonts ) );
23
 
 
24
  }
25
 
26
  /**
@@ -28,20 +39,16 @@ class Kirki_Fonts {
28
  *
29
  * @return array The fonts in value/label pairs.
30
  */
31
- public static function get_font_choices() {
32
-
33
- $fonts = self::get_all_fonts();
34
  $choices = array();
35
 
36
  // Repackage the fonts into value/label pairs
37
  foreach ( $fonts as $key => $font ) {
38
-
39
  $choices[ $key ] = $font['label'];
40
-
41
  }
42
 
43
  return $choices;
44
-
45
  }
46
 
47
  /**
@@ -49,11 +56,9 @@ class Kirki_Fonts {
49
  *
50
  * @return boolean
51
  */
52
- public static function is_google_font( $font ) {
53
-
54
- $allowed_fonts = self::get_google_fonts();
55
  return ( array_key_exists( $font, $allowed_fonts ) ) ? true : false;
56
-
57
  }
58
 
59
 
@@ -62,34 +67,28 @@ class Kirki_Fonts {
62
  *
63
  * @return string The URL for including Google Fonts.
64
  */
65
- public static function get_google_font_uri( $fonts, $weight = 400, $subset = 'all' ) {
66
-
67
  // De-dupe the fonts
 
68
  $fonts = array_unique( $fonts );
69
- $allowed_fonts = self::get_google_fonts();
70
  $family = array();
71
 
72
  // Validate each font and convert to URL format
73
  foreach ( $fonts as $font ) {
74
-
75
  $font = trim( $font );
76
 
77
  // Verify that the font exists
78
- if ( self::is_google_font( $font ) ) {
79
  // Build the family name and variant string (e.g., "Open+Sans:regular,italic,700")
80
- $family[] = urlencode( $font . ':' . join( ',', self::choose_google_font_variants( $font, $allowed_fonts[ $font ]['variants'] ) ) );
81
  }
82
  }
83
 
84
  // Convert from array to string
85
  if ( empty( $family ) ) {
86
-
87
  return '';
88
-
89
  } else {
90
-
91
  $request = '//fonts.googleapis.com/css?family=' . implode( '|', $family );
92
-
93
  }
94
 
95
  // load the font weight
@@ -98,24 +97,21 @@ class Kirki_Fonts {
98
 
99
  // Load the font subset
100
  if ( 'all' === $subset ) {
 
101
 
102
- $subsets_available = self::get_google_font_subsets();
103
  // Remove the all set
104
  unset( $subsets_available['all'] );
 
105
  // Build the array
106
  $subsets = array_keys( $subsets_available );
107
-
108
  } else {
109
-
110
  $subsets = (array)$subset;
111
-
112
  }
113
 
114
  // Append the subset string
115
  $request .= ( ! empty( $subsets ) ) ? '&subset=' . join( ',', $subsets ) : '';
116
 
117
  return esc_url( $request );
118
-
119
  }
120
 
121
  /**
@@ -123,21 +119,20 @@ class Kirki_Fonts {
123
  *
124
  * @return array The available subsets.
125
  */
126
- public static function get_google_font_subsets() {
127
-
128
  return array(
129
- 'all' => __( 'All', 'kirki' ),
130
- 'cyrillic' => __( 'Cyrillic', 'kirki' ),
131
- 'cyrillic-ext' => __( 'Cyrillic Extended', 'kirki' ),
132
- 'devanagari' => __( 'Devanagari', 'kirki' ),
133
- 'greek' => __( 'Greek', 'kirki' ),
134
- 'greek-ext' => __( 'Greek Extended', 'kirki' ),
135
- 'khmer' => __( 'Khmer', 'kirki' ),
136
- 'latin' => __( 'Latin', 'kirki' ),
137
- 'latin-ext' => __( 'Latin Extended', 'kirki' ),
138
- 'vietnamese' => __( 'Vietnamese', 'kirki' ),
139
  );
140
-
141
  }
142
 
143
  /**
@@ -150,17 +145,14 @@ class Kirki_Fonts {
150
  * @param array $variants The variants for the font.
151
  * @return array The chosen variants.
152
  */
153
- public static function choose_google_font_variants( $font, $variants = array() ) {
154
-
155
  $chosen_variants = array();
156
 
157
  if ( empty( $variants ) ) {
158
-
159
- $fonts = self::get_google_fonts();
160
  if ( array_key_exists( $font, $fonts ) ) {
161
  $variants = $fonts[ $font ]['variants'];
162
  }
163
-
164
  }
165
 
166
  // If a "regular" variant is not found, get the first variant
@@ -180,8 +172,7 @@ class Kirki_Fonts {
180
  $chosen_variants[] = '700';
181
  }
182
 
183
- return apply_filters( 'kirki/font/variants', array_unique( $chosen_variants ), $font, $variants );
184
-
185
  }
186
 
187
  /**
@@ -189,23 +180,26 @@ class Kirki_Fonts {
189
  *
190
  * @return array Standard websafe fonts.
191
  */
192
- public static function get_standard_fonts() {
193
-
194
- return array(
195
- 'serif' => array(
196
- 'label' => _x( 'Serif', 'font style', 'kirki' ),
197
- 'stack' => 'Georgia,Times,"Times New Roman",serif'
198
- ),
199
- 'sans-serif' => array(
200
- 'label' => _x( 'Sans Serif', 'font style', 'kirki' ),
201
- 'stack' => '"Helvetica Neue",Helvetica,Arial,sans-serif'
202
- ),
203
- 'monospace' => array(
204
- 'label' => _x( 'Monospaced', 'font style', 'kirki' ),
205
- 'stack' => 'Monaco,"Lucida Sans Typewriter","Lucida Typewriter","Courier New",Courier,monospace'
206
- )
207
- );
208
-
 
 
 
209
  }
210
 
211
 
@@ -215,80 +209,63 @@ class Kirki_Fonts {
215
  * @param string $font The 1st font in the stack.
216
  * @return string The full font stack.
217
  */
218
- public static function get_font_stack( $font ) {
219
-
220
- $all_fonts = get_all_fonts();
221
 
222
  // Sanitize font choice
223
- $font = self::sanitize_font_choice( $font );
224
-
225
  $sans = '"Helvetica Neue",sans-serif';
226
- $serif = 'Georgia, serif';
227
 
228
  // Use stack if one is identified
229
  if ( isset( $all_fonts[ $font ]['stack'] ) && ! empty( $all_fonts[ $font ]['stack'] ) ) {
230
-
231
  $stack = $all_fonts[ $font ]['stack'];
232
-
233
  } else {
234
-
235
  $stack = '"' . $font . '",' . $sans;
236
-
237
  }
238
 
239
  return $stack;
240
-
241
  }
242
 
243
-
244
  /**
245
  * Sanitize a font choice.
246
  *
247
  * @param string $value The font choice.
248
  * @return string The sanitized font choice.
249
  */
250
- public static function sanitize_font_choice( $value ) {
251
-
252
  if ( is_int( $value ) ) {
253
-
254
  // The array key is an integer, so the chosen option is a heading, not a real choice
255
  return '';
256
-
257
- } else if ( array_key_exists( $value, self::get_font_choices() ) ) {
258
-
259
  return $value;
260
-
261
- } else {
262
-
263
- return '';
264
-
265
  }
266
 
 
267
  }
268
 
269
-
270
  /**
271
  * Return an array of all available Google Fonts.
272
  *
273
  * @return array All Google Fonts.
274
  */
275
- public static function get_google_fonts() {
276
-
277
- // Get the list of fonts from our json file and convert to an array
278
- $fonts = json_decode( file_get_contents( KIRKI_PATH . '/assets/json/webfonts.json'), true );
279
-
280
- $googlefonts = array();
281
-
282
- foreach ( $fonts['items'] as $font ) {
283
- $googlefonts[$font['family']] = array(
284
- 'label' => $font['family'],
285
- 'variants' => $font['variants'],
286
- 'subsets' => $font['subsets'],
287
- );
288
- }
289
-
290
- return apply_filters( 'kirki/fonts/google_fonts', $googlefonts );
291
-
 
292
  }
293
 
294
  }
1
  <?php
2
+
3
+ namespace Kirki\Fonts;
4
+
5
  /**
6
+ * Class FontManager
7
+ * @package Kirki\Fonts
8
  *
9
+ * Provides access to fonts available for selection in the controls
 
10
  */
11
+ class FontRegistry {
12
 
13
+ /** @var array */
14
+ private $standard_fonts = null;
15
 
16
+ /** @var array */
17
+ private $google_fonts = null;
18
 
19
+ /**
20
+ * Constructor
21
+ */
22
+ public function __construct() {
23
+ }
24
+
25
+ /**
26
  * Compile font options from different sources.
27
  *
28
  * @return array All available fonts.
29
  */
30
+ public function get_all_fonts() {
31
+ $standard_fonts = $this->get_standard_fonts();
32
+ $google_fonts = $this->get_google_fonts();
 
 
 
33
 
34
+ return apply_filters('kirki/fonts/all', array_merge($standard_fonts, $google_fonts));
35
  }
36
 
37
  /**
39
  *
40
  * @return array The fonts in value/label pairs.
41
  */
42
+ public function get_font_choices() {
43
+ $fonts = $this->get_all_fonts();
 
44
  $choices = array();
45
 
46
  // Repackage the fonts into value/label pairs
47
  foreach ( $fonts as $key => $font ) {
 
48
  $choices[ $key ] = $font['label'];
 
49
  }
50
 
51
  return $choices;
 
52
  }
53
 
54
  /**
56
  *
57
  * @return boolean
58
  */
59
+ public function is_google_font($font) {
60
+ $allowed_fonts = $this->get_google_fonts();
 
61
  return ( array_key_exists( $font, $allowed_fonts ) ) ? true : false;
 
62
  }
63
 
64
 
67
  *
68
  * @return string The URL for including Google Fonts.
69
  */
70
+ public function get_google_font_uri( $fonts, $weight = 400, $subset = 'all' ) {
 
71
  // De-dupe the fonts
72
+ $allowed_fonts = $this->get_google_fonts();
73
  $fonts = array_unique( $fonts );
 
74
  $family = array();
75
 
76
  // Validate each font and convert to URL format
77
  foreach ( $fonts as $font ) {
 
78
  $font = trim( $font );
79
 
80
  // Verify that the font exists
81
+ if ( $this->is_google_font( $font ) ) {
82
  // Build the family name and variant string (e.g., "Open+Sans:regular,italic,700")
83
+ $family[] = urlencode( $font . ':' . join( ',', $this->choose_google_font_variants( $font, $allowed_fonts[ $font ]['variants'] ) ) );
84
  }
85
  }
86
 
87
  // Convert from array to string
88
  if ( empty( $family ) ) {
 
89
  return '';
 
90
  } else {
 
91
  $request = '//fonts.googleapis.com/css?family=' . implode( '|', $family );
 
92
  }
93
 
94
  // load the font weight
97
 
98
  // Load the font subset
99
  if ( 'all' === $subset ) {
100
+ $subsets_available = $this->get_google_font_subsets();
101
 
 
102
  // Remove the all set
103
  unset( $subsets_available['all'] );
104
+
105
  // Build the array
106
  $subsets = array_keys( $subsets_available );
 
107
  } else {
 
108
  $subsets = (array)$subset;
 
109
  }
110
 
111
  // Append the subset string
112
  $request .= ( ! empty( $subsets ) ) ? '&subset=' . join( ',', $subsets ) : '';
113
 
114
  return esc_url( $request );
 
115
  }
116
 
117
  /**
119
  *
120
  * @return array The available subsets.
121
  */
122
+ public function get_google_font_subsets() {
123
+ $textdomain = kirki_textdomain();
124
  return array(
125
+ 'all' => __( 'All', $textdomain ),
126
+ 'cyrillic' => __( 'Cyrillic', $textdomain ),
127
+ 'cyrillic-ext' => __( 'Cyrillic Extended', $textdomain ),
128
+ 'devanagari' => __( 'Devanagari', $textdomain ),
129
+ 'greek' => __( 'Greek', $textdomain ),
130
+ 'greek-ext' => __( 'Greek Extended', $textdomain ),
131
+ 'khmer' => __( 'Khmer', $textdomain ),
132
+ 'latin' => __( 'Latin', $textdomain ),
133
+ 'latin-ext' => __( 'Latin Extended', $textdomain ),
134
+ 'vietnamese' => __( 'Vietnamese', $textdomain ),
135
  );
 
136
  }
137
 
138
  /**
145
  * @param array $variants The variants for the font.
146
  * @return array The chosen variants.
147
  */
148
+ public function choose_google_font_variants($font, $variants = array()) {
 
149
  $chosen_variants = array();
150
 
151
  if ( empty( $variants ) ) {
152
+ $fonts = $this->get_google_fonts();
 
153
  if ( array_key_exists( $font, $fonts ) ) {
154
  $variants = $fonts[ $font ]['variants'];
155
  }
 
156
  }
157
 
158
  // If a "regular" variant is not found, get the first variant
172
  $chosen_variants[] = '700';
173
  }
174
 
175
+ return apply_filters( 'kirki/font/variants', array_unique($chosen_variants), $font, $variants );
 
176
  }
177
 
178
  /**
180
  *
181
  * @return array Standard websafe fonts.
182
  */
183
+ public function get_standard_fonts() {
184
+ $textdomain = kirki_textdomain();
185
+ if ($this->standard_fonts==null) {
186
+ $this->standard_fonts = apply_filters('kirki/fonts/standard_fonts', array(
187
+ 'serif' => array(
188
+ 'label' => _x('Serif', 'font style', $textdomain),
189
+ 'stack' => 'Georgia,Times,"Times New Roman",serif'
190
+ ),
191
+ 'sans-serif' => array(
192
+ 'label' => _x('Sans Serif', 'font style', $textdomain),
193
+ 'stack' => '"Helvetica Neue",Helvetica,Arial,sans-serif'
194
+ ),
195
+ 'monospace' => array(
196
+ 'label' => _x('Monospaced', 'font style', $textdomain),
197
+ 'stack' => 'Monaco,"Lucida Sans Typewriter","Lucida Typewriter","Courier New",Courier,monospace'
198
+ )
199
+ ));
200
+ }
201
+
202
+ return $this->standard_fonts;
203
  }
204
 
205
 
209
  * @param string $font The 1st font in the stack.
210
  * @return string The full font stack.
211
  */
212
+ public function get_font_stack( $font ) {
213
+ $all_fonts = $this->get_all_fonts();
 
214
 
215
  // Sanitize font choice
216
+ $font = $this->sanitize_font_choice( $font );
 
217
  $sans = '"Helvetica Neue",sans-serif';
 
218
 
219
  // Use stack if one is identified
220
  if ( isset( $all_fonts[ $font ]['stack'] ) && ! empty( $all_fonts[ $font ]['stack'] ) ) {
 
221
  $stack = $all_fonts[ $font ]['stack'];
 
222
  } else {
 
223
  $stack = '"' . $font . '",' . $sans;
 
224
  }
225
 
226
  return $stack;
 
227
  }
228
 
 
229
  /**
230
  * Sanitize a font choice.
231
  *
232
  * @param string $value The font choice.
233
  * @return string The sanitized font choice.
234
  */
235
+ public function sanitize_font_choice( $value ) {
 
236
  if ( is_int( $value ) ) {
 
237
  // The array key is an integer, so the chosen option is a heading, not a real choice
238
  return '';
239
+ } else if ( array_key_exists( $value, $this->get_font_choices() ) ) {
 
 
240
  return $value;
 
 
 
 
 
241
  }
242
 
243
+ return '';
244
  }
245
 
 
246
  /**
247
  * Return an array of all available Google Fonts.
248
  *
249
  * @return array All Google Fonts.
250
  */
251
+ public function get_google_fonts() {
252
+ if ($this->google_fonts==null) {
253
+ // Get the list of fonts from our json file and convert to an array
254
+ $fonts = json_decode(file_get_contents(KIRKI_PATH . '/assets/json/webfonts.json'), true);
255
+
256
+ $google_fonts = array();
257
+ foreach ($fonts['items'] as $font) {
258
+ $google_fonts[$font['family']] = array(
259
+ 'label' => $font['family'],
260
+ 'variants' => $font['variants'],
261
+ 'subsets' => $font['subsets'],
262
+ );
263
+ }
264
+
265
+ $this->google_fonts = apply_filters('kirki/fonts/google_fonts', $google_fonts);
266
+ }
267
+
268
+ return $this->google_fonts;
269
  }
270
 
271
  }
includes/Helpers/deprecated.php ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * This file contains all the deprecated functions
5
+ */
6
+
7
+ function kirki_sanitize_hex( $color ) {
8
+ Kirki_Color::sanitize_hex( $color );
9
+ }
10
+
11
+ function kirki_get_rgb( $hex, $implode = false ) {
12
+ Kirki_Color::get_rgb( $hex, $implode );
13
+ }
14
+
15
+ function kirki_get_rgba( $hex = '#fff', $opacity = 100 ) {
16
+ Kirki_Color::get_rgba( $hex, $opacity );
17
+ }
18
+
19
+ function kirki_get_brightness( $hex ) {
20
+ Kirki_Color::get_brightness( $hex );
21
+ }
22
+
23
+ if ( ! class_exists( 'Kirki_Fonts' ) ) {
24
+
25
+ class Kirki_Fonts {
26
+
27
+ public static function get_all_fonts() {
28
+ $font_registry = Kirki::fonts();
29
+ return $font_registry->get_all_fonts();
30
+ }
31
+
32
+ public static function get_font_choices() {
33
+ $font_registry = Kirki::fonts();
34
+ return $font_registry->get_font_choices();
35
+ }
36
+
37
+ public static function is_google_font( $font ) {
38
+ $font_registry = Kirki::fonts();
39
+ return $font_registray->is_google_font( $font );
40
+ }
41
+
42
+ public static function get_google_font_uri( $fonts, $weight = 400, $subset = 'all' ) {
43
+ $font_registry = Kirki::fonts();
44
+ return $font_registry->get_google_font_uri( $fonts, $weight, $subset );
45
+ }
46
+
47
+ public static function get_google_font_subsets() {
48
+ $font_registry = Kirki::fonts();
49
+ return $font_registry->get_google_font_subsets();
50
+ }
51
+
52
+ public static function choose_google_font_variants( $font, $variants = array() ) {
53
+ $font_registry = Kirki::fonts();
54
+ return $font_registry->choose_google_font_variants( $font, $variants );
55
+ }
56
+
57
+ public static function get_standard_fonts() {
58
+ $font_registry = Kirki::fonts();
59
+ return $font_registry->get_standard_fonts();
60
+ }
61
+
62
+ public static function get_font_stack( $font ) {
63
+ $font_registry = Kirki::fonts();
64
+ return $font_registry->get_font_stack( $font );
65
+ }
66
+
67
+ public static function sanitize_font_choice( $value ) {
68
+ $font_registry = Kirki::fonts();
69
+ return $font_registry->sanitize_font_choice( $value );
70
+ }
71
+
72
+ public static function get_google_fonts() {
73
+ $font_registry = Kirki::fonts();
74
+ return $font_registry->get_google_fonts();
75
+ }
76
+
77
+ }
78
+
79
+ }
includes/Helpers/helpers.php ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Helper function
5
+ *
6
+ * removes an item from an array
7
+ */
8
+ function kirki_array_delete( $idx, $array ) {
9
+
10
+ unset( $array[$idx] );
11
+ return ( is_array( $array ) ) ? array_values( $array ) : null;
12
+
13
+ }
14
+
15
+ /**
16
+ * Takes care of all the migration and compatibility issues with previous versions.
17
+ */
18
+ function kirki_update() {
19
+
20
+ $version = get_option( 'kirki_version' );
21
+ $version = ( ! $version ) ? '0' : $version;
22
+ // < 0.6.1 -> 0.6.2
23
+ if ( ! get_option( 'kirki_version' ) ) {
24
+ /**
25
+ * In versions 0.6.0 & 0.6.1 there was a bug and some fields were saved as ID_opacity istead if ID
26
+ * This will fix the wrong settings naming and save new settings.
27
+ */
28
+ $control_ids = array();
29
+ $controls = Kirki::controls()->get_all();
30
+
31
+ foreach ( $controls as $control ) {
32
+ $control = \Kirki\Control::sanitize( $control );
33
+
34
+ if ( 'background' != $control['type'] ) {
35
+ $control_ids[] = $control['settings'];
36
+ }
37
+
38
+ }
39
+
40
+ foreach ( $control_ids as $control_id ) {
41
+
42
+ if ( get_theme_mod( $control_id . '_opacity' ) && ! get_theme_mod( $control_id ) ) {
43
+ update_theme_mod( $control_id, get_theme_mod( $control_id . '_opacity' ) );
44
+ }
45
+
46
+ }
47
+
48
+ }
49
+
50
+ if ( version_compare( Kirki::$version, $version ) ) {
51
+ update_option( 'kirki_version', Kirki::$version );
52
+ }
53
+
54
+ }
55
+ add_action( 'wp', 'kirki_update' );
56
+
57
+ /**
58
+ * A wrapper function for get_theme_mod.
59
+ *
60
+ * This will be a bit more generic and will future-proof the plugin
61
+ * in case we ever decide to switch to using options instead of theme mods.
62
+ *
63
+ * An additional benefit is that it also gets the default values
64
+ * without the need to manually define them like in get_theme_mod();
65
+ *
66
+ * It's recommended that you add the following to your theme/plugin before using this function:
67
+ *
68
+ if ( ! function_exists( 'kirki_get_option' ) ) :
69
+ function kirki_get_option( $option ) {
70
+ get_theme_mod( $option, '' );
71
+ }
72
+ endif;
73
+ *
74
+ * If the plugin is not installed, the above function will NOT get the right value,
75
+ * but at least no fatal errors will occur.
76
+ */
77
+ function kirki_get_option( $option ) {
78
+
79
+ // Get the array of controls
80
+ $controls = Kirki::controls()->get_all();
81
+ foreach ( $controls as $control ) {
82
+ $setting = $control['settings'];
83
+ $default = ( isset( $control['default'] ) ) ? $control['default'] : '';
84
+ // Get the theme_mod and pass the default value as well
85
+ if ( $option == $setting ) {
86
+ $value = get_theme_mod( $option, $default );
87
+ }
88
+ }
89
+
90
+ if ( isset( $value ) ) {
91
+ return $value;
92
+ }
93
+
94
+ // fallback to returning an empty string
95
+ return '';
96
+
97
+ }
98
+
99
+ /**
100
+ * Helper function to get the translation textdomain
101
+ */
102
+ function kirki_textdomain() {
103
+
104
+ $config = apply_filters( 'kirki/config', array() );
105
+ return ( isset( $config['textdomain'] ) ) ? $config['textdomain'] : 'kirki';
106
+
107
+ }
includes/Helpers/libraries/class-kirki-color.php ADDED
@@ -0,0 +1,465 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ /**
5
+ * Color Calculations class for Kirki
6
+ * (initially built for the Shoestrap-3 theme)
7
+ */
8
+ class Kirki_Color {
9
+
10
+ /**
11
+ * Sanitize hex colors
12
+ */
13
+ public static function sanitize_hex( $color, $hash = true ) {
14
+
15
+ // Remove any spaces and special characters before and after the string
16
+ $color = trim( $color. ' \t\n\r\0\x0B' );
17
+
18
+ // Remove any trailing '#' symbols from the color value
19
+ $color = str_replace( '#', '', $color );
20
+
21
+ // If there are more than 6 characters, only keep the first 6.
22
+ $color = ( strlen( $color ) > 6 ) ? substr( $color, 0, 6 ) : 'ffffff';
23
+
24
+ // Check the validity of the hex (also takes care of wrong values like "transparent")
25
+ $color = ( empty( $color ) || ! ctype_xdigit( $color ) ) ? 'ffffff' : $color;
26
+
27
+ if ( strlen( $color ) == 6 ) {
28
+ $hex = $color; // If string consists of 6 characters, then this is our color
29
+ } else {
30
+
31
+ // String is shorter than 6 characters.
32
+ // We will have to do some calculations below to get the actual 6-digit hex value.
33
+
34
+ // If the string is longer than 3 characters, only keep the first 3.
35
+ $color = ( strlen( $color ) > 3 ) ? substr( $color, 0, 3 ) : $color;
36
+
37
+ // If this is a 3-character string, format it to 6 characters.
38
+ if ( 3 == strlen( $color ) ) {
39
+
40
+ $red = substr( $color, 0, 1 ) . substr( $color, 0, 1 );
41
+ $green = substr( $color, 1, 1 ) . substr( $color, 1, 1 );
42
+ $blue = substr( $color, 2, 1 ) . substr( $color, 2, 1 );
43
+
44
+ $hex = $red . $green . $blue;
45
+
46
+ }
47
+
48
+ // If this is shorter than 3 characters, do some voodoo.
49
+ if ( 2 == strlen( $color ) ) {
50
+ $hex = $color . $color . $color;
51
+ } else if ( 1 == strlen( $color ) ) {
52
+ $hex = $color . $color . $color . $color . $color . $color;
53
+ }
54
+
55
+ }
56
+
57
+ return ( ! $hash ) ? $hex : '#' . $hex;
58
+
59
+ }
60
+
61
+ /*
62
+ * Gets the rgb value of the $hex color.
63
+ * Returns an array.
64
+ */
65
+ public static function get_rgb( $hex, $implode = false ) {
66
+
67
+ // Remove any trailing '#' symbols from the color value
68
+ $hex = self::sanitize_hex( $hex, false );
69
+
70
+ $red = hexdec( substr( $hex, 0, 2 ) );
71
+ $green = hexdec( substr( $hex, 2, 2 ) );
72
+ $blue = hexdec( substr( $hex, 4, 2 ) );
73
+
74
+ // rgb is an array
75
+ $rgb = array( $red, $green, $blue );
76
+
77
+ return ( $implode ) ? implode( ',', $rgb ) : $rgb;
78
+
79
+ }
80
+
81
+ /*
82
+ * Gets the rgba value of a color.
83
+ */
84
+ public static function get_rgba( $hex = '#fff', $opacity = 100 ) {
85
+
86
+ $hex = self::sanitize_hex( $hex, false );
87
+ // Make sure that opacity is properly formatted :
88
+ // Set the opacity to 100 if a larger value has been entered by mistake.
89
+ // If a negative value is used, then set to 0.
90
+ // If an opacity value is entered in a decimal form (for example 0.25), then multiply by 100.
91
+ if ( $opacity >= 100 ) {
92
+ $opacity = 100;
93
+ } elseif ( $opacity < 0 ) {
94
+ $opacity = 0;
95
+ } elseif ( $opacity < 1 && $opacity != 0 ) {
96
+ $opacity = ( $opacity * 100 );
97
+ } else {
98
+ $opacity = $opacity;
99
+ }
100
+
101
+ // Divide the opacity by 100 to end-up with a CSS value for the opacity
102
+ $opacity = ( $opacity / 100 );
103
+
104
+ $color = 'rgba(' . self::get_rgb( $hex, true ) . ', ' . $opacity . ')';
105
+
106
+ return $color;
107
+
108
+ }
109
+
110
+ /*
111
+ * Gets the brightness of the $hex color.
112
+ * Returns a value between 0 and 255
113
+ */
114
+ public static function get_brightness( $hex ) {
115
+
116
+ $hex = self::sanitize_hex( $hex, false );
117
+ // returns brightness value from 0 to 255
118
+
119
+ $red = hexdec( substr( $hex, 0, 2 ) );
120
+ $green = hexdec( substr( $hex, 2, 2 ) );
121
+ $blue = hexdec( substr( $hex, 4, 2 ) );
122
+
123
+ return ( ( $red * 299 ) + ( $green * 587 ) + ( $blue * 114 ) ) / 1000;
124
+
125
+ }
126
+
127
+ /*
128
+ * Adjusts brightness of the $hex color.
129
+ * the $steps variable is a value between -255 (darken) and 255 (lighten)
130
+ */
131
+ public static function adjust_brightness( $hex, $steps ) {
132
+
133
+ $hex = self::sanitize_hex( $hex, false );
134
+ // Steps should be between -255 and 255. Negative = darker, positive = lighter
135
+ $steps = max( -255, min( 255, $steps ) );
136
+
137
+ // Get decimal values
138
+ $red = hexdec( substr( $hex, 0, 2 ) );
139
+ $green = hexdec( substr( $hex, 2, 2 ) );
140
+ $blue = hexdec( substr( $hex, 4, 2 ) );
141
+
142
+ // Adjust number of steps and keep it inside 0 to 255
143
+ $red = max( 0, min( 255, $red + $steps ) );
144
+ $green = max( 0, min( 255, $green + $steps ) );
145
+ $blue = max( 0, min( 255, $blue + $steps ) );
146
+
147
+ $red_hex = str_pad( dechex( $red ), 2, '0', STR_PAD_LEFT );
148
+ $green_hex = str_pad( dechex( $green ), 2, '0', STR_PAD_LEFT );
149
+ $blue_hex = str_pad( dechex( $blue ), 2, '0', STR_PAD_LEFT );
150
+
151
+ return self::sanitize_hex( $red_hex . $green_hex . $blue_hex );
152
+
153
+ }
154
+
155
+ /*
156
+ * Mixes 2 hex colors.
157
+ * the "percentage" variable is the percent of the first color
158
+ * to be used it the mix. default is 50 (equal mix)
159
+ */
160
+ public static function mix_colors( $hex1, $hex2, $percentage ) {
161
+
162
+ $hex1 = self::sanitize_hex( $hex1, false );
163
+ $hex2 = self::sanitize_hex( $hex2, false );
164
+
165
+ // Get decimal values
166
+ $red_1 = hexdec( substr( $hex1, 0, 2 ) );
167
+ $green_1 = hexdec( substr( $hex1, 2, 2 ) );
168
+ $blue_1 = hexdec( substr( $hex1, 4, 2 ) );
169
+ $red_2 = hexdec( substr( $hex2, 0, 2 ) );
170
+ $green_2 = hexdec( substr( $hex2, 2, 2 ) );
171
+ $blue_2 = hexdec( substr( $hex2, 4, 2 ) );
172
+
173
+ $red = ( $percentage * $red_1 + ( 100 - $percentage ) * $red_2 ) / 100;
174
+ $green = ( $percentage * $green_1 + ( 100 - $percentage ) * $green_2 ) / 100;
175
+ $blue = ( $percentage * $blue_1 + ( 100 - $percentage ) * $blue_2 ) / 100;
176
+
177
+ $red_hex = str_pad( dechex( $red ), 2, '0', STR_PAD_LEFT );
178
+ $green_hex = str_pad( dechex( $green ), 2, '0', STR_PAD_LEFT );
179
+ $blue_hex = str_pad( dechex( $blue ), 2, '0', STR_PAD_LEFT );
180
+
181
+ return self::sanitize_hex( $red_hex . $green_hex . $blue_hex );
182
+
183
+ }
184
+
185
+ /*
186
+ * Convert a hex color to HSV
187
+ */
188
+ public static function hex_to_hsv( $hex ) {
189
+
190
+ $hex = self::sanitize_hex( $hex, false );
191
+ $rgb = self::get_rgb( $hex );
192
+ $hsv = self::rgb_to_hsv( $rgb );
193
+
194
+ return $hsv;
195
+
196
+ }
197
+
198
+ /*
199
+ * Convert an RGB array to HSV
200
+ */
201
+ public static function rgb_to_hsv( $color = array() ) {
202
+ $r = $color[0];
203
+ $g = $color[1];
204
+ $b = $color[2];
205
+
206
+ $hsl = array();
207
+
208
+ $var_r = ( $r / 255 );
209
+ $var_g = ( $g / 255 );
210
+ $var_b = ( $b / 255 );
211
+
212
+ $var_min = min( $var_r, $var_g, $var_b);
213
+ $var_max = max( $var_r, $var_g, $var_b);
214
+ $del_max = $var_max - $var_min;
215
+
216
+ $v = $var_max;
217
+
218
+ if ( $del_max == 0 ) {
219
+ $h = 0;
220
+ $s = 0;
221
+ } else {
222
+ $s = $del_max / $var_max;
223
+
224
+ $del_r = ( ( ( $var_max - $var_r ) / 6 ) + ( $del_max / 2 ) ) / $del_max;
225
+ $del_g = ( ( ( $var_max - $var_g ) / 6 ) + ( $del_max / 2 ) ) / $del_max;
226
+ $del_b = ( ( ( $var_max - $var_b ) / 6 ) + ( $del_max / 2 ) ) / $del_max;
227
+
228
+ if ( $var_r == $var_max ) {
229
+ $h = $del_b - $del_g;
230
+ } elseif ( $var_g == $var_max ) {
231
+ $h = ( 1 / 3 ) + $del_r - $del_b;
232
+ } elseif ( $var_b == $var_max ) {
233
+ $h = ( 2 / 3 ) + $del_g - $del_r;
234
+ }
235
+
236
+ if ( $h < 0 ) {
237
+ $h++;
238
+ }
239
+
240
+ if ( $h > 1 ) {
241
+ $h--;
242
+ }
243
+ }
244
+
245
+ $hsl['h'] = $h;
246
+ $hsl['s'] = $s;
247
+ $hsl['v'] = $v;
248
+
249
+ return $hsl;
250
+ }
251
+
252
+ /*
253
+ * Get the brightest color from an array of colors.
254
+ * Return the key of the array if $context = 'key'
255
+ * Return the hex value of the color if $context = 'value'
256
+ */
257
+ public static function brightest_color( $colors = array(), $context = 'key' ) {
258
+
259
+ $brightest = false;
260
+
261
+ foreach ( $colors as $color ) {
262
+ $color = self::sanitize_hex( $color, false );
263
+ $brightness = self::get_brightness( $hex );
264
+
265
+ if ( ! $brightest || self::get_brightness( $hex ) > self::get_brightness( $brightest ) ) {
266
+ $brightest = $hex;
267
+ }
268
+ }
269
+
270
+ if ( $context == 'key' ) {
271
+ return array_search( $brightest, $colors );
272
+ } elseif ( $context == 'value' ) {
273
+ return $brightest;
274
+ }
275
+
276
+ }
277
+
278
+ /*
279
+ * Get the most saturated color from an array of colors.
280
+ * Return the key of the array if $context = 'key'
281
+ * Return the hex value of the color if $context = 'value'
282
+ */
283
+ public static function most_saturated_color( $colors = array(), $context = 'key' ) {
284
+
285
+ $most_saturated = false;
286
+
287
+ foreach ( $colors as $color ) {
288
+ $color = self::sanitize_hex( $color, false );
289
+ $hsv = self::hex_to_hsv( $hex );
290
+ $saturation = $hsv['s'];
291
+
292
+ if ( $most_saturated ) {
293
+ $hsv_old = self::hex_to_hsv( $most_saturated );
294
+ }
295
+
296
+ if ( ! $most_saturated || $saturation > $hsv_old['s'] ) {
297
+ $most_saturated = $hex;
298
+ }
299
+ }
300
+
301
+ if ( $context == 'key' ) {
302
+ return array_search( $most_saturated, $colors );
303
+ } elseif ( $context == 'value' ) {
304
+ return $most_saturated;
305
+ }
306
+
307
+ }
308
+
309
+ /*
310
+ * Get the most intense color from an array of colors.
311
+ * Return the key of the array if $context = 'key'
312
+ * Return the hex value of the color if $context = 'value'
313
+ */
314
+ public static function most_intense_color( $colors = array(), $context = 'key' ) {
315
+
316
+ $most_intense = false;
317
+
318
+ foreach ( $colors as $color ) {
319
+ $color = self::sanitize_hex( $color, false );
320
+ $hsv = self::hex_to_hsv( $hex );
321
+ $saturation = $hsv['s'];
322
+
323
+ if ( $most_intense ) {
324
+ $hsv_old = self::hex_to_hsv( $most_intense );
325
+ }
326
+
327
+ if ( ! $most_intense || $saturation > $hsv_old['s'] ) {
328
+ $most_intense = $hex;
329
+ }
330
+ }
331
+
332
+ if ( $context == 'key' ) {
333
+ return array_search( $most_intense, $colors );
334
+ } elseif ( $context == 'value' ) {
335
+ return $most_intense;
336
+ }
337
+
338
+ }
339
+
340
+ /*
341
+ * Get the brightest color from an array of colors.
342
+ * Return the key of the array if $context = 'key'
343
+ * Return the hex value of the color if $context = 'value'
344
+ */
345
+ public static function brightest_dull_color( $colors = array(), $context = 'key' ) {
346
+
347
+ $brightest_dull = false;
348
+
349
+ foreach ( $colors as $color ) {
350
+ $color = self::sanitize_hex( $color, false );
351
+ $hsv = self::hex_to_hsv( $hex );
352
+
353
+ $brightness = self::get_brightness( $hex );
354
+ // Prevent "division by zero" messages.
355
+ $hsv['s'] = ( $hsv['s'] == 0 ) ? 0.0001 : $hsv['s'];
356
+ $dullness = 1 / $hsv['s'];
357
+
358
+ if ( $brightest_dull ) {
359
+ $hsv_old = self::hex_to_hsv( $brightest_dull );
360
+ // Prevent "division by zero" messages.
361
+ $hsv_old['s'] = ( $hsv_old['s'] == 0 ) ? 0.0001 : $hsv_old['s'];
362
+ $dullness_old = 1 / $hsv_old['s'];
363
+ }
364
+
365
+ if ( ! $brightest_dull || self::get_brightness( $hex ) * $dullness > self::get_brightness( $brightest_dull ) * $dullness_old ) {
366
+ $brightest_dull = $hex;
367
+ }
368
+ }
369
+
370
+ if ( $context == 'key' ) {
371
+ return array_search( $brightest_dull, $colors );
372
+ } elseif ( $context == 'value' ) {
373
+ return $brightest_dull;
374
+ }
375
+
376
+ }
377
+
378
+ /*
379
+ * This is a very simple algorithm that works by summing up the differences between the three color components red, green and blue.
380
+ * A value higher than 500 is recommended for good readability.
381
+ */
382
+ public static function color_difference( $color_1 = '#ffffff', $color_2 = '#000000' ) {
383
+
384
+ $color_1 = self::sanitize_hex( $color_1, false );
385
+ $color_2 = self::sanitize_hex( $color_2, flase );
386
+
387
+ $color_1_rgb = self::get_rgb( $color_1 );
388
+ $color_2_rgb = self::get_rgb( $color_2 );
389
+
390
+ $r1 = $color_1_rgb[0];
391
+ $g1 = $color_1_rgb[1];
392
+ $b1 = $color_1_rgb[2];
393
+
394
+ $r2 = $color_2_rgb[0];
395
+ $g2 = $color_2_rgb[1];
396
+ $b2 = $color_2_rgb[2];
397
+
398
+ $r_diff = max( $r1, $r2 ) - min( $r1, $r2 );
399
+ $g_diff = max( $g1, $g2 ) - min( $g1, $g2 );
400
+ $b_diff = max( $b1, $b2 ) - min( $b1, $b2 );
401
+
402
+ $color_diff = $r_diff + $g_diff + $b_diff;
403
+
404
+ return $color_diff;
405
+
406
+ }
407
+
408
+ /*
409
+ * This function tries to compare the brightness of the colors.
410
+ * A return value of more than 125 is recommended.
411
+ * Combining it with the color_difference function above might make sense.
412
+ */
413
+ public static function brightness_difference( $color_1 = '#ffffff', $color_2 = '#000000' ) {
414
+
415
+ $color_1 = self::sanitize_hex( $color_1, false );
416
+ $color_2 = self::sanitize_hex( $color_2, false );
417
+
418
+ $color_1_rgb = self::get_rgb( $color_1 );
419
+ $color_2_rgb = self::get_rgb( $color_2 );
420
+
421
+ $r1 = $color_1_rgb[0];
422
+ $g1 = $color_1_rgb[1];
423
+ $b1 = $color_1_rgb[2];
424
+
425
+ $r2 = $color_2_rgb[0];
426
+ $g2 = $color_2_rgb[1];
427
+ $b2 = $color_2_rgb[2];
428
+
429
+ $br_1 = ( 299 * $r1 + 587 * $g1 + 114 * $b1 ) / 1000;
430
+ $br_2 = ( 299 * $r2 + 587 * $g2 + 114 * $b2 ) / 1000;
431
+
432
+ return abs( $br_1 - $br_2 );
433
+
434
+ }
435
+
436
+ /*
437
+ * Uses the luminosity to calculate the difference between the given colors.
438
+ * The returned value should be bigger than 5 for best readability.
439
+ */
440
+ public static function lumosity_difference( $color_1 = '#ffffff', $color_2 = '#000000' ) {
441
+
442
+ $color_1 = self::sanitize_hex( $color_1, false );
443
+ $color_2 = self::sanitize_hex( $color_2, false );
444
+
445
+ $color_1_rgb = self::get_rgb( $color_1 );
446
+ $color_2_rgb = self::get_rgb( $color_2 );
447
+
448
+ $r1 = $color_1_rgb[0];
449
+ $g1 = $color_1_rgb[1];
450
+ $b1 = $color_1_rgb[2];
451
+
452
+ $r2 = $color_2_rgb[0];
453
+ $g2 = $color_2_rgb[1];
454
+ $b2 = $color_2_rgb[2];
455
+
456
+ $l1 = 0.2126 * pow( $r1 / 255, 2.2 ) + 0.7152 * pow( $g1 / 255, 2.2 ) + 0.0722 * pow( $b1 / 255, 2.2 );
457
+ $l2 = 0.2126 * pow( $r2 / 255, 2.2 ) + 0.7152 * pow( $g2 / 255, 2.2 ) + 0.0722 * pow( $b2 / 255, 2.2 );
458
+
459
+ $lum_diff = ( $l1 > $l2 ) ? ( $l1 + 0.05 ) / ( $l2 + 0.05 ) : ( $l2 + 0.05 ) / ( $l1 + 0.05 );
460
+
461
+ return $lum_diff;
462
+
463
+ }
464
+
465
+ }
includes/Helpers/libraries/class-kirki-colourlovers.php ADDED
@@ -0,0 +1,188 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Kirki_Colourlovers {
4
+
5
+ public static function get_palettes( $palettes_nr = 5, $order_by = 'none', $xml = '' ) {
6
+
7
+ $palettes = self::parse( $xml );
8
+ $palettes = array_slice( $palettes, 0, $palettes_nr );
9
+
10
+ $final_palettes = array();
11
+
12
+ foreach ( $palettes as $palette ) {
13
+ $final_palettes[] = self::order_by( $palette, $order_by );
14
+ }
15
+
16
+ return $final_palettes;
17
+
18
+ }
19
+
20
+ public static function parse( $xml = null ) {
21
+
22
+ // XML copied from http://www.colourlovers.com/api/palettes/top?numResults=100
23
+ $xml_url = ( is_null( $xml ) ) ? KIRKI_URL . '/assets/xml/colourlovers-top.xml' : $xml;
24
+ $feed_xml = simplexml_load_file( $xml_url );
25
+ $palettes = array();
26
+
27
+ foreach( $feed_xml->palette as $result ) {
28
+ $id = $result->id;
29
+ $content = $result->content;
30
+ $title = $result->title;
31
+ $badgeurl = $result->badgeUrl;
32
+ $imageurl = $result->imageUrl;
33
+ $palette = (array) $result->colors->hex;
34
+
35
+ $palettes[] = $palette;
36
+
37
+ }
38
+
39
+ return $palettes;
40
+
41
+ }
42
+
43
+ public static function order_by( $palette = array(), $order = 'none' ) {
44
+
45
+ $palette = ( empty( $palette ) ) ? array() : $palette;
46
+
47
+ if ( 'none' == $order ) {
48
+
49
+ $palette = array(
50
+ Kirki_Color::sanitize_hex( $palette[0] ),
51
+ Kirki_Color::sanitize_hex( $palette[1] ),
52
+ Kirki_Color::sanitize_hex( $palette[2] ),
53
+ Kirki_Color::sanitize_hex( $palette[3] ),
54
+ Kirki_Color::sanitize_hex( $palette[4] ),
55
+
56
+ );
57
+
58
+ } elseif ( 'brightness' == $order ) {
59
+
60
+ // Get the ligtness of all the colors in our palette and arrange them according to it.
61
+ $colors_array_0b = $palette;
62
+ $brightest_0_key = Kirki_Color::brightest_color( $colors_array_0b, 'key' );
63
+ $brightest_0_val = Kirki_Color::brightest_color( $colors_array_0b, 'value' );
64
+
65
+ $colors_array_1b = kirki_array_delete( $brightest_0_key, $colors_array_0b );
66
+ $brightest_1_key = Kirki_Color::brightest_color( $colors_array_1b, 'key' );
67
+ $brightest_1_val = Kirki_Color::brightest_color( $colors_array_1b, 'value' );
68
+
69
+ $colors_array_2b = kirki_array_delete( $brightest_1_key, $colors_array_1b );
70
+ $brightest_2_key = Kirki_Color::brightest_color( $colors_array_2b, 'key' );
71
+ $brightest_2_val = Kirki_Color::brightest_color( $colors_array_2b, 'value' );
72
+
73
+ $colors_array_3b = kirki_array_delete( $brightest_2_key, $colors_array_2b );
74
+ $brightest_3_key = Kirki_Color::brightest_color( $colors_array_3b, 'key' );
75
+ $brightest_3_val = Kirki_Color::brightest_color( $colors_array_3b, 'value' );
76
+
77
+ $colors_array_4b = kirki_array_delete( $brightest_3_key, $colors_array_3b );
78
+ $brightest_4_key = Kirki_Color::brightest_color( $colors_array_4b, 'key' );
79
+ $brightest_4_val = Kirki_Color::brightest_color( $colors_array_4b, 'value' );
80
+
81
+ $palette = array(
82
+ Kirki_Color::sanitize_hex( $brightest_0_val ),
83
+ Kirki_Color::sanitize_hex( $brightest_1_val ),
84
+ Kirki_Color::sanitize_hex( $brightest_2_val ),
85
+ Kirki_Color::sanitize_hex( $brightest_3_val ),
86
+ Kirki_Color::sanitize_hex( $brightest_4_val ),
87
+ );
88
+
89
+ } elseif ( 'saturation' == $order ) {
90
+
91
+ // Get the saturation of all the colors in our palette and arrange them according to it.
92
+ $colors_array_0s = $palette;
93
+ $most_saturated_0_key = Kirki_Color::most_saturated_color( $colors_array_0s, 'key' );
94
+ $most_saturated_0_val = Kirki_Color::most_saturated_color( $colors_array_0s, 'value' );
95
+
96
+ $colors_array_1s = kirki_array_delete( $most_saturated_0_key, $colors_array_0s );
97
+ $most_saturated_1_key = Kirki_Color::most_saturated_color( $colors_array_1s, 'key' );
98
+ $most_saturated_1_val = Kirki_Color::most_saturated_color( $colors_array_1s, 'value' );
99
+
100
+ $colors_array_2s = kirki_array_delete( $most_saturated_1_key, $colors_array_1s );
101
+ $most_saturated_2_key = Kirki_Color::most_saturated_color( $colors_array_2s, 'key' );
102
+ $most_saturated_2_val = Kirki_Color::most_saturated_color( $colors_array_2s, 'value' );
103
+
104
+ $colors_array_3s = kirki_array_delete( $most_saturated_2_key, $colors_array_2s );
105
+ $most_saturated_3_key = Kirki_Color::most_saturated_color( $colors_array_3s, 'key' );
106
+ $most_saturated_3_val = Kirki_Color::most_saturated_color( $colors_array_3s, 'value' );
107
+
108
+ $colors_array_4s = kirki_array_delete( $most_saturated_3_key, $colors_array_3s );
109
+ $most_saturated_3_key = Kirki_Color::most_saturated_color( $colors_array_4s, 'key' );
110
+ $most_saturated_4_val = Kirki_Color::most_saturated_color( $colors_array_4s, 'value' );
111
+
112
+ $palette = array(
113
+ Kirki_Color::sanitize_hex( $most_saturated_0_val ),
114
+ Kirki_Color::sanitize_hex( $most_saturated_1_val ),
115
+ Kirki_Color::sanitize_hex( $most_saturated_2_val ),
116
+ Kirki_Color::sanitize_hex( $most_saturated_3_val ),
117
+ Kirki_Color::sanitize_hex( $most_saturated_4_val ),
118
+ );
119
+
120
+ } elseif ( 'intensity' == $order ) {
121
+
122
+ // Get the intensity of all the colors in our palette and arrange them according to it.
123
+ $colors_array_0i = $palette;
124
+ $most_intense_0_key = Kirki_Color::most_intense_color( $colors_array_0i, 'key' );
125
+ $most_intense_0_val = Kirki_Color::most_intense_color( $colors_array_0i, 'value' );
126
+
127
+ $colors_array_1i = kirki_array_delete( $most_intense_0_key, $colors_array_0i );
128
+ $most_intense_1_key = Kirki_Color::most_intense_color( $colors_array_1i, 'key' );
129
+ $most_intense_1_val = Kirki_Color::most_intense_color( $colors_array_1i, 'value' );
130
+
131
+ $colors_array_2i = kirki_array_delete( $most_intense_1_key, $colors_array_1i );
132
+ $most_intense_2_key = Kirki_Color::most_intense_color( $colors_array_2i, 'key' );
133
+ $most_intense_2_val = Kirki_Color::most_intense_color( $colors_array_2i, 'value' );
134
+
135
+ $colors_array_3i = kirki_array_delete( $most_intense_2_key, $colors_array_2i );
136
+ $most_intense_3_key = Kirki_Color::most_intense_color( $colors_array_3i, 'key' );
137
+ $most_intense_3_val = Kirki_Color::most_intense_color( $colors_array_3i, 'value' );
138
+
139
+ $colors_array_4i = kirki_array_delete( $most_intense_3_key, $colors_array_3i );
140
+ $most_intense_3_key = Kirki_Color::most_intense_color( $colors_array_4i, 'key' );
141
+ $most_intense_4_val = Kirki_Color::most_intense_color( $colors_array_4i, 'value' );
142
+
143
+ $palette = array(
144
+ Kirki_Color::sanitize_hex( $most_intense_0_val ),
145
+ Kirki_Color::sanitize_hex( $most_intense_1_val ),
146
+ Kirki_Color::sanitize_hex( $most_intense_2_val ),
147
+ Kirki_Color::sanitize_hex( $most_intense_3_val ),
148
+ Kirki_Color::sanitize_hex( $most_intense_4_val ),
149
+ );
150
+
151
+ } elseif ( 'dullness' == $order ) {
152
+
153
+ // Get the lightness and "dullness" of all the colors in our palette and arrange them according to it.
154
+ $colors_array_0d = $palette;
155
+ $bright_dull_0_key = Kirki_Color::brightest_dull_color( $colors_array_0d, 'key' );
156
+ $bright_dull_0_val = Kirki_Color::brightest_dull_color( $colors_array_0d, 'value' );
157
+
158
+ $colors_array_1d = kirki_array_delete( $bright_dull_0_key, $colors_array_0d );
159
+ $bright_dull_1_key = Kirki_Color::brightest_dull_color( $colors_array_1d, 'key' );
160
+ $bright_dull_1_val = Kirki_Color::brightest_dull_color( $colors_array_1d, 'value' );
161
+
162
+ $colors_array_2d = kirki_array_delete( $bright_dull_1_key, $colors_array_1d );
163
+ $bright_dull_2_key = Kirki_Color::brightest_dull_color( $colors_array_2d, 'key' );
164
+ $bright_dull_2_val = Kirki_Color::brightest_dull_color( $colors_array_2d, 'value' );
165
+
166
+ $colors_array_3d = kirki_array_delete( $bright_dull_2_key, $colors_array_2d );
167
+ $bright_dull_3_key = Kirki_Color::brightest_dull_color( $colors_array_3d, 'key' );
168
+ $bright_dull_3_val = Kirki_Color::brightest_dull_color( $colors_array_3d, 'value' );
169
+
170
+ $colors_array_4d = kirki_array_delete( $bright_dull_3_key, $colors_array_3d );
171
+ $bright_dull_3_key = Kirki_Color::brightest_dull_color( $colors_array_4d, 'key' );
172
+ $bright_dull_4_val = Kirki_Color::brightest_dull_color( $colors_array_4d, 'value' );
173
+
174
+ $palette = array(
175
+ Kirki_Color::sanitize_hex( $bright_dull_0_val ),
176
+ Kirki_Color::sanitize_hex( $bright_dull_1_val ),
177
+ Kirki_Color::sanitize_hex( $bright_dull_2_val ),
178
+ Kirki_Color::sanitize_hex( $bright_dull_3_val ),
179
+ Kirki_Color::sanitize_hex( $bright_dull_4_val ),
180
+ );
181
+
182
+ }
183
+
184
+ return $palette;
185
+
186
+ }
187
+
188
+ }
includes/Helpers/sanitize.php ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Sanitize checkbox options
5
+ *
6
+ * @since 0.5
7
+ */
8
+ function kirki_sanitize_checkbox( $value ) {
9
+ return ( 'on' != $value ) ? false : $value;
10
+ }
11
+
12
+ /**
13
+ * Sanitize number options
14
+ *
15
+ * @since 0.5
16
+ */
17
+ function kirki_sanitize_number( $value ) {
18
+ return ( is_int( $value ) || is_float( $value ) ) ? $value : intval( $value );
19
+ }
20
+
21
+ /**
22
+ * Sanitize a value from a list of allowed values.
23
+ *
24
+ * @since 0.5
25
+ *
26
+ * @param mixed $input The value to sanitize.
27
+ * @param mixed $setting The setting for which the sanitizing is occurring.
28
+ */
29
+ function kirki_sanitize_choice( $input, $setting ) {
30
+
31
+ global $wp_customize;
32
+ $control = $wp_customize->get_control( $setting->id );
33
+
34
+ return ( array_key_exists( $input, $control->choices ) ) ? $input : $setting->default;
35
+
36
+ }
37
+
38
+ /**
39
+ * Sanitize background repeat values
40
+ *
41
+ * @since 0.5
42
+ */
43
+ function kirki_sanitize_bg_repeat( $value ) {
44
+ $textdomain = kirki_textdomain();
45
+ $valid = array(
46
+ 'no-repeat' => __( 'No Repeat', $textdomain ),
47
+ 'repeat' => __( 'Repeat All', $textdomain ),
48
+ 'repeat-x' => __( 'Repeat Horizontally', $textdomain ),
49
+ 'repeat-y' => __( 'Repeat Vertically', $textdomain ),
50
+ 'inherit' => __( 'Inherit', $textdomain )
51
+ );
52
+
53
+ return ( array_key_exists( $value, $valid ) ) ? $value : 'inherit';
54
+
55
+ }
56
+
57
+ /**
58
+ * Sanitize background size values
59
+ *
60
+ * @since 0.5
61
+ */
62
+ function kirki_sanitize_bg_size( $value ) {
63
+ $textdomain = kirki_textdomain();
64
+ $valid = array(
65
+ 'inherit' => __( 'Inherit', $textdomain ),
66
+ 'cover' => __( 'Cover', $textdomain ),
67
+ 'contain' => __( 'Contain', $textdomain ),
68
+ );
69
+
70
+ return ( array_key_exists( $value, $valid ) ) ? $value : 'inherit';
71
+
72
+ }
73
+
74
+ /**
75
+ * Sanitize background attachment values
76
+ *
77
+ * @since 0.5
78
+ */
79
+ function kirki_sanitize_bg_attach( $value ) {
80
+ $textdomain = kirki_textdomain();
81
+ $valid = array(
82
+ 'inherit' => __( 'Inherit', $textdomain ),
83
+ 'fixed' => __( 'Fixed', $textdomain ),
84
+ 'scroll' => __( 'Scroll', $textdomain ),
85
+ );
86
+
87
+ return ( array_key_exists( $value, $valid ) ) ? $value : 'inherit';
88
+
89
+ }
90
+
91
+ /**
92
+ * Sanitize background position values
93
+ *
94
+ * @since 0.5
95
+ */
96
+ function kirki_sanitize_bg_position( $value ) {
97
+ $textdomain = kirki_textdomain();
98
+ $valid = array(
99
+ 'left-top' => __( 'Left Top', $textdomain ),
100
+ 'left-center' => __( 'Left Center', $textdomain ),
101
+ 'left-bottom' => __( 'Left Bottom', $textdomain ),
102
+ 'right-top' => __( 'Right Top', $textdomain ),
103
+ 'right-center' => __( 'Right Center', $textdomain ),
104
+ 'right-bottom' => __( 'Right Bottom', $textdomain ),
105
+ 'center-top' => __( 'Center Top', $textdomain ),
106
+ 'center-center' => __( 'Center Center', $textdomain ),
107
+ 'center-bottom' => __( 'Center Bottom', $textdomain ),
108
+ );
109
+
110
+ return ( array_key_exists( $value, $valid ) ) ? $value : 'center-center';
111
+
112
+ }
113
+
114
+ /**
115
+ * DOES NOT SANITIZE ANYTHING.
116
+ *
117
+ * @since 0.5
118
+ */
119
+ function kirki_sanitize_unfiltered( $value ) {
120
+ return $value;
121
+ }
includes/Kirki.php ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ use Kirki\Fonts\FontRegistry;
4
+ use Kirki\Scripts\ScriptRegistry;
5
+ use Kirki\Config;
6
+ use Kirki\Setting;
7
+ use Kirki\Control;
8
+ use Kirki\Controls;
9
+ use Kirki\Styles;
10
+
11
+ spl_autoload_register( function( $class ) {
12
+ if ( stripos( $class, 'Kirki' ) === 0 ) {
13
+ @include( KIRKI_PATH . DIRECTORY_SEPARATOR . 'includes' . str_replace( '\\', DIRECTORY_SEPARATOR, strtolower( substr( $class, strlen( 'Kirki' ) ) ) ) . '.php' );
14
+ }
15
+ });
16
+
17
+ /**
18
+ * Class Kirki
19
+ *
20
+ * The main Kirki object
21
+ */
22
+ class Kirki {
23
+
24
+ /** @var Kirki The only instance of this class */
25
+ public static $instance = null;
26
+
27
+ /** @var string Version number */
28
+ public static $version = '0.8.0';
29
+
30
+ /** @var Config Configuration */
31
+ public $config = null;
32
+
33
+ /** @var Controls */
34
+ public $controls = null;
35
+
36
+ /** @var FontRegistry The font registry */
37
+ public $font_registry = null;
38
+
39
+ /** @var scripts */
40
+ public $scripts = null;
41
+
42
+ /** @var $settings */
43
+ public $setting = null;
44
+
45
+ /**
46
+ * Access the single instance of this class
47
+ * @return Kirki
48
+ */
49
+ public static function get_instance() {
50
+ if ( self::$instance==null ) {
51
+ self::$instance = new Kirki();
52
+ }
53
+ return self::$instance;
54
+ }
55
+
56
+ /**
57
+ * Shortcut method to get the configuration of the single instance.
58
+ */
59
+ public static function config() {
60
+ return self::get_instance()->config;
61
+ }
62
+
63
+ /**
64
+ * Shortcut method to get the controls of the single instance.
65
+ */
66
+ public static function controls() {
67
+ return self::get_instance()->controls;
68
+ }
69
+
70
+ /**
71
+ * Shortcut method to get the font registry.
72
+ */
73
+ public static function fonts() {
74
+ return self::get_instance()->font_registry;
75
+ }
76
+
77
+ /**
78
+ * Constructor is private, should only be called by get_instance()
79
+ */
80
+ private function __construct() {
81
+ // Include all files we need
82
+ $this->include_files();
83
+
84
+ // Create our main objects
85
+ $this->config = new Config();
86
+ $this->setting = new Setting();
87
+ $this->controls = new Controls();
88
+ $this->control = new Control();
89
+ $this->font_registry = new FontRegistry();
90
+ $this->scripts = new ScriptRegistry();
91
+ $this->styles = new Styles();
92
+
93
+ // Hook into WP
94
+ $this->register_hooks();
95
+ }
96
+
97
+ /**
98
+ * Build the controls
99
+ */
100
+ public function customizer_init( $wp_customize ) {
101
+ $controls = Kirki::controls()->get_all();
102
+
103
+ // Early exit if controls are not set or if they're empty
104
+ if ( empty( $controls ) ) {
105
+ return;
106
+ }
107
+
108
+ foreach ( $controls as $control ) {
109
+ $this->setting->add( $wp_customize, $control );
110
+ $this->control->add( $wp_customize, $control );
111
+ }
112
+ }
113
+
114
+ /**
115
+ * Hook into WP
116
+ */
117
+ private function register_hooks() {
118
+ add_action( 'customize_register', array( $this, 'customizer_init' ), 99 );
119
+ }
120
+
121
+ /**
122
+ * Include helper files we need
123
+ */
124
+ private function include_files() {
125
+
126
+ include_once( KIRKI_PATH . '/includes/Helpers/libraries/class-kirki-color.php' );
127
+ include_once( KIRKI_PATH . '/includes/Helpers/libraries/class-kirki-colourlovers.php' );
128
+
129
+ include_once( KIRKI_PATH . '/includes/Helpers/deprecated.php' );
130
+ include_once( KIRKI_PATH . '/includes/Helpers/sanitize.php' );
131
+ include_once( KIRKI_PATH . '/includes/Helpers/helpers.php' );
132
+
133
+ }
134
+
135
+ }
includes/Scripts/Customizer/Branding.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Kirki\Scripts\Customizer;
4
+
5
+ use Kirki;
6
+ use Kirki\Scripts\EnqueueScript;
7
+
8
+ class Branding extends EnqueueScript {
9
+
10
+ /**
11
+ * If we've specified an image to be used as logo,
12
+ * replace the default theme description with a div that will include our logo.
13
+ */
14
+ public function customize_controls_print_scripts() {
15
+
16
+ $options = Kirki::config()->get_all(); ?>
17
+
18
+ <?php if ( isset( $options['logo_image'] ) || isset( $options['description'] ) ) : ?>
19
+ <script>jQuery(document).ready(function($) { "use strict";
20
+ <?php if ( isset( $options['logo_image'] ) ) : ?>
21
+ $( 'div#customize-info .preview-notice' ).replaceWith( '<img src="<?php echo $options['logo_image']; ?>">' );
22
+ <?php endif; ?>
23
+ <?php if ( isset( $options['description'] ) ) : ?>
24
+ $( 'div#customize-info .accordion-section-content' ).replaceWith( '<div class="accordion-section-content"><div class="theme-description"><?php echo $options['description']; ?></div></div>' );
25
+ <?php endif; ?>
26
+ });</script>
27
+ <?php endif;
28
+
29
+ }
30
+
31
+ public function customize_controls_enqueue_scripts() {}
32
+
33
+ public function customize_controls_print_footer_scripts() {}
34
+
35
+ public function wp_footer() {}
36
+
37
+ }
includes/Scripts/Customizer/Dependencies.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Kirki\Scripts\Customizer;
4
+
5
+ use Kirki;
6
+ use Kirki\Scripts\EnqueueScript;
7
+
8
+ class Dependencies extends EnqueueScript {
9
+
10
+ /**
11
+ * Enqueue the scripts required.
12
+ */
13
+ public function customize_controls_enqueue_scripts() {
14
+
15
+ $controls = Kirki::config()->get_all();
16
+ $kirki_url = isset( $config['url_path'] ) ? $config['url_path'] : KIRKI_URL;
17
+
18
+ wp_enqueue_script( 'kirki_customizer_js', $kirki_url . 'assets/js/customizer.js', array( 'jquery', 'customize-controls' ) );
19
+ wp_enqueue_script( 'serialize-js', $kirki_url . 'assets/js/serialize.js');
20
+ wp_enqueue_script( 'jquery-ui-core' );
21
+ wp_enqueue_script( 'jquery-ui-tooltip' );
22
+
23
+ }
24
+
25
+ public function customize_controls_print_scripts() {}
26
+
27
+ public function customize_controls_print_footer_scripts() {}
28
+
29
+ public function wp_footer() {}
30
+
31
+ }
includes/Scripts/Customizer/PostMessage.php ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Kirki\Scripts\Customizer;
4
+
5
+ use Kirki;
6
+ use Kirki\Scripts\EnqueueScript;
7
+
8
+ class PostMessage extends EnqueueScript {
9
+
10
+ /**
11
+ * Try to automatically generate the script necessary for postMessage to work.
12
+ * Something like this will have to be added to the control arguments:
13
+ *
14
+
15
+ 'transport' => 'postMessage',
16
+ 'js_vars' => array(
17
+ array(
18
+ 'element' => 'body',
19
+ 'function' => 'css',
20
+ 'property' => 'color',
21
+ ),
22
+ array(
23
+ 'element' => '#content',
24
+ 'function' => 'css',
25
+ 'property' => 'background-color',
26
+ ),
27
+ array(
28
+ 'element' => 'body',
29
+ 'function' => 'html',
30
+ )
31
+ )
32
+ *
33
+ */
34
+ public function wp_footer() {
35
+
36
+ global $wp_customize;
37
+ // Early exit if we're not in the customizer
38
+ if ( ! isset( $wp_customize ) ) {
39
+ return;
40
+ }
41
+ ?>
42
+
43
+ <?php $controls = Kirki::controls()->get_all(); ?>
44
+
45
+ <script type="text/javascript">
46
+ ( function( $ ) {
47
+ <?php foreach ( $controls as $control ) : ?>
48
+ <?php if ( isset( $control['transport'] ) && isset( $control['js_vars'] ) && 'postMessage' == $control['transport'] ) : ?>
49
+ <?php foreach ( $control['js_vars'] as $js_vars ) : ?>
50
+ wp.customize( '<?php echo $control["settings"]; ?>', function( value ) {
51
+ value.bind( function( newval ) {
52
+ <?php if ( 'html' == $js_vars['function'] ) : ?>
53
+ $( '<?php echo esc_js( $js_vars["element"] ); ?>' ).html( newval );
54
+ <?php elseif ( 'css' == $js_vars['function'] ) : ?>
55
+ $('<?php echo esc_js( $js_vars["element"] ); ?>').css('<?php echo esc_js( $js_vars["property"] ); ?>', newval );
56
+ <?php endif; ?>
57
+ } );
58
+ } );
59
+ <?php endforeach; ?>
60
+ <?php endif; ?>
61
+ <?php endforeach; ?>
62
+ } )( jQuery );
63
+ </script>
64
+ <?php
65
+
66
+ }
67
+
68
+ public function customize_controls_print_scripts() {}
69
+
70
+ public function customize_controls_enqueue_scripts() {}
71
+
72
+ public function customize_controls_print_footer_scripts() {}
73
+
74
+ }
includes/Scripts/Customizer/Required.php ADDED
@@ -0,0 +1,130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Kirki\Scripts\Customizer;
4
+
5
+ use Kirki;
6
+ use Kirki\Scripts\EnqueueScript;
7
+
8
+ class Required extends EnqueueScript {
9
+
10
+ /**
11
+ * Add the required script.
12
+ */
13
+ function customize_controls_print_footer_scripts() {
14
+
15
+ $controls = Kirki::controls()->get_all();
16
+
17
+ // Early exit if no controls are defined
18
+ if ( empty( $controls ) ) {
19
+ return;
20
+ }
21
+
22
+ $script = '';
23
+
24
+ foreach ( $controls as $control ) {
25
+
26
+ $required = ( isset( $control['required'] ) ) ? $control['required'] : false;
27
+ $setting = $control['settings'];
28
+
29
+ if ( $required ) {
30
+
31
+ $show = false;
32
+ foreach ( $required as $dependency ) {
33
+ // Find the type of the dependency control
34
+ foreach ( $controls as $control ) {
35
+ if ( $dependency['setting'] == $control['settings'] ) {
36
+ $type = $control['type'];
37
+ }
38
+ }
39
+
40
+ // If "operator" is not set then set it to "=="
41
+ if ( ! isset( $dependency['operator'] ) ) {
42
+ $dependency['operator'] = '==';
43
+ }
44
+ $dependency['operator'] = esc_js( $dependency['operator'] );
45
+
46
+ // Set the control type
47
+ $type = ( 'dropdown-pages' == $type ) ? 'select' : $type;
48
+ $type = ( 'radio-image' == $type ) ? 'radio' : $type;
49
+ $type = ( 'radio-buttonset' == $type ) ? 'radio' : $type;
50
+ $type = ( 'toggle' == $type ) ? 'checkbox' : $type;
51
+ $type = ( 'switch' == $type ) ? 'checkbox' : $type;
52
+
53
+ // Set the controller used in the script
54
+ $controller = '#customize-control-' . $dependency['setting'] . ' input';
55
+ if ( 'select' == $type ) {
56
+ $controller = '#customize-control-' . $dependency['setting'] . ' select';
57
+ } elseif ( 'radio' == $type ) {
58
+ $controller = '#customize-control-' . $dependency['setting'] . ' input[value="' . $dependency['value'] . '"]';
59
+ }
60
+
61
+ // The target element
62
+ $target = '#customize-control-' . $setting;
63
+
64
+ if ( ! isset( $dependency['operator'] ) ) {
65
+ $dependency['operator'] = '==';
66
+ }
67
+
68
+ $action_1 = '.show()';
69
+ $action_2 = '.hide()';
70
+ // Allow checking both checked and unchecked checkboxes
71
+ if ( 'checkbox' == $type ) {
72
+ if ( 0 == $dependency['value'] && '==' == $dependency['operator'] ) {
73
+ $action_1 = '.hide()';
74
+ $action_2 = '.show()';
75
+ $show = true;
76
+ }
77
+ if ( 1 == $dependency['value'] && '!=' == $dependency['operator'] ) {
78
+ $action_1 = '.hide()';
79
+ $action_2 = '.show()';
80
+ }
81
+ }
82
+
83
+ // Get the initial status
84
+ if ( '==' == $dependency['operator'] ) {
85
+ $show = ( $show && ( $dependency['value'] == kirki_get_option( $setting ) ) ) ? true : $show;
86
+ } elseif ( '!=' == $dependency['operator'] ) {
87
+ $show = ( $show && ( $dependency['value'] != kirki_get_option( $setting ) ) ) ? true : $show;
88
+ } elseif ( '>=' == $dependency['operator'] ) {
89
+ $show = ( $show && ( $dependency['value'] >= kirki_get_option( $setting ) ) ) ? true : $show;
90
+ } elseif ( '<=' == $dependency['operator'] ) {
91
+ $show = ( $show && ( $dependency['value'] <= kirki_get_option( $setting ) ) ) ? true : $show;
92
+ } elseif ( '>' == $dependency['operator'] ) {
93
+ $show = ( $show && ( $dependency['value'] > kirki_get_option( $setting ) ) ) ? true : $show;
94
+ } elseif ( '<' == $dependency['operator'] ) {
95
+ $show = ( $show && ( $dependency['value'] < kirki_get_option( $setting ) ) ) ? true : $show;
96
+ }
97
+
98
+ // if initial status is hidden then hide the control
99
+ if ( false == $show ) {
100
+ $script .= '$("' . $target . '").hide();';
101
+ }
102
+
103
+ $script .= '$("' . $controller . '").';
104
+ $script .= ( 'checkbox' == $type ) ? 'click' : 'change';
105
+ $script .= '(function(){';
106
+ $script .= 'if ($("' . $controller . '").';
107
+ $script .= ( 'checkbox' == $type ) ? 'is(":checked") ) {' : 'val() ' . $dependency['operator'] . ' "' . $dependency['value'] . '") {';
108
+ $script .= '$("' . $target . '")' . $action_1 . ';';
109
+ $script .= '} else {';
110
+ $script .= '$("' . $target . '")' . $action_2 . ';';
111
+ $script .= '}});';
112
+ $script .= ( 'checkbox' != $type ) ? '$("' . $controller . '").trigger("change");' : '';
113
+ }
114
+ }
115
+ }
116
+
117
+ // If there's a script then echo it wrapped.
118
+ if ( ! empty( $script ) ) {
119
+ echo '<script>jQuery(document).ready(function($) {' . $script . '});</script>';
120
+ }
121
+
122
+ }
123
+
124
+ public function customize_controls_print_scripts() {}
125
+
126
+ public function customize_controls_enqueue_scripts() {}
127
+
128
+ public function wp_footer() {}
129
+
130
+ }
includes/Scripts/Customizer/Tooltips.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Kirki\Scripts\Customizer;
4
+
5
+ use Kirki;
6
+ use Kirki\Scripts\EnqueueScript;
7
+
8
+ class Tooltips extends EnqueueScript {
9
+
10
+ /**
11
+ * Add the help bubble
12
+ */
13
+ function customize_controls_print_footer_scripts() {
14
+
15
+ $controls = Kirki::controls()->get_all();
16
+
17
+ $scripts = array();
18
+ $script = '';
19
+
20
+ foreach ( $controls as $control ) {
21
+
22
+ if ( ! empty( $control['help'] ) ) {
23
+ $bubble_content = $control['help'];
24
+ $content = "<a href='#' class='tooltip hint--left' data-hint='" . strip_tags( esc_html( $bubble_content ) ) . "'><span class='dashicons dashicons-info'></span></a>";
25
+ $scripts[] = '$( "' . $content . '" ).prependTo( "#customize-control-' . $control['settings'] . '" );';
26
+ }
27
+
28
+ }
29
+
30
+ // No need to echo anything if the script is empty
31
+ if ( empty( $scripts ) ) {
32
+ return;
33
+ }
34
+
35
+ // Make sure we don't add any duplicates
36
+ $scripts = array_unique( $scripts );
37
+ // Convert array to string
38
+ $script = implode( '', $scripts );
39
+
40
+ echo '<script type="text/javascript">jQuery(document).ready(function( $ ) {' . $script . '});</script>';
41
+
42
+ }
43
+
44
+ public function customize_controls_print_scripts() {}
45
+
46
+ public function customize_controls_enqueue_scripts() {}
47
+
48
+ public function wp_footer() {}
49
+
50
+ }
includes/Scripts/EnqueueScript.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Kirki\Scripts;
4
+
5
+ abstract class EnqueueScript extends ScriptRegistry {
6
+
7
+ function __construct() {
8
+ add_action( 'customize_controls_print_scripts', array( $this, 'customize_controls_print_scripts' ), 999 );
9
+ add_action( 'customize_controls_enqueue_scripts', array( $this, 'customize_controls_enqueue_scripts' ) );
10
+ add_action( 'customize_controls_print_footer_scripts', array( $this, 'customize_controls_print_footer_scripts' ) );
11
+ add_action( 'wp_footer', array( $this, 'wp_footer' ), 21 );
12
+ }
13
+
14
+ public abstract function customize_controls_print_scripts();
15
+
16
+ public abstract function customize_controls_enqueue_scripts();
17
+
18
+ public abstract function customize_controls_print_footer_scripts();
19
+
20
+ public abstract function wp_footer();
21
+
22
+ }
includes/{class-kirki-fonts-script.php → Scripts/Frontend/GoogleFonts.php} RENAMED
@@ -1,43 +1,36 @@
1
  <?php
2
 
3
- class Kirki_Fonts_Script extends Kirki_Style {
4
 
5
- public $firstrun = true;
6
 
7
- function __construct() {
8
-
9
- // Make sure the link is only added once
10
- if ( $this->firstrun ) {
11
- add_action( 'wp_enqueue_scripts', array( $this, 'google_font' ), 105 );
12
- $this->firstrun = false;
13
- }
14
 
 
 
15
  }
16
 
17
  function google_link() {
18
 
19
- // Get the global config and controls
20
- global $kirki;
21
- $controls = $kirki->get_controls();
22
- $config = $kirki->get_config();
23
 
24
  // Get an array of all the google fonts
25
- $google_fonts = Kirki_Fonts::get_google_fonts();
26
 
27
  $fonts = array();
28
  foreach ( $controls as $control ) {
29
 
30
- $control = Kirki_Controls::control_clean( $control );
31
-
32
  // The value of this control
33
  $value = get_theme_mod( $control['settings'], $control['default'] );
34
 
35
  if ( isset( $control['output'] ) ) {
36
-
37
  // Check if this is a font-family control
38
  $is_font_family = isset( $control['output']['property'] ) && 'font-family' == $control['output']['property'] ? true : false;
 
39
  // Check if this is a font-weight control
40
  $is_font_weight = isset( $control['output']['property'] ) && 'font-weight' == $control['output']['property'] ? true : false;
 
41
  // Check if this is a font subset control
42
  $is_font_subset = isset( $control['output']['property'] ) && 'font-subset' == $control['output']['property'] ? true : false;
43
 
@@ -60,7 +53,7 @@ class Kirki_Fonts_Script extends Kirki_Style {
60
  $font_families = ( ! isset( $font_families ) ) ? array() : $font_families;
61
  $font_families[] = $font['font-family'];
62
 
63
- if ( Kirki_Fonts::is_google_font( $font['font-family'] ) ) {
64
  $has_google_font = true;
65
  }
66
 
@@ -90,7 +83,7 @@ class Kirki_Fonts_Script extends Kirki_Style {
90
  $font_families = false;
91
  }
92
 
93
- return ( $font_families ) ? Kirki_Fonts::get_google_font_uri( $font_families, $font_weights, $font_subsets ) : false;
94
 
95
  }
96
 
@@ -98,14 +91,12 @@ class Kirki_Fonts_Script extends Kirki_Style {
98
  * Enqueue Google fonts if necessary
99
  */
100
  function google_font() {
101
-
102
  $google_link = $this->google_link();
103
 
104
  if ( $google_link ) {
105
  wp_register_style( 'kirki_google_fonts', $google_link );
106
  wp_enqueue_style( 'kirki_google_fonts' );
107
  }
108
-
109
  }
110
 
111
  }
1
  <?php
2
 
3
+ namespace Kirki\Scripts\Frontend;
4
 
5
+ use Kirki;
6
 
7
+ class GoogleFonts extends \Kirki {
 
 
 
 
 
 
8
 
9
+ function __construct() {
10
+ add_action( 'wp_enqueue_scripts', array( $this, 'google_font' ), 105 );
11
  }
12
 
13
  function google_link() {
14
 
15
+ $controls = Kirki::controls()->get_all();
16
+ $config = $this->config;
 
 
17
 
18
  // Get an array of all the google fonts
19
+ $google_fonts = Kirki::fonts()->get_google_fonts();
20
 
21
  $fonts = array();
22
  foreach ( $controls as $control ) {
23
 
 
 
24
  // The value of this control
25
  $value = get_theme_mod( $control['settings'], $control['default'] );
26
 
27
  if ( isset( $control['output'] ) ) {
 
28
  // Check if this is a font-family control
29
  $is_font_family = isset( $control['output']['property'] ) && 'font-family' == $control['output']['property'] ? true : false;
30
+
31
  // Check if this is a font-weight control
32
  $is_font_weight = isset( $control['output']['property'] ) && 'font-weight' == $control['output']['property'] ? true : false;
33
+
34
  // Check if this is a font subset control
35
  $is_font_subset = isset( $control['output']['property'] ) && 'font-subset' == $control['output']['property'] ? true : false;
36
 
53
  $font_families = ( ! isset( $font_families ) ) ? array() : $font_families;
54
  $font_families[] = $font['font-family'];
55
 
56
+ if ( Kirki::fonts()->is_google_font( $font['font-family'] ) ) {
57
  $has_google_font = true;
58
  }
59
 
83
  $font_families = false;
84
  }
85
 
86
+ return ( $font_families ) ? Kirki::fonts()->get_google_font_uri( $font_families, $font_weights, $font_subsets ) : false;
87
 
88
  }
89
 
91
  * Enqueue Google fonts if necessary
92
  */
93
  function google_font() {
 
94
  $google_link = $this->google_link();
95
 
96
  if ( $google_link ) {
97
  wp_register_style( 'kirki_google_fonts', $google_link );
98
  wp_enqueue_style( 'kirki_google_fonts' );
99
  }
 
100
  }
101
 
102
  }
includes/Scripts/ScriptRegistry.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Kirki\Scripts;
4
+
5
+ use Kirki\Scripts\Customizer\Dependencies;
6
+ use Kirki\Scripts\Customizer\Branding;
7
+ use Kirki\Scripts\Customizer\PostMessage;
8
+ use Kirki\Scripts\Customizer\Required;
9
+ use Kirki\Scripts\Customizer\Tooltips;
10
+ use Kirki\Scripts\Frontend\GoogleFonts;
11
+
12
+ class ScriptRegistry {
13
+
14
+ public function __construct() {
15
+
16
+ $dependencies = new Dependencies();
17
+ $branding = new Branding();
18
+ $postmessage = new PostMessage();
19
+ $required = new Required();
20
+ $tooltips = new Tooltips();
21
+ $googlefonts = new GoogleFonts();
22
+
23
+ }
24
+
25
+ }
includes/Setting.php ADDED
@@ -0,0 +1,193 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Kirki;
4
+
5
+ class Setting {
6
+
7
+ public $setting_type = null;
8
+ public $capability = null;
9
+ public $option_name = null;
10
+
11
+ /**
12
+ * The class construct
13
+ */
14
+ public function __construct() {
15
+ $this->setting_type = 'theme_mod';
16
+ $this->option_name = 'kirki';
17
+ $this->capability = 'edit_theme_options';
18
+ }
19
+
20
+ /**
21
+ * Add a setting
22
+ */
23
+ public function add( $wp_customize, $control ) {
24
+
25
+ if ( 'option' == $this->setting_type ) {
26
+ $control['settings'] = $this->option_name . '[' . $control['settings'] . ']';
27
+ }
28
+
29
+ if ( 'background' == $control['type'] ) {
30
+
31
+ if ( isset( $control['default']['color'] ) ) {
32
+ $option_name = ( 'option' == $this->setting_type ) ? $this->option_name . '[' . $control['settings'] . '_color]' : $control['settings'] . '_color';
33
+ $this->add_setting( $wp_customize, $control, $option_name, $control['default']['color'], 'sanitize_hex_color' );
34
+ }
35
+
36
+ if ( isset( $control['default']['image'] ) ) {
37
+ $option_name = ( 'option' == $this->setting_type ) ? $this->option_name . '[' . $control['settings'] . '_image]' : $control['settings'] . '_image';
38
+ $this->add_setting( $wp_customize, $control, $option_name, $control['default']['image'], 'esc_url_raw' );
39
+ }
40
+ if ( isset( $control['default']['repeat'] ) ) {
41
+ $option_name = ( 'option' == $this->setting_type ) ? $this->option_name . '[' . $control['settings'] . '_repeat]' : $control['settings'] . '_repeat';
42
+ $this->add_setting( $wp_customize, $control, $option_name, $control['default']['repeat'], 'kirki_sanitize_bg_repeat' );
43
+ }
44
+
45
+ if ( isset( $control['default']['size'] ) ) {
46
+ $option_name = ( 'option' == $this->setting_type ) ? $this->option_name . '[' . $control['settings'] . '_size]' : $control['settings'] . '_size';
47
+ $this->add_setting( $wp_customize, $control, $option_name, $control['default']['size'], 'kirki_sanitize_bg_size' );
48
+ }
49
+
50
+ if ( isset( $control['default']['attach'] ) ) {
51
+ $option_name = ( 'option' == $this->setting_type ) ? $this->option_name . '[' . $control['settings'] . '_attach]' : $control['settings'] . '_attach';
52
+ $this->add_setting( $wp_customize, $control, $option_name, $control['default']['attach'], 'kirki_sanitize_bg_attach' );
53
+ }
54
+
55
+ if ( isset( $control['default']['position'] ) ) {
56
+ $option_name = ( 'option' == $this->setting_type ) ? $this->option_name . '[' . $control['settings'] . '_position]' : $control['settings'] . '_position';
57
+ $this->add_setting( $wp_customize, $control, $option_name, $control['default']['position'], 'kirki_sanitize_bg_position' );
58
+ }
59
+
60
+ if ( isset( $control['default']['opacity'] ) && $control['default']['opacity'] ) {
61
+ $option_name = ( 'option' == $this->setting_type ) ? $this->option_name . '[' . $control['settings'] . '_opacity]' : $control['settings'] . '_opacity';
62
+ $this->add_setting( $wp_customize, $control, $option_name, $control['default']['opacity'], 'absint' );
63
+ }
64
+ } else {
65
+ $this->add_setting( $wp_customize, $control );
66
+ }
67
+
68
+ }
69
+
70
+ /**
71
+ * Get the value of an option.
72
+ * If no value has been set then get the default value.
73
+ *
74
+ * For now we can only handle theme_mods
75
+ */
76
+ public function get( $setting = '' ) {
77
+
78
+ // Get the array of controls
79
+ $controls = Kirki::controls()->get_all();
80
+ foreach ( $controls as $control ) {
81
+
82
+ $setting = $control['settings'];
83
+ $default = ( isset( $control['default'] ) ) ? $control['default'] : '';
84
+ // Get the theme_mod and pass the default value as well
85
+ if ( $option == $setting ) {
86
+
87
+ if ( 'theme_mod' == $this->setting_type ) {
88
+ $value = get_theme_mod( $option, $default );
89
+ } elseif ( 'option' == $this->setting_type ) {
90
+ $value = get_option( $option, $default );
91
+ }
92
+
93
+ }
94
+
95
+ }
96
+
97
+ if ( isset( $value ) ) {
98
+ return $value;
99
+ }
100
+
101
+ // fallback to returning an empty string
102
+ return '';
103
+
104
+ }
105
+
106
+ public function add_setting( $wp_customize, $control, $id_override = null, $default_override = null, $callback = null ) {
107
+
108
+ $id = ( ! is_null( $id_override ) ) ? $id_override : $control['settings'];
109
+ $default = ( ! is_null( $default_override ) ) ? $default_override : $control['default'];
110
+ $callback = ( ! is_null( $callback ) ) ? $callback : $this->sanitize_callback( $control['type'] );
111
+
112
+ $wp_customize->add_setting( $id, array(
113
+ 'default' => $default,
114
+ 'type' => $this->setting_type,
115
+ 'capability' => $this->capability,
116
+ 'transport' => isset( $control['transport'] ) ? $control['transport'] : 'refresh',
117
+ 'sanitize_callback' => isset( $control['sanitize_callback'] ) ? $control['sanitize_callback'] : $callback,
118
+ ) );
119
+
120
+ }
121
+
122
+ /**
123
+ * Get the sanitize_callback based on the control type
124
+ */
125
+ public function sanitize_callback( $control_type ) {
126
+
127
+ switch ( $control_type ) {
128
+ case 'checkbox' :
129
+ $sanitize_callback = 'kirki_sanitize_checkbox';
130
+ break;
131
+ case 'color' :
132
+ $sanitize_callback = 'sanitize_hex_color';
133
+ break;
134
+ case 'image' :
135
+ $sanitize_callback = 'esc_url_raw';
136
+ break;
137
+ case 'radio' :
138
+ $sanitize_callback = 'kirki_sanitize_choice';
139
+ break;
140
+ case 'radio-image' :
141
+ $sanitize_callback = 'kirki_sanitize_choice';
142
+ break;
143
+ case 'radio-buttonset' :
144
+ $sanitize_callback = 'kirki_sanitize_choice';
145
+ break;
146
+ case 'toggle' :
147
+ $sanitize_callback = 'kirki_sanitize_checkbox';
148
+ break;
149
+ case 'switch' :
150
+ $sanitize_callback = 'kirki_sanitize_checkbox';
151
+ break;
152
+ case 'select' :
153
+ $sanitize_callback = 'kirki_sanitize_choice';
154
+ break;
155
+ case 'dropdown-pages' :
156
+ $sanitize_callback = 'kirki_sanitize_choice';
157
+ break;
158
+ case 'slider' :
159
+ $sanitize_callback = 'kirki_sanitize_number';
160
+ break;
161
+ case 'text' :
162
+ $sanitize_callback = 'esc_textarea';
163
+ break;
164
+ case 'textarea' :
165
+ $sanitize_callback = 'esc_textarea';
166
+ break;
167
+ case 'editor' :
168
+ $sanitize_callback = 'esc_textarea';
169
+ break;
170
+ case 'upload' :
171
+ $sanitize_callback = 'esc_url_raw';
172
+ break;
173
+ case 'number' :
174
+ $sanitize_callback = 'kirki_sanitize_number';
175
+ break;
176
+ case 'multicheck' :
177
+ $sanitize_callback = 'esc_attr';
178
+ break;
179
+ case 'sortable' :
180
+ $sanitize_callback = 'esc_attr';
181
+ break;
182
+ case 'palette' :
183
+ $sanitize_callback = 'kirki_sanitize_choice';
184
+ break;
185
+ default :
186
+ $sanitize_callback = 'kirki_sanitize_unfiltered';
187
+ }
188
+
189
+ return $sanitize_callback;
190
+
191
+ }
192
+
193
+ }
includes/Styles.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Kirki;
4
+ use Kirki\Styles\Customizer;
5
+ use Kirki\Styles\Frontend;
6
+
7
+ class Styles {
8
+
9
+ public function __construct() {
10
+
11
+ $customizer_styles = new Customizer();
12
+ $frontend_styles = new Frontend();
13
+
14
+ }
15
+
16
+ }
includes/Styles/Customizer.php ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Kirki\Styles;
4
+ use Kirki;
5
+ use Kirki\Styles;
6
+
7
+ class Customizer {
8
+
9
+ function __construct() {
10
+ add_action( 'customize_controls_print_styles', array( $this, 'custom_css' ), 999 );
11
+ add_action( 'customize_controls_print_styles', array( $this, 'customizer_styles' ) );
12
+ }
13
+
14
+ /**
15
+ * Enqueue the stylesheets required.
16
+ */
17
+ function customizer_styles() {
18
+ wp_enqueue_style( 'kirki-customizer-css', KIRKI_URL . '/assets/css/customizer.css', NULL, '0.5' );
19
+ }
20
+
21
+ /**
22
+ * Add custom CSS rules to the head, applying our custom styles
23
+ */
24
+ function custom_css() {
25
+
26
+ $color = $this->get_admin_colors();
27
+ $config = Kirki::config();
28
+
29
+ $color_font = false;
30
+ $color_accent = $config->get( 'color_accent', $color['icon_colors']['focus']);
31
+ $color_back = $config->get( 'color_back', '#ffffff' );
32
+ $color_font = ( 170 > \Kirki_Color::get_brightness( $color_back ) ) ? '#f2f2f2' : '#222';
33
+
34
+ $styles = '<style>';
35
+
36
+ // Background styles
37
+ $styles .= '#customize-controls .wp-full-overlay-sidebar-content{background-color:' . $color_back . ';}';
38
+ $styles .= '#customize-theme-controls .accordion-section-title, #customize-info .accordion-section-title,#customize-info .accordion-section-title:hover,#customize-info.open .accordion-section-title{background-color:' . $color_back . ';color:' . $color_font . ';}';
39
+ $styles .= '#customize-theme-controls .control-section .accordion-section-title:hover,.control-section.control-panel>.accordion-section-title:after{background-color:' . \Kirki_Color::adjust_brightness( $color_back, -10 ) . ';color:' . $color_font . ';}';
40
+ $styles .= '#customize-theme-controls .control-section.control-panel>h3.accordion-section-title:focus:after, #customize-theme-controls .control-section.control-panel>h3.accordion-section-title:hover:after{background-color:' . \Kirki_Color::adjust_brightness( $color_back, -20 ) . ';color:' . $color_font . ';}';
41
+ $styles .= '#customize-theme-controls .control-section.open .accordion-section-title{background-color:' . $color_accent . ' !important;color:' . $color_font . ' !important;}';
42
+
43
+ // Tooltip styles
44
+ // $styles .= 'li.customize-control a.button.tooltip.hint--left {color:' . $color_accent . ';}';
45
+
46
+ // Image-Radio styles
47
+ $styles .= '.customize-control-radio-image .image.ui-buttonset label.ui-state-active {border-color:' . $color_accent . ';}';
48
+
49
+ // Buttonset-Radio styles
50
+ $styles .= '.customize-control-radio-buttonset label.ui-state-active{background-color:' . $color_accent . ';color:' . $color_font . ';}';
51
+
52
+ // Slider Controls
53
+ $styles .= '.customize-control-slider .ui-slider .ui-slider-handle{background-color:' . $color_accent . ';border-color:' . $color_accent . ';}';
54
+
55
+ // Switch Controls
56
+ $styles .= '.customize-control-switch .Switch .On, .customize-control-toggle .Switch .On{color:' . $color_accent . ';}';
57
+
58
+ // Toggle Controls
59
+ $styles .= '.customize-control-switch .Switch.Round.On, .customize-control-toggle .Switch.Round.On{background-color:' . \Kirki_Color::adjust_brightness( $color_accent, -10 ) . ';}';
60
+
61
+ // Sortable Controls
62
+ $styles .= '.customize-control-sortable ul.ui-sortable li .dashicons.visibility{color:' . $color_accent . ';}';
63
+
64
+ // Palette Controls
65
+ $styles .= '.customize-control-palette label.ui-state-active.ui-button.ui-widget span.ui-button-text {border-color:' . $color_accent . ';}';
66
+
67
+ $styles .= '</style>';
68
+
69
+ echo $styles;
70
+
71
+ }
72
+
73
+ /**
74
+ * Get the admin color theme
75
+ */
76
+ function get_admin_colors() {
77
+
78
+ // Get the active admin theme
79
+ global $_wp_admin_css_colors;
80
+
81
+ // Get the user's admin colors
82
+ $color = get_user_option( 'admin_color' );
83
+ // If no theme is active set it to 'fresh'
84
+ if ( empty( $color ) || ! isset( $_wp_admin_css_colors[$color] ) ) {
85
+ $color = 'fresh';
86
+ }
87
+
88
+ $color = (array) $_wp_admin_css_colors[$color];
89
+
90
+ return $color;
91
+
92
+ }
93
+
94
+ }
includes/{class-kirki-style.php → Styles/Frontend.php} RENAMED
@@ -1,82 +1,77 @@
1
  <?php
2
 
3
- class Kirki_Style {
 
 
4
 
5
- public $fonts_script;
6
 
7
  function __construct() {
 
 
 
 
8
 
9
- $this->fonts_script = new Kirki_Fonts_Script();
10
-
11
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue' ), 150 );
12
 
 
 
13
  }
14
 
15
- function loop_controls() {
16
 
17
- $controls = apply_filters( 'kirki/controls', array() );
18
- $styles = array();
 
 
 
 
19
 
20
- foreach ( $controls as $control ) {
21
- $element = '';
22
- $property = '';
23
- $units = '';
24
 
25
- // Only continue if $control['output'] is set
26
  if ( isset( $control['output'] ) ) {
 
 
 
27
 
28
- // Check if this is an array of style definitions
29
- $multiple_styles = isset( $control['output'][0]['element'] ) ? true : false;
30
-
31
- if ( ! $multiple_styles ) { // single style
32
-
33
- // If $control['output'] is not an array, then use the string as the target element
34
- if ( is_string( $control['output'] ) ) {
35
- $element = $control['output'];
36
- } else {
37
- $element = isset( $control['output']['element'] ) ? $control['output']['element'] : '';
38
- $property = isset( $control['output']['property'] ) ? $control['output']['property'] : '';
39
- $units = isset( $control['output']['units'] ) ? $control['output']['units'] : '';
40
- }
41
-
42
- $styles = $this->styles( $control, $styles, $element, $property, $units );
43
-
44
- } else { // Multiple styles set
45
 
46
- foreach ( $control['output'] as $style ) {
47
 
48
- if ( ! array( $style ) ) {
49
- $element = $style;
50
- } else {
51
- $element = isset( $style['element'] ) ? $style['element'] : '';
52
- $property = isset( $style['property'] ) ? $style['property'] : '';
53
- $units = isset( $style['units'] ) ? $style['units'] : '';
54
- }
55
 
56
- $styles = $this->styles( $control, $styles, $element, $property, $units );
57
 
58
- }
 
59
 
60
- }
 
 
 
61
 
 
 
 
 
62
  }
63
-
64
  }
65
 
66
- return $styles;
67
 
68
  }
69
 
70
- function styles( $control, $styles, $element, $property, $units ) {
71
 
72
- $control = Kirki_Controls::control_clean( $control );
73
 
74
  $value = get_theme_mod( $control['settings'], $control['default'] );
75
 
76
  // Color controls
77
  if ( 'color' == $control['type'] ) {
78
 
79
- $color = Kirki_Color::sanitize_hex( $value );
80
  $styles[$element][$property] = $color;
81
 
82
  }
@@ -85,28 +80,34 @@ class Kirki_Style {
85
  elseif ( 'background' == $control['type'] ) {
86
 
87
  if ( isset( $control['default']['color'] ) ) {
88
- $bg_color = Kirki_Color::sanitize_hex( get_theme_mod( $control['settings'] . '_color', $control['default']['color'] ) );
89
  }
90
  if ( isset( $control['default']['image'] ) ) {
91
  $bg_image = get_theme_mod( $control['settings'] . '_image', $control['default']['image'] );
 
92
  }
93
  if ( isset( $control['default']['repeat'] ) ) {
94
  $bg_repeat = get_theme_mod( $control['settings'] . '_repeat', $control['default']['repeat'] );
 
95
  }
96
  if ( isset( $control['default']['size'] ) ) {
97
  $bg_size = get_theme_mod( $control['settings'] . '_size', $control['default']['size'] );
 
98
  }
99
  if ( isset( $control['default']['attach'] ) ) {
100
  $bg_attach = get_theme_mod( $control['settings'] . '_attach', $control['default']['attach'] );
 
101
  }
102
  if ( isset( $control['default']['position'] ) ) {
103
  $bg_position = get_theme_mod( $control['settings'] . '_position', $control['default']['position'] );
 
104
  }
105
  if ( isset( $control['default']['opacity'] ) && $control['default']['opacity'] ) {
106
  $bg_opacity = get_theme_mod( $control['settings'] . '_opacity', $control['default']['opacity'] );
 
107
  if ( isset( $bg_color ) ) {
108
  // If we're using an opacity other than 100, then convert the color to RGBA.
109
- $bg_color = ( 100 != $bg_opacity ) ? Kirki_Color::get_rgba( $bg_color, $bg_opacity ) : $bg_color;
110
  } elseif ( isset( $bg_image ) ) {
111
  $element_opacity = ( $bg_opacity / 100 );
112
  }
@@ -167,33 +168,59 @@ class Kirki_Style {
167
 
168
  }
169
 
170
- function enqueue() {
171
 
172
- global $kirki;
173
- $config = $kirki->get_config();
174
- wp_add_inline_style( $config['stylesheet_id'], $this->parse() );
175
 
176
- }
 
177
 
178
- function parse() {
 
 
 
179
 
180
- $styles = $this->loop_controls();
181
- $css = '';
182
 
183
- // Early exit if styles are empty or not an array
184
- if ( empty( $styles ) || ! is_array( $styles ) ) {
185
- return;
186
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
187
 
188
- foreach ( $styles as $style => $style_array ) {
189
- $css .= $style . '{';
190
- foreach ( $style_array as $property => $value ) {
191
- $css .= $property . ':' . $value . ';';
192
  }
193
- $css .= '}';
194
  }
195
 
196
- return $css;
197
 
198
  }
199
 
1
  <?php
2
 
3
+ namespace Kirki\Styles;
4
+ use Kirki;
5
+ use Kirki\Styles;
6
 
7
+ class Frontend {
8
 
9
  function __construct() {
10
+ $styles_priority = ( isset( $options['styles_priority'] ) ) ? $styles_priority : 10;
11
+ add_action( 'wp_enqueue_scripts', array( $this, 'frontend_styles' ), $styles_priority );
12
+ add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_styles' ), 150 );
13
+ }
14
 
 
 
 
15
 
16
+ function enqueue_styles() {
17
+ wp_add_inline_style( Kirki::config()->getOrThrow( 'stylesheet_id' ), $this->styles_parse() );
18
  }
19
 
 
20
 
21
+ /**
22
+ * Add a dummy, empty stylesheet if no stylesheet_id has been defined and we need one.
23
+ */
24
+ function frontend_styles() {
25
+ $config = Kirki::config();
26
+ $controls = Kirki::controls()->get_all();
27
 
28
+ $kirki_url = $config->get('url_path', KIRKI_URL);
29
+ $kirki_stylesheet = $config->getOrThrow('stylesheet_id');
 
 
30
 
31
+ foreach( $controls as $control ) {
32
  if ( isset( $control['output'] ) ) {
33
+ $uses_output = true;
34
+ }
35
+ }
36
 
37
+ if ( isset( $uses_output ) && $uses_output && $kirki_stylesheet === 'kirki-styles' ) {
38
+ wp_enqueue_style( 'kirki-styles', $kirki_url . 'assets/css/kirki-styles.css', NULL, NULL );
39
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
 
41
+ }
42
 
 
 
 
 
 
 
 
43
 
44
+ function styles_parse() {
45
 
46
+ $styles = $this->loop_controls();
47
+ $css = '';
48
 
49
+ // Early exit if styles are empty or not an array
50
+ if ( empty( $styles ) || ! is_array( $styles ) ) {
51
+ return;
52
+ }
53
 
54
+ foreach ( $styles as $style => $style_array ) {
55
+ $css .= $style . '{';
56
+ foreach ( $style_array as $property => $value ) {
57
+ $css .= $property . ':' . $value . ';';
58
  }
59
+ $css .= '}';
60
  }
61
 
62
+ return $css;
63
 
64
  }
65
 
 
66
 
67
+ function control_styles( $control, $styles, $element, $property, $units ) {
68
 
69
  $value = get_theme_mod( $control['settings'], $control['default'] );
70
 
71
  // Color controls
72
  if ( 'color' == $control['type'] ) {
73
 
74
+ $color = \Kirki_Color::sanitize_hex( $value );
75
  $styles[$element][$property] = $color;
76
 
77
  }
80
  elseif ( 'background' == $control['type'] ) {
81
 
82
  if ( isset( $control['default']['color'] ) ) {
83
+ $bg_color = \Kirki_Color::sanitize_hex( get_theme_mod( $control['settings'] . '_color', $control['default']['color'] ) );
84
  }
85
  if ( isset( $control['default']['image'] ) ) {
86
  $bg_image = get_theme_mod( $control['settings'] . '_image', $control['default']['image'] );
87
+ $bg_image = esc_url_raw( $bg_image );
88
  }
89
  if ( isset( $control['default']['repeat'] ) ) {
90
  $bg_repeat = get_theme_mod( $control['settings'] . '_repeat', $control['default']['repeat'] );
91
+ $bg_repeat = kirki_sanitize_bg_repeat( $bg_repeat );
92
  }
93
  if ( isset( $control['default']['size'] ) ) {
94
  $bg_size = get_theme_mod( $control['settings'] . '_size', $control['default']['size'] );
95
+ $bg_size = kirki_sanitize_bg_size( $bg_size );
96
  }
97
  if ( isset( $control['default']['attach'] ) ) {
98
  $bg_attach = get_theme_mod( $control['settings'] . '_attach', $control['default']['attach'] );
99
+ $bg_attach = kirki_sanitize_bg_attach( $bg_attach );
100
  }
101
  if ( isset( $control['default']['position'] ) ) {
102
  $bg_position = get_theme_mod( $control['settings'] . '_position', $control['default']['position'] );
103
+ $bg_position = kirki_sanitize_bg_position( $bg_position );
104
  }
105
  if ( isset( $control['default']['opacity'] ) && $control['default']['opacity'] ) {
106
  $bg_opacity = get_theme_mod( $control['settings'] . '_opacity', $control['default']['opacity'] );
107
+ $bg_opacity = kirki_sanitize_number( $bg_opacity );
108
  if ( isset( $bg_color ) ) {
109
  // If we're using an opacity other than 100, then convert the color to RGBA.
110
+ $bg_color = ( 100 != $bg_opacity ) ? \Kirki_Color::get_rgba( $bg_color, $bg_opacity ) : $bg_color;
111
  } elseif ( isset( $bg_image ) ) {
112
  $element_opacity = ( $bg_opacity / 100 );
113
  }
168
 
169
  }
170
 
 
171
 
172
+ function loop_controls() {
 
 
173
 
174
+ $controls = Kirki::controls()->get_all();
175
+ $styles = array();
176
 
177
+ foreach ( $controls as $control ) {
178
+ $element = '';
179
+ $property = '';
180
+ $units = '';
181
 
182
+ // Only continue if $control['output'] is set
183
+ if ( isset( $control['output'] ) ) {
184
 
185
+ // Check if this is an array of style definitions
186
+ $multiple_styles = isset( $control['output'][0]['element'] ) ? true : false;
187
+
188
+ if ( ! $multiple_styles ) { // single style
189
+
190
+ // If $control['output'] is not an array, then use the string as the target element
191
+ if ( is_string( $control['output'] ) ) {
192
+ $element = $control['output'];
193
+ } else {
194
+ $element = isset( $control['output']['element'] ) ? $control['output']['element'] : '';
195
+ $property = isset( $control['output']['property'] ) ? $control['output']['property'] : '';
196
+ $units = isset( $control['output']['units'] ) ? $control['output']['units'] : '';
197
+ }
198
+
199
+ $styles = $this->control_styles( $control, $styles, $element, $property, $units );
200
+
201
+ } else { // Multiple styles set
202
+
203
+ foreach ( $control['output'] as $style ) {
204
+
205
+ if ( ! array( $style ) ) {
206
+ $element = $style;
207
+ } else {
208
+ $element = isset( $style['element'] ) ? $style['element'] : '';
209
+ $property = isset( $style['property'] ) ? $style['property'] : '';
210
+ $units = isset( $style['units'] ) ? $style['units'] : '';
211
+ }
212
+
213
+ $styles = $this->control_styles( $control, $styles, $element, $property, $units );
214
+
215
+ }
216
+
217
+ }
218
 
 
 
 
 
219
  }
220
+
221
  }
222
 
223
+ return $styles;
224
 
225
  }
226
 
includes/class-kirki-color.php DELETED
@@ -1,121 +0,0 @@
1
- <?php
2
-
3
- class Kirki_Color {
4
-
5
- /**
6
- * Sanitize hex colors
7
- */
8
- public static function sanitize_hex( $color ) {
9
-
10
- // Remove any spaces and special characters before and after the string
11
- $color = trim( $color. ' \t\n\r\0\x0B' );
12
- // Remove any trailing '#' symbols from the color value
13
- $color = str_replace( '#', '', $color );
14
- // If there are more than 6 characters, only keep the first 6.
15
- $color = ( strlen( $color ) > 6 ) ? substr( $color, 0, 6 ) : $color;
16
-
17
- if ( strlen( $color ) == 6 ) {
18
-
19
- $hex = $color; // If string consists of 6 characters, then this is our color
20
-
21
- } else {
22
-
23
- // String is shorter than 6 characters.
24
- // We will have to do some calculations below to get the actual 6-digit hex value.
25
-
26
- // If the string is longer than 3 characters, only keep the first 3.
27
- $color = ( strlen( $color ) > 3 ) ? substr( $color, 0, 3 ) : $color;
28
-
29
- // If this is a 3-character string, format it to 6 characters.
30
- if ( 3 == strlen( $color ) ) {
31
-
32
- $red = substr( $color, 0, 1 ) . substr( $color, 0, 1 );
33
- $green = substr( $color, 1, 1 ) . substr( $color, 1, 1 );
34
- $blue = substr( $color, 2, 1 ) . substr( $color, 2, 1 );
35
-
36
- $hex = $red . $green . $blue;
37
-
38
- }
39
-
40
- // If this is shorter than 3 characters, do some voodoo.
41
- if ( 2 == strlen( $color ) ) {
42
- $hex = $color . $color . $color;
43
- } else if ( 1 == strlen( $color ) ) {
44
- $hex = $color . $color . $color . $color . $color . $color;
45
- }
46
-
47
- }
48
-
49
- return '#' . $hex;
50
-
51
- }
52
-
53
- /*
54
- * Gets the rgb value of the $hex color.
55
- * Returns an array.
56
- */
57
- public static function get_rgb( $hex, $implode = false ) {
58
-
59
- // Remove any trailing '#' symbols from the color value
60
- $hex = str_replace( '#', '', self::sanitize_hex( $hex ) );
61
-
62
- $red = hexdec( substr( $hex, 0, 2 ) );
63
- $green = hexdec( substr( $hex, 2, 2 ) );
64
- $blue = hexdec( substr( $hex, 4, 2 ) );
65
-
66
- // rgb is an array
67
- $rgb = array( $red, $green, $blue );
68
- if ( $implode ) {
69
- return implode( ',', $rgb );
70
- } else {
71
- return $rgb;
72
- }
73
-
74
- }
75
-
76
- /*
77
- * Gets the rgba value of a color.
78
- */
79
- public static function get_rgba( $hex = '#fff', $opacity = 100 ) {
80
-
81
- $hex = self::sanitize_hex( $hex );
82
-
83
- if ( 100 <= $opacity ) { // Set the opacity to 100 if a larger value has been entered by mistake.
84
- $opacity = 100;
85
- } elseif ( 0 > $opacity ) { // If a negative value is used, then set to 0.
86
- $opacity = 0;
87
- } elseif ( $opacity < 1 && $opacity != 0 ) { // If an opacity value is entered in a decimal form (for example 0.25), then multiply by 100.
88
- $opacity = ( $opacity * 100 );
89
- } else { // Normal value has been entered
90
- $opacity = $opacity;
91
- }
92
-
93
- // Divide the opacity by 100 to end-up with a CSS value for the opacity
94
- $opacity = ( $opacity / 100 );
95
-
96
- $color = 'rgba(' . self::get_rgb( $hex, true ) . ', ' . $opacity . ')';
97
-
98
- return $color;
99
-
100
- }
101
-
102
- /*
103
- * Gets the brightness of the $hex color.
104
- * Returns a value between 0 and 255
105
- */
106
- public static function get_brightness( $hex ) {
107
-
108
- $hex = self::sanitize_hex( $hex );
109
- // returns brightness value from 0 to 255
110
- // strip off any leading #
111
- $hex = str_replace( '#', '', $hex );
112
-
113
- $red = hexdec( substr( $hex, 0, 2 ) );
114
- $green = hexdec( substr( $hex, 2, 2 ) );
115
- $blue = hexdec( substr( $hex, 4, 2 ) );
116
-
117
- return ( ( $red * 299 ) + ( $green * 587 ) + ( $blue * 114 ) ) / 1000;
118
-
119
- }
120
-
121
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-kirki-scripts.php DELETED
@@ -1,393 +0,0 @@
1
- <?php
2
-
3
- class Kirki_Scripts {
4
-
5
- private static $instance;
6
-
7
- protected function __construct() {
8
-
9
- $config = apply_filters( 'kirki/config', array() );
10
- $styles_priority = ( isset( $options['styles_priority'] ) ) ? $styles_priority : 10;
11
-
12
- add_action( 'customize_controls_print_styles', array( $this, 'styles' ) );
13
- add_action( 'customize_controls_print_styles', array( $this, 'googlefonts' ) );
14
- add_action( 'customize_controls_print_scripts', array( $this, 'custom_js' ), 999 );
15
- add_action( 'customize_controls_print_footer_scripts', array( $this, 'help_bubble_script' ), 999 );
16
- add_action( 'customize_controls_print_styles', array( $this, 'custom_css' ), 999 );
17
- // TODO: This is not perfect under ANY circumstances.
18
- add_action( 'customize_controls_print_footer_scripts', array( $this, 'postmessage' ), 21 );
19
-
20
- add_action( 'wp_enqueue_scripts', array( $this, 'frontend_styles' ), $styles_priority );
21
- add_action( 'customize_controls_enqueue_scripts', array( $this, 'scripts' ) );
22
-
23
- }
24
-
25
- public static function get_instance() {
26
- if ( null == self::$instance ) {
27
- self::$instance = new self;
28
- }
29
-
30
- return self::$instance;
31
- }
32
-
33
- /**
34
- * Enqueue the stylesheets required.
35
- */
36
- function styles() {
37
-
38
- global $kirki;
39
- $options = $kirki->get_config();
40
-
41
- $kirki_url = isset( $options['url_path'] ) ? $options['url_path'] : KIRKI_URL;
42
-
43
- wp_enqueue_style( 'kirki-customizer-css', $kirki_url . 'assets/css/customizer.css', NULL, '0.5' );
44
- wp_enqueue_style( 'hint-css', $kirki_url . 'assets/css/hint.css', NULL, '1.3.3' );
45
- wp_enqueue_style( 'kirki-customizer-ui', $kirki_url . 'assets/css/jquery-ui-1.10.0.custom.css', NULL, '1.10.0' );
46
-
47
- }
48
-
49
-
50
- /**
51
- * Enqueue the scripts required.
52
- */
53
- function scripts() {
54
-
55
- global $kirki;
56
- $options = $kirki->get_config();
57
-
58
- $kirki_url = isset( $options['url_path'] ) ? $options['url_path'] : KIRKI_URL;
59
-
60
- wp_enqueue_script( 'kirki_customizer_js', $kirki_url . 'assets/js/customizer.js', array( 'jquery', 'customize-controls' ) );
61
- wp_enqueue_script( 'serialize-js', $kirki_url . 'assets/js/serialize.js');
62
- wp_enqueue_script( 'jquery-ui-core' );
63
- wp_enqueue_script( 'jquery-ui-tooltip' );
64
-
65
- }
66
-
67
- /**
68
- * Add a dummy, empty stylesheet if no stylesheet_id has been defined and we need one.
69
- */
70
- function frontend_styles() {
71
-
72
- global $kirki;
73
- $config = $kirki->get_config();
74
- $controls = $kirki->get_controls();
75
-
76
- $kirki_url = isset( $options['url_path'] ) ? $options['url_path'] : KIRKI_URL;
77
-
78
- foreach( $controls as $control ) {
79
- if ( isset( $control['output'] ) ) {
80
- $uses_output = true;
81
- }
82
- }
83
-
84
- if ( isset( $uses_output ) && (! isset( $config['stylesheet_id'] ) || $config['stylesheet_id'] === 'kirki-styles' ) ) {
85
- wp_enqueue_style( 'kirki-styles', $kirki_url . 'assets/css/kirki-styles.css', NULL, NULL );
86
- }
87
-
88
- }
89
-
90
- /**
91
- * Use the Roboto font on the customizer.
92
- */
93
- function googlefonts() { ?>
94
- <link href='//fonts.googleapis.com/css?family=Roboto:100,400|Roboto+Slab:700,400&subset=latin,cyrillic-ext,greek,vietnamese,latin-ext,cyrillic' rel='stylesheet' type='text/css'>
95
- <?php
96
- }
97
-
98
-
99
- /**
100
- * If we've specified an image to be used as logo, replace the default theme description with a div that will have our logo as background.
101
- */
102
- function custom_js() {
103
-
104
- $options = apply_filters( 'kirki/config', array() ); ?>
105
-
106
- <?php if ( isset( $options['logo_image'] ) || isset( $options['description'] ) ) : ?>
107
- <script>jQuery(document).ready(function($) { "use strict";
108
- <?php if ( isset( $options['logo_image'] ) ) : ?>
109
- $( 'div#customize-info .preview-notice' ).replaceWith( '<img src="<?php echo $options['logo_image']; ?>">' );
110
- <?php endif; ?>
111
- <?php if ( isset( $options['description'] ) ) : ?>
112
- $( 'div#customize-info .accordion-section-content' ).replaceWith( '<div class="accordion-section-content"><div class="theme-description"><?php echo $options['description']; ?></div></div>' );
113
- <?php endif; ?>
114
- });</script>
115
- <?php endif;
116
-
117
- }
118
-
119
- /**
120
- * Get the admin color theme
121
- */
122
- public static function admin_colors() {
123
-
124
- // Get the active admin theme
125
- global $_wp_admin_css_colors;
126
-
127
- // Get the user's admin colors
128
- $color = get_user_option( 'admin_color' );
129
- // If no theme is active set it to 'fresh'
130
- if ( empty( $color ) || ! isset( $_wp_admin_css_colors[$color] ) ) {
131
- $color = 'fresh';
132
- }
133
-
134
- $color = (array) $_wp_admin_css_colors[$color];
135
-
136
- return $color;
137
-
138
- }
139
-
140
- /**
141
- * Add custom CSS rules to the head, applying our custom styles
142
- */
143
- function custom_css() {
144
-
145
- global $kirki;
146
-
147
- $color = self::admin_colors();
148
- $options = $kirki->get_config();
149
-
150
- $color_font = false;
151
- $color_active = isset( $options['color_active'] ) ? $options['color_active'] : $color['colors'][3];
152
- $color_light = isset( $options['color_light'] ) ? $options['color_light'] : $color['colors'][2];
153
- $color_select = isset( $options['color_select'] ) ? $options['color_select'] : $color['colors'][3];
154
- $color_accent = isset( $options['color_accent'] ) ? $options['color_accent'] : $color['icon_colors']['focus'];
155
- $color_back = isset( $options['color_back'] ) ? $options['color_back'] : false;
156
-
157
- if ( $color_back ) {
158
- $color_font = ( 170 > kirki_get_brightness( $color_back ) ) ? '#f2f2f2' : '#222';
159
- }
160
-
161
- ?>
162
-
163
- <style>
164
- .wp-core-ui .button.tooltip {
165
- background: <?php echo $color_select; ?>;
166
- color: #fff;
167
- }
168
-
169
- .image.ui-buttonset label.ui-button.ui-state-active {
170
- background: <?php echo $color_select; ?>;
171
- }
172
-
173
- <?php if ( $color_back ) : ?>
174
-
175
- .wp-full-overlay-sidebar,
176
- #customize-info .accordion-section-title,
177
- #customize-info .accordion-section-title:hover,
178
- #customize-theme-controls .accordion-section-title,
179
- #customize-theme-controls .control-section .accordion-section-title {
180
- background: <?php echo $color_back; ?>;
181
- <?php if ( $color_font ) : ?>color: <?php echo $color_font; ?>;<?php endif; ?>
182
- }
183
- <?php if ( $color_font ) : ?>
184
- #customize-theme-controls .control-section .accordion-section-title:focus,
185
- #customize-theme-controls .control-section .accordion-section-title:hover,
186
- #customize-theme-controls .control-section.open .accordion-section-title,
187
- #customize-theme-controls .control-section:hover .accordion-section-title {
188
- color: <?php echo $color_font; ?>;
189
- }
190
- <?php endif; ?>
191
-
192
- <?php if ( 170 > Kirki_Color::get_brightness( $color_back ) ) : ?>
193
- .control-section.control-panel>.accordion-section-title:after {
194
- background: #111;
195
- color: #f5f5f5;
196
- border-left: 1px solid #000;
197
- }
198
- #customize-theme-controls .control-section.control-panel>h3.accordion-section-title:focus:after,
199
- #customize-theme-controls .control-section.control-panel>h3.accordion-section-title:hover:after {
200
- background: #222;
201
- color: #fff;
202
- border: 1px solid #222;
203
- }
204
-
205
- .control-panel-back,
206
- .customize-controls-close {
207
- background: #111 !important;
208
- border-right: 1px solid #111 !important;
209
- }
210
- .control-panel-back:before,
211
- .control-panel-back:after,
212
- .customize-controls-close:before,
213
- .customize-controls-close:after {
214
- color: #f2f2f2 !important;
215
- }
216
- .control-panel-back:focus:before,
217
- .control-panel-back:hover:before,
218
- .customize-controls-close:focus:before,
219
- .customize-controls-close:hover:before {
220
- background: #000;
221
- color: #fff;
222
- }
223
- #customize-header-actions {
224
- border-bottom: 1px solid #111;
225
- }
226
- <?php endif; ?>
227
-
228
- <?php endif; ?>
229
-
230
- .ui-state-default,
231
- .ui-widget-content .ui-state-default,
232
- .ui-widget-header .ui-state-default,
233
- .ui-state-active.ui-button.ui-widget.ui-state-default {
234
- background-color: <?php echo $color_active; ?>;
235
- border: 1px solid rgba(0,0,0,.05);
236
- }
237
-
238
- .ui-button.ui-widget.ui-state-default {
239
- background-color: #f2f2f2;
240
- }
241
-
242
- #customize-theme-controls .accordion-section-title {
243
- border-bottom: 1px solid rgba(0,0,0,.1);
244
- }
245
-
246
- #customize-theme-controls .control-section .accordion-section-title:focus,
247
- #customize-theme-controls .control-section .accordion-section-title:hover,
248
- #customize-theme-controls .control-section.open .accordion-section-title,
249
- #customize-theme-controls .control-section:hover .accordion-section-title {
250
- background: <?php echo $color_active; ?>;
251
- }
252
- ul.ui-sortable li.kirki-sortable-item {
253
- border: 1px solid <?php echo $color_active; ?>;
254
- }
255
-
256
- .Switch span.On,
257
- ul.ui-sortable li.kirki-sortable-item .visibility {
258
- color: <?php echo $color_active; ?>;
259
- }
260
-
261
- #customize-theme-controls .control-section.control-panel.current-panel:hover .accordion-section-title{
262
- background: none;
263
- }
264
-
265
- .Switch.Round.On .Toggle,
266
- #customize-theme-controls .control-section.control-panel.current-panel .accordion-section-title:hover{
267
- background: <?php echo $color_active; ?>;
268
- }
269
-
270
- .wp-core-ui .button-primary {
271
- background: <?php echo $color_active; ?>;
272
- }
273
-
274
- .wp-core-ui .button-primary.focus,
275
- .wp-core-ui .button-primary.hover,
276
- .wp-core-ui .button-primary:focus,
277
- .wp-core-ui .button-primary:hover {
278
- background: <?php echo $color_select; ?>;
279
- }
280
-
281
- .wp-core-ui .button-primary-disabled,
282
- .wp-core-ui .button-primary.disabled,
283
- .wp-core-ui .button-primary:disabled,
284
- .wp-core-ui .button-primary[disabled] {
285
- background: <?php echo $color_light; ?> !important;
286
- color: <?php echo $color_select; ?> !important;
287
- }
288
-
289
- .customize-control input[type="text"]:focus {
290
- border-color: <?php echo $color_active; ?>;
291
- }
292
-
293
- .wp-core-ui.wp-customizer .button,
294
- .press-this.wp-core-ui .button,
295
- .press-this input#publish,
296
- .press-this input#save-post,
297
- .press-this a.preview {
298
- background-color: <?php echo $color_accent; ?>;
299
- }
300
-
301
- .wp-core-ui.wp-customizer .button:hover,
302
- .press-this.wp-core-ui .button:hover,
303
- .press-this input#publish:hover,
304
- .press-this input#save-post:hover,
305
- .press-this a.preview:hover {
306
- background-color: <?php echo $color_accent; ?>;
307
- }
308
- </style>
309
- <?php
310
- }
311
-
312
- /**
313
- * Add the help bubble
314
- */
315
- function help_bubble_script() {
316
-
317
- global $kirki;
318
- $controls = $kirki->get_controls();
319
-
320
- $scripts = array();
321
- $script = '';
322
-
323
- foreach ( $controls as $control ) {
324
-
325
- $control = Kirki_Controls::control_clean( $control );
326
-
327
- if ( ! empty( $control['help'] ) ) {
328
- $bubble_content = $control['help'];
329
- $content = "<a href='#' class='button tooltip hint--left' data-hint='" . strip_tags( esc_html( $bubble_content ) ) . "'>?</a>";
330
- $scripts[] = '$( "' . $content . '" ).appendTo( "#customize-control-' . $control['settings'] . '" );';
331
- }
332
-
333
- }
334
-
335
- // No need to echo anything if the script is empty
336
- if ( empty( $scripts ) ) {
337
- return;
338
- }
339
-
340
- // Make sure we don't add any duplicates
341
- $scripts = array_unique( $scripts );
342
- // Convert array to string
343
- $script = implode( '', $scripts );
344
-
345
- echo '<script type="text/javascript">jQuery(document).ready(function( $ ) {' . $script . '});</script>';
346
- }
347
-
348
- /**
349
- * Try to automatically generate the script necessary for postMessage to work.
350
- * Something like this will have to be added to the control arguments:
351
- *
352
-
353
- 'transport' => 'postMessage',
354
- 'js_vars' => array(
355
- 'element' => 'body',
356
- 'type' => 'css',
357
- 'property' => 'color',
358
- ),
359
- *
360
- */
361
- function postmessage() {
362
-
363
- global $kirki;
364
- $controls = $kirki->get_controls();
365
-
366
- $script = '';
367
-
368
- foreach ( $controls as $control ) {
369
-
370
- $control = Kirki_Controls::control_clean( $control );
371
-
372
- if ( isset( $control['transport'] ) && isset( $control['js_vars'] ) && 'postMessage' == $control['transport'] ) {
373
-
374
- $script .= '<script type="text/javascript">jQuery(document).ready(function( $ ) {';
375
- $script .= 'wp.customize("' . $control['settings'] . '",function( value ) {';
376
-
377
- if ( isset( $control['js_vars']['type'] ) && 'css' == $control['js_vars']['type'] ) {
378
- $script .= 'value.bind(function(to) {';
379
- $script .= '$("' . $control['js_vars']['element'] . '").css("' . $control['js_vars']['property'] . '", to ? to : "" );';
380
- $script .= '});';
381
- }
382
-
383
- $script .= '});});</script>';
384
-
385
- }
386
-
387
- }
388
-
389
- echo $script;
390
-
391
- }
392
-
393
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-kirki-settings.php DELETED
@@ -1,245 +0,0 @@
1
- <?php
2
-
3
-
4
- class Kirki_Settings extends Kirki {
5
-
6
- /**
7
- * Build a single setting
8
- */
9
- function add_setting( $wp_customize, $control ) {
10
-
11
- $control = Kirki_Controls::control_clean( $control );
12
-
13
- if ( 'background' == $control['type'] ) {
14
-
15
- if ( isset( $control['default']['color'] ) ) {
16
- $wp_customize->add_setting( $control['settings'] . '_color', array(
17
- 'default' => $control['default']['color'],
18
- 'type' => 'theme_mod',
19
- 'capability' => 'edit_theme_options',
20
- 'transport' => isset( $control['transport'] ) ? $control['transport'] : 'refresh',
21
- 'sanitize_callback' => isset( $control['sanitize_callback'] ) ? $control['sanitize_callback'] : 'sanitize_hex_color'
22
- ) );
23
- }
24
-
25
- if ( isset( $control['default']['image'] ) ) {
26
- $wp_customize->add_setting( $control['settings'] . '_image', array(
27
- 'default' => $control['default']['image'],
28
- 'type' => 'theme_mod',
29
- 'capability' => 'edit_theme_options',
30
- 'transport' => isset( $control['transport'] ) ? $control['transport'] : 'refresh',
31
- 'sanitize_callback' => isset( $control['sanitize_callback'] ) ? $control['sanitize_callback'] : 'esc_url_raw'
32
- ) );
33
- }
34
-
35
- if ( isset( $control['default']['repeat'] ) ) {
36
- $wp_customize->add_setting( $control['settings'] . '_repeat', array(
37
- 'default' => $control['default']['repeat'],
38
- 'type' => 'theme_mod',
39
- 'capability' => 'edit_theme_options',
40
- 'transport' => isset( $control['transport'] ) ? $control['transport'] : 'refresh',
41
- 'sanitize_callback' => isset( $control['sanitize_callback'] ) ? $control['sanitize_callback'] : array( $this, 'sanitize_bg_repeat' ),
42
- ) );
43
- }
44
-
45
- if ( isset( $control['default']['size'] ) ) {
46
- $wp_customize->add_setting( $control['settings'] . '_size', array(
47
- 'default' => $control['default']['size'],
48
- 'type' => 'theme_mod',
49
- 'capability' => 'edit_theme_options',
50
- 'transport' => isset( $control['transport'] ) ? $control['transport'] : 'refresh',
51
- 'sanitize_callback' => isset( $control['sanitize_callback'] ) ? $control['sanitize_callback'] : array( $this, 'sanitize_bg_size' ),
52
- ) );
53
- }
54
-
55
- if ( isset( $control['default']['attach'] ) ) {
56
- $wp_customize->add_setting( $control['settings'] . '_attach', array(
57
- 'default' => $control['default']['attach'],
58
- 'type' => 'theme_mod',
59
- 'capability' => 'edit_theme_options',
60
- 'transport' => isset( $control['transport'] ) ? $control['transport'] : 'refresh',
61
- 'sanitize_callback' => isset( $control['sanitize_callback'] ) ? $control['sanitize_callback'] : array( $this, 'sanitize_bg_attach' ),
62
- ) );
63
- }
64
-
65
- if ( isset( $control['default']['position'] ) ) {
66
- $wp_customize->add_setting( $control['settings'] . '_position', array(
67
- 'default' => $control['default']['position'],
68
- 'type' => 'theme_mod',
69
- 'capability' => 'edit_theme_options',
70
- 'transport' => isset( $control['transport'] ) ? $control['transport'] : 'refresh',
71
- 'sanitize_callback' => isset( $control['sanitize_callback'] ) ? $control['sanitize_callback'] : array( $this, 'sanitize_bg_position' ),
72
- ) );
73
- }
74
-
75
- if ( isset( $control['default']['opacity'] ) && $control['default']['opacity'] ) {
76
- $wp_customize->add_setting( $control['settings'] . '_opacity', array(
77
- 'default' => $control['default']['opacity'],
78
- 'type' => 'theme_mod',
79
- 'capability' => 'edit_theme_options',
80
- 'transport' => isset( $control['transport'] ) ? $control['transport'] : 'refresh',
81
- 'sanitize_callback' => isset( $control['sanitize_callback'] ) ? $control['sanitize_callback'] : 'absint'
82
- ) );
83
-
84
- }
85
- } else {
86
-
87
- if ( 'checkbox' == $control['type'] ) {
88
- $sanitize_callback = array( $this, 'sanitize_checkbox' );
89
- } elseif ( 'color' == $control['type'] ) {
90
- $sanitize_callback = 'sanitize_hex_color';
91
- } elseif ( 'image' == $control['type'] ) {
92
- $sanitize_callback = 'esc_url_raw';
93
- } elseif ( 'radio' == $control['type'] ) {
94
- // TODO: Find a way to handle these
95
- $sanitize_callback = array( $this, 'unfiltered' );
96
- } elseif ( 'select' == $control['type'] ) {
97
- // TODO: Find a way to handle these
98
- $sanitize_callback = array( $this, 'unfiltered' );
99
- } elseif ( 'slider' == $control['type'] ) {
100
- $sanitize_callback = array( $this, 'sanitize_number' );
101
- } elseif ( 'text' == $control['type'] ) {
102
- $sanitize_callback = 'esc_textarea';
103
- } elseif ( 'textarea' == $control['type'] ) {
104
- $sanitize_callback = 'esc_textarea';
105
- } elseif ( 'upload' == $control['type'] ) {
106
- $sanitize_callback = 'esc_url_raw';
107
- } elseif ( 'number' == $control['type'] ) {
108
- $sanitize_callback = 'intval';
109
- } elseif ( 'multicheck' == $control['type'] ) {
110
- $sanitize_callback = 'esc_attr';
111
- } elseif ( 'group_title' == $control['type'] ) {
112
- $sanitize_callback = 'esc_attr';
113
- } else {
114
- $sanitize_callback = array( $this, 'unfiltered' );
115
- }
116
-
117
- // Add settings
118
- $wp_customize->add_setting( $control['settings'], array(
119
- 'default' => isset( $control['default'] ) ? $control['default'] : '',
120
- 'type' => 'theme_mod',
121
- 'capability' => 'edit_theme_options',
122
- 'transport' => isset( $control['transport'] ) ? $control['transport'] : 'refresh',
123
- 'sanitize_callback' => isset( $control['sanitize_callback'] ) ? $control['sanitize_callback'] : $sanitize_callback,
124
- ) );
125
-
126
- }
127
-
128
- }
129
-
130
- /**
131
- * Sanitize checkbox options
132
- *
133
- * @since 0.5
134
- */
135
- public function sanitize_checkbox( $value ) {
136
- return ( 'on' != $value ) ? false : $value;
137
- }
138
-
139
- /**
140
- * Sanitize number options
141
- *
142
- * @since 0.5
143
- */
144
- public function sanitize_number( $value ) {
145
- return ( is_int( $value ) || is_float( $value ) ) ? $value : intval( $value );
146
- }
147
-
148
- /**
149
- * Sanitize a value from a list of allowed values.
150
- *
151
- * @since 0.5
152
- *
153
- * @param mixed $value The value to sanitize.
154
- * @param mixed $setting The setting for which the sanitizing is occurring.
155
- * @return mixed The sanitized value.
156
- */
157
- function sanitize_choice( $value, $choices, $default ) {
158
-
159
- $allowed_choices = array_keys( $choices );
160
- return ( ! in_array( $value, $allowed_choices ) ) ? $default : $value;
161
-
162
- }
163
-
164
- /**
165
- * Sanitize background repeat values
166
- *
167
- * @since 0.5
168
- */
169
- function sanitize_bg_repeat( $value ) {
170
- $valid = array(
171
- 'no-repeat' => __( 'No Repeat', 'kirki' ),
172
- 'repeat' => __( 'Repeat All', 'kirki' ),
173
- 'repeat-x' => __( 'Repeat Horizontally', 'kirki' ),
174
- 'repeat-y' => __( 'Repeat Vertically', 'kirki' ),
175
- 'inherit' => __( 'Inherit', 'kirki' )
176
- );
177
-
178
- return ( array_key_exists( $value, $valid ) ) ? $value : 'inherit';
179
-
180
- }
181
-
182
- /**
183
- * Sanitize background size values
184
- *
185
- * @since 0.5
186
- */
187
- function sanitize_bg_size( $value ) {
188
- $valid = array(
189
- 'inherit' => __( 'Inherit', 'kirki' ),
190
- 'cover' => __( 'Cover', 'kirki' ),
191
- 'contain' => __( 'Contain', 'kirki' ),
192
- );
193
-
194
- return ( array_key_exists( $value, $valid ) ) ? $value : 'inherit';
195
-
196
- }
197
-
198
- /**
199
- * Sanitize background attachment values
200
- *
201
- * @since 0.5
202
- */
203
- function sanitize_bg_attach( $value ) {
204
- $valid = array(
205
- 'inherit' => __( 'Inherit', 'kirki' ),
206
- 'fixed' => __( 'Fixed', 'kirki' ),
207
- 'scroll' => __( 'Scroll', 'kirki' ),
208
- );
209
-
210
- return ( array_key_exists( $value, $valid ) ) ? $value : 'inherit';
211
-
212
- }
213
-
214
- /**
215
- * Sanitize background position values
216
- *
217
- * @since 0.5
218
- */
219
- function sanitize_bg_position( $value ) {
220
- $valid = array(
221
- 'left-top' => __( 'Left Top', 'kirki' ),
222
- 'left-center' => __( 'Left Center', 'kirki' ),
223
- 'left-bottom' => __( 'Left Bottom', 'kirki' ),
224
- 'right-top' => __( 'Right Top', 'kirki' ),
225
- 'right-center' => __( 'Right Center', 'kirki' ),
226
- 'right-bottom' => __( 'Right Bottom', 'kirki' ),
227
- 'center-top' => __( 'Center Top', 'kirki' ),
228
- 'center-center' => __( 'Center Center', 'kirki' ),
229
- 'center-bottom' => __( 'Center Bottom', 'kirki' ),
230
- );
231
-
232
- return ( array_key_exists( $value, $valid ) ) ? $value : 'center-center';
233
-
234
- }
235
-
236
- /**
237
- * DOES NOT SANITIZE ANYTHING.
238
- *
239
- * @since 0.5
240
- */
241
- function unfiltered( $value ) {
242
- return $value;
243
- }
244
-
245
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/controls/class-kirki-customize-group-title-control.php DELETED
@@ -1,19 +0,0 @@
1
- <?php
2
-
3
- class Kirki_Customize_Group_Title_Control extends WP_Customize_Control {
4
-
5
- public $type = 'group_title';
6
-
7
- public function render_content() { ?>
8
-
9
- <label class="customizer-separator">
10
- <span class="customize-control-title">
11
- <?php echo esc_html( $this->label ); ?>
12
- <?php if ( ! empty( $this->description ) ) : ?>
13
- <span class="description customize-control-description"><?php echo $this->description; ?></span>
14
- <?php endif; ?>
15
- </span>
16
- </label>
17
- <?php
18
- }
19
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/controls/class-kirki-customize-number-control.php DELETED
@@ -1,23 +0,0 @@
1
- <?php
2
-
3
- class Kirki_Customize_Number_Control extends WP_Customize_Control {
4
-
5
- public $type = 'number';
6
-
7
- public function render_content() { ?>
8
-
9
- <label class="customizer-text">
10
- <span class="customize-control-title">
11
- <?php echo esc_html( $this->label ); ?>
12
- <?php if ( ! empty( $this->description ) ) : ?>
13
- <span class="description customize-control-description"><?php echo $this->description; ?></span>
14
- <?php endif; ?>
15
- </span>
16
- <input type="number" <?php $this->link(); ?> value="<?php echo intval( $this->value() ); ?>"/>
17
- <?php if ( isset( $this->description ) && '' != $this->description ) { ?>
18
- <a href="#" class="button tooltip hint--left" data-hint="<?php echo strip_tags( esc_html( $this->description ) ); ?>">?</a>
19
- <?php } ?>
20
- </label>
21
- <?php
22
- }
23
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/deprecated.php DELETED
@@ -1,21 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * This file contains all the deprecated functions
5
- */
6
-
7
- function kirki_sanitize_hex( $color ) {
8
- Kirki_Color::sanitize_hex( $color );
9
- }
10
-
11
- function kirki_get_rgb( $hex, $implode = false ) {
12
- Kirki_Color::get_rgb( $hex, $implode );
13
- }
14
-
15
- function kirki_get_rgba( $hex = '#fff', $opacity = 100 ) {
16
- Kirki_Color::get_rgba( $hex, $opacity );
17
- }
18
-
19
- function kirki_get_brightness( $hex ) {
20
- Kirki_Color::get_brightness( $hex );
21
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/required.php DELETED
@@ -1,57 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Add the required script.
5
- */
6
- function kirki_required_script() {
7
-
8
- $controls = apply_filters( 'kirki/controls', array() );
9
-
10
- if ( isset( $controls ) ) {
11
-
12
- foreach ( $controls as $control ) {
13
-
14
- $control = Kirki_Controls::control_clean( $control );
15
-
16
- if ( isset( $control['required'] ) && ! is_null( $control['required'] && is_array( $control['required'] ) ) ) {
17
-
18
- foreach ( $control['required'] as $id => $value ) : ?>
19
-
20
- <script>
21
- jQuery(document).ready(function($) {
22
- <?php if ( isset( $id ) && isset( $value ) ) : ?>
23
- <?php if ( $value == get_theme_mod( $id ) ) : ?>
24
- $( '[id="customize-control-<?php echo $control['settings']; ?>"]' ).fadeIn(300);
25
- <?php else : ?>
26
- $( '[id="customize-control-<?php echo $control['settings']; ?>"]' ).fadeOut(300);
27
- <?php endif; ?>
28
- <?php endif; ?>
29
-
30
- $( "#input_<?php echo $id; ?> input" ).each(function(){
31
- $(this).click(function(){
32
- if ( $(this).val() == "<?php echo $value; ?>" ) {
33
- $( '[id="customize-control-<?php echo $control['settings']; ?>"]' ).fadeIn(300);
34
- } else {
35
- $( '[id="customize-control-<?php echo $control['settings']; ?>"]' ).fadeOut(300);
36
- }
37
- });
38
- if ( $(this).val() == "<?php echo $value; ?>" ) {
39
- $( '[id="customize-control-<?php echo $control['settings']; ?>"]' ).fadeIn(300);
40
- } else {
41
- $( '[id="customize-control-<?php echo $control['settings']; ?>"]' ).fadeOut(300);
42
- }
43
- });
44
- });
45
- </script>
46
- <?php
47
-
48
- endforeach;
49
-
50
- }
51
-
52
- }
53
-
54
- }
55
-
56
- }
57
- add_action( 'customize_controls_print_footer_scripts', 'kirki_required_script' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
kirki.php CHANGED
@@ -5,230 +5,44 @@ Plugin URI: http://kirki.org
5
  Description: An options framework using and extending the WordPress Customizer
6
  Author: Aristeides Stathopoulos
7
  Author URI: http://press.codes
8
- Version: 0.7.1
 
9
  */
10
 
11
- // Load Kirki_Fonts before everything else
12
- include_once( dirname( __FILE__ ) . '/includes/class-kirki-fonts.php' );
13
-
14
- /**
15
- * The main Kirki class
16
- */
17
- if ( ! class_exists( 'Kirki' ) ) :
18
- class Kirki {
19
-
20
- public $version = '0.7.1';
21
-
22
- public $scripts;
23
- public $styles;
24
- public $controls;
25
-
26
- private static $instance;
27
-
28
- protected function __construct() {
29
-
30
- if ( ! defined( 'KIRKI_PATH' ) ) {
31
- define( 'KIRKI_PATH', dirname( __FILE__ ) );
32
- }
33
- if ( ! defined( 'KIRKI_URL' ) ) {
34
- define( 'KIRKI_URL', plugin_dir_url( __FILE__ ) );
35
- }
36
-
37
- $options = $this->get_config();
38
-
39
- include_once( dirname( __FILE__ ) . '/includes/required.php' );
40
- include_once( dirname( __FILE__ ) . '/includes/class-kirki-style.php' );
41
- include_once( dirname( __FILE__ ) . '/includes/class-kirki-scripts.php' );
42
- include_once( dirname( __FILE__ ) . '/includes/class-kirki-fonts-script.php' );
43
- include_once( dirname( __FILE__ ) . '/includes/class-kirki-color.php' );
44
- include_once( dirname( __FILE__ ) . '/includes/class-kirki-settings.php' );
45
- include_once( dirname( __FILE__ ) . '/includes/class-kirki-controls.php' );
46
- include_once( dirname( __FILE__ ) . '/includes/deprecated.php' );
47
-
48
- $this->scripts = Kirki_Scripts::get_instance();
49
- $this->styles = new Kirki_Style();
50
- $this->controls = new Kirki_Controls();
51
-
52
- add_action( 'customize_register', array( $this, 'include_customizer_controls' ), 1 );
53
- add_action( 'customize_register', array( $this, 'customizer_builder' ), 99 );
54
- add_action( 'wp', array( $this, 'update' ) );
55
-
56
- }
57
-
58
- public static function get_instance() {
59
- if ( null == self::$instance ) {
60
- self::$instance = new self;
61
- }
62
-
63
- return self::$instance;
64
- }
65
-
66
- /**
67
- * Include the necessary files for custom controls.
68
- * Default WP Controls are not included here because they are already being loaded from WP Core.
69
- */
70
- function include_customizer_controls() {
71
-
72
- $controls = $this->get_controls();
73
- foreach ( $controls as $control ) {
74
- if ( 'group_title' == $control['type'] ) {
75
- include_once( KIRKI_PATH . '/includes/controls/class-kirki-customize-group-title-control.php' );
76
- } elseif ( 'multicheck' == $control['type'] ) {
77
- include_once( KIRKI_PATH . '/includes/controls/class-kirki-customize-multicheck-control.php' );
78
- } elseif ( 'number' == $control['type'] ) {
79
- include_once( KIRKI_PATH . '/includes/controls/class-kirki-customize-number-control.php' );
80
- } elseif ( 'radio-buttonset' == $control['type'] || ( 'radio' == $control['type'] && isset( $control['mode'] ) && 'buttonset' == $control['mode'] ) ) {
81
- include_once( KIRKI_PATH . '/includes/controls/class-kirki-customize-radio-buttonset-control.php' );
82
- } elseif ( 'radio-image' == $control['type'] || ( 'radio' == $control['type'] && isset( $control['mode'] ) && 'image' == $control['mode'] ) ) {
83
- include_once( KIRKI_PATH . '/includes/controls/class-kirki-customize-radio-image-control.php' );
84
- } elseif ( 'slider' == $control['type'] ) {
85
- include_once( KIRKI_PATH . '/includes/controls/class-kirki-customize-slider-control.php' );
86
- } elseif ( 'sortable' == $control['type'] ) {
87
- include_once( KIRKI_PATH . '/includes/controls/class-kirki-customize-sortable-control.php' );
88
- } elseif ( 'switch' == $control['type'] || ( 'checkbox' == $control['type'] && isset( $control['mode'] ) && 'switch' == $control['mode'] ) ) {
89
- include_once( KIRKI_PATH . '/includes/controls/class-kirki-customize-switch-control.php' );
90
- } elseif ( 'toggle' == $control['type'] || ( 'checkbox' == $control['type'] && isset( $control['mode'] ) && 'toggle' == $control['mode'] ) ) {
91
- include_once( KIRKI_PATH . '/includes/controls/class-kirki-customize-toggle-control.php' );
92
- } elseif ( 'background' == $control['type'] ) {
93
- include_once( KIRKI_PATH . '/includes/controls/class-kirki-customize-slider-control.php' );
94
- }
95
- }
96
-
97
- }
98
-
99
- /**
100
- * Build the controls
101
- */
102
- function customizer_builder( $wp_customize ) {
103
-
104
- $controls = $this->get_controls();
105
- $kirki_settings = new Kirki_Settings();
106
- $kirki_controls = $this->controls;
107
-
108
- // Early exit if controls are not set or if they're empty
109
- if ( ! isset( $controls ) || empty( $controls ) ) {
110
- return;
111
- }
112
- foreach ( $controls as $control ) {
113
- $kirki_settings->add_setting( $wp_customize, $control );
114
- $kirki_controls->add_control( $wp_customize, $control );
115
- }
116
-
117
- }
118
-
119
- function get_config() {
120
 
121
- $config = apply_filters( 'kirki/config', array() );
 
122
 
123
- $controls = $this->get_controls();
124
- foreach( $controls as $control ) {
125
- if ( isset( $control['output'] ) ) {
126
- $uses_output = true;
127
- }
128
- }
129
 
130
- if ( isset( $uses_output ) && ! isset( $config['stylesheet_id'] ) ) {
131
- $config['stylesheet_id'] = 'kirki-styles';
132
- }
133
- return $config;
 
 
 
 
134
 
 
 
 
135
  }
136
-
137
- function get_controls() {
138
-
139
- $controls = apply_filters( 'kirki/controls', array() );
140
- return $controls;
141
-
142
  }
143
 
144
- function update() {
145
-
146
- $version = get_option( 'kirki_version' );
147
- $version = ( ! $version ) ? '0' : $version;
148
- // < 0.6.1 -> 0.6.2
149
- if ( ! get_option( 'kirki_version' ) ) {
150
- /**
151
- * In versions 0.6.0 & 0.6.1 there was a bug and some fields were saved as ID_opacity istead if ID
152
- * This will fix the wrong settings naming and save new settings.
153
- */
154
- $control_ids = array();
155
- $controls = $this->get_controls();
156
- foreach ( $controls as $control ) {
157
- $control = Kirki_Controls::control_clean( $control );
158
-
159
- if ( 'background' != $control['type'] ) {
160
- $control_ids[] = $control['settings'];
161
- }
162
- }
163
- foreach ( $control_ids as $control_id ) {
164
- if ( get_theme_mod( $control_id . '_opacity' ) && ! get_theme_mod( $control_id ) ) {
165
- update_theme_mod( $control_id, get_theme_mod( $control_id . '_opacity' ) );
166
- }
167
- }
168
-
169
- }
170
-
171
- if ( version_compare( $this->version, $version ) ) {
172
- update_option( 'kirki_version', $this->version );
173
- }
174
-
175
  }
176
 
 
177
  }
178
- endif;
179
-
180
- if ( ! function_exists( 'Kirki' ) ) :
181
- function Kirki() {
182
- return Kirki::get_instance();
183
- }
184
- endif;
185
- // Global for backwards compatibility.
186
- $GLOBALS['kirki'] = Kirki();
187
- global $kirki;
188
-
189
- // TODO: The following is commented out because so far it just doesn't work.
190
- // I can't figure out why, if anyone has any ideas then please do let me know
191
- //
192
- // /**
193
- // * A wrapper function for get_theme_mod.
194
- // *
195
- // * This will be a bit more generic and will future-proof the plugin
196
- // * in case we ever decide to switch to using options instead of theme mods.
197
- // *
198
- // * An additional benefit is that it also gets the default values
199
- // * without the need to manually define them like in get_theme_mod();
200
- // *
201
- // * It's recommended that you add the following to your theme/plugin before using this function:
202
- // *
203
-
204
- // if ( ! function_exists( 'kirki_get_option' ) ) :
205
- // function kirki_get_option( $option ) {
206
- // get_theme_mod( $option, '' );
207
- // }
208
- // endif;
209
-
210
- // *
211
- // * This will NOT get the right value, but at least no fatal errors will occur in case the plugin is not installed.
212
- // */
213
- // function kirki_get_option( $option ) {
214
-
215
- // // Get the array of controls
216
- // $controls = Kirki()->get_controls();
217
-
218
- // foreach ( $controls as $control ) {
219
- // // Sanitize out control array and make sure we're using the right syntax
220
- // $control = Kirki_Controls::control_clean( $control );
221
- // $setting = $control['settings'];
222
- // // Get the theme_mod and pass the default value as well
223
- // if ( $option == $setting ) {
224
- // $value = get_theme_mod( $option, $control['default'] );
225
- // }
226
-
227
- // }
228
-
229
- // // If no value has been set, use get_theme_mod with an empty default.
230
- // $value = ( isset( $value ) ) ? $value : get_theme_mod( $option, '' );
231
-
232
- // return $value;
233
-
234
- // }
5
  Description: An options framework using and extending the WordPress Customizer
6
  Author: Aristeides Stathopoulos
7
  Author URI: http://press.codes
8
+ Version: 0.8.0
9
+ Text Domain: kirki
10
  */
11
 
12
+ if ( ! defined( 'KIRKI_PATH' ) ) {
13
+ define( 'KIRKI_PATH', dirname( __FILE__ ) );
14
+ }
15
+ if ( ! defined( 'KIRKI_URL' ) ) {
16
+ define( 'KIRKI_URL', plugin_dir_url( __FILE__ ) );
17
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
 
19
+ // Include the main kirki class
20
+ include_once( KIRKI_PATH . '/includes/Kirki.php' );
21
 
22
+ // Make sure the class is instanciated
23
+ Kirki::get_instance();
 
 
 
 
24
 
25
+ add_action( 'plugins_loaded', 'kirki_load_textdomain' );
26
+ /**
27
+ * Load plugin textdomain.
28
+ *
29
+ * @since 1.0.0
30
+ */
31
+ function kirki_load_textdomain() {
32
+ $textdomain = kirki_textdomain();
33
 
34
+ // Look for WP_LANG_DIR/{$domain}-{$locale}.mo
35
+ if ( file_exists( WP_LANG_DIR . '/' . $textdomain . '-' . get_locale() . '.mo' ) ) {
36
+ $file = WP_LANG_DIR . '/' . $textdomain . '-' . get_locale() . '.mo';
37
  }
38
+ // Look for KIRKI_PATH/languages/{$domain}-{$locale}.mo
39
+ if ( ! isset( $file ) && file_exists( KIRKI_PATH . '/languages/' . $textdomain . '-' . get_locale() . '.mo' ) ) {
40
+ $file = KIRKI_PATH . '/languages/' . $textdomain . '-' . get_locale() . '.mo';
 
 
 
41
  }
42
 
43
+ if ( isset( $file ) ) {
44
+ load_textdomain( $textdomain, $file );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  }
46
 
47
+ load_plugin_textdomain( $textdomain, false, KIRKI_PATH . '/languages' );
48
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
languages/kirki-en_US.mo ADDED
Binary file
languages/kirki-en_US.po ADDED
@@ -0,0 +1,185 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Kirki Framework\n"
4
+ "POT-Creation-Date: 2015-03-30 01:57+0200\n"
5
+ "PO-Revision-Date: 2015-03-30 01:57+0200\n"
6
+ "Last-Translator: Stathopoulos Aristeides <info@aristeides.com>\n"
7
+ "Language-Team: Stathopoulos Aristeides <info@aristeides.com>\n"
8
+ "Language: en_US\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 1.7.5\n"
13
+ "X-Poedit-Basepath: ..\n"
14
+ "X-Poedit-SourceCharset: UTF-8\n"
15
+ "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
16
+ "esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;"
17
+ "_n_noop:1,2;_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
18
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
19
+ "X-Poedit-SearchPath-0: .\n"
20
+ "X-Poedit-SearchPathExcluded-0: *.js\n"
21
+
22
+ #: includes/Control.php:179
23
+ msgid "Background Color"
24
+ msgstr "Background Color"
25
+
26
+ #: includes/Control.php:192
27
+ msgid "Background Image"
28
+ msgstr "Background Image"
29
+
30
+ #: includes/Control.php:206 includes/Helpers/sanitize.php:45
31
+ msgid "No Repeat"
32
+ msgstr "No Repeat"
33
+
34
+ #: includes/Control.php:207 includes/Helpers/sanitize.php:46
35
+ msgid "Repeat All"
36
+ msgstr "Repeat All"
37
+
38
+ #: includes/Control.php:208 includes/Helpers/sanitize.php:47
39
+ msgid "Repeat Horizontally"
40
+ msgstr "Repeat Horizontally"
41
+
42
+ #: includes/Control.php:209 includes/Helpers/sanitize.php:48
43
+ msgid "Repeat Vertically"
44
+ msgstr "Repeat Vertically"
45
+
46
+ #: includes/Control.php:210 includes/Control.php:227
47
+ #: includes/Control.php:247 includes/Helpers/sanitize.php:49
48
+ #: includes/Helpers/sanitize.php:63 includes/Helpers/sanitize.php:79
49
+ msgid "Inherit"
50
+ msgstr "Inherit"
51
+
52
+ #: includes/Control.php:213
53
+ msgid "Background Repeat"
54
+ msgstr "Background Repeat"
55
+
56
+ #: includes/Control.php:228 includes/Helpers/sanitize.php:64
57
+ msgid "Cover"
58
+ msgstr "Cover"
59
+
60
+ #: includes/Control.php:229 includes/Helpers/sanitize.php:65
61
+ msgid "Contain"
62
+ msgstr "Contain"
63
+
64
+ #: includes/Control.php:233
65
+ msgid "Background Size"
66
+ msgstr "Background Size"
67
+
68
+ #: includes/Control.php:248 includes/Helpers/sanitize.php:80
69
+ msgid "Fixed"
70
+ msgstr "Fixed"
71
+
72
+ #: includes/Control.php:249 includes/Helpers/sanitize.php:81
73
+ msgid "Scroll"
74
+ msgstr "Scroll"
75
+
76
+ #: includes/Control.php:253
77
+ msgid "Background Attachment"
78
+ msgstr "Background Attachment"
79
+
80
+ #: includes/Control.php:267 includes/Helpers/sanitize.php:95
81
+ msgid "Left Top"
82
+ msgstr "Left Top"
83
+
84
+ #: includes/Control.php:268 includes/Helpers/sanitize.php:96
85
+ msgid "Left Center"
86
+ msgstr "Left Center"
87
+
88
+ #: includes/Control.php:269 includes/Helpers/sanitize.php:97
89
+ msgid "Left Bottom"
90
+ msgstr "Left Bottom"
91
+
92
+ #: includes/Control.php:270 includes/Helpers/sanitize.php:98
93
+ msgid "Right Top"
94
+ msgstr "Right Top"
95
+
96
+ #: includes/Control.php:271 includes/Helpers/sanitize.php:99
97
+ msgid "Right Center"
98
+ msgstr "Right Center"
99
+
100
+ #: includes/Control.php:272 includes/Helpers/sanitize.php:100
101
+ msgid "Right Bottom"
102
+ msgstr "Right Bottom"
103
+
104
+ #: includes/Control.php:273 includes/Helpers/sanitize.php:101
105
+ msgid "Center Top"
106
+ msgstr "Center Top"
107
+
108
+ #: includes/Control.php:274 includes/Helpers/sanitize.php:102
109
+ msgid "Center Center"
110
+ msgstr "Center Center"
111
+
112
+ #: includes/Control.php:275 includes/Helpers/sanitize.php:103
113
+ msgid "Center Bottom"
114
+ msgstr "Center Bottom"
115
+
116
+ #: includes/Control.php:278
117
+ msgid "Background Position"
118
+ msgstr "Background Position"
119
+
120
+ #: includes/Control.php:296
121
+ msgid "Background Opacity"
122
+ msgstr "Background Opacity"
123
+
124
+ #: includes/Controls/SwitchControl.php:26
125
+ msgid "ON"
126
+ msgstr "ON"
127
+
128
+ #: includes/Controls/SwitchControl.php:27
129
+ msgid "OFF"
130
+ msgstr "OFF"
131
+
132
+ #: includes/Fonts/FontRegistry.php:125
133
+ msgid "All"
134
+ msgstr "All"
135
+
136
+ #: includes/Fonts/FontRegistry.php:126
137
+ msgid "Cyrillic"
138
+ msgstr "Cyrillic"
139
+
140
+ #: includes/Fonts/FontRegistry.php:127
141
+ msgid "Cyrillic Extended"
142
+ msgstr "Cyrillic Extended"
143
+
144
+ #: includes/Fonts/FontRegistry.php:128
145
+ msgid "Devanagari"
146
+ msgstr "Devanagari"
147
+
148
+ #: includes/Fonts/FontRegistry.php:129
149
+ msgid "Greek"
150
+ msgstr "Greek"
151
+
152
+ #: includes/Fonts/FontRegistry.php:130
153
+ msgid "Greek Extended"
154
+ msgstr "Greek Extended"
155
+
156
+ #: includes/Fonts/FontRegistry.php:131
157
+ msgid "Khmer"
158
+ msgstr "Khmer"
159
+
160
+ #: includes/Fonts/FontRegistry.php:132
161
+ msgid "Latin"
162
+ msgstr "Latin"
163
+
164
+ #: includes/Fonts/FontRegistry.php:133
165
+ msgid "Latin Extended"
166
+ msgstr "Latin Extended"
167
+
168
+ #: includes/Fonts/FontRegistry.php:134
169
+ msgid "Vietnamese"
170
+ msgstr "Vietnamese"
171
+
172
+ #: includes/Fonts/FontRegistry.php:187
173
+ msgctxt "font style"
174
+ msgid "Serif"
175
+ msgstr "Serif"
176
+
177
+ #: includes/Fonts/FontRegistry.php:191
178
+ msgctxt "font style"
179
+ msgid "Sans Serif"
180
+ msgstr "Sans Serif"
181
+
182
+ #: includes/Fonts/FontRegistry.php:195
183
+ msgctxt "font style"
184
+ msgid "Monospaced"
185
+ msgstr "Monospaced"
readme.txt CHANGED
@@ -4,7 +4,7 @@ Tags: customizer, options famework, theme mods
4
  Donate link: http://kirki.org/
5
  Requires at least: 4.0
6
  Tested up to: 4.1.1
7
- Stable tag: 0.7.1
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -38,6 +38,8 @@ The following controls are included:
38
  * Toggle
39
  * Sortable
40
  * Number
 
 
41
 
42
  For documentation and examples on how to use these controls, please visit [kirki.org](http://kirki.org/#fields).
43
 
@@ -51,13 +53,40 @@ For configuration instructions please visit http://kirki.org/#configuration
51
 
52
  == Changelog ==
53
 
54
- == 0.7.1 - 2014-03-15, dev time 2 hours ==
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  * Removed: Remove the `kirki_get_option` function that was introduced in 0.7 as it's not working properly yet.
56
  * Fix: Undefined index notice when a default value for the control was not defined
57
  * Tweak: `logo_image` now injects an `img` element instead of a `div` with custom background
58
  * New: Added `description` argument in the kirki configuration (replaces the theme description)
59
 
60
- == 0.7 - 2014-03-14, dev time: 10 hours ==
 
 
 
61
  * Fix: Array to string conversion that happened conditionally when used with googlefonts. (props @groucho75)
62
  * Fix: Background opacity affects background-position of bg image
63
  * Fix: font-weight not being applied on google fonts
@@ -76,7 +105,10 @@ For configuration instructions please visit http://kirki.org/#configuration
76
  * Tweak: Using WordPress core controls instead of custom ones when those are available
77
  * Tweak: Separate logic for multiple-type controls that were using the "mode" argument. This has been deprecated in favor of completely separate control types.
78
 
79
- == 0.6.2 - 2014-03-02, dev time: 3 hours ==
 
 
 
80
  * Fix: Frontend styles were not properly enqueued (props @dmgawel)
81
  * New: Allow multiple output styles per control defined as an array of arrays.
82
  * Fix: Background control styles
@@ -84,11 +116,17 @@ For configuration instructions please visit http://kirki.org/#configuration
84
  * Fix: Required script
85
  * Fix: \'_opacity\' was added to a lot of controls by mistake. Removed it and wrote a migration script.
86
 
87
- == 0.6.1 - 2014-02-25, dev time: 1 hours ==
 
 
 
88
  * Fix: Sortables controls had a JS conflict
89
  * Fix: Switches & Toggles were not properly working
90
 
91
- == 0.6.0 - 2014-02-25, dev time: 9 hours ==
 
 
 
92
  * Fix: Tooltips now properly working
93
  * New: Added checkbox switches
94
  * New: Added checkbox toggles
@@ -103,10 +141,12 @@ For configuration instructions please visit http://kirki.org/#configuration
103
  * New: Google fonts now parsed from a json file.
104
 
105
  == 0.5.1 ==
 
106
  * Fix: Transport defaults to refresh instead of postMessage
107
  * Fix: undefined index notice.
108
 
109
  == 0.5 ==
 
110
  * New: Automatic output of styles for generic controls.
111
  * New: Automatic output of styles + scripts for fonts (including googlefonts )
112
  * New: The \'output\' argument on background controls is now an array for consistency with other controls. Older syntax is still compatible though. :)
@@ -122,6 +162,7 @@ For configuration instructions please visit http://kirki.org/#configuration
122
  * Fix: Removed deprecated less_var argument
123
 
124
  = 0.4 =
 
125
  * Fix: bugfix for selector
126
  * New: Change the Kirki theme based on which admin theme is selected.
127
  * Fix: Tranlsation domain issue
@@ -131,8 +172,10 @@ For configuration instructions please visit http://kirki.org/#configuration
131
  * Other minor improvements and bugfixes
132
 
133
  = 0.3 =
 
134
  * new: added background field
135
  * new: added \'output\' argument to directly output the CSS
136
 
137
  = 0.2 =
 
138
  * Initial version
4
  Donate link: http://kirki.org/
5
  Requires at least: 4.0
6
  Tested up to: 4.1.1
7
+ Stable tag: 0.8.0
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
38
  * Toggle
39
  * Sortable
40
  * Number
41
+ * Palette
42
+ * Editor (TinyMCE)
43
 
44
  For documentation and examples on how to use these controls, please visit [kirki.org](http://kirki.org/#fields).
45
 
53
 
54
  == Changelog ==
55
 
56
+ == 0.8.0 ==
57
+
58
+ March 30, 2014, dev time: 32 hours
59
+
60
+ * Improvement: OOP redesign (props @vpratfr)
61
+ * New: Added Palette control
62
+ * New: Added Editor control (WYSIWYG - uses TinyMCE)
63
+ * New: Added Custom control (free html)
64
+ * New: Added a Kirki_Colourlovers class to use palettes from the colourlovers API
65
+ * New: Added a composer file (props @vpratfr)
66
+ * Fix: Wrong settings IDs
67
+ * Fix: Color calculation on RGBA functions were off
68
+ * Tweak: Restructuring the plugin (props @vpratfr)
69
+ * New: added a functional kirki_get_option() function
70
+ * Tweak: Simplified configuration options.
71
+ * New: Turn Kirki into a singleton and a facade (props @vpratfr)
72
+ * Tweak: Completely re-written the customizer styles
73
+ * New: Using SASS for customizer styles
74
+ * Tweak: Deprecating the group_title control in favor of the new custom control
75
+ * Tweak: Changed the CSS for checkboxes
76
+
77
+ == 0.7.1 ==
78
+
79
+ March 15, 2014, dev time: 2 hours
80
+
81
  * Removed: Remove the `kirki_get_option` function that was introduced in 0.7 as it's not working properly yet.
82
  * Fix: Undefined index notice when a default value for the control was not defined
83
  * Tweak: `logo_image` now injects an `img` element instead of a `div` with custom background
84
  * New: Added `description` argument in the kirki configuration (replaces the theme description)
85
 
86
+ == 0.7 ==
87
+
88
+ March 14, 2014, dev time: 10 hours
89
+
90
  * Fix: Array to string conversion that happened conditionally when used with googlefonts. (props @groucho75)
91
  * Fix: Background opacity affects background-position of bg image
92
  * Fix: font-weight not being applied on google fonts
105
  * Tweak: Using WordPress core controls instead of custom ones when those are available
106
  * Tweak: Separate logic for multiple-type controls that were using the "mode" argument. This has been deprecated in favor of completely separate control types.
107
 
108
+ == 0.6.2 ==
109
+
110
+ March 2, 2014, dev time: 3 hours
111
+
112
  * Fix: Frontend styles were not properly enqueued (props @dmgawel)
113
  * New: Allow multiple output styles per control defined as an array of arrays.
114
  * Fix: Background control styles
116
  * Fix: Required script
117
  * Fix: \'_opacity\' was added to a lot of controls by mistake. Removed it and wrote a migration script.
118
 
119
+ == 0.6.1 ==
120
+
121
+ 2014-02-25, dev time: 1 hours
122
+
123
  * Fix: Sortables controls had a JS conflict
124
  * Fix: Switches & Toggles were not properly working
125
 
126
+ == 0.6.0 ==
127
+
128
+ 2014-02-25, dev time: 9 hours
129
+
130
  * Fix: Tooltips now properly working
131
  * New: Added checkbox switches
132
  * New: Added checkbox toggles
141
  * New: Google fonts now parsed from a json file.
142
 
143
  == 0.5.1 ==
144
+
145
  * Fix: Transport defaults to refresh instead of postMessage
146
  * Fix: undefined index notice.
147
 
148
  == 0.5 ==
149
+
150
  * New: Automatic output of styles for generic controls.
151
  * New: Automatic output of styles + scripts for fonts (including googlefonts )
152
  * New: The \'output\' argument on background controls is now an array for consistency with other controls. Older syntax is still compatible though. :)
162
  * Fix: Removed deprecated less_var argument
163
 
164
  = 0.4 =
165
+
166
  * Fix: bugfix for selector
167
  * New: Change the Kirki theme based on which admin theme is selected.
168
  * Fix: Tranlsation domain issue
172
  * Other minor improvements and bugfixes
173
 
174
  = 0.3 =
175
+
176
  * new: added background field
177
  * new: added \'output\' argument to directly output the CSS
178
 
179
  = 0.2 =
180
+
181
  * Initial version