Custom Login - Version 2.4

Version Description

Download this release

Release Info

Developer austyfrosty
Plugin Icon 128x128 Custom Login
Version 2.4
Comparing to
See all releases

Code changes from version 1.1.4 to 2.4

Files changed (63) hide show
  1. assets/css/admin.css +263 -0
  2. assets/css/chosen.css +435 -0
  3. assets/css/genericons.css +197 -0
  4. assets/css/jquery-ui-classic.css +575 -0
  5. assets/css/jquery-ui-fresh.css +575 -0
  6. assets/fonts/genericons-regular-webfont.eot +0 -0
  7. assets/fonts/genericons-regular-webfont.svg +135 -0
  8. assets/fonts/genericons-regular-webfont.ttf +0 -0
  9. assets/fonts/genericons-regular-webfont.woff +0 -0
  10. assets/images/chosen-sprite.png +0 -0
  11. assets/images/chosen-sprite@2x.png +0 -0
  12. assets/images/extensions/custom-login-page-template-300x200.jpg +0 -0
  13. assets/images/extensions/custom-login-redirects-300x200.jpg +0 -0
  14. assets/images/extensions/custom-login-stealth-login-300x200.jpg +0 -0
  15. assets/js/admin.js +90 -0
  16. assets/js/chosen.jquery.min.js +2 -0
  17. assets/js/functions.js +3 -0
  18. classes/changelog.txt +41 -0
  19. classes/class.settings-api.php +1126 -0
  20. classes/edd-remote-install-client/EDD_Remote_Install_Client.php +395 -0
  21. classes/edd-remote-install-client/css/edd-remote-install-admin.css +210 -0
  22. classes/edd-remote-install-client/js/edd-remote-install-admin.js +362 -0
  23. classes/scripts-styles.php +173 -0
  24. classes/templates.php +112 -0
  25. classes/welcome.php +193 -0
  26. custom-login.php +1002 -272
  27. extensions.json +1 -0
  28. functions/install.php +60 -0
  29. functions/post-types.php +52 -0
  30. functions/upgrades/upgrade-functions.php +149 -0
  31. functions/upgrades/upgrades.php +61 -0
  32. languages/custom-login-es_ES.mo +0 -0
  33. languages/custom-login-es_ES.po +0 -157
  34. languages/custom-login-tr_TR.mo +0 -0
  35. languages/custom-login-tr_TR.po +0 -490
  36. languages/custom-login-tr_TR.pot +423 -0
  37. languages/custom-login.mo +0 -0
  38. languages/custom-login.po +412 -81
  39. languages/custom-login.pot +228 -233
  40. library/admin/Sprite.jpg +0 -0
  41. library/admin/admin.php +0 -925
  42. library/admin/dashboard.php +0 -168
  43. library/admin/presstrends.php +0 -69
  44. library/css/admin.css +0 -49
  45. library/css/custom-login.css +0 -171
  46. library/css/custom-login.css.php +0 -133
  47. library/css/tabs.css +0 -47
  48. library/js/arrow.gif +0 -0
  49. library/js/cross.gif +0 -0
  50. library/js/custom-login.js +0 -54
  51. library/js/gravatar.js +0 -6
  52. library/js/hs.png +0 -0
  53. library/js/hv.png +0 -0
  54. library/js/jquery.autosize.js +0 -171
  55. library/js/jscolor.js +0 -953
  56. license.txt +0 -339
  57. readme.html +0 -118
  58. readme.md +119 -0
  59. readme.txt +290 -440
  60. screenshot-1.png +0 -0
  61. screenshot-2.png +0 -0
  62. templates/wp-login-script.php +53 -0
  63. templates/wp-login-style.php +327 -0
assets/css/admin.css ADDED
@@ -0,0 +1,263 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wp-admin select {
2
+ min-width: 150px;
3
+ }
4
+
5
+ ul.social li {
6
+ -webkit-transition: margin 0.25s linear;
7
+ -moz-transition: margin 0.25s linear;
8
+ -o-transition: margin 0.25s linear;
9
+ transition: margin 0.25s linear;
10
+ display: block;
11
+ }
12
+ ul.social li:hover {
13
+ margin-left: 10px;
14
+ }
15
+
16
+ /**
17
+ * Genericons
18
+ */
19
+
20
+ /* Social icons */
21
+ ul.social .genericon-wordpress:before {
22
+ color: #21759b;
23
+ }
24
+ ul.social .genericon-flickr:before {
25
+ color: #0063DC;
26
+ }
27
+ ul.social .genericon-github:before {
28
+ color: #101010;
29
+ }
30
+ .genericon-facebook:before, .genericon-facebook-alt:before {
31
+ color: #3B5998;
32
+ }
33
+ ul.social .genericon-twitter:before {
34
+ color: #00ACED;
35
+ }
36
+ ul.social .genericon-googleplus:before {
37
+ color: #DB4A38;
38
+ }
39
+
40
+ /* General icons */
41
+ ul.social .genericon-star:before {
42
+ color: #FFD300;
43
+ text-shadow: 1px 1px 0 #FFFFFF;
44
+ }
45
+ ul.social .genericon-mail:before {
46
+ color: #7D7D7D;
47
+ text-shadow: 0 1px 0 #FFFFFF;
48
+ }
49
+
50
+ /**
51
+ * Checkboxes and Radios
52
+ * @ref http://codepen.io/Jackreichert/pen/xjyer
53
+ */
54
+ .section input[type="checkbox"],
55
+ .section input[type="radio"] {
56
+ visibility: hidden;
57
+ }
58
+ .section .checkbox-wrap,
59
+ .section .checkbox-wrap > ul li,
60
+ .section .radio-wrap,
61
+ .section .radio-wrap > ul li {
62
+ float: left;
63
+ margin: 0 35px 0 -10px;
64
+ position: relative;
65
+ width: 20px;
66
+ }
67
+ .section .checkbox-wrap > ul,
68
+ .section .radio-wrap > ul {
69
+ margin: 0;
70
+ padding: 0;
71
+ }
72
+ .section .checkbox-wrap li,
73
+ .section .radio-wrap li {
74
+ line-height: 2.4em;
75
+ margin-left: 0 !important;
76
+ }
77
+ .section .checkbox-wrap label,
78
+ .section .radio-wrap label {
79
+ -moz-border-bottom-colors: none;
80
+ -moz-border-left-colors: none;
81
+ -moz-border-right-colors: none;
82
+ -moz-border-top-colors: none;
83
+ background: #f5f5f5; /* Old browsers */
84
+ background: -moz-linear-gradient(top, #ffffff 0%, #e6e6e6 100%); /* FF3.6+ */
85
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(100%,#e6e6e6)); /* Chrome,Safari4+ */
86
+ background: -webkit-linear-gradient(top, #ffffff 0%,#e6e6e6 100%); /* Chrome10+,Safari5.1+ */
87
+ background: -o-linear-gradient(top, #ffffff 0%,#e6e6e6 100%); /* Opera 11.10+ */
88
+ background: -ms-linear-gradient(top, #ffffff 0%,#e6e6e6 100%); /* IE10+ */
89
+ background: linear-gradient(to bottom, #ffffff 0%,#e6e6e6 100%); /* W3C */
90
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#e6e6e6',GradientType=0 ); /* IE6-9 */
91
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) #A2A2A2;
92
+ border-image: none;
93
+ -webkit-border-radius: 4px;
94
+ -moz-border-radius: 4px;
95
+ border-radius: 4px;
96
+ border-style: solid;
97
+ border-width: 1px;
98
+ -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.2) inset, 0 1px 2px rgba(0, 0, 0, 0.05);
99
+ -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.2) inset, 0 1px 2px rgba(0, 0, 0, 0.05);
100
+ box-shadow: 0 1px 0 rgba(255, 255, 255, 0.2) inset, 0 1px 2px rgba(0, 0, 0, 0.05);
101
+ cursor: pointer;
102
+ height: 20px;
103
+ position: absolute;
104
+ top: 0;
105
+ width: 20px;
106
+ text-indent: 37px;
107
+ }
108
+ .section .radio-wrap label {
109
+ -webkit-border-radius: 20px;
110
+ -moz-border-radius: 20px;
111
+ border-radius: 20px;
112
+ }
113
+ .section .checkbox-wrap label:after,
114
+ .section .radio-wrap label:after {
115
+ content: attr(title);
116
+ visibility: hidden;
117
+ }
118
+ .section .checkbox-wrap label:before,
119
+ .section .radio-wrap label:before {
120
+ -moz-border-bottom-colors: none;
121
+ -moz-border-left-colors: none;
122
+ -moz-border-right-colors: none;
123
+ -moz-border-top-colors: none;
124
+ background: none repeat scroll 0 0 transparent;
125
+ border-color: -moz-use-text-color -moz-use-text-color #333333 #333333;
126
+ border-image: none;
127
+ border-style: none none solid solid;
128
+ border-width: medium medium 3px 3px;
129
+ content: "";
130
+ height: 5px;
131
+ left: 4px;
132
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
133
+ filter: alpha(opacity=0);
134
+ opacity: 0;
135
+ position: absolute;
136
+ top: 4px;
137
+ -webkit-transform: rotate(-45deg);
138
+ -moz-transform: rotate(-45deg);
139
+ -ms-transform: rotate(-45deg);
140
+ -o-transform: rotate(-45deg);
141
+ transform: rotate(-45deg);
142
+ width: 9px;
143
+ }
144
+ .section .checkbox-wrap label:hover:before,
145
+ .section .radio-wrap label:hover:before {
146
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
147
+ filter: alpha(opacity=50);
148
+ opacity: 0.5;
149
+ }
150
+ .section .checkbox-wrap input[type="checkbox"]:checked + label:before,
151
+ .section .radio-wrap input[type="radio"]:checked + label:before {
152
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
153
+ filter: alpha(opacity=100);
154
+ opacity: 1;
155
+ }
156
+
157
+ /**
158
+ * Input fields
159
+ */
160
+ .section input.regular-text {
161
+ width: auto;
162
+ }
163
+ .section textarea {
164
+ width: auto;
165
+ }
166
+ .section code {
167
+ display: inline-block;
168
+ }
169
+ .section .description {
170
+ width: 100%;
171
+ }
172
+
173
+ /**
174
+ * File uploads
175
+ */
176
+ div.img {
177
+ background: none repeat scroll 0 0 #FFFFFF;
178
+ border: 1px solid #F5F5F5;
179
+ box-shadow: 5px 5px 0 #EFEFEF, 10px 10px 1px #DEDEDE;
180
+ padding: 25px;
181
+ max-width: 460px;
182
+ }
183
+ div.img img {
184
+ max-width: 100%;
185
+ width: auto;
186
+ height: auto;
187
+ }
188
+
189
+ /**
190
+ * MISC
191
+ */
192
+
193
+ .section .wp-picker-container,
194
+ .section .wp-picker-container:active {
195
+ float: left !important;
196
+ }
197
+
198
+ /**
199
+ * http://www.responsivegridsystem.com/
200
+ */
201
+
202
+ /* SECTIONS */
203
+ .section {
204
+ clear: both;
205
+ padding: 0px;
206
+ margin: 0px;
207
+ }
208
+
209
+ .section * {
210
+ -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
211
+ -moz-box-sizing: border-box; /* Firefox, other Gecko */
212
+ box-sizing: border-box; /* Opera/IE 8+ */
213
+ }
214
+
215
+ /* COLUMN SETUP */
216
+ .col {
217
+ display: block;
218
+ float: left;
219
+ margin: 1% 0 1% 1.6%;
220
+ }
221
+ .col:first-child { margin-left: 0; }
222
+
223
+
224
+ /* GROUPING */
225
+ .col-group:before,
226
+ .col-group:after {
227
+ content:"";
228
+ display:table;
229
+ }
230
+ .col-group:after {
231
+ clear:both;
232
+ }
233
+
234
+ /* GRID OF THREE */
235
+ .span_3_of_3 {
236
+ width: 100%;
237
+ }
238
+ .span_2_of_3 {
239
+ width: 66.1%;
240
+ }
241
+ .span_1_of_3 {
242
+ width: 32.2%;
243
+ }
244
+
245
+ /* GO FULL WIDTH AT LESS THAN 480 PIXELS */
246
+
247
+ @media only screen and (max-width: 762px) {
248
+ .col {
249
+ margin: 1% 0 1% 0%;
250
+ }
251
+ }
252
+
253
+ @media only screen and (max-width: 762px) {
254
+ .span_3_of_3 {
255
+ width: 100%;
256
+ }
257
+ .span_2_of_3 {
258
+ width: 100%;
259
+ }
260
+ .span_1_of_3 {
261
+ width: 100%;
262
+ }
263
+ }
assets/css/chosen.css ADDED
@@ -0,0 +1,435 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ Chosen, a Select Box Enhancer for jQuery and Prototype
3
+ by Patrick Filler for Harvest, http://getharvest.com
4
+
5
+ Version 1.1.0
6
+ Full source at https://github.com/harvesthq/chosen
7
+ Copyright (c) 2011 Harvest http://getharvest.com
8
+
9
+ MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
10
+ This file is generated by `grunt build`, do not edit it by hand.
11
+ */
12
+
13
+ /* @group Base */
14
+ .chosen-container {
15
+ position: relative;
16
+ display: inline-block;
17
+ vertical-align: middle;
18
+ font-size: 13px;
19
+ zoom: 1;
20
+ *display: inline;
21
+ -webkit-user-select: none;
22
+ -moz-user-select: none;
23
+ user-select: none;
24
+ }
25
+ .chosen-container .chosen-drop {
26
+ position: absolute;
27
+ top: 100%;
28
+ left: -9999px;
29
+ z-index: 1010;
30
+ -webkit-box-sizing: border-box;
31
+ -moz-box-sizing: border-box;
32
+ box-sizing: border-box;
33
+ width: 100%;
34
+ border: 1px solid #aaa;
35
+ border-top: 0;
36
+ background: #fff;
37
+ box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15);
38
+ }
39
+ .chosen-container.chosen-with-drop .chosen-drop {
40
+ left: 0;
41
+ }
42
+ .chosen-container a {
43
+ cursor: pointer;
44
+ }
45
+
46
+ /* @end */
47
+ /* @group Single Chosen */
48
+ .chosen-container-single .chosen-single {
49
+ position: relative;
50
+ display: block;
51
+ overflow: hidden;
52
+ padding: 0 0 0 8px;
53
+ height: 23px;
54
+ border: 1px solid #aaa;
55
+ border-radius: 5px;
56
+ background-color: #fff;
57
+ background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4));
58
+ background: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
59
+ background: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
60
+ background: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
61
+ background: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
62
+ background-clip: padding-box;
63
+ box-shadow: 0 0 3px white inset, 0 1px 1px rgba(0, 0, 0, 0.1);
64
+ color: #444;
65
+ text-decoration: none;
66
+ white-space: nowrap;
67
+ line-height: 24px;
68
+ }
69
+ .chosen-container-single .chosen-default {
70
+ color: #999;
71
+ }
72
+ .chosen-container-single .chosen-single span {
73
+ display: block;
74
+ overflow: hidden;
75
+ margin-right: 26px;
76
+ text-overflow: ellipsis;
77
+ white-space: nowrap;
78
+ }
79
+ .chosen-container-single .chosen-single-with-deselect span {
80
+ margin-right: 38px;
81
+ }
82
+ .chosen-container-single .chosen-single abbr {
83
+ position: absolute;
84
+ top: 6px;
85
+ right: 26px;
86
+ display: block;
87
+ width: 12px;
88
+ height: 12px;
89
+ background: url('../images/chosen-sprite.png') -42px 1px no-repeat;
90
+ font-size: 1px;
91
+ }
92
+ .chosen-container-single .chosen-single abbr:hover {
93
+ background-position: -42px -10px;
94
+ }
95
+ .chosen-container-single.chosen-disabled .chosen-single abbr:hover {
96
+ background-position: -42px -10px;
97
+ }
98
+ .chosen-container-single .chosen-single div {
99
+ position: absolute;
100
+ top: 0;
101
+ right: 0;
102
+ display: block;
103
+ width: 18px;
104
+ height: 100%;
105
+ }
106
+ .chosen-container-single .chosen-single div b {
107
+ display: block;
108
+ width: 100%;
109
+ height: 100%;
110
+ background: url('../images/chosen-sprite.png') no-repeat 0px 2px;
111
+ }
112
+ .chosen-container-single .chosen-search {
113
+ position: relative;
114
+ z-index: 1010;
115
+ margin: 0;
116
+ padding: 3px 4px;
117
+ white-space: nowrap;
118
+ }
119
+ .chosen-container-single .chosen-search input[type="text"] {
120
+ -webkit-box-sizing: border-box;
121
+ -moz-box-sizing: border-box;
122
+ box-sizing: border-box;
123
+ margin: 1px 0;
124
+ padding: 4px 20px 4px 5px;
125
+ width: 100%;
126
+ height: auto;
127
+ outline: 0;
128
+ border: 1px solid #aaa;
129
+ background: white url('../images/chosen-sprite.png') no-repeat 100% -20px;
130
+ background: url('../images/chosen-sprite.png') no-repeat 100% -20px;
131
+ font-size: 1em;
132
+ font-family: sans-serif;
133
+ line-height: normal;
134
+ border-radius: 0;
135
+ }
136
+ .chosen-container-single .chosen-drop {
137
+ margin-top: -1px;
138
+ border-radius: 0 0 4px 4px;
139
+ background-clip: padding-box;
140
+ }
141
+ .chosen-container-single.chosen-container-single-nosearch .chosen-search {
142
+ position: absolute;
143
+ left: -9999px;
144
+ }
145
+
146
+ /* @end */
147
+ /* @group Results */
148
+ .chosen-container .chosen-results {
149
+ position: relative;
150
+ overflow-x: hidden;
151
+ overflow-y: auto;
152
+ margin: 0 4px 4px 0;
153
+ padding: 0 0 0 4px;
154
+ max-height: 240px;
155
+ -webkit-overflow-scrolling: touch;
156
+ }
157
+ .chosen-container .chosen-results li {
158
+ display: none;
159
+ margin: 0;
160
+ padding: 5px 6px;
161
+ list-style: none;
162
+ line-height: 15px;
163
+ -webkit-touch-callout: none;
164
+ }
165
+ .chosen-container .chosen-results li.active-result {
166
+ display: list-item;
167
+ cursor: pointer;
168
+ }
169
+ .chosen-container .chosen-results li.disabled-result {
170
+ display: list-item;
171
+ color: #ccc;
172
+ cursor: default;
173
+ }
174
+ .chosen-container .chosen-results li.highlighted {
175
+ background-color: #3875d7;
176
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc));
177
+ background-image: -webkit-linear-gradient(#3875d7 20%, #2a62bc 90%);
178
+ background-image: -moz-linear-gradient(#3875d7 20%, #2a62bc 90%);
179
+ background-image: -o-linear-gradient(#3875d7 20%, #2a62bc 90%);
180
+ background-image: linear-gradient(#3875d7 20%, #2a62bc 90%);
181
+ color: #fff;
182
+ }
183
+ .chosen-container .chosen-results li.no-results {
184
+ display: list-item;
185
+ background: #f4f4f4;
186
+ }
187
+ .chosen-container .chosen-results li.group-result {
188
+ display: list-item;
189
+ font-weight: bold;
190
+ cursor: default;
191
+ }
192
+ .chosen-container .chosen-results li.group-option {
193
+ padding-left: 15px;
194
+ }
195
+ .chosen-container .chosen-results li em {
196
+ font-style: normal;
197
+ text-decoration: underline;
198
+ }
199
+
200
+ /* @end */
201
+ /* @group Multi Chosen */
202
+ .chosen-container-multi .chosen-choices {
203
+ position: relative;
204
+ overflow: hidden;
205
+ -webkit-box-sizing: border-box;
206
+ -moz-box-sizing: border-box;
207
+ box-sizing: border-box;
208
+ margin: 0;
209
+ padding: 0;
210
+ width: 100%;
211
+ height: auto !important;
212
+ height: 1%;
213
+ border: 1px solid #aaa;
214
+ background-color: #fff;
215
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
216
+ background-image: -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%);
217
+ background-image: -moz-linear-gradient(#eeeeee 1%, #ffffff 15%);
218
+ background-image: -o-linear-gradient(#eeeeee 1%, #ffffff 15%);
219
+ background-image: linear-gradient(#eeeeee 1%, #ffffff 15%);
220
+ cursor: text;
221
+ }
222
+ .chosen-container-multi .chosen-choices li {
223
+ float: left;
224
+ list-style: none;
225
+ }
226
+ .chosen-container-multi .chosen-choices li.search-field {
227
+ margin: 0;
228
+ padding: 0;
229
+ white-space: nowrap;
230
+ }
231
+ .chosen-container-multi .chosen-choices li.search-field input[type="text"] {
232
+ margin: 1px 0;
233
+ padding: 5px;
234
+ height: 15px;
235
+ outline: 0;
236
+ border: 0 !important;
237
+ background: transparent !important;
238
+ box-shadow: none;
239
+ color: #666;
240
+ font-size: 100%;
241
+ font-family: sans-serif;
242
+ line-height: normal;
243
+ border-radius: 0;
244
+ }
245
+ .chosen-container-multi .chosen-choices li.search-field .default {
246
+ color: #999;
247
+ }
248
+ .chosen-container-multi .chosen-choices li.search-choice {
249
+ position: relative;
250
+ margin: 3px 0 3px 5px;
251
+ padding: 3px 20px 3px 5px;
252
+ border: 1px solid #aaa;
253
+ border-radius: 3px;
254
+ background-color: #e4e4e4;
255
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
256
+ background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
257
+ background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
258
+ background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
259
+ background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
260
+ background-clip: padding-box;
261
+ box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05);
262
+ color: #333;
263
+ line-height: 13px;
264
+ cursor: default;
265
+ }
266
+ .chosen-container-multi .chosen-choices li.search-choice .search-choice-close {
267
+ position: absolute;
268
+ top: 4px;
269
+ right: 3px;
270
+ display: block;
271
+ width: 12px;
272
+ height: 12px;
273
+ background: url('../images/chosen-sprite.png') -42px 1px no-repeat;
274
+ font-size: 1px;
275
+ }
276
+ .chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover {
277
+ background-position: -42px -10px;
278
+ }
279
+ .chosen-container-multi .chosen-choices li.search-choice-disabled {
280
+ padding-right: 5px;
281
+ border: 1px solid #ccc;
282
+ background-color: #e4e4e4;
283
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
284
+ background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
285
+ background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
286
+ background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
287
+ background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
288
+ color: #666;
289
+ }
290
+ .chosen-container-multi .chosen-choices li.search-choice-focus {
291
+ background: #d4d4d4;
292
+ }
293
+ .chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close {
294
+ background-position: -42px -10px;
295
+ }
296
+ .chosen-container-multi .chosen-results {
297
+ margin: 0;
298
+ padding: 0;
299
+ }
300
+ .chosen-container-multi .chosen-drop .result-selected {
301
+ display: list-item;
302
+ color: #ccc;
303
+ cursor: default;
304
+ }
305
+
306
+ /* @end */
307
+ /* @group Active */
308
+ .chosen-container-active .chosen-single {
309
+ border: 1px solid #5897fb;
310
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
311
+ }
312
+ .chosen-container-active.chosen-with-drop .chosen-single {
313
+ border: 1px solid #aaa;
314
+ -moz-border-radius-bottomright: 0;
315
+ border-bottom-right-radius: 0;
316
+ -moz-border-radius-bottomleft: 0;
317
+ border-bottom-left-radius: 0;
318
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #eeeeee), color-stop(80%, #ffffff));
319
+ background-image: -webkit-linear-gradient(#eeeeee 20%, #ffffff 80%);
320
+ background-image: -moz-linear-gradient(#eeeeee 20%, #ffffff 80%);
321
+ background-image: -o-linear-gradient(#eeeeee 20%, #ffffff 80%);
322
+ background-image: linear-gradient(#eeeeee 20%, #ffffff 80%);
323
+ box-shadow: 0 1px 0 #fff inset;
324
+ }
325
+ .chosen-container-active.chosen-with-drop .chosen-single div {
326
+ border-left: none;
327
+ background: transparent;
328
+ }
329
+ .chosen-container-active.chosen-with-drop .chosen-single div b {
330
+ background-position: -18px 2px;
331
+ }
332
+ .chosen-container-active .chosen-choices {
333
+ border: 1px solid #5897fb;
334
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
335
+ }
336
+ .chosen-container-active .chosen-choices li.search-field input[type="text"] {
337
+ color: #111 !important;
338
+ }
339
+
340
+ /* @end */
341
+ /* @group Disabled Support */
342
+ .chosen-disabled {
343
+ opacity: 0.5 !important;
344
+ cursor: default;
345
+ }
346
+ .chosen-disabled .chosen-single {
347
+ cursor: default;
348
+ }
349
+ .chosen-disabled .chosen-choices .search-choice .search-choice-close {
350
+ cursor: default;
351
+ }
352
+
353
+ /* @end */
354
+ /* @group Right to Left */
355
+ .chosen-rtl {
356
+ text-align: right;
357
+ }
358
+ .chosen-rtl .chosen-single {
359
+ overflow: visible;
360
+ padding: 0 8px 0 0;
361
+ }
362
+ .chosen-rtl .chosen-single span {
363
+ margin-right: 0;
364
+ margin-left: 26px;
365
+ direction: rtl;
366
+ }
367
+ .chosen-rtl .chosen-single-with-deselect span {
368
+ margin-left: 38px;
369
+ }
370
+ .chosen-rtl .chosen-single div {
371
+ right: auto;
372
+ left: 3px;
373
+ }
374
+ .chosen-rtl .chosen-single abbr {
375
+ right: auto;
376
+ left: 26px;
377
+ }
378
+ .chosen-rtl .chosen-choices li {
379
+ float: right;
380
+ }
381
+ .chosen-rtl .chosen-choices li.search-field input[type="text"] {
382
+ direction: rtl;
383
+ }
384
+ .chosen-rtl .chosen-choices li.search-choice {
385
+ margin: 3px 5px 3px 0;
386
+ padding: 3px 5px 3px 19px;
387
+ }
388
+ .chosen-rtl .chosen-choices li.search-choice .search-choice-close {
389
+ right: auto;
390
+ left: 4px;
391
+ }
392
+ .chosen-rtl.chosen-container-single-nosearch .chosen-search,
393
+ .chosen-rtl .chosen-drop {
394
+ left: 9999px;
395
+ }
396
+ .chosen-rtl.chosen-container-single .chosen-results {
397
+ margin: 0 0 4px 4px;
398
+ padding: 0 4px 0 0;
399
+ }
400
+ .chosen-rtl .chosen-results li.group-option {
401
+ padding-right: 15px;
402
+ padding-left: 0;
403
+ }
404
+ .chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div {
405
+ border-right: none;
406
+ }
407
+ .chosen-rtl .chosen-search input[type="text"] {
408
+ padding: 4px 5px 4px 20px;
409
+ background: white url('../images/chosen-sprite.png') no-repeat -30px -20px;
410
+ background: url('../images/chosen-sprite.png') no-repeat -30px -20px;
411
+ direction: rtl;
412
+ }
413
+ .chosen-rtl.chosen-container-single .chosen-single div b {
414
+ background-position: 6px 2px;
415
+ }
416
+ .chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b {
417
+ background-position: -12px 2px;
418
+ }
419
+
420
+ /* @end */
421
+ /* @group Retina compatibility */
422
+ @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-resolution: 144dpi) {
423
+ .chosen-rtl .chosen-search input[type="text"],
424
+ .chosen-container-single .chosen-single abbr,
425
+ .chosen-container-single .chosen-single div b,
426
+ .chosen-container-single .chosen-search input[type="text"],
427
+ .chosen-container-multi .chosen-choices .search-choice .search-choice-close,
428
+ .chosen-container .chosen-results-scroll-down span,
429
+ .chosen-container .chosen-results-scroll-up span {
430
+ background-image: url('../images/chosen-sprite@2x.png') !important;
431
+ background-size: 52px 37px !important;
432
+ background-repeat: no-repeat !important;
433
+ }
434
+ }
435
+ /* @end */
assets/css/genericons.css ADDED
@@ -0,0 +1,197 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+
3
+ Genericons Helper CSS
4
+
5
+ */
6
+
7
+
8
+ /**
9
+ * The font was graciously generated by Font Squirrel (http://www.fontsquirrel.com). We love those guys.
10
+ */
11
+
12
+ @font-face {
13
+ font-family: 'Genericons';
14
+ src: url('../fonts/genericons-regular-webfont.eot');
15
+ }
16
+
17
+ @font-face {
18
+ font-family: 'Genericons';
19
+ src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAENIABEAAAAAatQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABgAAAABwAAAAcaii0EkdERUYAAAGcAAAAHQAAACAArQAET1MvMgAAAbwAAABCAAAAYJdbaIVjbWFwAAACAAAAAJgAAAGyqWnWY2N2dCAAAAKYAAAADgAAAA4BYgHJZnBnbQAAAqgAAAGxAAACZVO0L6dnYXNwAAAEXAAAAAgAAAAIAAAAEGdseWYAAARkAAA5fgAAWkD4H3YjaGVhZAAAPeQAAAArAAAANgUfUT9oaGVhAAA+EAAAABwAAAAkEAMH3WhtdHgAAD4sAAAAiAAAAQpVkUB7bG9jYQAAPrQAAAECAAABAoDMauhtYXhwAAA/uAAAACAAAAAgAagCQm5hbWUAAD/YAAABYgAAAthC114IcG9zdAAAQTwAAAHUAAAFCuMEJONwcmVwAABDEAAAAC4AAAAusPIrFHdlYmYAAENAAAAABgAAAAbRQFLPAAAAAQAAAADMPaLPAAAAAM71j4QAAAAAzvWBvnjaY2BkYGDgA2IJBhBgYmAEwnogZgHzGAAJvwCyAAAAeNpjYGb/zDiBgZWBhdWY5QwDA8NMCM10hsEIzAdKYQeh3uF+DA6qf74ys6X9S2Ng4GBg0AAKMyIpUWBgBACOigvWAAB42mNgYGBmgGAZBkYGEFgD5DGC+SwME4C0AhCyMDCo/vnI+Ynzk+Qn1c8cXzi/SH7R/GL5xfNL5JfMLyVfmf//B6tg+MTwSeCTwmeGLwxfBL4ofDH44vAl4EvCl4KvDP//32LnZ+Hj4+PgY+LV4DHk0eZR5ZHnkeQR5uHlYeeugdqOFzCyMcCVMTIBCSZ0BQzDHgAA5FwqMwAAAQkARQBBAGYAfwC3AAB42l1Ru05bQRDdDQ8DgcTYIDnaFLOZkMZ7oQUJxNWNYmQ7heUIaTdykYtxAR9AgUQN2q8ZoKGkSJsGIRdIfEI+IRIza4iiNDs7s3POmTNLypGqd+lrz1PnJJDC3QbNNv1OSLWzAPek6+uNjLSDB1psZvTKdfv+Cwab0ZQ7agDlPW8pDxlNO4FatKf+0fwKhvv8H/M7GLQ00/TUOgnpIQTmm3FLg+8ZzbrLD/qC1eFiMDCkmKbiLj+mUv63NOdqy7C1kdG8gzMR+ck0QFNrbQSa/tQh1fNxFEuQy6axNpiYsv4kE8GFyXRVU7XM+NrBXbKz6GCDKs2BB9jDVnkMHg4PJhTStyTKLA0R9mKrxAgRkxwKOeXcyf6kQPlIEsa8SUo744a1BsaR18CgNk+z/zybTW1vHcL4WRzBd78ZSzr4yIbaGBFiO2IpgAlEQkZV+YYaz70sBuRS+89AlIDl8Y9/nQi07thEPJe1dQ4xVgh6ftvc8suKu1a5zotCd2+qaqjSKc37Xs6+xwOeHgvDQWPBm8/7/kqB+jwsrjRoDgRDejd6/6K16oirvBc+sifTv7FaAAAAAAEAAf//AA942q18C3xU1bnvWnvveSaZmT3PZJKZzHtCJpkJ88hkIIQhCAECCAQCCCooggTkjS9q3Vqpioo9tqJVK2hbsdpj90xA2mJrjtVaW0fLFbmt1h6xp1ptPcfe9rSKmc39vrVnQhBsz/39bmBm7732npm1vvU9/t9jLaIh8Ef/yj1DeKIlBlJLzIRMFP1i2Mbb/DXUZeNdIv2r0vPEE166+An4u/MJ7pnyBZeS0+R0+XVymi6HE+X4aaoQSsb9TSREyxEOvlQjwXfrSA18s424yJVEJgmZlmQhIVtSsqYki0lZn5DtKdlQkh1JuTYh15WoXJ+QhRNFoq9NJpOyrlTUCcbYcF7HG/C9xhCTdZaCncZkV6lgsiaTRbsL79sthlihgcZIx0Sa8TvO9+KgO2Xo7GnCSWVJIGWJk07DNUckiY57KZUj4Sjc1cE/GION9BLZmJDNJdkGHYR+2mEwJ6DHcp2lIEJ/dKWCg8YKYp1oHRYMRj7kypGCzQxXVKsjcNUxkVisIZ9gtXCCL0TszmRnOhKg5BW6mj5KV7/yirJfuUTZT5P7ju/bd5xPjG985RXuIWzdhyQWiEQlnaSVGHVdxE+uZ7SFvvkSciMQMyHzpWEj79DH5JqSrIfeBlhva0tyraVQD731lGSPpWCFM22pEIR+11LRWtAbczm5XpS5nOyBUfAOM/RbtoqyBsbS6IOxaKm1FtscYoHT5GBMNuAYv00jIoVtdpJKkkyaBAPEle70OR12rS8iAYHZ/0+ArHmq+8EPqVY59cMfKJ9IR6nx6FHlb0epxCPNTxNpVBJ8B1aV34a7Y0/uPnp09y3PPIPj5oh+PF9Nx3EX9LWpFDKWIYm8BYxVl6SyJSGTE7KQBErIvKWgp4wU2qRcY4GxxoBYOGsEB+AXaeWVghfQVoHuKHCEA0fwUn1XiHprVALRwSYtzgEHFyJcCvABDTAV3sNTCfimjqQJlU2sK9AvTWnYoCEwKcYS8pKhVDAD5Y1EtALFCxoDHPkccnCFdjpRI8bh207SnpN3bz1Ntt6tkfafPLn/C8+3lP8gcfe3PM94FH5JS4iROMhKImsTspgCZpStSeSJGkaZWiCIk/WCUUP9/aKRR8kxakGmgEI1QBRTSTZZZAdyUNFhwrsOEeTKpcoVEMdOgmKyM+M/cwryIynHjw/t46onQDSQr+PKcUr2DY07JRzSjNGlgaTIPoKiDnMSS8he4NA065++VNQT/GG9AN3SWwpu6Fa8VIy7sTE+ERrjlkIdNDpKxToHNtZBF2WHpRCFRn+pGPVjYzQE/c4Add164GtjfS5XqIsD/9a4PDHg30LUAc3e1hzwdawGJVYMTWQySsV0Z9ahdYgonxkxHc14KVwAH+MdmBY412XwTiSAT7kcMENkaDC/5cCW/OAQ42aCfD3WxI1QafX+8H25JYq0YMuWBVRakrsvvH+1IgFjcxqKh91K5RHKHlHUR0DWgbvIiA5pZiVB0kZkf0K2pXCKgMFrU0wThRJy/QmQ6EIY5qkgWICNGmAkDcBGKX+S9Tjop2IwEKFZPw5KbYsB2x5YJZBVBw6sUvJKXlp1gEfN8vivsEVS8sjR7Ca8K3k6ckBZJf3qcSqdaSGEp1U50EAPfWRmRctT7Kj+BOoks6XghKlpKhUCMB9mmI9ho9VWj1rEKRYafDgHFGTgsNZgdjibKrMAHabhznQ06+VRElw9NB2BC+qwm6gOf5TJZaa/f4V7gscyOXNR34UX9q1Ydnl8YBJPkNE+hVd///H+FY1TZsyNzr+z86K+o7882rdi+Qc3L33srslo/uCV1oNGIevIBiJfkZAvKcmtqEGofCXjxs6S3GkpNFKU2MJ66H0n9LPYP29BDvRko/i0xuLovmDJZUzVX3IFcJTlMrjRKuZrjDYPaWlL52cPXooD1VgPBULhjiQbnJi2klAqKRCrw0I02kgm3ZlJR3sEfOMi0Tg1cbpIVKuL82aqdWkddi/v0upMNE6jcSHaSk3U6fIKLq+uM2tHNRENkUepje765TG6i1ofVa5TfhEK0BnzrpMGs+u1Rr3ZJtSlui/PXr1nz9XZy3oSRuOkjvXZQem6uZnapqnLlvo4gyfQ6RFqGwyimzd43IE6ytdZm0OdUxbFaSCk/EK5TiC/pF+AL39U+U9l9zGlUP7jOl1zg/D8wpsnG5pnDT217ZGt5pZZl06knGCdGPZznD88UdRy3D03bN+/7amhWT594qI6E+3KCnXBxnpOV+O2wtiau/y83t3Q3OAEXZS8Vqj3addxTrRxOnxjc2MmjYzzJ5E+soDsIMU6QmJypITao7kkd6nztZDZNwuIhaVwIcxXbxLV6yKYsgtBHvJ1mto6wdnUHGppz0yexearPgLtRgOxtfZMzfcumIvT1Cwe0tMmz2Q877IW/YkLcmjj6ilMmA/mywJqHkw3b7e6Okk2Eq2l0awzlOWiWkKd/mSW47XE5rT1CNlIKBjQUi/n6hRcXNTE2bwUPmPNhr6FM0UfgpftW99SPlR2K2vg9WFox8Yb6Hffs+SVd5Wtf/c9R/+6567h55Q/U/FXdNbho/7v/Va57W9rf649MO+O9RO+qBz5gU+iC5yeqPYJOvd695f7nv77YtOkFZ6HXq5X/sQnz/3+b8HvcrMPKq9eW6Kd8zqkwWT9V5yz4tT9tyXK0U8fGFlA2+gtc5RjmvWPKY9xk3w9vaEv3mMpb/GkFtf6tY3UM5y7dEh5tPF+5ef3baSLR+JMfiTaBjjkN6DNYdgpXxY41JlKwmEKsGicZtJZp+BC/k4lXZ1ZrQ5fyLImXgj6pI4WSn52zTOhqDeRvPHxBUvnLkvuoXveMf7q/gMbpfWt11y1dvYm2rPz6XeUX39LeZUe03yDu3uzrs7981s0MT756CVXLH7iFzXR9vv/9w731Fv66to3L9D59Nd//MEv7l+KfSOAkXQSiZILCKpIUJYBMG9JWUzIvpTsLMlulXVaAHeeQDAKMNRgAVwpuwBLpQoTgHlcgOZkd47BhPHaVPTb/FNQv7qykWDAxHloEMFDICLtG9KQoX37hpR3qalWeTfW+5h2/vpL7lnWpijltqF9iBHw9qfwzr1IhZHa7iz9P8bsJTsv+JMyWs4hwAOLTyTNe9D3BjKf6VMHs+K2ZJFQNG7EBRYPUIVetexupv+5JHZdTBZd9fiMy2GIFesZNq4nYAsbKzY8JaZ7uFTS2Ux54FAP5+fRmHPSb9Nrn7wqO+R26/5tborONikvKCP8SzRBufl7NuW1PK+8m59helU5NnqEn01A21fpawbcsRiQx1qyl8h1CXlpSW5OFMJpwGSNpcKEOKD4RSqh142T0W6Q0QuT8ppSsXsN9rG7H4a0xlJYBe0guFcC7btRcA0ouDbnkuUXM6FtXorCTPUGYrcFsn0rL161BmW1UTzkjM3qR0UsL7IWWjpQaq0WaydIrROkVgtSG0GppVpbKtk5lXY6tTqtjtp40LadLqfa5qVqYw+XSaOuNSDjulCSBYpsHYnytNMKWho4WCft/YjOpRvp3I/27v1IOaR8TTn0UfpUSblx5u50eGMw4LCZ7G0TaUS+YYndbLfvvjCyIRi02KjZEptIgwvrATnU2zmbxqKt1eh5fv4k4ybl/QdfVR6iF27ZsedmgfuY3nrkjcs1U/g5n/kVOOO4Pym71gieh6hJw/G0OcBruNH7OJEu03EBHzVio63ByUHrw7T2wtxKf3x5JiB4jY019SanaDfmBukVm58/9XV/XKvhDpb3DtHtb7463NJ66wOqfzE2tzPIcnIFeYjISxNyS0qeXUK+AxA5HRyNlGwvFafbcfqme2H6GoAX16pzjJ4bOmpg8WV3Ug6Btk4WAyF8NNAF3LgO5lcHHscwb5q5AmctIOaNmhrvhFhv/+LB1WyuZ8NcF0lsJqjgAm+Cc128C+3udPEItfiDockrL2Pm1Cbi5KCZpK6ANhjgM6qkeqhfDIp+hwrrUWrBzIJ51cP9LDtNZf0BLd9DXWBPNS6cVZBgW6TTBd/k1AJrSDeUvB6fu9lrnW07cp8q2uCknGaqDyCtotFcfDcfNIdsHlHUx+ceumjgwK3lR278/YzcG9LiObbBULfHo9PR8qElt01z3L3ruh85HdKuG16i79Lf38hPyfm7wx4qaKehRlD9H/zqUfiVJufdT23g3LVNYqO93mFMz5x815GtRzr2Xnbqm0vWU9pQN7lhYmBigyds0V8hdD7ya0H4/TcPjAjCL4mKycCAap8Br94CunkWQ9owB3wCcEwVaasT5IEJ8pYYUtYBtinUmYDCHrEghhCWhepF6yGLua09rqIyu3MyBQAZp6A6bKA3gMLpbA9NJREjw3mcA2Wo0WX8XmrhAKVdsZBbvJauGRhYZ6NzlKcBls2usQ9OnTTXT2fn1t2+KNSbSvh9jhrlCIU/rTj7sstm969aferb/L+P+rkJnY3JmZNWzyj/J9e15bsbsjW2xsZgk3iX+23lPeU/Lz6LT5sAe2bJDUwDARL2x0DtdDBn0Oc7IcqdKdkG/pdFdsP4u9j4wQO2MCfYy/wG2a9yawwcEkuhTVVDOSCL18NMgOwXC/UuIE7AKmdyckwsdHQiiXxwu9CSUV3h8SYC0PbnkosRixkOoNWYyUCbQMnCaXT6ALegd/oiC9WBF/x1qtdbZqR2U/3B25MLuwIW5ePxRmSfcO2kCy+c1D1v/qdH+IbR9+jRdltL17CyjL74vafr2yINW4AZngRAtQCw1DTyXVJ0In4yJ+QJJaSQFgjSywiSKckZS6EJRg52MmAptDOXuTAdDp3uH/bUfDSHOGJGk9wAVBwp2OkncmRk2GqP2GJFePft8e0JakFMc+SQ1d7gjsTxj447l/NuWmjKgCC7clNQkANiUevswLN2a8E8AanZMQF9NNLco0o2mCoEyk6rw84J4L9EOVDQ0UjWpmIKJ3MGtKi+rSzqYOIcdhBeHaLlaIR7su/eYzT2lEwTL+94QvnZi5d/LzDbErj4Xp3n0Za71g4sC08xua67YucPLlc++PiOD7+xbMCq01kMuqDzxi8Jf7rqN688fOl1Lymf3vk35eqTF+eV3+Z2fbXz4C5OXnjNHUc3LErd81zu8q98n058+gQ1XX7wzWu/usbhrp/SUm8xpKgaXhvDsINkNymakO4AO2Yn5C60kcwmLmWkD5fksKWQAkrPLclzLYWZcDa5JE9W3V/wPZYBI85NAW1iiYHFqC9nikdMGltz1zTLArycbC04pyIBnSb0QhYDTWeDF2IwEps7PCE1eeqCz3geiGSDgWhnFoCpSj4mu+BrOV3OTmDSbGckClRmWAHJDNTPomEErgVVC/ABpsJ1tuOh+gZfvXuOZ1bT3gWPlvdc8tjf9971f75zfW5ondUjcBZeozFd0CeNbH3p5IJ9lyy63FYz0ds3fdF2i96w1VavBbT61Fl+hnIJvP7z0dYd66g703+ETv3ZtuPfvGzeTY8NL9/zWqveZDPkDTanOP/61cVbF7751Nf+fu/OBfGHr27tXXr/1thCm00JD6zecy0dZX70AW6VbpXmAChGM2khTBeyOIlJDRZRNUJjKRiA4nXV4JDV4vR1WiI+oXI88Fe67K9/VR7n7qycCN9VHv9r5ZwdK7iY6G4EF8ZPMgRjnPUl2ZqQTSwOh9E28D7ADZa1GFsrEo0FZcBkHa5r8vhUxncBdzdSaypJic0aDvFwCUyNxi3CowxopcXX2Vcu/MrGb5TpJrq61qL8Sbnjlhn52yz6LVu7Znfb0xOPLZdv1Fy+cbFysvwX5ST93/QnlKcr9LXKgOf+lbJMzRfSWTRh09+/lTD6VGOKZvDjrYRimJMgWsNgKzlXuYUNVDq5XyAYjxqFd45FfdD1xhYF35vRSUd60F8RSdsCejoAnpxsSMC3UjmYkJtOYLTSmSyEkCQWjH/VoZlJiXZmgsGsd2ZFGHUUeVFEoBpEiAYg7Vc/dbtvufTiGzatWHbtl2+f290mivQJZfC02N4xe84G4dHyHdf1Ttvma3bau6h7WaihPf4AfZk20BfuWH7xlHzwLNsRJDEymdzMbAdYCW9CjpbkhoQcSMkJFp4SSrJgAaGlcneFKAhhfcAoquCCp4ADabRgpExOMddzCkhs2AcjCuTkCeKw19PGvMpGjM2QQkMUZLnRF27BtoRYCE04nwEB9z7FAjZ+EEEwcOBP+UMVTgyrxgWckEiMgkieZUWk/oyGZPqVjyzKcWWZctyifERZFPGk8hzX3J+RMv3s7SxDMoSNPOntwXhd2/Ge3mbluZP4oerT/RlQZ4AtKGALhdiJCzzzZqBeFOgXB9+cyglGHowfWjAYL3sZ9GuB9zFz0gF0aXDA6J31Tcjsckg8pNUgnnOhHRgOhFvbEP6xSFyWdiZdFOmho8gGNDKVRm1UDPOusMi7snAe1YiarIG6MpR4uB+LLSL3Y4+n3CvarbZyr+eWb387w2mUd957j3oPvv/BB72c5j3lHep9r/wpvffbvJO+1lxPX6upUdrrm5V2n1Npq6mhx50PbdqkPK48TtPP0q4HnqWp8rMPPfRQOUCXPfgs1/TsA3RZ+dlNvzmLhzJkKXmGPMZ4yF6SexLy90rynETV9fnRONcHsYUaWLoHzq4pydeoxAKm+TGGmNqAaZbm5HvEQ88sX9d7AOlyjbVYJ1yNWqJBzNtqNXZvoCPZ3TNn3qVbbv/6Y/9aHGaAuccOtjUyaTIC5jnguD5N9RZv97zvY7xTswjudSRTuc/xjIRUMoSgOM5FUfJAxwjRSCgasWY7Q1lA1wLHJFLIwjSgYz+V70RD4oqwpwSdltPg/U40G3E0wFoA1U5mR1B44RJvZ+PgUEbQvOCVDo033AS74vJyzGTjBWWP4ldgMIFMwbhXJMSU3nl8rp436bVv/Ynetnby0n0vbd8hRztnb9usPH3wceWDvjl1S5fR9iLn/6Vy8Gf3iY994Vrq2zV31r3lr93Dm+hl1PrQN6n3slDgSuU3+7+hvH7VVWuoqH/gqk3/PnmKs3/mmxcusTtSyZUrF0TSejGVXjwwOVerjTW3JOKz6jiTweGcMbfPFo9Y+2KxFf45Wm5wd+8FV3jqw+9s3taVjQQ/uOlL3+e1Swfv2HbtwIqfUIdxw+K1yl+v2jHlc1y6t5Tb3vz7y7fdvPPYQ0P2jueuu0956tpdWzyNv93/EL3q6w/+L6/W8rZy74dfOz27z5xzfE2598R+GMU26c5duegX79Xqdm7eoPz6+mue9/oHLl7xzpx59u6eSy9bvLjeNdHVN2FZ3yyNtjs7EJ5qcWhoV4z3zvF4/UIsMHdRNKs3NDRfcMW0DQmr5ao752xYF4tt33nddXe6bG/cvnf79tZgU4A6fsJteLZnnn1yz/oNpOoj6gnw/nxyJbmR3EFvIrImIa8tyVJCvjUl31SSdyeL0k3o8kl7DLHiTRKe3vQlcBRvssjXIyoHxBlNyJtSciuIyJ0JOXFCXl8avnB9Qh+TSQkDHxeW5PWWQp6l+2SXRc6W5GwCTgo7oMlXGr7ct0PNcfkshT3QdHNSvr0k35Is3r4Hf+32W+GH99yOp3skcDvvUrGsYevIsIplZ1nkmSOFQe4TednID4UdIy1qc59FnjFSWMp/Ii8fKcyaqYeG4Zl9M2yxQt8MPXxouG/WTFtMHrQMLx1cBq2Dy/TyUsvwsqXLbTFyZMbMvlmDS5ctj1f+6DktDArn14NIZjSbUKxdYnHl2utRcH07QDeK7ihahsKeGtAFE0C0pbXQSgDRoTa4SSw6XUzKo9dDszuxfoeKGuxeQGs94P/GhQSNc2mQPowqxwX0dH0gYBhKBqNqN6G3zLlMvM7EZ9M9fLYHmsEHdoDdAQ+44tMBGNSZABXGeZphTrQDHWopf90LX9j5i39Zl6zzeTpD/iU2m6ve5gq3dfvqLc3eeL39nvuURuXjb8ye55u+8ouzbV16quUESo2NJtuUOXfuSiVnt1hfDcSmheqDA7Paa4O2VM+0UHPt0986+rurU00r4l2XX5B0TbampzRNWjO9w8EfZYAKnGP6y95rLu1KDm6VprfMmNKebfb0mm2xjoTT6Yn09ixPxuZPhQvLkpvyBxd3bbikr1XDiYJZZ6ox69xtcVuDoHPGfJ7++X2WxMKOVrOhRtTxfCiebU2mvFvvOiAc2pQPtuZWbt+R3jrZ5rHmLtq6qXzqjF+uYvovg87vAr6/CP3qvgTLrq5A9V5IA3cBgzYni+ksslw6AbyetSAUAJtQWAnKPU1hzi9cMohznhULgb4cWjorThTv5ZupVwMk16CWFE1qyB/OvBygIL/YAfoT9GtcGw12MBBkovgRXZy/qaZv+syDBwuP3L9rpbuhtuWqi6/ItsQ2br5285VLp4lWytWIvpap4fSmxTNsVv8F07sstGvaK7vWu7jg1EUrVg7k7bbeX+/NtTQ28GJjvcFwUueaNEH45iM/XTl/22QfZ2pqMBo0tllLvvLo725YfvtA1qapq9NplT/ytYFAe7SlzsY1eGvraH0gZgq188Xyu3W+lfO/PffmFXPa/WY95Sw3JKe1r1owb1JbTe1LBt/6TYg37wI6bgc6+sm14JUi3mopFRtakHANDiDchoR8eUlekmApwSXVlCCVr0vI3hPyCnBRS8WAl0WU1oGUewN46iXwyRWWQpyB+GK8jmUNe0D0rwfqB7wgTr5cIb4CjKPgaGjRz9uJAlUnymYQspYGuA1Sd/kGkCpzPMDuLRGH67ykE0/1iNiZV0oxnl1xTHVOHXOPoiA6oQh4SFlw/NH4MfSKmZ3I+H9wH6PhzuoTldvBAE6pw67ewH/wzRXkW71/15dO7r7rmhn9T9Kud3bbUvRLJ2/ZtfHCuU8qP3tntzid3tmZXnrNkX1bN3dPDgSnTFoyb9PyxqDfLwKoXLm6LebzOhoSmUCgoX5SbtHg5js2bsjlsumVl37x4ik5v79n2vr57QlXo9PR5IulgyHNfbtPfqm/dvc7ys+eXLVkaDNcTTJ9+R3a9eTgwI7yX/rnz01MjccXL1m3bEpPJNrYUG/XG6xml90TD4R8vp4OmzMUXJlMtLc3uFuic2avXnvBtJYWN4CyZm8yP6HN6fQF0hNdbr+f+QcgY1rMcSbJCiK3If4uRttYGrcOpzyVkHUnZLFUFHXYKLZiLYjYwN697D0IHKATWaEIBrvTWIihg9l0wLRGEVARllQE7QgThMoOE4laM0Wwbdfqxt5iNOlk2Bu8YSqNTNy0Ok91tW6rf/lMi15PD2T6OyJO+N+fySMeVvLTdvRd1ErB97nkkY9v14jt/qbFDyxaciAc6c9M6K3zR9kbPDrU39LRwsIBJbpXl9JtJxPJJDKbLCJryEayg9xAryaYe5xaki9LyMtLxeWXwWjI8kHg55Usgr4hJc8rFdPrrsG6mK6E/IUUxmEBYTsS8paSvEP1qr6YkNtPyN2l4WR3+5gVTZbkbkuhH2RiQUleYCmshbOhkjxkYcGdSEnehtbYVhq+LjJdj8Gwwo2VoM9P/rJLtYg6i6wfKbiFT+SGkR/++eC/PYLNBXeDHsNB9SOFWrhTN0Ke1ulr6+ob3FXL95lrZve620VrIZEGDdgvDvOaLiZbC6zF1oGlqBbXisNT+5azUP6QdXjCiktYAnW6mDdYHE3eq7Zs3/kFbIhYC6FrMOKxaDlMb3dOnicejrQnQpOnq8m7w+A4kZ3X4QUvFjVNffjdDmtB2wh2c8cW6ILNynyuSnLKBrLq0qBkO5kRjIZ5p0uNMamsgUAZhDdOs3Z4HMMgTrsTYTOGkjFH4GQhKbs2YE+D18KEGy6ZEIfSnexOtegHv5qFUkpXD6zpPvL7lRqr1UFz9QMdc9avn9O3VqOcmvfb73WvG9jZFTe9oDylbFP+9QVLW2ZtS2KJp23CpIVP0OB3n6TBJ55Q3nryu8pb26bFE9N6V3pbzV13/0uXudVrHvzB0UH6L9MugVba0Z5vb8/TgY5YbkK78JWBqwdWG+hLzppazawJE9d/bf3qvm7li7WrBq8eyK5oTE689d3du39/a7KzcXkm0dTfE8q9cuLpoaHDGzbC+ycre3tX9t4f85q7uszemHlw8H3Wwl+PP9Fe/vGUec0dLZMI1qVwGIOWiAd8wzuI3JiQ21KytlTUNqKYaikwdgtj3tpS1XE8U6pTX5Lr1cismKyk7QJqhUer6kLqeZj1RlasVJNjir1Q247soG0EC9sQCrPpFp82mC31zT4/skGtVTbm1PIwtbajh/qcLocummGlHDyLcYUzriy7PYX6WfUS+Lu6xAUJzYvU+aLmG+vhlNKX7tr7Er9w/TfwQveS8h8/4xcee8WfSPjpe7f96NnbNrR3rAzE4wGlec9zP73tf3XEj+O9Xx2746c/qdbr6DCvHSJTmL/oLMkeFm1ATzHMKCGWZFEtPACvMALjbRQxOF+LI/Q4mRVTS1Uq4QKsKOOI3UWzzmTWRTuRt3QGGgnoME0hgHtfLSSjJEKHhPDesIYOhed0ZsLKG8qb4Y0hLPZgeUvpGJab0dX01qGIsk/I5wU6FBmaA8/RSDiMGAhzf8+C39vL6rDU6j5iM2htGZeBZh2UN2glehVnU+4u/5kz063lD4WH6Ta67eHyR5Sz043lPyt3062cWfka/ygNKt9XXuYP0OXKy8qRcnb7OppSSuu2Kz/hfkxnKW8pB/kXaFo5qPwG7QTWwmCtk5U4yLgCGFuiEqSi4rklL5Xxw8iwxgXLk6oDHdqHNSz70P5wwKlarPMLsnyroYR1VMCOHHx7bQLrjUjBgHVaOrU4xQVYmAdQjaZLgi8pS5KU50dOA9ODZwRoUSpX6ge12F+B1JJ6ghWOWBkDU25EZi+YWKcN1C/SM+WAGEIrY+3KEFgNHi4VuBQyeNU/Vm/D+KeZhMnFjIMcjIOQfSIs0KCyDwaogiU5OBZeAPkp+ICRhusEuwf9i4agaD1c69A0hcIsguBxwDVmV/3hasHiWYECK3gNYELTcS5gophLxlKczT+iGvDnNT/avPlHyqfKO8qnPxJXPPj6B68/uEI90G9LtPUivvCZh+CMM5x5Cg7KQ/QNZYVyYgVRa8W0qD+A7MTLZkUoYe4ea0StCbkGa4sKts9MO6koWo6c3E/J/pNlwoopEWBgWPI04fepZZRn6FhDGkkbuapaQRnDqpJirBmVVCwKSqo+AVxQ0BiSrJRQl6RyOxNRtZaSA8qqcWMMAoZKxQmY5CQTPPDJkKWgZYSXDRbsKYa/4tVSukzKwV4irQb5QGb9oIeEdOdkqrJwIJIBFkYuAoABQ/iU9Gd4FogbZcG7iFtyRyLpCFhVCYQS/j6FZ/E+x566KB2JuBUCz7jH1WpVxtxJ7quOOZOQ0ykspjl3rNnzjvWcYXVV8ELDR19CYCCn4yY5NVJo03wit4+QYlt7CtHAMBzTYzhAqwFma4pEWya0MubLmEG+Erl/Sp2UfzLnpS4Pb9eBzo6CQbb9YyKBKaK8089zkrbd7W7SbXzq8+nF+VwcRzmNEcjWpIPnaYHUnkW3asQzQVIkSyaTqWQ6OVKlZFOiEOpIpVgx3kSgoi9RbEl3p6DFD6yRmYLYrS1R6MpDS3upkJsG1+cS/YJxRG8CmeV8cK+5VBACeLRguLzQ0gbn0VKhFQssohZmFNNdcJ4qFTon4ZEVWRS0eTifWiroe/E4NmEz/ikf2qCVh1f1+Hnnn0d56Tx/5yc7Kk+qas1zirDHtzP/mw7SQd31uusBVxDaw2WxAis5lWKlINVFAmaqtbt0UQrqabDW3tVB7/jd4fCGyOFI5DDXfDg8FDkcDh/+nbLzghV0sD29UL0fPhwZCh8un8Sn8JF34H6SjKv/tsGvzWcWx4VzzDStl2laNdbtVvVrM9abYmxbI5gsCDkMiE5IwYUlmaac3CQOU1JjUFVruodLejnw8iiLbcep1YLV0xaCzFxRiZvpf0mK+PXv73z9wfCZwmmhv6I1d37/64oo0f/avOJBjlf2Ysk02FlWOsef1Xc/WVvtvZdVzVXGEDh3DMHKGA7jGLy+84zCKw4TR00Dq5ezygYcVpG67Syy/I9GxWMd/j8e2a2c9M8Gp6iMcPb4JpDhceMLM10WTBa9TIt7W8A5bGaRgmY/qOXK2FvHjb0Fo4koTnIgWYyyGEQ0DJ9qieJpCxa3RMcoFEPpAwrJQk6OikVXE0vfua0FDdZO/P8j1ljE7Z8RrRoe+x+Q7qxYlgAS1KYn2uOkjtVYxpBLahKytYTJuWjFFrIFGUAvcMs9J8YlvMBLbMcclwd4pUbk670sgzNBPGQUrM0BptGjCC90JkeTH9c/YM2Ex4cDFymiCgCLCCqiPOCCZGcW0Cr4VDrO0ulzWrQ+axUQnbqC1tA2WrOGfqpor1D+Wzmu/PeaP9Jt81741fNz6U7lroff3vhCv1DJbu1nsEkg9NS67dvXKhpFs24bYMpTyl3zBwbm0R10+yOL5pc/VB8+yVVhFWDaKi0QzzYCLVIkzzxyoIBBpUA6gXUypNDcCi6GpUnMsenOG4nO7HJ7wpF2LO+VBWtRa7XlquME51LHBkZdZuqiUcr8TRqxZbFsAdUXkiEYsFEni76y8e77t2/fvW4LDEu586PbwhdpyEWj7Sf3t3UqbSY33sCB//k2ei0jyL5/u5QeN8FtddSX3h1fNB8/9yZ+rjyw/6RJaessH7k7juP/863KbUgTehk93tm2/yRR6w05ieHUGkIMHGbTDBS8B06ieWUE3mheUkbYmzLCk7Ov2TNErbdktQ416AvQsS+R+PzoCLzxeWl0hL2NjgDIPeuaPYMyLVUwXw1orHZyC8EqCUR5rmSyaGbCbDaBWIqOBjSkrNC8YAwzm8pkOg4uQbXm3AI8aivJtupqIcwa1LNEbSEBfGsBtFHkAkEMo7vsWMMzQV37YgDGbcPFMJwhx9zFcAVcahyIeMf/U7O0RDWczGwi0OzPUAQeZJRUrB5aOGxAJIJY7DRxoxlkWVWpTLiRcn78C9oFcxpxHbN3hHrB57kXcDAxgGtFeaqpwdbfHKFv0jeP0N+UDx8+JNyoPF1+n85VDnEuOodyrvL7aL9Uv0aCqTWSVpaf0QGVQMQ11fovdLaFEq6IKegxYEYxHm3gdLggBiuWJOQNaRTr7UF1CPCFoEUUcFHU8v8xPx+1iQFXwhgoWwpE0ZHhySm4AyOEMeJ6mnKeB3IoqL8FNtcj2hH4nJ7VqeFnhSzNoozgSwJHbWQUGQ01VvsqbmCVMg/f4ZMjvKTkR+EbMCmg3ivX4XvFR4Rvhm/1MVTGw4gNTNeDx2VE+eWJqEZyKVv0gz0m6kBxSRgu1ygzl64ssSGOszU6tsahF6tHCqbGFKsf0TN30YZpX7bogZ4o6G3AkipSNldX1bDCqka2BgIoPBYIEtkyAH+aC8EpAE03dfgtHAlRsuXAFvivVtacJuC+HztG99KFtOmnm06TXyjfUSKchT2CU6OW3hyjq18Bv4ls+qnyH8r3lG3HqEDfoEt/gWMgYHt1f9Q9xWhdX/FG7Uy7m6HjDQk0b5iLiGRpD3W6qBM9aFvKVu3q/G3LuI9zDz44ifv7sm0HP/kjd0NqOK38helbSl7eK7x+8fTpF38a2/uyhi2tGz1c1a38WG2JlURInFxKEHg0lIoNGLMnDU4wryDoTSU5jnHI1lJloaAZhbpo1uBD5loMBCcScssJuU0NAbW1YJi+IaBhtqapGUQ22qaWUfhR7zpd6AlGWcESVwnJsaVLWlZKlq36ihLt7KdTnrv5/WXhOUORHQ/sP3nl3KHw1of2nwQu/3m/8pPnbv7Dcko5NiGgY8l3j69ZHh6aG9l2cr+yZmhOeDs6lthI6TY2I6SyPoytdYpiVWIEC+2wUNtaKlrZUiYr5jhgCnxqBfpY9KuJrU1DBXZGbemZI88K0s1NoLY07gjaHrtYqG3G5CFYnAYW8NKLhRq2nqbWigqM5tSot2h3+s6sWGKxr1TFvawsaQKu5ghbjgfdB80jwQGvlE8QPvB5VPK4TIlTlyepLuXzSjdecQTvlCW2ZI/VEgFH3qNFeTERJ8w3Lj1D7ewaVwRhV7EUKOSC3YJDEmpzLBdWAUV2LYavquVXVKogoOULlPXK+gUHKwsHxxDPB68tUIbovgW0pPztKN5U7doqtGuat1E9oWJx0SC3SnqbjqB7IfikEY6sKiN/wqTqsb/qukLvuJWqmoqAj4WBcF3VmQWDevIxUV+0srL0zPs4/0EkIfAfqsE9ISkbS0UjW+ZmBHsma6BBNU6+khxKFut9rGy/CW5Zkyz8x9YI8rmCrx6OQXWNoDUb9YtRTOpaXWIkxFGxGSQ3k+aiolPAikmdi5JrN/yOk/4wa8GvDx5SfvM4L9le71sI5zT0ONwRyIPUteF3ZekPfT+4UlY+jCmnvCfojPJRDp/74TqZ2mJU1/y68sOjDyrvb/idmqvhgaYCrsF0VOmEQS0hUdCMLROkkoDqG4lAqnYIJwHp21KN5ejUaJhepQmWWOE3oJY2jH1RmNkgAQwQLrvE4NooOptobQa4vJ5o/h2+0cbQ680Ew0IupjyaWG6kOYlrHUHu/EkMP9eqS+W04wv9zpQqqTIXUIFtuFqkVCtaMeVeCCBaaPI2I48WeBfc0Zsd9erSg2GDyd6gJuCBwxCwd6Z7aNJL7SYaiFRxrKFyb4Du3KL8N/2qNDL41ae+OohvrVsf3rr1Yfpo9Q6f5/b3KM1gMcn6yiODgzSHD21VpLF7Z9klXKGcJEhTdYWykfEtx9Yp47pkdSlyQUMA7uiNcCZUlAPFhXb+RnpG0aMx5NlS1zL5yxkdz401KtLZGt6g4rbKOmnVk6hGRu5ns13L1mm5U3IOy/2wii6Qkqew7FU+Ibem5GklOcJW5iRY700p6Dqu5+1UNcf4gAgMZpgTm0IhVxJtiA8DIXBmwRhUoRujHZNLwwZzTy8+MFldK6oGPAqTu2DgWAOlclcF1zEuCzr8maC1Gj38zNE6DuHZxq8qPwvtAbbBSEaEQbdx/y8ah/suomxhMb4wFoIQ8FNQRYAGRx9jj9PIWYc32GF0XDBErS8FzIXx6kaSIGhVeLY4iGeGhTdgRpQ3ob1sYhoXjUgJK/3RvGN0sbIiiyW7wPtMVXKe0r4hne7o7i9fkji6bf9Jl6tSGcjtO77PE9x9dNUVu07u7+lVF6Gjjsc8hqBG/4GHopH0VLVcz26mJhoFRwKj4y/SOXPe7z8+h3rhOOdYv5KjByg5cBoRpQ/vHu9/f84c5Z3+1/rfn83NUnL8L0+TA8xBpYggNeia6VAn69g4eVVlVMp1q7qiast5Nd5bjfKqueXXNB9q/hVUtHtsbaohoSJBXHYqa9SkELosUabelO8spR8qtqV0Ka5KXzqo2BTbIF0K9sRGX9NK7LuA6bPUD5+KQuOHS5XvoH6iS5fyI+xZ/BjLK+S12H/0LtEjghbAlGB/yiMCAOE8O2PPoZ3K43OAvQ3sgxz4V3klzxMuXwYva0TJj9WU89BJsNciKcIFTDOgUYGRATxOXl2gTkFDQzc/5zmQeVTQ6lL2qp+gkdi2DVZWG43+ri6ByAP9ARa6YQj5U+gjR9RSX2RGC15oJC05a6+H80VJv4/UL1p8HSm2Wr8o+iei4AqJoj2UxjbAeo5wBtv0iWJ9Sxe2GQAkTshhW22i2NTGIql1paKnHSOpFJUHOVEU1L0i+FJRazSxM+b9Fe31TXhlKxWdbi87YzmRYkhVGcFSMYLR0yRmSABQFtNd3UkWQC12TuqBs8K0yn4SZ4Kenw2C/k+uOSL94z9OOnsDijL5f7tmLMGxXBPLC6EOnsryQiD5jVgXUN2zomlc+bJYjeGDFkX470Gbh1Ere+6cTFoggstXqgaCw3X9akoNa43VXTVUG0HUVBuuYNpHh3gyOj5vpfZPC7IcIV8i2JlACZExgqEIA0N6QDwqpGCl2MU6G1vgb0ZdFlXXkyN2kuuSiJSM6qYFLFeMdcahBAbyCj4jrivTaDm1ulgWwGQTIxN0meKlXIdYSo1+G2gGADLYAL8jmDl7yKExe6hu/wC+Jg5VGj/4SpoOvQK4f5qwPSKYaIyRYX/VDWLxDbXOBXNaDVg/ZgSPIIUOokNdx2ms5u60NZhrKWq0SAANNcSKWg3Lm2OBE4AXK9xvKFVXdfrtBD32CMFpwxH4K0c0Mspbb50mbylvsTlib4L0nvJIu/IXWtdOL6XrKAtFoE1Sj5X1AES1Mc0wW4tJMYKrV7zgtqWq1sb7WWsDM+Q/ARPBZiHkB1tbE0G85I0AePL5Q+ih8GKxkQVd/qEpwlL/gIYdKNBbq/2MVcK9OBRpiA5RhrsBFIG29/nG2yi1YBDe1PGcsZkBXA/sYwPxgngki16Gtr1sIF6E4z6LOkRco6AuTfD6YDAuwvpfoM5/2ntM6TJ7em7PWXcRvimqZf1sr1VOw/xnJXZjAI18NbNcGuaR4HYemAUt1rLitloLkt42tsXI+OScheHaosWMD1rAg0a3i+XdipzRipEvtuYC49UCNurVRtwKRhZVAdHhJGRFA9o6DEVjtyT0cDAIFFEugpPyG5yKfShj/ze5MJ4/Vn6D8dFYHlcgRtJVHYdRtcM1n+l2JRKFPZQ56JVRI46JKmXOgOhHg0PBcPEqHZHB4Uri1LUm3JiMiaAFZxIMIjhwmTRKlzY1TguCX6BlmsRWGjZqcVeWehYNMTKoVDCCp1VwNuTOKEMxGNDiogsH6IZORISRdBYjflhfwKrB8qPq0gsebMfoKxlVGX6KGkJCLZC9J8vWIZEDulW6VeAXd+K8Rlh5VqcahckCxDkhd5TkDgurJnWzzGqhg8e0vEZfO6EddVpaHLaE6tjSEbf1sOiob2oOshhIEgTtsIf4Qy24x4ncKQ5TTT1uqCGbrYe1xjqLzaX6KVmsZIpmNZ1ZPusCzJZ18U5X2IV1TjqXLqzV2XRYzhjVRW2RqKaq9w/8Qa//wyQ6MdHtuOOl6ZbpL93p7ErRiZNYs/Jq21QnNBv001+6w9GVUl7lIgyFcX+sNnYnzvcwfony6qTKd0M7Z6yAN/6s/ZfYbKo7MLnHrNnYnkYudQcmnDkXOG2HcQcm0c6o4jYj9bQ6YnWcswsT27EoS7U22skWEJ6zG1OSth2/9QvlGbPK3NFZyvHjt52zL1PyuHJ8Fnf0izRVnrHrtuO07Zx+byIon+D9mJn3Y8QobKW+pIJHm5jmr2Wrprlk0cjKHI2o6o0WNAg65vagodYn2Rh16MKZbKCQRLFgBqll7ipu08SwLC41dWDyyFLBxdUCNNQvAsjvKGK/is0+zA5azLOi/yKQU79gJqu/arjOyDBivCZS9dnVgJWgUv6Mz872E2ABY9XJQcj4qRqPIWNxAO/ZsYPq15XGBRFQflSPX40zs32OJLZfGa5P01U+VMGo+AmbGsmFIai/qwLWcZ/lznyWRw0w9lnKdoFSd9ZSt3Eqs2+o7PNExu/zRKr7PPGUbVSir2KuaZW9Sf7/oS46DnWdKWQaZeuEkTAV+IHICm+cUmGXhpzKjIu9Vvqo4q4bSLEJ+/j/iLx045DX58CuELDkIU6jFZqZ1J0XcdmqiMtf+Xd+xFXdb0tSR3n6rJFzn4VcZdx4ipkBtbDr1HjUdbYsukgH0yF2dY+PsRmqT7C949REkA7tvFkEg5T7nD3b+JQYPHfftiLrV2xk5LMqgn+PdWYU+nlWf8xj/bGx/piYZR/fH5Or2p/a8/VnfHj+3P58+0zs5rM9EpLj4zfj+4R5zytZnxIlrLv2sB2R1OwnatumUrGJ7UHSZMNUugWjkyj+uIFAE+CGw7yxtq6NmamI+LRBMLfGO1JqbVmqOpbW847Fxcriseod/3loCivlqxX0wYD1c8fJrfzymkiju74+c0Gj+2XROmMgHF685KuHas87dP74oT6L2Bhsagy0trdNywU8dkd7ZtKkhZunTTuTsmBreNWcBagrm8jyWgA5VKEDXvPRt1mC6O1znsWkEjwrsN0GcZdB+rbiUz/B8l7VfBnm5KzECTKJ1HawiJcJdD83tilbTRJj5hgXRtWQsvltNGhLRYM2dp6iPJzDbw/SxYMgBo4TMWmkcgmC8Ue41LCYdBmVAOKlsYtKXlHViaCy3Jir7bRGQmYajQgfW7Zwt3G3bbH8XHltyyOPbFFe09yhPD9UfpC7Yoh2/0kc+vrXh0Tmz5C19KTuAW0zKHgD7h9po1nepmbvMPlrW0s7Xj927HW66WNKPqb3vE4TyrHXfykQJbeX5mhu7+iyHoH0jD6+l75IX9yrvFipSQBtVcknNpAw2U5QNtwsWNhUwhC6L1XZqC6IMUJW82hEzizogkkgYBMjoAYVGior/GiTutGFP6lmhDGn35zAckhAB00YDMWwaDAMZzyXY1un0TBLYxrO4wenRBUL+3m2V4dWrdYcq2XK9Et0rNBCzXxKSiXxiVJXfaqfZir7iJw+z7g96B2q4/aoK8e9bJRw7VYLg21qvVGjG/dt1KGf5XZVh2LyIMQ38Ll/NpjM5w+CZUP/Yfel8/S7mZB/8HsYYYt+3i9upBb6/EXKvsP/8FdnKB/RF/AptjdeRe40oNu9LP6vHxfx1luBCryWVGoxUIR5MD1J4hCjcRrEXY9YGQOmawC37ZvzzJrTiDlYXQP+Q/yg4KaGyvF9c+YqUiWeWJUbN8uhYozdlMBELylwtZWlJoazfoee5yfO/tpxuSIeaJgmiIlslV1SixqhGgVgOsFXRT5+/E2NwPYnqSAgMclWt/ApdEDjPG7pwAr0grlUz8a+mZv7+zfPRI5Tz/o29qRyiB5OEQzvY5AaX+Wxs7G9ZHCvUZE4SD/zqNT6aFoqaulYUIIf22NSrSwQ1FwOAPOCoAPDoDfWmK02dT2GbMqNA4tZrMhvpv5ohDn80J3TmObhydYtZbJlK88qCFiUCcgGfw9vhT/+YUrO8vccIDPziGrRCzXOJMv56FXBEU7IzlJRcGJnBeysU/UYakrFGrZFVg0AHSZOLmdVnCpoDNwCH/HQ8ZhMXS+AzEvb6OO0jVU8Eqw15TD8TBm/SjDdMMWV4o9+PsOwCcbpOMLipXWsx0sYDjaxPVvVdQCc2mWgo4m5CyZ1m1bAXm7MjmtUsddYWTE6KThMIq5rkJ0iXMqeSjhbZAubdGyVUzCcQssZo5nKEbswtC83sPbobmVkBFO4I2oxCoLbfUNLZ0UfumT3UUwBS8waYn2Q2ucapHANm38OQ7cFXp9Sly2o2VGsAZ7i/NP7rAaYi8v6uMxZCgbtJ7iTJ6/9hB/meL2hUgGMFM6mbMGsXxfkUzpOapE+klroCDtwhEXRykSq1gVJDPtj5Kx3XDU4VavBAZnUlHBr10oG0QYkqqFqjZ5GLBhMqB9FARFIbS43lluMUp6r4grE+5iJUfIjFVTNPACJy4+UV1EfPYMNNGx/D+Q5DUNxDsD+VlLdv7gpUUm12ERXVufCGIorymQzG3VlRcqyttID7z7wAALWBx54l66FkcIRrh94AFrQMuMlrsiAw+i7WHOjEPUTgsSeY/VWGN8fOW98P4V1VyP4bzSv5gzgUs80JuBvbGW3Vewi5FndFsfqtli7nozm4S4V8pWaLg7zHaIAjfj6WCL/F8P1u2sAAHjaY2BkYGBgZjjy6Mpmh3h+m68M8hwMIHDua+N+ZJqDgQNCMYEoAHf+C1gAeNpjYGRg4GD4fwNEMjD8/w8kgSIogBUAY/wD9XjaNU+7FcJADJNNCvq87MMOvEdNxRyq0mWH1GEWegZhACz54nvnj+yTzvGDLQ8gKr8iEQDBRDKqgmqZMMq7/y5kd/UdCLFiC+ITZiivaz6fR0er6d054SksUgzmU3qFEXdFzV2Ez8Ywlc/m5Pilsr2VWitP/bGJ4wvDWi96P3Not+n2B3lgIYIAAAAmACYAJgAuAJIA3gFaAaABrgHkAjoC1AMkA4IEUAUiBXAFzgYgBw4H7ghiCPYJsgp4Cq4LCAs2C4AMHAyiDiAPnBBAEUYRvBMwE7wUHhRaFIYUshTcFVAVgBX6FpYXXBeSF/AYYBkCGYgaBhooGkoa1BryGyQbQBtsG5Yb+Bw2HLAdLh1yHYYdsh4cHjYeYB7iHyYf3iAgIFIgdCCaILIgxiDcIPAhBiEkIegiOCK6IxAjeCPQJDQkbCS8JVIlriYWJjomWCZ2JpQmoib0J3QnvCgGKJAopii8KQApIilMKcgqJCpiKpwqyCsUK2QrvCwWLFYsnizgLPYtBC0SLSAAAAABAAAAgAC9ABAAAAAAAAIAAQACABYAAAEAAYEAAAAAeNqNkr1OAkEUhc8CmmBhRSysNtFCTfiXqFBZiIkaQzRqZ7KaBYz8CStg4/PpC1j6EJZWfjMMwSCFmczOuWfOPffOzEpa0avi8hJJSZ/MCfaUIprgmFb15XBcZW+qSWjTKzu8pLF36/Ay/IfDSa173w6/aS2WcvhdudiOjlXTmXwNFaqvgR7UVYe4wOzC+AqIX1hboMiq/qpHoEhNUN0yESjUWPd8e0RT3RaaiNFTWVnGyI6MGuw+s5qKDfgWGSa3Q42QmYXtwabxD/SE0vi0YTZUdRWP/tTb5nTGw/Rq/LrW74K4QTVznr6KeOUYRVV0pVPd6By0KC89l7lI489prufu6Xe1mi5hJtGMbaKMnN+Q/bzdy2iPb4UTB3rE02jqsOae7nirjEp27uNR0MG/+j+BD21Xh+y24Qf2tjvcQYjr7CUnPVStm09eYLPycKb/Em9Zoq755u2fk2Pd/QGe+3ARAAB42m3S1XIUURRG4VmDBHd3d5k+Z5/uBIdAcHd3CRI0OBRPyCshmRWu6Kqp/6brm9qrutVujTy/frZS63/Pjz8/Wm3ajGEs4xhPDxOYyCQmM4WpTGM6M5jJLGYzh7nMYz4LWMgiFrOEpSxjOStYySpWs4a1rGM9G9jIJjazha1sYzsdKhKZoFDT0EsfO9jJLnazh73sYz8H6OcghxjgMEc4yjGOc4KTnOI0ZzjLOc5zgYtc4jJXuMo1rnODm9ziNne4yz3u84CHPOIxTxjkKc94zguGeMkrXvOGt7xjmPd84COf+MwXvvKN7z3DQ4OpDPT/3YGq03ErN7nZDbe4tdu4vW7fyCa9pJf0kl7SS3pJL+klvTTqVXqVXqVX6VV6lV6lV+lVepVe0kt6SS/pJb3U9bL3ZO/J3pO9J3tP7oy+X7uN2/3/0Amd0Amd0Amd0Amd+Od07wi7hF3CLmGXsEvYJewSdgm7hF3CLmGXsEvYJewSdomkl/SSXtLLelkv62W9rJf1sl7Wy3pZL/RCL/RCL/RCL/RCL/RCr+gVvaJX9Ipe0St6Ra/oFb1ar9ar9Wq9Wq/Wq/VqvVqv1mv0Gr1Gr9Frul7xuyp+V8XvqnTyb1UoNRm4Af+FsAGNAEuwCFBYsQEBjlmxRgYrWCGwEFlLsBRSWCGwgFkdsAYrXFhZsBQrAAAAAVLP0T8AAA==) format('woff'),
20
+ url('../fonts/genericons-regular-webfont.ttf') format('truetype'),
21
+ url('../fonts/genericons-regular-webfont.svg#genericonsregular') format('svg');
22
+ font-weight: normal;
23
+ font-style: normal;
24
+ }
25
+
26
+
27
+ /**
28
+ * All Genericons
29
+ */
30
+
31
+ .genericon {
32
+ display: inline-block;
33
+ width: 16px;
34
+ height: 16px;
35
+ -webkit-font-smoothing: antialiased;
36
+ -moz-osx-font-smoothing: grayscale;
37
+ font-size: 16px;
38
+ line-height: 1;
39
+ font-family: 'Genericons';
40
+ text-decoration: inherit;
41
+ font-weight: normal;
42
+ font-style: normal;
43
+ vertical-align: top;
44
+ }
45
+
46
+ /**
47
+ * IE7 and IE6 hacks
48
+ */
49
+
50
+ .genericon {
51
+ *overflow: auto;
52
+ *zoom: 1;
53
+ *display: inline;
54
+ }
55
+
56
+ /**
57
+ * Individual icons
58
+ */
59
+
60
+ /* Post formats */
61
+ .genericon-standard:before { content: '\f100'; }
62
+ .genericon-aside:before { content: '\f101'; }
63
+ .genericon-image:before { content: '\f102'; }
64
+ .genericon-gallery:before { content: '\f103'; }
65
+ .genericon-video:before { content: '\f104'; }
66
+ .genericon-status:before { content: '\f105'; }
67
+ .genericon-quote:before { content: '\f106'; }
68
+ .genericon-link:before { content: '\f107'; }
69
+ .genericon-chat:before { content: '\f108'; }
70
+ .genericon-audio:before { content: '\f109'; }
71
+
72
+ /* Social icons */
73
+ .genericon-github:before { content: '\f200'; }
74
+ .genericon-dribbble:before { content: '\f201'; }
75
+ .genericon-twitter:before { content: '\f202'; }
76
+ .genericon-facebook:before { content: '\f203'; }
77
+ .genericon-facebook-alt:before { content: '\f204'; }
78
+ .genericon-wordpress:before { content: '\f205'; }
79
+ .genericon-googleplus:before { content: '\f206'; }
80
+ .genericon-linkedin:before { content: '\f207'; }
81
+ .genericon-linkedin-alt:before { content: '\f208'; }
82
+ .genericon-pinterest:before { content: '\f209'; }
83
+ .genericon-pinterest-alt:before { content: '\f210'; }
84
+ .genericon-flickr:before { content: '\f211'; }
85
+ .genericon-vimeo:before { content: '\f212'; }
86
+ .genericon-youtube:before { content: '\f213'; }
87
+ .genericon-tumblr:before { content: '\f214'; }
88
+ .genericon-instagram:before { content: '\f215'; }
89
+ .genericon-codepen:before { content: '\f216'; }
90
+ .genericon-polldaddy:before { content: '\f217'; }
91
+ .genericon-googleplus-alt:before { content: '\f218'; }
92
+ .genericon-path:before { content: '\f219'; }
93
+ .genericon-skype:before { content: '\f220'; }
94
+ .genericon-digg:before { content: '\f221'; }
95
+ .genericon-reddit:before { content: '\f222'; }
96
+ .genericon-stumbleupon:before { content: '\f223'; }
97
+ .genericon-pocket:before { content: '\f224'; }
98
+ .genericon-dropbox:before { content: '\f225'; }
99
+
100
+ /* Meta icons */
101
+ .genericon-comment:before { content: '\f300'; }
102
+ .genericon-category:before { content: '\f301'; }
103
+ .genericon-tag:before { content: '\f302'; }
104
+ .genericon-time:before { content: '\f303'; }
105
+ .genericon-user:before { content: '\f304'; }
106
+ .genericon-day:before { content: '\f305'; }
107
+ .genericon-week:before { content: '\f306'; }
108
+ .genericon-month:before { content: '\f307'; }
109
+ .genericon-pinned:before { content: '\f308'; }
110
+
111
+ /* Other icons */
112
+ .genericon-search:before { content: '\f400'; }
113
+ .genericon-unzoom:before { content: '\f401'; }
114
+ .genericon-zoom:before { content: '\f402'; }
115
+ .genericon-show:before { content: '\f403'; }
116
+ .genericon-hide:before { content: '\f404'; }
117
+ .genericon-close:before { content: '\f405'; }
118
+ .genericon-close-alt:before { content: '\f406'; }
119
+ .genericon-trash:before { content: '\f407'; }
120
+ .genericon-star:before { content: '\f408'; }
121
+ .genericon-home:before { content: '\f409'; }
122
+ .genericon-mail:before { content: '\f410'; }
123
+ .genericon-edit:before { content: '\f411'; }
124
+ .genericon-reply:before { content: '\f412'; }
125
+ .genericon-feed:before { content: '\f413'; }
126
+ .genericon-warning:before { content: '\f414'; }
127
+ .genericon-share:before { content: '\f415'; }
128
+ .genericon-attachment:before { content: '\f416'; }
129
+ .genericon-location:before { content: '\f417'; }
130
+ .genericon-checkmark:before { content: '\f418'; }
131
+ .genericon-menu:before { content: '\f419'; }
132
+ .genericon-refresh:before { content: '\f420'; }
133
+ .genericon-minimize:before { content: '\f421'; }
134
+ .genericon-maximize:before { content: '\f422'; }
135
+ .genericon-404:before { content: '\f423'; }
136
+ .genericon-spam:before { content: '\f424'; }
137
+ .genericon-summary:before { content: '\f425'; }
138
+ .genericon-cloud:before { content: '\f426'; }
139
+ .genericon-key:before { content: '\f427'; }
140
+ .genericon-dot:before { content: '\f428'; }
141
+ .genericon-next:before { content: '\f429'; }
142
+ .genericon-previous:before { content: '\f430'; }
143
+ .genericon-expand:before { content: '\f431'; }
144
+ .genericon-collapse:before { content: '\f432'; }
145
+ .genericon-dropdown:before { content: '\f433'; }
146
+ .genericon-dropdown-left:before { content: '\f434'; }
147
+ .genericon-top:before { content: '\f435'; }
148
+ .genericon-draggable:before { content: '\f436'; }
149
+ .genericon-phone:before { content: '\f437'; }
150
+ .genericon-send-to-phone:before { content: '\f438'; }
151
+ .genericon-plugin:before { content: '\f439'; }
152
+ .genericon-cloud-download:before { content: '\f440'; }
153
+ .genericon-cloud-upload:before { content: '\f441'; }
154
+ .genericon-external:before { content: '\f442'; }
155
+ .genericon-document:before { content: '\f443'; }
156
+ .genericon-book:before { content: '\f444'; }
157
+ .genericon-cog:before { content: '\f445'; }
158
+ .genericon-unapprove:before { content: '\f446'; }
159
+ .genericon-cart:before { content: '\f447'; }
160
+ .genericon-pause:before { content: '\f448'; }
161
+ .genericon-stop:before { content: '\f449'; }
162
+ .genericon-skip-back:before { content: '\f450'; }
163
+ .genericon-skip-ahead:before { content: '\f451'; }
164
+ .genericon-play:before { content: '\f452'; }
165
+ .genericon-tablet:before { content: '\f453'; }
166
+ .genericon-send-to-tablet:before { content: '\f454'; }
167
+ .genericon-info:before { content: '\f455'; }
168
+ .genericon-notice:before { content: '\f456'; }
169
+ .genericon-help:before { content: '\f457'; }
170
+ .genericon-fastforward:before { content: '\f458'; }
171
+ .genericon-rewind:before { content: '\f459'; }
172
+ .genericon-portfolio:before { content: '\f460'; }
173
+ .genericon-heart:before { content: '\f461'; }
174
+ .genericon-code:before { content: '\f462'; }
175
+ .genericon-subscribe:before { content: '\f463'; }
176
+ .genericon-unsubscribe:before { content: '\f464'; }
177
+ .genericon-subscribed:before { content: '\f465'; }
178
+ .genericon-reply-alt:before { content: '\f466'; }
179
+ .genericon-reply-single:before { content: '\f467'; }
180
+ .genericon-flag:before { content: '\f468'; }
181
+ .genericon-print:before { content: '\f469'; }
182
+ .genericon-lock:before { content: '\f470'; }
183
+ .genericon-bold:before { content: '\f471'; }
184
+ .genericon-italic:before { content: '\f472'; }
185
+ .genericon-picture:before { content: '\f473'; }
186
+ .genericon-fullscreen:before { content: '\f474'; }
187
+
188
+ /* Generic shapes */
189
+ .genericon-uparrow:before { content: '\f500'; }
190
+ .genericon-rightarrow:before { content: '\f501'; }
191
+ .genericon-downarrow:before { content: '\f502'; }
192
+ .genericon-leftarrow:before { content: '\f503'; }
193
+
194
+
195
+
196
+
197
+
assets/css/jquery-ui-classic.css ADDED
@@ -0,0 +1,575 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * jQuery UI CSS Framework 1.8.16
3
+ *
4
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5
+ * Dual licensed under the MIT or GPL Version 2 licenses.
6
+ * http://jquery.org/license
7
+ *
8
+ * http://docs.jquery.com/UI/Theming/API
9
+ */
10
+
11
+ /* Layout helpers
12
+ ----------------------------------*/
13
+ .ui-helper-hidden { display: none; }
14
+ .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
15
+ .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
16
+ .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
17
+ .ui-helper-clearfix { display: inline-block; }
18
+ /* required comment for clearfix to work in Opera \*/
19
+ * html .ui-helper-clearfix { height:1%; }
20
+ .ui-helper-clearfix { display:block; }
21
+ /* end clearfix */
22
+ .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
23
+
24
+
25
+ /* Interaction Cues
26
+ ----------------------------------*/
27
+ .ui-state-disabled { cursor: default !important; }
28
+
29
+
30
+ /* Icons
31
+ ----------------------------------*/
32
+
33
+ /* states and images */
34
+ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
35
+
36
+
37
+ /* Misc visuals
38
+ ----------------------------------*/
39
+
40
+ /* Overlays */
41
+ .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
42
+
43
+
44
+ /*
45
+ * jQuery UI CSS Framework 1.8.16
46
+ *
47
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
48
+ * Dual licensed under the MIT or GPL Version 2 licenses.
49
+ * http://jquery.org/license
50
+ *
51
+ * http://docs.jquery.com/UI/Theming/API
52
+ *
53
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=sans-serif&fwDefault=normal&fsDefault=12px&cornerRadius=3px&bgColorHeader=eff8ff&bgTextureHeader=04_highlight_hard.png&bgImgOpacityHeader=75&borderColorHeader=d1e5ee&fcHeader=333333&iconColorHeader=21759b&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=d1e5ee&fcContent=333333&iconColorContent=333333&bgColorDefault=eff8ff&bgTextureDefault=04_highlight_hard.png&bgImgOpacityDefault=75&borderColorDefault=d1e5ee&fcDefault=333333&iconColorDefault=333333&bgColorHover=f7fcfe&bgTextureHover=06_inset_hard.png&bgImgOpacityHover=75&borderColorHover=b8d7e5&fcHover=000000&iconColorHover=333333&bgColorActive=ffffff&bgTextureActive=01_flat.png&bgImgOpacityActive=65&borderColorActive=d1e5ee&fcActive=333333&iconColorActive=333333&bgColorHighlight=ffffe0&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=e6db55&fcHighlight=333333&iconColorHighlight=21759b&bgColorError=ffebe8&bgTextureError=01_flat.png&bgImgOpacityError=95&borderColorError=cc0000&fcError=cc0000&iconColorError=cc0000&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=3px
54
+ */
55
+
56
+
57
+ /* Component containers
58
+ ----------------------------------*/
59
+ .ui-widget { font-family: sans-serif; font-size: 12px; }
60
+ .ui-widget .ui-widget { font-size: 1em; }
61
+ .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: sans-serif; font-size: 1em; }
62
+ .ui-widget-content { border: 1px solid #d1e5ee; background: #ffffff; color: #333333; }
63
+ .ui-widget-header { border: 1px solid #d1e5ee; background-color: #f5fafd; background-image: -ms-linear-gradient(top, #f7fcfe, #eff8ff); background-image: -moz-linear-gradient(top, #f7fcfe, #eff8ff); background-image: -o-linear-gradient(top, #f7fcfe, #eff8ff); background-image: -webkit-gradient(linear, left top, left bottom, from(#f7fcfe), to(#eff8ff)); background-image: -webkit-linear-gradient(top, #f7fcfe, #eff8ff); background-image: linear-gradient(top, #f7fcfe, #eff8ff); color: #333333; font-weight: bold; }
64
+ .ui-widget-header a { color: #333333; }
65
+
66
+ /* Interaction states
67
+ ----------------------------------*/
68
+ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d1e5ee; background-color: #f5fafd; background-image: -ms-linear-gradient(top, #f7fcfe, #eff8ff); background-image: -moz-linear-gradient(top, #f7fcfe, #eff8ff); background-image: -o-linear-gradient(top, #f7fcfe, #eff8ff); background-image: -webkit-gradient(linear, left top, left bottom, from(#f7fcfe), to(#eff8ff)); background-image: -webkit-linear-gradient(top, #f7fcfe, #eff8ff); background-image: linear-gradient(top, #f7fcfe, #eff8ff); font-weight: normal; color: #333333; }
69
+ .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #333333; text-decoration: none; }
70
+ .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #b8d7e5; background-color: #f7fcfe; background-image: -ms-linear-gradient(top, #eff8ff, #f7fcfe); background-image: -moz-linear-gradient(top, #eff8ff, #f7fcfe); background-image: -o-linear-gradient(top, #eff8ff, #f7fcfe); background-image: -webkit-gradient(linear, left top, left bottom, from(#eff8ff), to(#f7fcfe)); background-image: -webkit-linear-gradient(top, #eff8ff, #f7fcfe); background-image: linear-gradient(top, #eff8ff, #f7fcfe);; font-weight: normal; color: #000000; }
71
+ .ui-state-hover a, .ui-state-hover a:hover { color: #000000; text-decoration: none; }
72
+ .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #d1e5ee; background: #ffffff; font-weight: normal; color: #333333; }
73
+ .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #333333; text-decoration: none; }
74
+ .ui-widget :active { outline: none; }
75
+
76
+ /* Interaction Cues
77
+ ----------------------------------*/
78
+ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #e6db55; background: #ffffe0; color: #333333; }
79
+ .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #333333; }
80
+ .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cc0000; background: #ffebe8; color: #cc0000; }
81
+ .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cc0000; }
82
+ .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cc0000; }
83
+ .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
84
+ .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
85
+ .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
86
+
87
+ /* Icons
88
+ ----------------------------------*/
89
+
90
+ /* states and images */
91
+ .ui-icon { width: 16px; height: 16px; background-image: url(../images/ui-icons_333333_256x240.png); }
92
+ .ui-widget-content .ui-icon {background-image: url(../images/ui-icons_333333_256x240.png); }
93
+ .ui-widget-header .ui-icon {background-image: url(../images/ui-icons_999999_256x240.png); }
94
+ .ui-state-default .ui-icon { background-image: url(../images/ui-icons_333333_256x240.png); }
95
+ .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(../images/ui-icons_333333_256x240.png); }
96
+ .ui-state-active .ui-icon {background-image: url(../images/ui-icons_333333_256x240.png); }
97
+ .ui-state-highlight .ui-icon {background-image: url(../images/ui-icons_21759b_256x240.png); }
98
+ .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(../images/ui-icons_cc0000_256x240.png); }
99
+
100
+ /* positioning */
101
+ .ui-icon-carat-1-n { background-position: 0 0; }
102
+ .ui-icon-carat-1-ne { background-position: -16px 0; }
103
+ .ui-icon-carat-1-e { background-position: -32px 0; }
104
+ .ui-icon-carat-1-se { background-position: -48px 0; }
105
+ .ui-icon-carat-1-s { background-position: -64px 0; }
106
+ .ui-icon-carat-1-sw { background-position: -80px 0; }
107
+ .ui-icon-carat-1-w { background-position: -96px 0; }
108
+ .ui-icon-carat-1-nw { background-position: -112px 0; }
109
+ .ui-icon-carat-2-n-s { background-position: -128px 0; }
110
+ .ui-icon-carat-2-e-w { background-position: -144px 0; }
111
+ .ui-icon-triangle-1-n { background-position: 0 -16px; }
112
+ .ui-icon-triangle-1-ne { background-position: -16px -16px; }
113
+ .ui-icon-triangle-1-e { background-position: -32px -16px; }
114
+ .ui-icon-triangle-1-se { background-position: -48px -16px; }
115
+ .ui-icon-triangle-1-s { background-position: -64px -16px; }
116
+ .ui-icon-triangle-1-sw { background-position: -80px -16px; }
117
+ .ui-icon-triangle-1-w { background-position: -96px -16px; }
118
+ .ui-icon-triangle-1-nw { background-position: -112px -16px; }
119
+ .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
120
+ .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
121
+ .ui-icon-arrow-1-n { background-position: 0 -32px; }
122
+ .ui-icon-arrow-1-ne { background-position: -16px -32px; }
123
+ .ui-icon-arrow-1-e { background-position: -32px -32px; }
124
+ .ui-icon-arrow-1-se { background-position: -48px -32px; }
125
+ .ui-icon-arrow-1-s { background-position: -64px -32px; }
126
+ .ui-icon-arrow-1-sw { background-position: -80px -32px; }
127
+ .ui-icon-arrow-1-w { background-position: -96px -32px; }
128
+ .ui-icon-arrow-1-nw { background-position: -112px -32px; }
129
+ .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
130
+ .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
131
+ .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
132
+ .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
133
+ .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
134
+ .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
135
+ .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
136
+ .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
137
+ .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
138
+ .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
139
+ .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
140
+ .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
141
+ .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
142
+ .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
143
+ .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
144
+ .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
145
+ .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
146
+ .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
147
+ .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
148
+ .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
149
+ .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
150
+ .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
151
+ .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
152
+ .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
153
+ .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
154
+ .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
155
+ .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
156
+ .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
157
+ .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
158
+ .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
159
+ .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
160
+ .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
161
+ .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
162
+ .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
163
+ .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
164
+ .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
165
+ .ui-icon-arrow-4 { background-position: 0 -80px; }
166
+ .ui-icon-arrow-4-diag { background-position: -16px -80px; }
167
+ .ui-icon-extlink { background-position: -32px -80px; }
168
+ .ui-icon-newwin { background-position: -48px -80px; }
169
+ .ui-icon-refresh { background-position: -64px -80px; }
170
+ .ui-icon-shuffle { background-position: -80px -80px; }
171
+ .ui-icon-transfer-e-w { background-position: -96px -80px; }
172
+ .ui-icon-transferthick-e-w { background-position: -112px -80px; }
173
+ .ui-icon-folder-collapsed { background-position: 0 -96px; }
174
+ .ui-icon-folder-open { background-position: -16px -96px; }
175
+ .ui-icon-document { background-position: -32px -96px; }
176
+ .ui-icon-document-b { background-position: -48px -96px; }
177
+ .ui-icon-note { background-position: -64px -96px; }
178
+ .ui-icon-mail-closed { background-position: -80px -96px; }
179
+ .ui-icon-mail-open { background-position: -96px -96px; }
180
+ .ui-icon-suitcase { background-position: -112px -96px; }
181
+ .ui-icon-comment { background-position: -128px -96px; }
182
+ .ui-icon-person { background-position: -144px -96px; }
183
+ .ui-icon-print { background-position: -160px -96px; }
184
+ .ui-icon-trash { background-position: -176px -96px; }
185
+ .ui-icon-locked { background-position: -192px -96px; }
186
+ .ui-icon-unlocked { background-position: -208px -96px; }
187
+ .ui-icon-bookmark { background-position: -224px -96px; }
188
+ .ui-icon-tag { background-position: -240px -96px; }
189
+ .ui-icon-home { background-position: 0 -112px; }
190
+ .ui-icon-flag { background-position: -16px -112px; }
191
+ .ui-icon-calendar { background-position: -32px -112px; }
192
+ .ui-icon-cart { background-position: -48px -112px; }
193
+ .ui-icon-pencil { background-position: -64px -112px; }
194
+ .ui-icon-clock { background-position: -80px -112px; }
195
+ .ui-icon-disk { background-position: -96px -112px; }
196
+ .ui-icon-calculator { background-position: -112px -112px; }
197
+ .ui-icon-zoomin { background-position: -128px -112px; }
198
+ .ui-icon-zoomout { background-position: -144px -112px; }
199
+ .ui-icon-search { background-position: -160px -112px; }
200
+ .ui-icon-wrench { background-position: -176px -112px; }
201
+ .ui-icon-gear { background-position: -192px -112px; }
202
+ .ui-icon-heart { background-position: -208px -112px; }
203
+ .ui-icon-star { background-position: -224px -112px; }
204
+ .ui-icon-link { background-position: -240px -112px; }
205
+ .ui-icon-cancel { background-position: 0 -128px; }
206
+ .ui-icon-plus { background-position: -16px -128px; }
207
+ .ui-icon-plusthick { background-position: -32px -128px; }
208
+ .ui-icon-minus { background-position: -48px -128px; }
209
+ .ui-icon-minusthick { background-position: -64px -128px; }
210
+ .ui-icon-close { background-position: -80px -128px; }
211
+ .ui-icon-closethick { background-position: -96px -128px; }
212
+ .ui-icon-key { background-position: -112px -128px; }
213
+ .ui-icon-lightbulb { background-position: -128px -128px; }
214
+ .ui-icon-scissors { background-position: -144px -128px; }
215
+ .ui-icon-clipboard { background-position: -160px -128px; }
216
+ .ui-icon-copy { background-position: -176px -128px; }
217
+ .ui-icon-contact { background-position: -192px -128px; }
218
+ .ui-icon-image { background-position: -208px -128px; }
219
+ .ui-icon-video { background-position: -224px -128px; }
220
+ .ui-icon-script { background-position: -240px -128px; }
221
+ .ui-icon-alert { background-position: 0 -144px; }
222
+ .ui-icon-info { background-position: -16px -144px; }
223
+ .ui-icon-notice { background-position: -32px -144px; }
224
+ .ui-icon-help { background-position: -48px -144px; }
225
+ .ui-icon-check { background-position: -64px -144px; }
226
+ .ui-icon-bullet { background-position: -80px -144px; }
227
+ .ui-icon-radio-off { background-position: -96px -144px; }
228
+ .ui-icon-radio-on { background-position: -112px -144px; }
229
+ .ui-icon-pin-w { background-position: -128px -144px; }
230
+ .ui-icon-pin-s { background-position: -144px -144px; }
231
+ .ui-icon-play { background-position: 0 -160px; }
232
+ .ui-icon-pause { background-position: -16px -160px; }
233
+ .ui-icon-seek-next { background-position: -32px -160px; }
234
+ .ui-icon-seek-prev { background-position: -48px -160px; }
235
+ .ui-icon-seek-end { background-position: -64px -160px; }
236
+ .ui-icon-seek-start { background-position: -80px -160px; }
237
+ /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
238
+ .ui-icon-seek-first { background-position: -80px -160px; }
239
+ .ui-icon-stop { background-position: -96px -160px; }
240
+ .ui-icon-eject { background-position: -112px -160px; }
241
+ .ui-icon-volume-off { background-position: -128px -160px; }
242
+ .ui-icon-volume-on { background-position: -144px -160px; }
243
+ .ui-icon-power { background-position: 0 -176px; }
244
+ .ui-icon-signal-diag { background-position: -16px -176px; }
245
+ .ui-icon-signal { background-position: -32px -176px; }
246
+ .ui-icon-battery-0 { background-position: -48px -176px; }
247
+ .ui-icon-battery-1 { background-position: -64px -176px; }
248
+ .ui-icon-battery-2 { background-position: -80px -176px; }
249
+ .ui-icon-battery-3 { background-position: -96px -176px; }
250
+ .ui-icon-circle-plus { background-position: 0 -192px; }
251
+ .ui-icon-circle-minus { background-position: -16px -192px; }
252
+ .ui-icon-circle-close { background-position: -32px -192px; }
253
+ .ui-icon-circle-triangle-e { background-position: -48px -192px; }
254
+ .ui-icon-circle-triangle-s { background-position: -64px -192px; }
255
+ .ui-icon-circle-triangle-w { background-position: -80px -192px; }
256
+ .ui-icon-circle-triangle-n { background-position: -96px -192px; }
257
+ .ui-icon-circle-arrow-e { background-position: -112px -192px; }
258
+ .ui-icon-circle-arrow-s { background-position: -128px -192px; }
259
+ .ui-icon-circle-arrow-w { background-position: -144px -192px; }
260
+ .ui-icon-circle-arrow-n { background-position: -160px -192px; }
261
+ .ui-icon-circle-zoomin { background-position: -176px -192px; }
262
+ .ui-icon-circle-zoomout { background-position: -192px -192px; }
263
+ .ui-icon-circle-check { background-position: -208px -192px; }
264
+ .ui-icon-circlesmall-plus { background-position: 0 -208px; }
265
+ .ui-icon-circlesmall-minus { background-position: -16px -208px; }
266
+ .ui-icon-circlesmall-close { background-position: -32px -208px; }
267
+ .ui-icon-squaresmall-plus { background-position: -48px -208px; }
268
+ .ui-icon-squaresmall-minus { background-position: -64px -208px; }
269
+ .ui-icon-squaresmall-close { background-position: -80px -208px; }
270
+ .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
271
+ .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
272
+ .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
273
+ .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
274
+ .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
275
+ .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
276
+
277
+
278
+ /* Misc visuals
279
+ ----------------------------------*/
280
+
281
+ /* Corner radius */
282
+ .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; -khtml-border-top-left-radius: 3px; border-top-left-radius: 3px; }
283
+ .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; -khtml-border-top-right-radius: 3px; border-top-right-radius: 3px; }
284
+ .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; -khtml-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; }
285
+ .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; -khtml-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; }
286
+
287
+ /* Overlays */
288
+ .ui-widget-overlay { background: #000000; opacity: .6;filter:Alpha(Opacity=60); }
289
+ .ui-widget-shadow { box-shadow: 0 0 16px rgba(0, 0, 0, 0.3); }/*
290
+ * jQuery UI Resizable 1.8.16
291
+ *
292
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
293
+ * Dual licensed under the MIT or GPL Version 2 licenses.
294
+ * http://jquery.org/license
295
+ *
296
+ * http://docs.jquery.com/UI/Resizable#theming
297
+ */
298
+ .ui-resizable { position: relative;}
299
+ .ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
300
+ .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
301
+ .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
302
+ .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
303
+ .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
304
+ .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
305
+ .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
306
+ .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
307
+ .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
308
+ .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
309
+ * jQuery UI Selectable 1.8.16
310
+ *
311
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
312
+ * Dual licensed under the MIT or GPL Version 2 licenses.
313
+ * http://jquery.org/license
314
+ *
315
+ * http://docs.jquery.com/UI/Selectable#theming
316
+ */
317
+ .ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
318
+ /*
319
+ * jQuery UI Accordion 1.8.16
320
+ *
321
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
322
+ * Dual licensed under the MIT or GPL Version 2 licenses.
323
+ * http://jquery.org/license
324
+ *
325
+ * http://docs.jquery.com/UI/Accordion#theming
326
+ */
327
+ /* IE/Win - Fix animation bug - #4615 */
328
+ .ui-accordion { width: 100%; }
329
+ .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
330
+ .ui-accordion .ui-accordion-li-fix { display: inline; }
331
+ .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
332
+ .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
333
+ .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
334
+ .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
335
+ .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
336
+ .ui-accordion .ui-accordion-content-active { display: block; }
337
+ /*
338
+ * jQuery UI Autocomplete 1.8.16
339
+ *
340
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
341
+ * Dual licensed under the MIT or GPL Version 2 licenses.
342
+ * http://jquery.org/license
343
+ *
344
+ * http://docs.jquery.com/UI/Autocomplete#theming
345
+ */
346
+ .ui-autocomplete { position: absolute; cursor: default; }
347
+
348
+ /* workarounds */
349
+ * html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
350
+
351
+ /*
352
+ * jQuery UI Menu 1.8.16
353
+ *
354
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
355
+ * Dual licensed under the MIT or GPL Version 2 licenses.
356
+ * http://jquery.org/license
357
+ *
358
+ * http://docs.jquery.com/UI/Menu#theming
359
+ */
360
+ .ui-menu {
361
+ list-style:none;
362
+ padding: 2px;
363
+ margin: 0;
364
+ display:block;
365
+ float: left;
366
+ }
367
+ .ui-menu .ui-menu {
368
+ margin-top: -3px;
369
+ }
370
+ .ui-menu .ui-menu-item {
371
+ margin:0;
372
+ padding: 0;
373
+ zoom: 1;
374
+ float: left;
375
+ clear: left;
376
+ width: 100%;
377
+ }
378
+ .ui-menu .ui-menu-item a {
379
+ text-decoration:none;
380
+ display:block;
381
+ padding:.2em .4em;
382
+ line-height:1.5;
383
+ zoom:1;
384
+ }
385
+ .ui-menu .ui-menu-item a.ui-state-hover,
386
+ .ui-menu .ui-menu-item a.ui-state-active {
387
+ font-weight: normal;
388
+ margin: -1px;
389
+ }
390
+ /*
391
+ * jQuery UI Button 1.8.16
392
+ *
393
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
394
+ * Dual licensed under the MIT or GPL Version 2 licenses.
395
+ * http://jquery.org/license
396
+ *
397
+ * http://docs.jquery.com/UI/Button#theming
398
+ */
399
+ .ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
400
+ .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
401
+ button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
402
+ .ui-button-icons-only { width: 3.4em; }
403
+ button.ui-button-icons-only { width: 3.7em; }
404
+
405
+ /*button text element */
406
+ .ui-button .ui-button-text { display: block; line-height: 1.4; }
407
+ .ui-button-text-only .ui-button-text { padding: .4em 1em; }
408
+ .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
409
+ .ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
410
+ .ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
411
+ .ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
412
+ /* no icon support for input elements, provide padding by default */
413
+ input.ui-button { padding: .4em 1em; }
414
+
415
+ /*button icon element(s) */
416
+ .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 { position: absolute; top: 50%; margin-top: -8px; }
417
+ .ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
418
+ .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; }
419
+ .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; }
420
+ .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
421
+
422
+ /*button sets*/
423
+ .ui-buttonset { margin-right: 7px; }
424
+ .ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
425
+
426
+ /* workarounds */
427
+ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
428
+ /*
429
+ * jQuery UI Dialog 1.8.16
430
+ *
431
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
432
+ * Dual licensed under the MIT or GPL Version 2 licenses.
433
+ * http://jquery.org/license
434
+ *
435
+ * http://docs.jquery.com/UI/Dialog#theming
436
+ */
437
+ .ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
438
+ .ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
439
+ .ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
440
+ .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
441
+ .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
442
+ .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
443
+ .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
444
+ .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
445
+ .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
446
+ .ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
447
+ .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
448
+ .ui-draggable .ui-dialog-titlebar { cursor: move; }
449
+ /*
450
+ * jQuery UI Slider 1.8.16
451
+ *
452
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
453
+ * Dual licensed under the MIT or GPL Version 2 licenses.
454
+ * http://jquery.org/license
455
+ *
456
+ * http://docs.jquery.com/UI/Slider#theming
457
+ */
458
+ .ui-slider { position: relative; text-align: left; }
459
+ .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
460
+ .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
461
+
462
+ .ui-slider-horizontal { height: .8em; }
463
+ .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
464
+ .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
465
+ .ui-slider-horizontal .ui-slider-range-min { left: 0; }
466
+ .ui-slider-horizontal .ui-slider-range-max { right: 0; }
467
+
468
+ .ui-slider-vertical { width: .8em; height: 100px; }
469
+ .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
470
+ .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
471
+ .ui-slider-vertical .ui-slider-range-min { bottom: 0; }
472
+ .ui-slider-vertical .ui-slider-range-max { top: 0; }/*
473
+ * jQuery UI Tabs 1.8.16
474
+ *
475
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
476
+ * Dual licensed under the MIT or GPL Version 2 licenses.
477
+ * http://jquery.org/license
478
+ *
479
+ * http://docs.jquery.com/UI/Tabs#theming
480
+ */
481
+ .ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
482
+ .ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
483
+ .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
484
+ .ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
485
+ .ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
486
+ .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
487
+ .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
488
+ .ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
489
+ .ui-tabs .ui-tabs-hide { display: none !important; }
490
+ /*
491
+ * jQuery UI Datepicker 1.8.16
492
+ *
493
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
494
+ * Dual licensed under the MIT or GPL Version 2 licenses.
495
+ * http://jquery.org/license
496
+ *
497
+ * http://docs.jquery.com/UI/Datepicker#theming
498
+ */
499
+ .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
500
+ .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
501
+ .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
502
+ .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
503
+ .ui-datepicker .ui-datepicker-prev { left:2px; }
504
+ .ui-datepicker .ui-datepicker-next { right:2px; }
505
+ .ui-datepicker .ui-datepicker-prev-hover { left:1px; }
506
+ .ui-datepicker .ui-datepicker-next-hover { right:1px; }
507
+ .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; }
508
+ .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
509
+ .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
510
+ .ui-datepicker select.ui-datepicker-month-year {width: 100%;}
511
+ .ui-datepicker select.ui-datepicker-month,
512
+ .ui-datepicker select.ui-datepicker-year { width: 49%;}
513
+ .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
514
+ .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
515
+ .ui-datepicker td { border: 0; padding: 1px; }
516
+ .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
517
+ .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; }
518
+ .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
519
+ .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
520
+
521
+ /* with multiple calendars */
522
+ .ui-datepicker.ui-datepicker-multi { width:auto; }
523
+ .ui-datepicker-multi .ui-datepicker-group { float:left; }
524
+ .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
525
+ .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
526
+ .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
527
+ .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
528
+ .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
529
+ .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
530
+ .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
531
+ .ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
532
+
533
+ /* RTL support */
534
+ .ui-datepicker-rtl { direction: rtl; }
535
+ .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
536
+ .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
537
+ .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
538
+ .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
539
+ .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
540
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
541
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
542
+ .ui-datepicker-rtl .ui-datepicker-group { float:right; }
543
+ .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
544
+ .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
545
+
546
+ /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
547
+ .ui-datepicker-cover {
548
+ display: none; /*sorry for IE5*/
549
+ display/**/: block; /*sorry for IE5*/
550
+ position: absolute; /*must have*/
551
+ z-index: -1; /*must have*/
552
+ filter: mask(); /*must have*/
553
+ top: -4px; /*must have*/
554
+ left: -4px; /*must have*/
555
+ width: 200px; /*must have*/
556
+ height: 200px; /*must have*/
557
+ }/*
558
+ * jQuery UI Progressbar 1.8.16
559
+ *
560
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
561
+ * Dual licensed under the MIT or GPL Version 2 licenses.
562
+ * http://jquery.org/license
563
+ *
564
+ * http://docs.jquery.com/UI/Progressbar#theming
565
+ */
566
+ .ui-progressbar { height:2em; text-align: left; }
567
+ .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
568
+ .ui-progressbar .ui-widget-header {
569
+ background-color: #83B4D8;
570
+ background-image: linear-gradient(bottom, rgb(114,167,207) 0%, rgb(144,197,238) 100%);
571
+ background-image: -o-linear-gradient(bottom, rgb(114,167,207) 0%, rgb(144,197,238) 100%);
572
+ background-image: -moz-linear-gradient(bottom, rgb(114,167,207) 0%, rgb(144,197,238) 100%);
573
+ background-image: -webkit-linear-gradient(bottom, rgb(114,167,207) 0%, rgb(144,197,238) 100%);
574
+ background-image: -ms-linear-gradient(bottom, rgb(114,167,207) 0%, rgb(144,197,238) 100%);
575
+ }
assets/css/jquery-ui-fresh.css ADDED
@@ -0,0 +1,575 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * jQuery UI CSS Framework 1.8.16
3
+ *
4
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5
+ * Dual licensed under the MIT or GPL Version 2 licenses.
6
+ * http://jquery.org/license
7
+ *
8
+ * http://docs.jquery.com/UI/Theming/API
9
+ */
10
+
11
+ /* Layout helpers
12
+ ----------------------------------*/
13
+ .ui-helper-hidden { display: none; }
14
+ .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
15
+ .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
16
+ .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
17
+ .ui-helper-clearfix { display: inline-block; }
18
+ /* required comment for clearfix to work in Opera \*/
19
+ * html .ui-helper-clearfix { height:1%; }
20
+ .ui-helper-clearfix { display:block; }
21
+ /* end clearfix */
22
+ .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
23
+
24
+
25
+ /* Interaction Cues
26
+ ----------------------------------*/
27
+ .ui-state-disabled { cursor: default !important; }
28
+
29
+
30
+ /* Icons
31
+ ----------------------------------*/
32
+
33
+ /* states and images */
34
+ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
35
+
36
+
37
+ /* Misc visuals
38
+ ----------------------------------*/
39
+
40
+ /* Overlays */
41
+ .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
42
+
43
+
44
+ /*
45
+ * jQuery UI CSS Framework 1.8.16
46
+ *
47
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
48
+ * Dual licensed under the MIT or GPL Version 2 licenses.
49
+ * http://jquery.org/license
50
+ *
51
+ * http://docs.jquery.com/UI/Theming/API
52
+ *
53
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=sans-serif&fwDefault=normal&fsDefault=12px&cornerRadius=4px&bgColorHeader=ececec&bgTextureHeader=04_highlight_hard.png&bgImgOpacityHeader=75&borderColorHeader=dfdfdf&fcHeader=333333&iconColorHeader=999999&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=dfdfdf&fcContent=333333&iconColorContent=333333&bgColorDefault=ececec&bgTextureDefault=04_highlight_hard.png&bgImgOpacityDefault=75&borderColorDefault=dfdfdf&fcDefault=333333&iconColorDefault=333333&bgColorHover=ececec&bgTextureHover=06_inset_hard.png&bgImgOpacityHover=75&borderColorHover=ccc&fcHover=000000&iconColorHover=333333&bgColorActive=ffffff&bgTextureActive=01_flat.png&bgImgOpacityActive=65&borderColorActive=dfdfdf&fcActive=333333&iconColorActive=333333&bgColorHighlight=ffffe0&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=e6db55&fcHighlight=333333&iconColorHighlight=21759b&bgColorError=ffebe8&bgTextureError=01_flat.png&bgImgOpacityError=95&borderColorError=cc0000&fcError=cc0000&iconColorError=cc0000&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=3px
54
+ */
55
+
56
+
57
+ /* Component containers
58
+ ----------------------------------*/
59
+ .ui-widget { font-family: sans-serif; font-size: 12px; }
60
+ .ui-widget .ui-widget { font-size: 1em; }
61
+ .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: sans-serif; font-size: 1em; }
62
+ .ui-widget-content { border: 1px solid #dfdfdf; background: #ffffff; color: #333333; }
63
+ .ui-widget-header { border: 1px solid #dfdfdf; color: #333333; font-weight: bold; background-color: #f1f1f1; background-image: -ms-linear-gradient(top, #f9f9f9, #ececec); background-image: -moz-linear-gradient(top, #f9f9f9, #ececec); background-image: -o-linear-gradient(top, #f9f9f9, #ececec); background-image: -webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec)); background-image: -webkit-linear-gradient(top, #f9f9f9, #ececec); background-image: linear-gradient(top, #f9f9f9, #ececec); }
64
+ .ui-widget-header a { color: #333333; }
65
+
66
+ /* Interaction states
67
+ ----------------------------------*/
68
+ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #dfdfdf; background-color: #f1f1f1; background-image: -ms-linear-gradient(top, #f9f9f9, #ececec); background-image: -moz-linear-gradient(top, #f9f9f9, #ececec); background-image: -o-linear-gradient(top, #f9f9f9, #ececec); background-image: -webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec)); background-image: -webkit-linear-gradient(top, #f9f9f9, #ececec); background-image: linear-gradient(top, #f9f9f9, #ececec); font-weight: normal; color: #333333; }
69
+ .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #333333; text-decoration: none; }
70
+ .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #ccc; background-color: #ececec; background-image: -ms-linear-gradient(top, #ececec, #f9f9f9); background-image: -moz-linear-gradient(top, #ececec, #f9f9f9); background-image: -o-linear-gradient(top, #ececec, #f9f9f9); background-image: -webkit-gradient(linear, left top, left bottom, from(#ececec), to(#f9f9f9)); background-image: -webkit-linear-gradient(top, #ececec, #f9f9f9); background-image: linear-gradient(top, #ececec, #f9f9f9); font-weight: normal; color: #000000; }
71
+ .ui-state-hover a, .ui-state-hover a:hover { color: #000000; text-decoration: none; }
72
+ .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #dfdfdf; background: #ffffff; font-weight: normal; color: #333333; }
73
+ .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #333333; text-decoration: none; }
74
+ .ui-widget :active { outline: none; }
75
+
76
+ /* Interaction Cues
77
+ ----------------------------------*/
78
+ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #e6db55; background: #ffffe0; color: #333333; }
79
+ .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #333333; }
80
+ .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cc0000; background: #ffebe8; color: #cc0000; }
81
+ .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cc0000; }
82
+ .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cc0000; }
83
+ .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
84
+ .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
85
+ .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
86
+
87
+ /* Icons
88
+ ----------------------------------*/
89
+
90
+ /* states and images */
91
+ .ui-icon { width: 16px; height: 16px; background-image: url(../images/ui-icons_333333_256x240.png); }
92
+ .ui-widget-content .ui-icon {background-image: url(../images/ui-icons_333333_256x240.png); }
93
+ .ui-widget-header .ui-icon {background-image: url(../images/ui-icons_999999_256x240.png); }
94
+ .ui-state-default .ui-icon { background-image: url(../images/ui-icons_333333_256x240.png); }
95
+ .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(../images/ui-icons_333333_256x240.png); }
96
+ .ui-state-active .ui-icon {background-image: url(../images/ui-icons_333333_256x240.png); }
97
+ .ui-state-highlight .ui-icon {background-image: url(../images/ui-icons_21759b_256x240.png); }
98
+ .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(../images/ui-icons_cc0000_256x240.png); }
99
+
100
+ /* positioning */
101
+ .ui-icon-carat-1-n { background-position: 0 0; }
102
+ .ui-icon-carat-1-ne { background-position: -16px 0; }
103
+ .ui-icon-carat-1-e { background-position: -32px 0; }
104
+ .ui-icon-carat-1-se { background-position: -48px 0; }
105
+ .ui-icon-carat-1-s { background-position: -64px 0; }
106
+ .ui-icon-carat-1-sw { background-position: -80px 0; }
107
+ .ui-icon-carat-1-w { background-position: -96px 0; }
108
+ .ui-icon-carat-1-nw { background-position: -112px 0; }
109
+ .ui-icon-carat-2-n-s { background-position: -128px 0; }
110
+ .ui-icon-carat-2-e-w { background-position: -144px 0; }
111
+ .ui-icon-triangle-1-n { background-position: 0 -16px; }
112
+ .ui-icon-triangle-1-ne { background-position: -16px -16px; }
113
+ .ui-icon-triangle-1-e { background-position: -32px -16px; }
114
+ .ui-icon-triangle-1-se { background-position: -48px -16px; }
115
+ .ui-icon-triangle-1-s { background-position: -64px -16px; }
116
+ .ui-icon-triangle-1-sw { background-position: -80px -16px; }
117
+ .ui-icon-triangle-1-w { background-position: -96px -16px; }
118
+ .ui-icon-triangle-1-nw { background-position: -112px -16px; }
119
+ .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
120
+ .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
121
+ .ui-icon-arrow-1-n { background-position: 0 -32px; }
122
+ .ui-icon-arrow-1-ne { background-position: -16px -32px; }
123
+ .ui-icon-arrow-1-e { background-position: -32px -32px; }
124
+ .ui-icon-arrow-1-se { background-position: -48px -32px; }
125
+ .ui-icon-arrow-1-s { background-position: -64px -32px; }
126
+ .ui-icon-arrow-1-sw { background-position: -80px -32px; }
127
+ .ui-icon-arrow-1-w { background-position: -96px -32px; }
128
+ .ui-icon-arrow-1-nw { background-position: -112px -32px; }
129
+ .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
130
+ .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
131
+ .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
132
+ .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
133
+ .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
134
+ .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
135
+ .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
136
+ .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
137
+ .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
138
+ .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
139
+ .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
140
+ .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
141
+ .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
142
+ .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
143
+ .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
144
+ .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
145
+ .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
146
+ .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
147
+ .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
148
+ .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
149
+ .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
150
+ .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
151
+ .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
152
+ .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
153
+ .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
154
+ .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
155
+ .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
156
+ .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
157
+ .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
158
+ .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
159
+ .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
160
+ .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
161
+ .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
162
+ .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
163
+ .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
164
+ .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
165
+ .ui-icon-arrow-4 { background-position: 0 -80px; }
166
+ .ui-icon-arrow-4-diag { background-position: -16px -80px; }
167
+ .ui-icon-extlink { background-position: -32px -80px; }
168
+ .ui-icon-newwin { background-position: -48px -80px; }
169
+ .ui-icon-refresh { background-position: -64px -80px; }
170
+ .ui-icon-shuffle { background-position: -80px -80px; }
171
+ .ui-icon-transfer-e-w { background-position: -96px -80px; }
172
+ .ui-icon-transferthick-e-w { background-position: -112px -80px; }
173
+ .ui-icon-folder-collapsed { background-position: 0 -96px; }
174
+ .ui-icon-folder-open { background-position: -16px -96px; }
175
+ .ui-icon-document { background-position: -32px -96px; }
176
+ .ui-icon-document-b { background-position: -48px -96px; }
177
+ .ui-icon-note { background-position: -64px -96px; }
178
+ .ui-icon-mail-closed { background-position: -80px -96px; }
179
+ .ui-icon-mail-open { background-position: -96px -96px; }
180
+ .ui-icon-suitcase { background-position: -112px -96px; }
181
+ .ui-icon-comment { background-position: -128px -96px; }
182
+ .ui-icon-person { background-position: -144px -96px; }
183
+ .ui-icon-print { background-position: -160px -96px; }
184
+ .ui-icon-trash { background-position: -176px -96px; }
185
+ .ui-icon-locked { background-position: -192px -96px; }
186
+ .ui-icon-unlocked { background-position: -208px -96px; }
187
+ .ui-icon-bookmark { background-position: -224px -96px; }
188
+ .ui-icon-tag { background-position: -240px -96px; }
189
+ .ui-icon-home { background-position: 0 -112px; }
190
+ .ui-icon-flag { background-position: -16px -112px; }
191
+ .ui-icon-calendar { background-position: -32px -112px; }
192
+ .ui-icon-cart { background-position: -48px -112px; }
193
+ .ui-icon-pencil { background-position: -64px -112px; }
194
+ .ui-icon-clock { background-position: -80px -112px; }
195
+ .ui-icon-disk { background-position: -96px -112px; }
196
+ .ui-icon-calculator { background-position: -112px -112px; }
197
+ .ui-icon-zoomin { background-position: -128px -112px; }
198
+ .ui-icon-zoomout { background-position: -144px -112px; }
199
+ .ui-icon-search { background-position: -160px -112px; }
200
+ .ui-icon-wrench { background-position: -176px -112px; }
201
+ .ui-icon-gear { background-position: -192px -112px; }
202
+ .ui-icon-heart { background-position: -208px -112px; }
203
+ .ui-icon-star { background-position: -224px -112px; }
204
+ .ui-icon-link { background-position: -240px -112px; }
205
+ .ui-icon-cancel { background-position: 0 -128px; }
206
+ .ui-icon-plus { background-position: -16px -128px; }
207
+ .ui-icon-plusthick { background-position: -32px -128px; }
208
+ .ui-icon-minus { background-position: -48px -128px; }
209
+ .ui-icon-minusthick { background-position: -64px -128px; }
210
+ .ui-icon-close { background-position: -80px -128px; }
211
+ .ui-icon-closethick { background-position: -96px -128px; }
212
+ .ui-icon-key { background-position: -112px -128px; }
213
+ .ui-icon-lightbulb { background-position: -128px -128px; }
214
+ .ui-icon-scissors { background-position: -144px -128px; }
215
+ .ui-icon-clipboard { background-position: -160px -128px; }
216
+ .ui-icon-copy { background-position: -176px -128px; }
217
+ .ui-icon-contact { background-position: -192px -128px; }
218
+ .ui-icon-image { background-position: -208px -128px; }
219
+ .ui-icon-video { background-position: -224px -128px; }
220
+ .ui-icon-script { background-position: -240px -128px; }
221
+ .ui-icon-alert { background-position: 0 -144px; }
222
+ .ui-icon-info { background-position: -16px -144px; }
223
+ .ui-icon-notice { background-position: -32px -144px; }
224
+ .ui-icon-help { background-position: -48px -144px; }
225
+ .ui-icon-check { background-position: -64px -144px; }
226
+ .ui-icon-bullet { background-position: -80px -144px; }
227
+ .ui-icon-radio-off { background-position: -96px -144px; }
228
+ .ui-icon-radio-on { background-position: -112px -144px; }
229
+ .ui-icon-pin-w { background-position: -128px -144px; }
230
+ .ui-icon-pin-s { background-position: -144px -144px; }
231
+ .ui-icon-play { background-position: 0 -160px; }
232
+ .ui-icon-pause { background-position: -16px -160px; }
233
+ .ui-icon-seek-next { background-position: -32px -160px; }
234
+ .ui-icon-seek-prev { background-position: -48px -160px; }
235
+ .ui-icon-seek-end { background-position: -64px -160px; }
236
+ .ui-icon-seek-start { background-position: -80px -160px; }
237
+ /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
238
+ .ui-icon-seek-first { background-position: -80px -160px; }
239
+ .ui-icon-stop { background-position: -96px -160px; }
240
+ .ui-icon-eject { background-position: -112px -160px; }
241
+ .ui-icon-volume-off { background-position: -128px -160px; }
242
+ .ui-icon-volume-on { background-position: -144px -160px; }
243
+ .ui-icon-power { background-position: 0 -176px; }
244
+ .ui-icon-signal-diag { background-position: -16px -176px; }
245
+ .ui-icon-signal { background-position: -32px -176px; }
246
+ .ui-icon-battery-0 { background-position: -48px -176px; }
247
+ .ui-icon-battery-1 { background-position: -64px -176px; }
248
+ .ui-icon-battery-2 { background-position: -80px -176px; }
249
+ .ui-icon-battery-3 { background-position: -96px -176px; }
250
+ .ui-icon-circle-plus { background-position: 0 -192px; }
251
+ .ui-icon-circle-minus { background-position: -16px -192px; }
252
+ .ui-icon-circle-close { background-position: -32px -192px; }
253
+ .ui-icon-circle-triangle-e { background-position: -48px -192px; }
254
+ .ui-icon-circle-triangle-s { background-position: -64px -192px; }
255
+ .ui-icon-circle-triangle-w { background-position: -80px -192px; }
256
+ .ui-icon-circle-triangle-n { background-position: -96px -192px; }
257
+ .ui-icon-circle-arrow-e { background-position: -112px -192px; }
258
+ .ui-icon-circle-arrow-s { background-position: -128px -192px; }
259
+ .ui-icon-circle-arrow-w { background-position: -144px -192px; }
260
+ .ui-icon-circle-arrow-n { background-position: -160px -192px; }
261
+ .ui-icon-circle-zoomin { background-position: -176px -192px; }
262
+ .ui-icon-circle-zoomout { background-position: -192px -192px; }
263
+ .ui-icon-circle-check { background-position: -208px -192px; }
264
+ .ui-icon-circlesmall-plus { background-position: 0 -208px; }
265
+ .ui-icon-circlesmall-minus { background-position: -16px -208px; }
266
+ .ui-icon-circlesmall-close { background-position: -32px -208px; }
267
+ .ui-icon-squaresmall-plus { background-position: -48px -208px; }
268
+ .ui-icon-squaresmall-minus { background-position: -64px -208px; }
269
+ .ui-icon-squaresmall-close { background-position: -80px -208px; }
270
+ .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
271
+ .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
272
+ .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
273
+ .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
274
+ .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
275
+ .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
276
+
277
+
278
+ /* Misc visuals
279
+ ----------------------------------*/
280
+
281
+ /* Corner radius */
282
+ .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; }
283
+ .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; }
284
+ .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; }
285
+ .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; }
286
+
287
+ /* Overlays */
288
+ .ui-widget-overlay { background: #000000; opacity: .6;filter:Alpha(Opacity=60); }
289
+ .ui-widget-shadow { box-shadow: 0 0 16px rgba(0, 0, 0, 0.3); }/*
290
+ * jQuery UI Resizable 1.8.16
291
+ *
292
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
293
+ * Dual licensed under the MIT or GPL Version 2 licenses.
294
+ * http://jquery.org/license
295
+ *
296
+ * http://docs.jquery.com/UI/Resizable#theming
297
+ */
298
+ .ui-resizable { position: relative;}
299
+ .ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
300
+ .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
301
+ .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
302
+ .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
303
+ .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
304
+ .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
305
+ .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
306
+ .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
307
+ .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
308
+ .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
309
+ * jQuery UI Selectable 1.8.16
310
+ *
311
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
312
+ * Dual licensed under the MIT or GPL Version 2 licenses.
313
+ * http://jquery.org/license
314
+ *
315
+ * http://docs.jquery.com/UI/Selectable#theming
316
+ */
317
+ .ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
318
+ /*
319
+ * jQuery UI Accordion 1.8.16
320
+ *
321
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
322
+ * Dual licensed under the MIT or GPL Version 2 licenses.
323
+ * http://jquery.org/license
324
+ *
325
+ * http://docs.jquery.com/UI/Accordion#theming
326
+ */
327
+ /* IE/Win - Fix animation bug - #4615 */
328
+ .ui-accordion { width: 100%; }
329
+ .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
330
+ .ui-accordion .ui-accordion-li-fix { display: inline; }
331
+ .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
332
+ .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
333
+ .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
334
+ .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
335
+ .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
336
+ .ui-accordion .ui-accordion-content-active { display: block; }
337
+ /*
338
+ * jQuery UI Autocomplete 1.8.16
339
+ *
340
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
341
+ * Dual licensed under the MIT or GPL Version 2 licenses.
342
+ * http://jquery.org/license
343
+ *
344
+ * http://docs.jquery.com/UI/Autocomplete#theming
345
+ */
346
+ .ui-autocomplete { position: absolute; cursor: default; }
347
+
348
+ /* workarounds */
349
+ * html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
350
+
351
+ /*
352
+ * jQuery UI Menu 1.8.16
353
+ *
354
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
355
+ * Dual licensed under the MIT or GPL Version 2 licenses.
356
+ * http://jquery.org/license
357
+ *
358
+ * http://docs.jquery.com/UI/Menu#theming
359
+ */
360
+ .ui-menu {
361
+ list-style:none;
362
+ padding: 2px;
363
+ margin: 0;
364
+ display:block;
365
+ float: left;
366
+ }
367
+ .ui-menu .ui-menu {
368
+ margin-top: -3px;
369
+ }
370
+ .ui-menu .ui-menu-item {
371
+ margin:0;
372
+ padding: 0;
373
+ zoom: 1;
374
+ float: left;
375
+ clear: left;
376
+ width: 100%;
377
+ }
378
+ .ui-menu .ui-menu-item a {
379
+ text-decoration:none;
380
+ display:block;
381
+ padding:.2em .4em;
382
+ line-height:1.5;
383
+ zoom:1;
384
+ }
385
+ .ui-menu .ui-menu-item a.ui-state-hover,
386
+ .ui-menu .ui-menu-item a.ui-state-active {
387
+ font-weight: normal;
388
+ margin: -1px;
389
+ }
390
+ /*
391
+ * jQuery UI Button 1.8.16
392
+ *
393
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
394
+ * Dual licensed under the MIT or GPL Version 2 licenses.
395
+ * http://jquery.org/license
396
+ *
397
+ * http://docs.jquery.com/UI/Button#theming
398
+ */
399
+ .ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
400
+ .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
401
+ button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
402
+ .ui-button-icons-only { width: 3.4em; }
403
+ button.ui-button-icons-only { width: 3.7em; }
404
+
405
+ /*button text element */
406
+ .ui-button .ui-button-text { display: block; line-height: 1.4; }
407
+ .ui-button-text-only .ui-button-text { padding: .4em 1em; }
408
+ .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
409
+ .ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
410
+ .ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
411
+ .ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
412
+ /* no icon support for input elements, provide padding by default */
413
+ input.ui-button { padding: .4em 1em; }
414
+
415
+ /*button icon element(s) */
416
+ .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 { position: absolute; top: 50%; margin-top: -8px; }
417
+ .ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
418
+ .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; }
419
+ .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; }
420
+ .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
421
+
422
+ /*button sets*/
423
+ .ui-buttonset { margin-right: 7px; }
424
+ .ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
425
+
426
+ /* workarounds */
427
+ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
428
+ /*
429
+ * jQuery UI Dialog 1.8.16
430
+ *
431
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
432
+ * Dual licensed under the MIT or GPL Version 2 licenses.
433
+ * http://jquery.org/license
434
+ *
435
+ * http://docs.jquery.com/UI/Dialog#theming
436
+ */
437
+ .ui-dialog { position: fixed; padding: .2em; width: 300px; overflow: hidden; }
438
+ .ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
439
+ .ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
440
+ .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
441
+ .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
442
+ .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
443
+ .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
444
+ .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
445
+ .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
446
+ .ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
447
+ .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
448
+ .ui-draggable .ui-dialog-titlebar { cursor: move; }
449
+ /*
450
+ * jQuery UI Slider 1.8.16
451
+ *
452
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
453
+ * Dual licensed under the MIT or GPL Version 2 licenses.
454
+ * http://jquery.org/license
455
+ *
456
+ * http://docs.jquery.com/UI/Slider#theming
457
+ */
458
+ .ui-slider { position: relative; text-align: left; }
459
+ .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
460
+ .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
461
+
462
+ .ui-slider-horizontal { height: .8em; }
463
+ .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
464
+ .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
465
+ .ui-slider-horizontal .ui-slider-range-min { left: 0; }
466
+ .ui-slider-horizontal .ui-slider-range-max { right: 0; }
467
+
468
+ .ui-slider-vertical { width: .8em; height: 100px; }
469
+ .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
470
+ .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
471
+ .ui-slider-vertical .ui-slider-range-min { bottom: 0; }
472
+ .ui-slider-vertical .ui-slider-range-max { top: 0; }/*
473
+ * jQuery UI Tabs 1.8.16
474
+ *
475
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
476
+ * Dual licensed under the MIT or GPL Version 2 licenses.
477
+ * http://jquery.org/license
478
+ *
479
+ * http://docs.jquery.com/UI/Tabs#theming
480
+ */
481
+ .ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
482
+ .ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
483
+ .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
484
+ .ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
485
+ .ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
486
+ .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
487
+ .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
488
+ .ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
489
+ .ui-tabs .ui-tabs-hide { display: none !important; }
490
+ /*
491
+ * jQuery UI Datepicker 1.8.16
492
+ *
493
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
494
+ * Dual licensed under the MIT or GPL Version 2 licenses.
495
+ * http://jquery.org/license
496
+ *
497
+ * http://docs.jquery.com/UI/Datepicker#theming
498
+ */
499
+ .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
500
+ .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
501
+ .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
502
+ .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
503
+ .ui-datepicker .ui-datepicker-prev { left:2px; }
504
+ .ui-datepicker .ui-datepicker-next { right:2px; }
505
+ .ui-datepicker .ui-datepicker-prev-hover { left:1px; }
506
+ .ui-datepicker .ui-datepicker-next-hover { right:1px; }
507
+ .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; }
508
+ .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
509
+ .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
510
+ .ui-datepicker select.ui-datepicker-month-year {width: 100%;}
511
+ .ui-datepicker select.ui-datepicker-month,
512
+ .ui-datepicker select.ui-datepicker-year { width: 49%;}
513
+ .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
514
+ .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
515
+ .ui-datepicker td { border: 0; padding: 1px; }
516
+ .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
517
+ .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; }
518
+ .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
519
+ .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
520
+
521
+ /* with multiple calendars */
522
+ .ui-datepicker.ui-datepicker-multi { width:auto; }
523
+ .ui-datepicker-multi .ui-datepicker-group { float:left; }
524
+ .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
525
+ .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
526
+ .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
527
+ .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
528
+ .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
529
+ .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
530
+ .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
531
+ .ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
532
+
533
+ /* RTL support */
534
+ .ui-datepicker-rtl { direction: rtl; }
535
+ .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
536
+ .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
537
+ .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
538
+ .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
539
+ .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
540
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
541
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
542
+ .ui-datepicker-rtl .ui-datepicker-group { float:right; }
543
+ .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
544
+ .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
545
+
546
+ /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
547
+ .ui-datepicker-cover {
548
+ display: none; /*sorry for IE5*/
549
+ display/**/: block; /*sorry for IE5*/
550
+ position: absolute; /*must have*/
551
+ z-index: -1; /*must have*/
552
+ filter: mask(); /*must have*/
553
+ top: -4px; /*must have*/
554
+ left: -4px; /*must have*/
555
+ width: 200px; /*must have*/
556
+ height: 200px; /*must have*/
557
+ }/*
558
+ * jQuery UI Progressbar 1.8.16
559
+ *
560
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
561
+ * Dual licensed under the MIT or GPL Version 2 licenses.
562
+ * http://jquery.org/license
563
+ *
564
+ * http://docs.jquery.com/UI/Progressbar#theming
565
+ */
566
+ .ui-progressbar { height:2em; text-align: left; }
567
+ .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
568
+ .ui-progressbar .ui-widget-header {
569
+ background-color: #83B4D8;
570
+ background-image: linear-gradient(bottom, rgb(114,167,207) 0%, rgb(144,197,238) 100%);
571
+ background-image: -o-linear-gradient(bottom, rgb(114,167,207) 0%, rgb(144,197,238) 100%);
572
+ background-image: -moz-linear-gradient(bottom, rgb(114,167,207) 0%, rgb(144,197,238) 100%);
573
+ background-image: -webkit-linear-gradient(bottom, rgb(114,167,207) 0%, rgb(144,197,238) 100%);
574
+ background-image: -ms-linear-gradient(bottom, rgb(114,167,207) 0%, rgb(144,197,238) 100%);
575
+ }
assets/fonts/genericons-regular-webfont.eot ADDED
Binary file
assets/fonts/genericons-regular-webfont.svg ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
+ <svg xmlns="http://www.w3.org/2000/svg">
4
+ <metadata></metadata>
5
+ <defs>
6
+ <font id="genericonsregular" horiz-adv-x="2048" >
7
+ <font-face units-per-em="2048" ascent="1638" descent="-410" />
8
+ <missing-glyph horiz-adv-x="500" />
9
+ <glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
10
+ <glyph unicode="&#xf100;" d="M512 512v128h768v-128h-768zM512 768v128h256v-128h-256zM512 1024v128h640v-128h-640zM512 1280v128h1024v-128h-1024zM896 768v128h640v-128h-640zM1280 1024v128h256v-128h-256z" />
11
+ <glyph unicode="&#xf101;" d="M256 1024q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM768 1024q0 -106 75 -181t181 -75t181 75t75 181t-75 181t-181 75t-181 -75t-75 -181z" />
12
+ <glyph unicode="&#xf102;" d="M128 384v896l512 128l128 256h512l128 -256l512 -128v-896h-1792zM256 1440v160h256v-96zM576 960q0 -185 131.5 -316.5t316.5 -131.5q186 0 317 131.5t131 316.5q0 186 -131 317t-317 131q-185 0 -316.5 -131t-131.5 -317zM704 960q0 133 93.5 226.5t226.5 93.5 t226.5 -93.5t93.5 -226.5q0 -132 -93.5 -226t-226.5 -94t-226.5 94t-93.5 226z" />
13
+ <glyph unicode="&#xf103;" d="M128 512v384h384v-384h-384zM128 1024v384h896v-384h-896zM640 512v384h384v-384h-384zM1152 512v896h896v-896h-896z" />
14
+ <glyph unicode="&#xf104;" d="M512 384v1280l1152 -640z" />
15
+ <glyph unicode="&#xf105;" d="M640 1408q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5q0 -124 -71.5 -222t-184.5 -138v-536l-256 -128v664q-113 40 -184.5 138t-71.5 222z" />
16
+ <glyph unicode="&#xf106;" d="M256 896v640h640v-640q0 -212 -150 -362t-362 -150v256q106 0 181 75t75 181h-384zM1152 896v640h640v-640q0 -212 -150 -362t-362 -150v256q106 0 181 75t75 181h-384z" />
17
+ <glyph unicode="&#xf107;" d="M512 704v384q0 97 53 176.5t139 116.5v-151q-64 -57 -64 -142v-384q0 -80 56 -136t136 -56t136 56t56 136v384q0 85 -64 142v151q86 -37 139 -116.5t53 -176.5v-384q0 -133 -93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5zM768 1088v384q0 133 93.5 226.5 t226.5 93.5t226.5 -93.5t93.5 -226.5v-384q0 -97 -53 -176.5t-139 -116.5v151q64 57 64 142v384q0 80 -56 136t-136 56t-136 -56t-56 -136v-384q0 -85 64 -142v-151q-86 37 -139 116.5t-53 176.5z" />
18
+ <glyph unicode="&#xf108;" d="M0 1152v384q0 96 80 176t176 80h1024q96 0 176 -80t80 -176v-384q0 -96 -80 -176t-176 -80h-448l-448 -448v448h-128q-96 0 -176 80t-80 176zM768 640l128 128h384q168 0 276 108t108 276v384q96 0 176 -80t80 -176v-384q0 -96 -80 -176t-176 -80h-128v-448l-448 448 h-320z" />
19
+ <glyph unicode="&#xf109;" d="M256 768v512h384l384 384v-1280l-384 384h-384zM1205 843q75 75 75 181t-75 181l91 91q26 -27 46.5 -57.5t35 -65t22.5 -72.5t8 -77q0 -78 -29.5 -148t-82.5 -124zM1386 662q71 71 110.5 164.5t39.5 197.5t-39.5 197.5t-110.5 164.5l91 91q88 -89 137.5 -206t49.5 -247 q0 -87 -23 -170t-64.5 -153.5t-99.5 -129.5z" />
20
+ <glyph unicode="&#xf200;" d="M0 1024q0 208 81 398t218.5 327t327 218t397.5 81q209 0 398.5 -81t326.5 -218t218 -326.5t81 -398.5q0 -335 -195.5 -601.5t-504.5 -369.5q-36 -7 -53 8.5t-17 40.5q0 4 0.5 102t0.5 179q0 130 -69 189q77 9 137.5 24.5t124.5 51.5t107 89t70.5 140t27.5 201 q0 161 -105 274q6 15 11 35t9 56t-3.5 83.5t-26.5 96.5q-4 1 -10.5 2t-32 -1t-55.5 -11t-79.5 -33.5t-104.5 -61.5q-118 33 -256 35q-138 -2 -256 -35q-55 37 -104 61.5t-80 33t-54.5 11.5t-33.5 1l-10 -2q-58 -146 -10 -271q-105 -115 -105 -274q0 -114 27.5 -201 t70.5 -140t107 -89t124.5 -52t136.5 -24q-53 -47 -65 -137q-28 -13 -59.5 -20t-75.5 -6.5t-87.5 28.5t-75.5 83q-2 4 -6.5 10.5t-19 24t-31.5 31t-44 25.5t-56 14h-10t-18.5 -3.5t-17 -9t4 -18.5t34.5 -31q3 -1 7.5 -4t19 -14.5t27.5 -27t30 -43.5t30 -61q1 -3 2.5 -7t8 -17 t15.5 -25.5t24.5 -28t33.5 -28t45 -23.5t57.5 -16t71.5 -3.5t87 11.5q0 -50 0.5 -110t0.5 -64q0 -24 -17 -40t-53 -10q-309 103 -504.5 370t-195.5 602z" />
21
+ <glyph unicode="&#xf201;" d="M0 1024q0 206 82 395.5t219.5 327t327 219.5t395.5 82t395.5 -82t327 -219.5t219.5 -327t82 -395.5t-82 -395.5t-219.5 -327t-327 -219.5t-395.5 -82t-395.5 82t-327 219.5t-219.5 327t-82 395.5zM128 1024q0 -167 58 -319.5t166 -272.5q125 205 339 360t445 232 q-16 48 -80 176q-282 -86 -481.5 -111t-446.5 -1v-64zM160 1232q194 -22 444 14t388 82q-141 282 -320 528q-194 -85 -329.5 -247.5t-182.5 -376.5zM480 320q216 -192 544 -192q181 0 368 80q-33 300 -208 688q-222 -74 -410 -225.5t-294 -350.5zM832 1904 q102 -166 304 -512q6 2 86 31t118.5 45t108 47t122 64t93.5 69q-126 126 -290.5 199t-349.5 73q-32 0 -96 -8t-96 -8zM1200 1248q22 -29 36.5 -54.5t34 -67.5t25.5 -54q170 33 336 30t288 -30q-26 285 -160 464q-71 -57 -162 -104.5t-214.5 -100.5t-183.5 -83zM1344 928 q14 -27 43 -103t74.5 -231t74.5 -306q156 108 258 278t126 362q-276 46 -576 0z" />
22
+ <glyph unicode="&#xf202;" d="M128 465q48 -5 88 -5q256 0 456 157q-119 2 -213 73.5t-130 182.5q39 -7 69 -7q47 0 97 13q-127 26 -211 127t-84 233v5q80 -43 167 -46q-76 50 -120 131t-44 175q0 101 50 185q138 -170 335 -271.5t423 -112.5q-10 39 -10 84q0 152 108 259.5t260 107.5q160 0 268 -116 q128 26 233 89q-42 -132 -161 -203q109 13 211 58q-73 -111 -183 -191q0 -7 0.5 -23t0.5 -24q0 -122 -31 -246t-89.5 -241t-149.5 -218.5t-204 -177.5t-260.5 -119.5t-311.5 -43.5q-305 0 -564 165z" />
23
+ <glyph unicode="&#xf203;" d="M128 384v1280q0 106 75 181t181 75h1280q106 0 181 -75t75 -181v-1280q0 -106 -75 -181t-181 -75h-282v711h270l12 260h-282v192v12q0 60 21.5 87.5t87.5 27.5l166 -1l6 242q-78 10 -183 10q-94 0 -167 -27.5t-117 -74.5t-66 -105.5t-22 -126.5v-236h-254v-260h254v-711 h-724q-106 0 -181 75t-75 181z" />
24
+ <glyph unicode="&#xf204;" d="M640 969v303h222v258q0 78 26 147t77 124t136.5 87t194.5 32q55 0 108 -3t79 -6l26 -3l-7 -282h-193q-76 0 -101.5 -32t-25.5 -101v-14v-207h329l-14 -303h-315v-841h-320v841h-222z" />
25
+ <glyph unicode="&#xf205;" d="M128 1024q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348zM218 1024q0 -236 125 -430.5t330 -294.5l-385 1053q-70 -156 -70 -328zM351 1466h52q37 0 91 2.5t89 4.5 l34 3q21 1 30.5 -14.5t2.5 -32.5t-27 -20q-44 -5 -93 -7l294 -873l176 529l-125 344l-85 7q-20 2 -27.5 19t2.5 33t30 15q133 -10 212 -10q38 0 91.5 2.5t88.5 4.5l35 3q16 1 25.5 -8.5t10 -22t-7 -23.5t-23.5 -13q-43 -5 -92 -7l291 -866l81 268q24 79 32.5 107.5 t18.5 74.5t10 79q0 46 -11.5 90.5t-23.5 71t-32 60.5q-2 4 -11.5 19t-12 20t-10.5 18.5t-11 19t-9 17.5t-8.5 19t-6.5 18t-5.5 19.5t-3 18.5t-1.5 20q0 57 39 100t97 43l10 -1q-110 101 -249.5 156.5t-294.5 55.5q-207 0 -385 -98t-288 -266zM796 251q112 -33 228 -33 q138 0 268 46q-4 6 -6 11l-248 679zM1429 328q183 106 292 291.5t109 404.5q0 207 -99 386q5 -40 5 -82q0 -135 -61 -289z" />
26
+ <glyph unicode="&#xf206;" d="M128 486v485q125 -127 330 -127q30 0 59 3q-32 -61 -32 -118q0 -33 13 -63t28.5 -48.5t45.5 -47.5q-18 0 -54.5 -0.5t-55.5 -0.5q-183 0 -334 -83zM128 1599v65q0 106 75 181t181 75h1280q106 0 181 -75t75 -181v-128h-256v256h-128v-256h-256v-128h256v-256h128v256h256 v-1024q0 -106 -75 -181t-181 -75h-507q5 28 5 50q0 143 -46.5 230t-189.5 194q-3 2 -20.5 15t-25 19t-25.5 20t-27.5 22.5t-24 22t-23 23.5t-17 22t-12.5 22.5t-4 20.5q0 52 23 87t99 94q180 141 180 324q0 113 -45 204.5t-128 139.5h160l135 142h-607q-127 0 -241.5 -49 t-194.5 -132zM139 309q57 85 166 137.5t237 51.5q84 -1 158 -26q19 -13 62 -42.5t61 -42t48 -37t44.5 -41.5t29 -41.5t21.5 -49.5q7 -29 7 -66q0 -16 -1 -24h-588q-85 0 -153 50.5t-92 130.5zM228 1307q-21 161 50.5 269.5t194.5 104.5q121 -4 215.5 -118.5t116.5 -277.5 q21 -160 -43 -256t-187 -92q-125 4 -225.5 108t-121.5 262z" />
27
+ <glyph unicode="&#xf207;" d="M256 1553q0 -73 50.5 -122t131.5 -49h2q84 0 135 49t51 122q-1 75 -51 123t-133 48t-134.5 -48.5t-51.5 -122.5zM275 256h330v991h-330v-991zM787 256h329v553q0 54 11 81q20 50 63 85t106 35q58 0 96 -29t54.5 -77.5t16.5 -117.5v-530h329v568q0 112 -28.5 198 t-80 139.5t-120 81t-150.5 27.5q-36 0 -69 -5.5t-58.5 -15t-49 -23t-40 -27t-32.5 -31t-26.5 -31.5t-21.5 -31v141h-329q1 -26 1.5 -138t0.5 -252.5t-0.5 -277.5t-1.5 -230v-93z" />
28
+ <glyph unicode="&#xf208;" d="M128 384v1280q0 106 75 181t181 75h1280q106 0 181 -75t75 -181v-1280q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM384 1422q0 -58 40.5 -97.5t105.5 -39.5h1q67 0 108.5 39.5t41.5 97.5q-2 60 -42 98.5t-106 38.5q-67 0 -108 -39t-41 -98zM400 384h263 v793h-263v-793zM809 384h264v443q0 45 8 64q16 40 50.5 68t85.5 28q133 0 133 -179v-424h264v455q0 175 -83.5 266t-220.5 91q-50 0 -90.5 -12t-68.5 -34t-45 -41t-33 -44v112h-264v-793z" />
29
+ <glyph unicode="&#xf209;" d="M171 1260q0 109 35.5 219t110 213t179 182t254 126.5t323.5 47.5q176 0 327.5 -60.5t253.5 -161t160 -231t58 -270.5q0 -246 -85 -443t-241 -309.5t-355 -112.5q-99 0 -186.5 46.5t-121.5 110.5q-73 -290 -89 -347q-34 -123 -127 -270l-149 54q-7 167 22 290l162 688 q-40 81 -40 200q0 139 70.5 232.5t172.5 93.5q83 0 127 -53.5t44 -135.5q0 -51 -18.5 -124t-49 -170t-44.5 -154q-23 -99 37.5 -171t161.5 -72q117 0 209.5 92t142 244.5t49.5 334.5q0 214 -139 349t-387 135q-139 0 -257.5 -49.5t-197 -133t-122.5 -193t-44 -229.5 q0 -147 83 -247q18 -21 21.5 -34t-3.5 -37q-16 -61 -25 -101q-7 -24 -24.5 -32t-39.5 1q-127 51 -192.5 181.5t-65.5 300.5z" />
30
+ <glyph unicode="&#xf210;" d="M0 1024q0 208 81 398t218.5 327t327 218t397.5 81q209 0 398.5 -81t326.5 -218t218 -326.5t81 -398.5t-81 -398.5t-218 -326.5t-326.5 -218t-398.5 -81q-147 0 -290 42q74 116 103 219l72 282q28 -53 99 -90.5t151 -37.5q162 0 288.5 91.5t195.5 251t69 359.5 q0 114 -47 220t-130 187.5t-206.5 130.5t-265.5 49q-141 0 -262 -38.5t-205.5 -103t-145.5 -147.5t-89.5 -172.5t-28.5 -178.5q0 -138 53 -243.5t156 -147.5q18 -8 32.5 -1t18.5 26q2 9 10 41t11 41q5 19 2.5 30t-16.5 28q-68 78 -68 200q0 97 35.5 186t99.5 156.5t160 108 t209 40.5q201 0 313.5 -109.5t112.5 -283.5q0 -148 -40 -271.5t-115 -198t-169 -74.5q-82 0 -131.5 58.5t-30.5 138.5q11 46 35.5 125t39.5 138t15 101q0 66 -35.5 109.5t-102.5 43.5q-82 0 -139.5 -76t-57.5 -189q0 -43 8 -83.5t16 -59.5l9 -19q-113 -475 -132 -558 q-24 -97 -18 -235q-275 120 -444 374t-169 564z" />
31
+ <glyph unicode="&#xf211;" d="M160 1024q0 -172 122 -294t294 -122t294 122t122 294t-122 294t-294 122t-294 -122t-122 -294zM1056 1024q0 -172 122 -294t294 -122t294 122t122 294t-122 294t-294 122t-294 -122t-122 -294z" />
32
+ <glyph unicode="&#xf212;" d="M128 1379l84 -108q121 84 141 84q92 0 173 -287l144 -525q108 -287 265 -287q253 0 619 471q353 451 365 710q16 347 -260 355q-373 12 -505 -417q69 29 133 29q136 0 120 -152q-8 -92 -120 -268q-113 -176 -169 -176q-73 0 -133 271q-20 79 -72 407q-49 303 -258 284 q-89 -8 -265 -160q-127 -113 -262 -231z" />
33
+ <glyph unicode="&#xf213;" d="M128 768v512q0 159 112.5 271.5t271.5 112.5h1024q159 0 271.5 -112.5t112.5 -271.5v-512q0 -159 -112.5 -271.5t-271.5 -112.5h-1024q-159 0 -271.5 112.5t-112.5 271.5zM768 640l640 384l-640 384v-768z" />
34
+ <glyph unicode="&#xf214;" d="M472 1186h198v-629q0 -121 26 -187q26 -65 92 -122t161 -89q93 -31 218 -31q110 0 201 22q88 20 208 76v282q-134 -88 -271 -88q-76 0 -136 36q-44 25 -61 70q-17 46 -17 200v460h426v281h-426v453h-255q-17 -139 -62 -228q-48 -93 -121 -154q-74 -64 -181 -99v-253z" />
35
+ <glyph unicode="&#xf215;" d="M128 384v1280q0 106 75 181t181 75h1280q106 0 181 -75t75 -181v-1280q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM256 384q0 -53 37.5 -90.5t90.5 -37.5h1280q53 0 90.5 37.5t37.5 90.5v768h-272q16 -66 16 -128q0 -212 -150 -362t-362 -150t-362 150 t-150 362q0 62 16 128h-272v-768zM640 1024q0 -159 112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5zM1408 1536q0 -53 37.5 -90.5t90.5 -37.5h128q53 0 90.5 37.5t37.5 90.5v128q0 53 -37.5 90.5t-90.5 37.5 h-128q-53 0 -90.5 -37.5t-37.5 -90.5v-128z" />
36
+ <glyph unicode="&#xf216;" d="M256 790v467q0 31 29 55l702 467q17 11 37 11t37 -11l702 -467q29 -24 29 -55v-467q0 -32 -29 -54l-702 -468q-17 -11 -37 -11q-18 0 -37 11l-702 468q-29 22 -29 54zM388 914l165 110l-165 110v-220zM441 790l517 -344v308l-286 191zM441 1257l231 -154l286 191v307z M791 1024l233 -156l234 156l-234 156zM1090 446l517 344l-231 155l-286 -191v-308zM1090 1294l286 -191l231 154l-517 344v-307zM1495 1024l165 -110v220z" />
37
+ <glyph unicode="&#xf217;" d="M128 1024q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348zM208 1024q0 -221 109.5 -409t297.5 -297.5t409 -109.5q236 0 432 123.5t298 327.5q59 136 59 266 q0 117 -43.5 221.5t-118.5 182.5t-175.5 131t-215.5 73q116 -48 204 -145t127 -218q54 -151 17.5 -320t-150.5 -289q-111 -123 -276 -179t-332 -27q-168 27 -307 138t-210 270q-74 156 -67.5 338.5t93.5 335.5q88 155 238.5 260t328.5 135q2 0 35 6q-208 -16 -380.5 -128 t-272.5 -293.5t-100 -392.5zM359 998q17 -148 100 -275.5t207 -200.5q120 -71 264 -78.5t267 49.5q-76 -21 -148 -21q-149 0 -275.5 74t-200.5 201t-74 276q0 214 146 373l3 3l14 14l1 1q98 114 235 178t293 64q163 0 306 -70t241 -193q-36 57 -70 96q-104 126 -250 200.5 t-305 80.5q-157 7 -306.5 -51.5t-258.5 -169.5q-109 -107 -159 -254.5t-30 -296.5zM612 1025q8 -119 85 -217t186 -128q110 -33 221.5 8.5t170.5 134.5q61 91 50 204t-86 187q-70 77 -179.5 87t-188.5 -50q-85 -62 -105 -157q-21 -98 30 -182q50 -84 142 -108q92 -23 172 26 q38 23 64 58.5t34 76.5q17 88 -34 159q-52 72 -136 77q-83 6 -142 -54q-57 -55 -45 -138q6 -37 27.5 -68.5t52.5 -47.5q40 -21 87 -16q-46 1 -82 29t-49 71l-2 3q-14 30 -9.5 67t25.5 66q22 30 56.5 46.5t72.5 14.5t73.5 -23.5t54.5 -55.5q46 -76 8 -158 q-18 -39 -53.5 -66.5t-78.5 -35.5q-43 -9 -88.5 3.5t-78.5 43.5q-74 68 -68 169q2 65 45 118.5t109.5 77t132.5 5.5q68 -16 118.5 -70.5t65 -124.5t-9.5 -144q-37 -107 -150 -158.5t-224 -8.5q-114 43 -170 158q-55 117 -17 238q35 121 152 191t246 47q131 -19 223 -128 t95 -246q6 -142 -81 -257q-86 -115 -225 -157q-114 -35 -234 -7q83 -34 174 -34q195 0 333.5 138.5t138.5 333.5v2q-10 107 -63.5 202.5t-137.5 157.5q-102 77 -236 87t-243 -49q-116 -62 -177 -167q-61 -107 -52 -231z" />
38
+ <glyph unicode="&#xf218;" d="M128 464q0 -66 32 -125.5t92.5 -107t159 -75.5t222.5 -28q117 0 218.5 25t174 68t124 99.5t76.5 120.5t25 131q0 40 -6.5 74.5t-22.5 65t-30.5 53t-41.5 50t-45 43t-51 44.5l-85 66q-19 15 -28.5 24.5t-21 31t-11.5 45.5t12 47.5t21.5 34.5t32.5 33q37 29 59 48t52 52 t46 64t28 75.5t12 94.5q0 43 -8 82t-23.5 70.5t-30.5 55.5t-38 47.5t-35 34.5t-32 27h146l151 85h-485q-264 0 -421 -129q-73 -64 -111.5 -147.5t-38.5 -167.5q0 -56 16 -109.5t49.5 -100.5t79.5 -82.5t109 -56.5t136 -21q19 0 75 5q0 -2 -4 -10.5t-4.5 -10.5t-3.5 -9.5 t-4 -11l-3 -10.5t-2.5 -12.5t-1 -13t-0.5 -14.5q0 -26 5 -48t18.5 -45t20.5 -32.5t26 -34.5q-61 -4 -98 -7.5t-107 -14.5t-131.5 -32.5t-112.5 -53.5q-50 -29 -86.5 -66.5t-56.5 -76.5t-29 -74.5t-9 -69.5zM335 514q0 47 17 87.5t38.5 64.5t54 45t50.5 28.5t42 16.5 q35 11 76.5 19.5t77.5 12t58.5 5t34.5 1.5q35 0 54 -3q51 -36 82 -59t63.5 -50.5t50.5 -48.5t33.5 -46t21.5 -50.5t6 -55.5q0 -113 -91 -183.5t-255 -70.5q-187 0 -300.5 80t-113.5 207zM453 1591q0 110 51 174q28 35 73.5 56t91.5 21q56 0 105.5 -28.5t83.5 -74.5 t59 -103.5t36.5 -115.5t11.5 -110q0 -113 -59 -172q-18 -19 -44 -33.5t-56.5 -23.5t-58.5 -9q-58 0 -108 28.5t-83.5 73.5t-57.5 101.5t-34.5 111.5t-10.5 104zM1408 1024v128h256v256h128v-256h256v-128h-256v-256h-128v256h-256z" />
39
+ <glyph unicode="&#xf219;" d="M134.5 1267.5q5.5 80.5 41 179.5t102.5 191q70 78 153.5 135t167 86.5t172 45.5t169 15t156.5 -8t137.5 -21t107.5 -26.5t72 -22.5l25 -9q12 -5 32 -14.5t74.5 -45.5t101 -78.5t97 -114.5t78 -153t27.5 -194.5t-40 -238.5q-43 -89 -97 -157.5t-109.5 -110t-115.5 -69 t-115.5 -37t-107.5 -12t-95.5 4t-76 13t-49.5 13.5l-18 6v-277q-1 -3 -2 -9t-6.5 -23t-14 -34t-24.5 -39.5t-36 -42t-51.5 -39.5t-68.5 -33q-52 -19 -107 -20t-97 11.5t-76.5 27.5t-53.5 27l-18 13v280q33 -34 67 -55.5t67.5 -28.5t61.5 11t44 63v946h312v-538l65 -13 q206 -32 329 60q105 78 128 243q2 76 -15.5 141t-49 110.5t-72.5 82.5t-86.5 59.5t-91.5 39t-87.5 24t-73.5 11.5t-52 5h-19l-66 -2q-217 -16 -359 -141q-57 -50 -97 -115q-27 -45 -39.5 -93t-11 -88t10 -78.5t22 -67.5t25.5 -51t21 -33l9 -12l-225 -201q-7 9 -18.5 25 t-40.5 68.5t-49.5 107.5t-34.5 137.5t-8.5 163z" />
40
+ <glyph unicode="&#xf220;" d="M141 1431q0 133 65.5 245.5t178 178t245.5 65.5q141 0 260 -75q69 12 144 12q171 0 327 -66.5t269 -179.5t179.5 -269t66.5 -327q0 -96 -19 -181q51 -106 50 -217q0 -133 -65.5 -245.5t-178 -178t-244.5 -65.5q-123 0 -231 58q-79 -14 -155 -14q-171 0 -327 67t-269 180 t-179.5 269t-66.5 327q0 86 17 169q-67 116 -67 247zM537 775q0 -75 54 -153q52 -76 139 -123q119 -63 302 -63q150 0 263 46q111 46 171 130q59 85 59 188q0 88 -34 149q-35 62 -96 100q-58 39 -143 66q-77 25 -187 49q-89 20 -116 28q-35 9 -68 27q-33 15 -50 38 q-17 20 -17 49q0 46 52 80q54 36 146 36q97 0 141 -32q43 -32 75 -94q30 -48 51 -67q25 -22 72 -22q53 0 87 36q34 35 34 81t-25 96q-24 47 -82 92q-57 45 -139 70q-86 26 -197 26q-139 0 -247 -40q-107 -39 -164 -113q-57 -73 -57 -170q0 -102 55 -170q52 -65 144 -105 q95 -40 221 -66q93 -20 154 -38q57 -19 90 -50q33 -30 33 -80q0 -64 -62 -105q-65 -44 -170 -44q-78 0 -123 22q-47 22 -70 54q-27 34 -49 86q-21 49 -49 72q-32 26 -75 26q-52 0 -87 -33q-36 -33 -36 -79z" />
41
+ <glyph unicode="&#xf221;" d="M384 384v640h192q49 0 104 47t103.5 127.5t80.5 204.5t32 261q0 5 0.5 13.5t4 31t9.5 39t19 30.5t31 14q33 0 77.5 -42t79.5 -119t35 -159q0 -85 -8 -165t-16 -117l-8 -38h416q53 0 90.5 -37.5t37.5 -90.5q0 -41 -24 -74t-62 -46q22 -33 22 -72q0 -41 -24 -74t-62 -46 q22 -33 22 -72q0 -53 -37.5 -90.5t-90.5 -37.5h-64q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5h-448q-65 0 -123 20t-93.5 44t-80.5 44t-87 20h-128z" />
42
+ <glyph unicode="&#xf222;" d="M205 1168q0 83 59 142t142 59q100 0 160 -83q183 97 412 106l92 457q5 22 23 33q18 12 39 7l313 -72q24 41 65.5 65.5t89.5 24.5q74 0 126.5 -52.5t52.5 -126.5t-52.5 -126.5t-126.5 -52.5q-71 0 -122 48.5t-56 119.5l-262 60l-77 -386q222 -12 397 -108q60 86 163 86 q83 0 141.5 -59t58.5 -142q0 -55 -28 -100.5t-74 -72.5q14 -50 14 -99q0 -135 -98.5 -250t-267.5 -181.5t-368 -66.5t-368.5 66.5t-268 181t-98.5 249.5q0 50 16 104q-44 27 -70.5 71.5t-26.5 97.5zM307 1168q0 -47 40 -75q47 75 132 137q-29 36 -73 36q-41 0 -70 -28.5 t-29 -69.5zM388 896q0 -107 85 -198t230.5 -144t317.5 -53q171 0 316.5 53t230.5 143.5t85 197.5q0 108 -85 199t-230.5 144t-316.5 53q-172 0 -317.5 -53t-230.5 -144t-85 -198zM672 982q0 46 32.5 79t78.5 33q47 0 79.5 -33t32.5 -79t-33 -79t-79 -33t-78.5 33t-32.5 79z M737 739.5q0 21.5 15 36.5t36 15t36 -15q56 -56 199 -56q145 0 201 56q15 15 36 15t36 -15t15 -36.5t-15 -36.5q-86 -86 -271 -86q-187 0 -273 86q-15 15 -15 36.5zM1153 982q0 46 32.5 79t79.5 33t79.5 -33t32.5 -79t-33 -79t-79 -33t-79 33t-33 79zM1523 1728 q0 -32 22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5t-54.5 -22.5t-22.5 -54.5zM1567 1227q83 -61 131 -138q43 31 43 79q0 40 -28.5 69t-69.5 29q-45 0 -76 -39z" />
43
+ <glyph unicode="&#xf223;" d="M256 849v209h263v-206q0 -33 23.5 -56.5t57.5 -23.5t57.5 23.5t23.5 56.5v487q5 136 104.5 230.5t238.5 94.5t238.5 -95.5t104.5 -231.5v-107l-157 -45l-105 48v92q0 34 -23.5 57t-57.5 23t-57.5 -23t-23.5 -57l-1 -481q-1 -138 -101.5 -235t-241.5 -97q-142 0 -242.5 99 t-100.5 238zM1105 846v210l105 -48l157 46v-212q0 -33 23.5 -56.5t57.5 -23.5t57.5 23.5t23.5 56.5v216h263v-209q0 -139 -100.5 -238t-242.5 -99t-242 97.5t-102 236.5z" />
44
+ <glyph unicode="&#xf224;" d="M256 1152v384q0 106 75 181t181 75h1024q106 0 181 -75t75 -181v-384q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM512 1281q0 -53 38 -91l362 -362l4 4q37 -64 108 -64t108 64l5 -4l362 362q37 38 37 91t-37 90t-91 37 q-53 0 -90 -37l-294 -294l-293 294q-37 37 -91 37t-90 -37q-38 -37 -38 -90z" />
45
+ <glyph unicode="&#xf225;" d="M128 930l365 291l531 -328l-369 -308zM128 1513l527 345l369 -308l-531 -329zM497 508v115l158 -103l370 307l370 -307l158 103v-115l-528 -317zM1024 893l532 328l364 -291l-527 -345zM1024 1550l369 308l527 -345l-364 -292z" />
46
+ <glyph unicode="&#xf300;" d="M256 896v384q0 106 75 181t181 75h1024q106 0 181 -75t75 -181v-384q0 -106 -75 -181t-181 -75h-448l-448 -448v448h-128q-106 0 -181 75t-75 181z" />
47
+ <glyph unicode="&#xf301;" d="M384 512v1024h384l64 -128h448v-128h-640l-128 -256h128l64 128h960l-256 -640h-1024z" />
48
+ <glyph unicode="&#xf302;" d="M256 768l768 768h512v-512l-768 -768zM1152 1280q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5z" />
49
+ <glyph unicode="&#xf303;" d="M256 1088q0 143 55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5t-55.5 -273.5t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5zM384 1088q0 -117 45.5 -223.5t123 -184t184 -123t223.5 -45.5 t223.5 45.5t184 123t123 184t45.5 223.5t-45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5zM896 1062v474h128v-421l298 -298l-90 -91z" />
50
+ <glyph unicode="&#xf304;" d="M512 384v256q0 159 112.5 271.5t271.5 112.5h256q159 0 271.5 -112.5t112.5 -271.5v-256h-1024zM768 1408q0 106 75 181t181 75t181 -75t75 -181t-75 -181t-181 -75t-181 75t-75 181z" />
51
+ <glyph unicode="&#xf305;" d="M256 384v1280h256v128h128v-128h640v128h128v-128h256v-1280h-1408zM384 640q0 -53 37.5 -90.5t90.5 -37.5h896q53 0 90.5 37.5t37.5 90.5v640q0 53 -37.5 90.5t-90.5 37.5h-896q-53 0 -90.5 -37.5t-37.5 -90.5v-640zM768 1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45 v-512q0 -26 -19 -45t-45 -19t-45 19t-19 45v448h-64q-26 0 -45 19t-19 45z" />
52
+ <glyph unicode="&#xf306;" d="M256 384v1280h256v128h128v-128h640v128h128v-128h256v-1280h-1408zM384 640q0 -53 37.5 -90.5t90.5 -37.5h896q53 0 90.5 37.5t37.5 90.5v640q0 53 -37.5 90.5t-90.5 37.5h-896q-53 0 -90.5 -37.5t-37.5 -90.5v-640zM768 1216q0 26 19 45t45 19h256h2h1h3 q22 -2 38.5 -18t19.5 -39v-2v-2v-1v-2q0 -5 -2 -15l-128 -512q-6 -26 -28.5 -40t-48.5 -7q-26 6 -40 28.5t-7 48.5l108 433h-174q-26 0 -45 19t-19 45z" />
53
+ <glyph unicode="&#xf307;" d="M256 384v1280h256v128h128v-128h640v128h128v-128h256v-1280h-1408zM384 640q0 -53 37.5 -90.5t90.5 -37.5h896q53 0 90.5 37.5t37.5 90.5v640q0 53 -37.5 90.5t-90.5 37.5h-896q-53 0 -90.5 -37.5t-37.5 -90.5v-640zM512 640v128h128v-128h-128zM512 896v128h128v-128 h-128zM768 640v128h128v-128h-128zM768 896v128h128v-128h-128zM768 1152v128h128v-128h-128zM1024 640v128h128v-128h-128zM1024 896v128h128v-128h-128zM1024 1152v128h128v-128h-128zM1280 896v128h128v-128h-128zM1280 1152v128h128v-128h-128z" />
54
+ <glyph unicode="&#xf308;" d="M342 342q12 45 22 71t38 66.5t76 88.5l395 395l-227 227l181 181q37 -37 90.5 -37t91.5 37l181 181q38 38 38 91t-38 90l181 181l543 -543l-181 -181q-37 38 -90 38t-91 -38l-181 -181q-37 -37 -37 -90t37 -91l-181 -181l-227 226l-395 -395q-68 -68 -113.5 -93 t-112.5 -43z" />
55
+ <glyph unicode="&#xf400;" d="M256 1216q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5q0 -184 -111 -337l495 -495l-128 -128l-495 495q-153 -111 -337 -111q-117 0 -223.5 45.5t-184 123t-123 184t-45.5 223.5zM384 1216q0 -185 131.5 -316.5 t316.5 -131.5q186 0 317 131.5t131 316.5t-131 316.5t-317 131.5q-185 0 -316.5 -131.5t-131.5 -316.5z" />
56
+ <glyph unicode="&#xf401;" d="M256 1216q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5q0 -184 -111 -337l495 -495l-128 -128l-495 495q-153 -111 -337 -111q-117 0 -223.5 45.5t-184 123t-123 184t-45.5 223.5zM384 1216q0 -185 131.5 -316.5 t316.5 -131.5q186 0 317 131.5t131 316.5t-131 316.5t-317 131.5q-185 0 -316.5 -131.5t-131.5 -316.5zM512 1152v128h640v-128h-640z" />
57
+ <glyph unicode="&#xf402;" d="M256 1216q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5q0 -184 -111 -337l495 -495l-128 -128l-495 495q-153 -111 -337 -111q-117 0 -223.5 45.5t-184 123t-123 184t-45.5 223.5zM384 1216q0 -185 131.5 -316.5 t316.5 -131.5q186 0 317 131.5t131 316.5t-131 316.5t-317 131.5q-185 0 -316.5 -131.5t-131.5 -316.5zM512 1152v128h256v256h128v-256h256v-128h-256v-256h-128v256h-256z" />
58
+ <glyph unicode="&#xf403;" d="M0 1024l506 506q101 103 234.5 160.5t283.5 57.5t283.5 -57.5t233.5 -159.5l507 -507l-506 -507q-101 -103 -234.5 -160t-283.5 -57t-283.5 57.5t-233.5 160.5zM272 1024l370 -371q77 -78 175.5 -119.5t206.5 -41.5t206 41.5t174 118.5l373 372l-371 371 q-158 161 -382 161q-108 0 -206.5 -41t-173.5 -119zM640 1024q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5zM1024 1152q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5z" />
59
+ <glyph unicode="&#xf404;" d="M0 1024l506 506q101 103 234.5 160.5t283.5 57.5q193 0 358 -95l-143 -143q-103 46 -215 46q-108 0 -206.5 -41t-173.5 -119l-372 -372l240 -240l-136 -136zM339 429l90 -90l1280 1280l-90 90zM640 1024q0 159 112.5 271.5t271.5 112.5q44 0 98 -14l-468 -468 q-14 54 -14 98zM666 395l143 143q103 -46 215 -46q108 0 206 41.5t174 118.5l373 372l-241 241l136 135l376 -376l-506 -507q-101 -103 -234.5 -160t-283.5 -57q-193 0 -358 95zM926 654l468 468q14 -54 14 -98q0 -159 -112.5 -271.5t-271.5 -112.5q-44 0 -98 14z" />
60
+ <glyph unicode="&#xf405;" d="M640 768l320 320l-320 320l128 128l320 -320l320 320l128 -128l-320 -320l320 -320l-128 -128l-320 320l-320 -320z" />
61
+ <glyph unicode="&#xf406;" d="M128 256l832 832l-832 832l128 128l832 -832l832 832l128 -128l-832 -832l832 -832l-128 -128l-832 832l-832 -832z" />
62
+ <glyph unicode="&#xf407;" d="M384 1280v128l256 128q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5l256 -128v-128h-1152zM512 512v704h128v-704h128v704h128v-704h128v704h128v-704h128v704h128v-704q0 -53 -37.5 -90.5t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5zM768 1472 q0 -26 19 -45t45 -19h256q26 0 45 19t19 45t-19 45t-45 19h-256q-26 0 -45 -19t-19 -45z" />
63
+ <glyph unicode="&#xf408;" d="M256 1151l476 -330l-183 -535l475 332l475 -332l-183 535l476 330l-587 -1l-181 535l-180 -535z" />
64
+ <glyph unicode="&#xf409;" d="M384 1152l640 512l640 -512l-128 -128v-512h-1024v512zM896 576h256v448h-256v-448z" />
65
+ <glyph unicode="&#xf410;" d="M256 512v704l768 -384l768 384v-704h-1536zM256 1408v128h1536v-128l-768 -384z" />
66
+ <glyph unicode="&#xf411;" d="M384 384v448l896 896l448 -448l-896 -896h-448zM512 768l256 -256l128 128l-256 256zM685 941l96 -96l595 595l-96 96zM845 781l96 -96l595 595l-96 96z" />
67
+ <glyph unicode="&#xf412;" d="M256 640v704l384 384v-704h640v448l640 -640l-640 -640v448h-1024z" />
68
+ <glyph unicode="&#xf413;" d="M256 448q0 -80 56 -136t136 -56t136 56t56 136t-56 136t-136 56t-136 -56t-56 -136zM256 1024v256q209 0 398.5 -81t326.5 -218t218 -326.5t81 -398.5h-256q0 209 -103 385.5t-279.5 279.5t-385.5 103zM256 1536v256q209 0 408 -55t367.5 -154t310.5 -241t241 -310.5 t154 -367.5t55 -408h-256q0 260 -101.5 497t-273 408.5t-408.5 273t-497 101.5z" />
69
+ <glyph unicode="&#xf414;" d="M21 358q-57 102 31 244l760 1237q57 93 134.5 126.5t155 0t135.5 -126.5l759 -1237q88 -142 31 -244t-224 -102h-1557q-168 0 -225 102zM883 1536l51 -640h179l52 640h-282zM896 640q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5z" />
70
+ <glyph unicode="&#xf415;" d="M128 1024v256h310q75 172 233.5 278t352.5 106q130 0 246.5 -50t204.5 -139q37 -37 37 -90t-37 -91t-90 -38t-91 38q-116 114 -270 114q-159 0 -271.5 -112.5t-112.5 -271.5h-512zM536 665q0 53 38 90t91 37t90 -37q113 -115 269 -115q159 0 271.5 112.5t112.5 271.5h512 v-256h-310q-75 -172 -233.5 -278t-352.5 -106q-130 0 -246 50t-205 139l1 1q-38 38 -38 91zM832 1024q0 80 56 136t136 56t136 -56t56 -136t-56 -136t-136 -56t-136 56t-56 136z" />
71
+ <glyph unicode="&#xf416;" d="M512 832v320h128v-320q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5t93.5 226.5v640q0 80 -56 136t-136 56t-136 -56t-56 -136v-512q0 -26 19 -45t45 -19t45 19t19 45v452h128v-452q0 -80 -56 -136t-136 -56t-136 56t-56 136v512q0 133 93.5 226.5t226.5 93.5t226.5 -93.5 t93.5 -226.5v-640q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5z" />
72
+ <glyph unicode="&#xf417;" d="M384 1216q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5t-44.5 -222.5t-124.5 -185.5l-407 -406l-407 406q-80 80 -124.5 185.5t-44.5 222.5zM640 1216q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5t93.5 226.5t-93.5 226.5 t-226.5 93.5t-226.5 -93.5t-93.5 -226.5z" />
73
+ <glyph unicode="&#xf418;" d="M608 1056l128 128l224 -192l448 512l128 -96l-512 -768h-128z" />
74
+ <glyph unicode="&#xf419;" d="M0 256v256h2048v-256h-2048zM0 896v256h2048v-256h-2048zM0 1536v256h2048v-256h-2048z" />
75
+ <glyph unicode="&#xf420;" d="M256 1024q0 155 60 294.5t167 246.5l-227 227h640v-640l-232 232q-72 -71 -112 -163.5t-40 -196.5q0 -176 108.5 -313.5t275.5 -180.5v-262q-180 30 -326 137t-230 269.5t-84 349.5zM1152 256v640l19 -19l213 -213q71 71 111.5 164t40.5 196q0 176 -108.5 313.5 t-275.5 180.5v263q180 -31 326 -137.5t230 -269.5t84 -350q0 -155 -60 -294.5t-167 -246.5l227 -227h-640z" />
76
+ <glyph unicode="&#xf421;" d="M384 896v256h1152v-256h-1152z" />
77
+ <glyph unicode="&#xf422;" d="M384 512v1024h1152v-1024h-1152zM512 640h896v640h-896v-640z" />
78
+ <glyph unicode="&#xf423;" d="M83 832l373 671l112 -62l-267 -481h403v-384h-128v256h-493zM768 1024q0 87 43 160.5t116.5 116.5t160.5 43t160.5 -43t116.5 -116.5t43 -160.5t-43 -160.5t-116.5 -116.5t-160.5 -43t-160.5 43t-116.5 116.5t-43 160.5zM896 1024q0 -79 56.5 -135.5t135.5 -56.5 t135.5 56.5t56.5 135.5t-56.5 135.5t-135.5 56.5t-135.5 -56.5t-56.5 -135.5zM1427 832l373 671l112 -62l-267 -481h403v-384h-128v256h-493z" />
79
+ <glyph unicode="&#xf424;" d="M256 640v768l384 384h768l384 -384v-768l-384 -384h-768zM883 1536l51 -640h179l52 640h-282zM896 640q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5z" />
80
+ <glyph unicode="&#xf425;" d="M384 384v1280h256q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5h256v-1280h-1152zM512 512h896v1024h-128v-128h-640v128h-128v-1024zM640 704q0 26 19 45t45 19t45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45zM640 960q0 26 19 45t45 19t45 -19t19 -45 t-19 -45t-45 -19t-45 19t-19 45zM640 1216q0 26 19 45t45 19t45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45zM768 1600q0 -26 19 -45t45 -19h256q26 0 45 19t19 45t-19 45t-45 19h-256q-26 0 -45 -19t-19 -45zM896 640v128h384v-128h-384zM896 896v128h384v-128h-384z M896 1152v128h384v-128h-384z" />
81
+ <glyph unicode="&#xf426;" d="M128 768q0 106 75 181t181 75h7q-7 29 -7 64q0 133 93.5 226.5t226.5 93.5q134 0 228 -96q47 101 140.5 162.5t207.5 61.5q159 0 271.5 -112.5t112.5 -271.5q0 -62 -23 -128h23q106 0 181 -75t75 -181t-75 -181t-181 -75h-1280q-106 0 -181 75t-75 181z" />
82
+ <glyph unicode="&#xf427;" d="M384 384v288l455 455l-1 1q-74 74 -74 180t74 181l233 233q75 74 181 74t180 -74l286 -286q74 -75 74 -180.5t-74 -180.5l-233 -233q-74 -73 -178.5 -74t-179.5 71l-455 -455h-288zM1088 1360l256 -256l160 160l-256 256z" />
83
+ <glyph unicode="&#xf428;" d="M768 1024q0 106 75 181t181 75t181 -75t75 -181t-75 -181t-181 -75t-181 75t-75 181z" />
84
+ <glyph unicode="&#xf429;" d="M384 896v128h896l-343 343l87 86l493 -493l-493 -493l-87 86l343 343h-896z" />
85
+ <glyph unicode="&#xf430;" d="M531 960l493 -493l87 86l-343 343h896v128h-896l343 343l-87 86z" />
86
+ <glyph unicode="&#xf431;" d="M384 1152l128 128l448 -448l448 448l128 -128l-576 -576z" />
87
+ <glyph unicode="&#xf432;" d="M384 768l576 576l576 -576l-128 -128l-448 448l-448 -448z" />
88
+ <glyph unicode="&#xf433;" d="M0 0v896l896 -896h-896z" />
89
+ <glyph unicode="&#xf434;" d="M1152 0l896 896v-896h-896z" />
90
+ <glyph unicode="&#xf435;" d="M384 512l640 640l640 -640h-1280zM384 1280v128h1280v-128h-1280z" />
91
+ <glyph unicode="&#xf436;" d="M512 640v128h128v-128h-128zM512 896v128h128v-128h-128zM512 1152v128h128v-128h-128zM512 1408v128h128v-128h-128zM768 640v128h128v-128h-128zM768 896v128h128v-128h-128zM768 1152v128h128v-128h-128zM768 1408v128h128v-128h-128zM1024 640v128h128v-128h-128z M1024 896v128h128v-128h-128zM1024 1152v128h128v-128h-128zM1024 1408v128h128v-128h-128zM1280 640v128h128v-128h-128zM1280 896v128h128v-128h-128zM1280 1152v128h128v-128h-128zM1280 1408v128h128v-128h-128z" />
92
+ <glyph unicode="&#xf437;" d="M512 512v1024q0 106 75 181t181 75h512q106 0 181 -75t75 -181v-1024q0 -106 -75 -181t-181 -75h-512q-106 0 -181 75t-75 181zM640 768h768v768h-768v-768zM896 512q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5z " />
93
+ <glyph unicode="&#xf438;" d="M256 1024v256h512v128l384 -256l-384 -256v128h-512zM512 512v384h128v-128h768v768h-768v-128h-128v128q0 106 75 181t181 75h512q106 0 181 -75t75 -181v-1024q0 -106 -75 -181t-181 -75h-512q-106 0 -181 75t-75 181zM896 512q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5 t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5z" />
94
+ <glyph unicode="&#xf439;" d="M384 1152h1280q0 -231 -145.5 -406.5t-366.5 -220.5v-269h-256v269q-221 45 -366.5 220.5t-145.5 406.5zM640 1280v384q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5v-384h-256zM1152 1280v384q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5v-384h-256z" />
95
+ <glyph unicode="&#xf440;" d="M128 768q0 106 75 181t181 75h6q-6 32 -6 64q0 133 93.5 226.5t226.5 93.5q134 0 228 -96q47 101 140.5 162.5t207.5 61.5q159 0 271.5 -112.5t112.5 -271.5q0 -62 -23 -128h23q106 0 181 -75t75 -181t-75 -181t-181 -75h-384v256h-512v-256h-384q-106 0 -181 75t-75 181 zM640 384h256v256h256v-256h256l-384 -384z" />
96
+ <glyph unicode="&#xf441;" d="M128 768q0 106 75 181t181 75h6q-6 32 -6 64q0 133 93.5 226.5t226.5 93.5q134 0 228 -96q47 101 140.5 162.5t207.5 61.5q159 0 271.5 -112.5t112.5 -271.5q0 -62 -23 -128h23q106 0 181 -75t75 -181t-75 -181t-181 -75h-512v256h256l-384 384l-384 -384h256v-256h-512 q-106 0 -181 75t-75 181z" />
97
+ <glyph unicode="&#xf442;" d="M512 512v896h512l-128 -128h-256v-640h640v256l128 128v-512h-896zM896 987l550 549h-422v128h640v-640h-128v422l-550 -550z" />
98
+ <glyph unicode="&#xf443;" d="M512 384v1280h640l384 -384v-896h-1024zM640 512h768v640h-384v384h-384v-1024z" />
99
+ <glyph unicode="&#xf444;" d="M384 512v1024q0 106 75 181t181 75h1024v-1152h-64q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5h64v-128h-1024q-106 0 -181 75t-75 181zM512 512q0 -53 37.5 -90.5t90.5 -37.5h818q-50 55 -50 128t50 128h-818q-53 0 -90.5 -37.5t-37.5 -90.5z" />
100
+ <glyph unicode="&#xf445;" d="M160 747l232 201q-8 67 -8 76q0 8 8 75l-232 201l58 139l305 -21q47 60 107 107l-21 305l139 58l201 -232q67 8 75 8t75 -8l201 232l140 -58l-22 -305q56 -44 107 -107l305 22l58 -139l-232 -201q8 -67 8 -76q0 -8 -8 -75l232 -201l-58 -140l-305 22q-44 -56 -107 -107 l22 -305l-139 -58l-201 232q-67 -8 -76 -8q-8 0 -75 8l-201 -232l-139 58l21 305q-56 44 -107 107l-305 -22zM768 1024q0 -106 75 -181t181 -75t181 75t75 181t-75 181t-181 75t-181 -75t-75 -181z" />
101
+ <glyph unicode="&#xf446;" d="M256 1024q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM512 1024q0 -212 150 -362t362 -150q135 0 259 72l-699 699q-72 -126 -72 -259zM765 1464l699 -699 q72 123 72 259q0 212 -150 362t-362 150q-136 0 -259 -72z" />
102
+ <glyph unicode="&#xf447;" d="M256 1664v128h384v-256h1152l-256 -640h-896v-128h896v-128h-1024v1024h-256zM512 384q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5zM1280 384q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5t-37.5 -90.5 t-90.5 -37.5t-90.5 37.5t-37.5 90.5z" />
103
+ <glyph unicode="&#xf448;" d="M512 384v1280h384v-1280h-384zM1152 384v1280h384v-1280h-384z" />
104
+ <glyph unicode="&#xf449;" d="M512 512v1024h1024v-1024h-1024z" />
105
+ <glyph unicode="&#xf450;" d="M256 384v1280h384v-1280h-384zM768 1024l1024 640v-1280z" />
106
+ <glyph unicode="&#xf451;" d="M256 384v1280l1024 -640zM1408 384v1280h384v-1280h-384z" />
107
+ <glyph unicode="&#xf452;" d="M512 384v1280l1024 -640z" />
108
+ <glyph unicode="&#xf453;" d="M256 256v1536q0 106 75 181t181 75h1024q106 0 181 -75t75 -181v-1536q0 -106 -75 -181t-181 -75h-1024q-106 0 -181 75t-75 181zM512 512h1024v1280h-1024v-1280zM896 256q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5z" />
109
+ <glyph unicode="&#xf454;" d="M128 1024v256h512v128l384 -256l-384 -256v128h-512zM256 256v640h256v-384h1024v1280h-1024v-384h-256v384q0 106 75 181t181 75h1024q106 0 181 -75t75 -181v-1536q0 -106 -75 -181t-181 -75h-1024q-106 0 -181 75t-75 181zM896 256q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5z" />
110
+ <glyph unicode="&#xf455;" d="M256 1024q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM896 1408q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5zM928 512h192v640h-192v-640z" />
111
+ <glyph unicode="&#xf456;" d="M256 1024q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM883 1536l51 -640h179l52 640h-282zM896 640q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5 t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5z" />
112
+ <glyph unicode="&#xf457;" d="M256 1024q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM720 1442l92 -180q134 71 234 71q38 0 65 -16q26 -17 26 -44q0 -35 -24 -63q-24 -27 -77 -61 q-68 -42 -95 -87q-26 -44 -26 -109v-57h204v34q0 29 17 49q18 21 87 66q83 53 120 111t37 139q0 111 -84 176q-85 65 -232 65q-180 0 -344 -94zM896 640q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5z" />
113
+ <glyph unicode="&#xf458;" d="M128 384v1280l768 -480v480l1024 -640l-1024 -640v480z" />
114
+ <glyph unicode="&#xf459;" d="M128 1024l1024 -640v480l768 -480v1280l-768 -480v480z" />
115
+ <glyph unicode="&#xf460;" d="M256 1280h128l86 256h340l86 -256l-256 -768h-128zM533 1280h214l-43 128h-128zM768 512l256 768h128l86 256h340l86 -256h128l-256 -768h-768zM1301 1280h214l-43 128h-128z" />
116
+ <glyph unicode="&#xf461;" d="M256 1261q8 -158 120 -264l648 -613l648 613q112 106 120 264t-93 276t-251.5 126.5t-262.5 -97.5l-161 -153l-161 153q-112 106 -262.5 97.5t-251.5 -126.5t-93 -276z" />
117
+ <glyph unicode="&#xf462;" d="M102 1024l304 -455l213 142l-209 313l209 313l-213 142zM772 543l248 -62l256 1024l-248 62zM1430 711l213 -142l303 455l-303 455l-213 -142l208 -313z" />
118
+ <glyph unicode="&#xf463;" d="M0 512v704l768 -384l256 128v-448h-1024zM0 1408v128h1536v-128l-768 -384zM1152 384v640q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5zM1280 640h256v-256h128v256h256v128h-256 v256h-128v-256h-256v-128z" />
119
+ <glyph unicode="&#xf464;" d="M0 512v704l768 -384l256 128v-448h-1024zM0 1408v128h1536v-128l-768 -384zM1152 384v640q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5zM1280 640h640v128h-640v-128z" />
120
+ <glyph unicode="&#xf465;" d="M0 512v704l768 -384l256 128v-448h-1024zM0 1408v128h1536v-128l-768 -384zM1152 384v640q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5zM1260 656l272 -272l452 453l-90 90 l-362 -362l-181 181z" />
121
+ <glyph unicode="&#xf466;" d="M0 1024l640 640v-320l-320 -320l320 -320v-320zM512 1024l640 640v-384h256q212 0 362 -150t150 -362v-300l-150 150q-74 74 -168 112t-194 38h-256v-384z" />
122
+ <glyph unicode="&#xf467;" d="M384 1024l640 640v-384h256q212 0 362 -150t150 -362v-300l-150 150q-74 74 -168 112t-194 38h-256v-384z" />
123
+ <glyph unicode="&#xf468;" d="M256 256v1536h256v-1536h-256zM640 896v768q35 0 63.5 13t54 32t56.5 38t85 32t125 13q70 0 125.5 -13t93 -32l75 -38t93 -32t125.5 -13h256v-768h-256q-70 0 -125.5 13t-93 32l-75 38t-93 32t-125.5 13q-71 0 -125 -13t-85 -32t-56.5 -38t-54 -32t-63.5 -13z" />
124
+ <glyph unicode="&#xf469;" d="M256 512v768h1536v-768h-256v384h-1024v-384h-256zM640 640v128h768v-128q0 -158 113 -271l112 -113h-768l-112 113q-113 113 -113 271zM640 1408h768v256h-768v-256z" />
125
+ <glyph unicode="&#xf470;" d="M384 384v640q0 53 37.5 90.5t90.5 37.5v128q0 212 150 362t362 150t362 -150t150 -362v-128q53 0 90.5 -37.5t37.5 -90.5v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-1024q-53 0 -90.5 37.5t-37.5 90.5zM768 1152h512v128q0 106 -75 181t-181 75t-181 -75t-75 -181v-128z" />
126
+ <glyph unicode="&#xf471;" d="M512 512v1024h512q106 0 181 -75t75 -181q0 -87 -57 -159q83 -39 134 -117t51 -172q0 -133 -93.5 -226.5t-226.5 -93.5h-576zM768 640h192q80 0 136 56t56 136t-56 136t-136 56h-192v-384zM768 1152h128q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5h-128v-256z" />
127
+ <glyph unicode="&#xf472;" d="M640 512l40 128h128l240 768h-128l40 128h448l-40 -128h-128l-240 -768h128l-40 -128h-448z" />
128
+ <glyph unicode="&#xf473;" d="M384 384v1280h1280v-1280h-1280zM512 512h1024v576l-128 192l-448 -672l-192 288zM640 1280q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5z" />
129
+ <glyph unicode="&#xf474;" d="M128 256v384l154 -154l230 154l-154 -230l154 -154h-384zM128 1408v384h384l-154 -154l154 -230l-230 154zM640 768v512h768v-512h-768zM1536 256l154 154l-154 230l230 -154l154 154v-384h-384zM1536 1408l154 230l-154 154h384v-384l-154 154z" />
130
+ <glyph unicode="&#xf500;" d="M128 0l960 960l960 -960h-1920z" />
131
+ <glyph unicode="&#xf501;" d="M0 128l960 960l-960 960v-1920z" />
132
+ <glyph unicode="&#xf502;" d="M128 2048l960 -960l960 960h-1920z" />
133
+ <glyph unicode="&#xf503;" d="M1088 1088l960 960v-1920z" />
134
+ </font>
135
+ </defs></svg>
assets/fonts/genericons-regular-webfont.ttf ADDED
Binary file
assets/fonts/genericons-regular-webfont.woff ADDED
Binary file
assets/images/chosen-sprite.png ADDED
Binary file
assets/images/chosen-sprite@2x.png ADDED
Binary file
assets/images/extensions/custom-login-page-template-300x200.jpg ADDED
Binary file
assets/images/extensions/custom-login-redirects-300x200.jpg ADDED
Binary file
assets/images/extensions/custom-login-stealth-login-300x200.jpg ADDED
Binary file
assets/js/admin.js ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(document).ready(function($) {
2
+
3
+ var Select = $('select[name="custom_login[logo_background_size]"]');
4
+ var Custom = $('input[name="custom_login[logo_background_size_custom]"]');
5
+
6
+ if ( 'custom' !== Select.val() ) {
7
+ $(Custom).parent().parent().hide('slow');
8
+ }
9
+
10
+ $(Select).chosen().on('change',function() {
11
+ var Val = $(this).val();
12
+ // console.log(Val);
13
+
14
+ if ( 'custom' === Val ) {
15
+ $(Custom).parent().parent().show('fast');
16
+ }
17
+ else {
18
+ $(Custom).parent().parent().hide('slow');
19
+ }
20
+
21
+ });
22
+
23
+ // Allow tab key
24
+ $('textarea[name="custom_login[custom_css]"]').on("keydown",function(e) {
25
+ if ( e.keyCode == 9 ) {
26
+ e.preventDefault();
27
+ insertAtCursor(document.getElementById("custom_login[custom_css]"), " ");
28
+ }
29
+ });
30
+
31
+ // Allow tab key
32
+ if ( $('div.img').length ) {
33
+ $('div.img').each(function() {
34
+ var $size = $(this).parent().width();
35
+ $(this).css({
36
+ 'max-width': $size,
37
+ 'width' : $size
38
+ }).slideDown('fast');
39
+ });
40
+ }
41
+
42
+ // Remote API helper
43
+ $('#custom_login_extensions a[data-toggle]').on('click',function(e) {
44
+ e.preventDefault();
45
+ $('#' + $(this).data('toggle')).toggle();
46
+ });
47
+
48
+ // Show Purchase button
49
+ $('a[data-edd-install]').each(function() {
50
+ var $this = $(this);
51
+ setTimeout( function() {
52
+ if ( $this.prev('.eddri-status').text() === 'Not Installed' ) {
53
+ $this.closest( $this.parent() ).children('a.button').hide();
54
+ $this.closest( $this.parent() ).children('a.button.show-if-not-purchased').show();
55
+ }
56
+ }, 500 );
57
+ });
58
+
59
+ });
60
+
61
+ /**
62
+ * @ref http://alexking.org/blog/2003/06/02/inserting-at-the-cursor-using-javascript#comment-3817
63
+ */
64
+ function insertAtCursor(myField, myValue) {
65
+ //IE support
66
+ if (document.selection) {
67
+ var temp;
68
+ myField.focus();
69
+ sel = document.selection.createRange();
70
+ temp = sel.text.lenght;
71
+ sel.text = myValue;
72
+ if (myValue.length == 0) {
73
+ sel.moveStart('character', myValue.length);
74
+ sel.moveEnd('character', myValue.length);
75
+ } else {
76
+ sel.moveStart('character', -myValue.length + temp);
77
+ }
78
+ sel.select();
79
+ }
80
+ //MOZILLA/NETSCAPE support
81
+ else if (myField.selectionStart || myField.selectionStart == '0') {
82
+ var startPos = myField.selectionStart;
83
+ var endPos = myField.selectionEnd;
84
+ myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length);
85
+ myField.selectionStart = startPos + myValue.length;
86
+ myField.selectionEnd = startPos + myValue.length;
87
+ } else {
88
+ myField.value += myValue;
89
+ }
90
+ }
assets/js/chosen.jquery.min.js ADDED
@@ -0,0 +1,2 @@
 
 
1
+ /* Chosen v1.0.0 | (c) 2011-2013 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */
2
+ !function(){var a,AbstractChosen,Chosen,SelectParser,b,c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};SelectParser=function(){function SelectParser(){this.options_index=0,this.parsed=[]}return SelectParser.prototype.add_node=function(a){return"OPTGROUP"===a.nodeName.toUpperCase()?this.add_group(a):this.add_option(a)},SelectParser.prototype.add_group=function(a){var b,c,d,e,f,g;for(b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:this.escapeExpression(a.label),children:0,disabled:a.disabled}),f=a.childNodes,g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(this.add_option(c,b,a.disabled));return g},SelectParser.prototype.add_option=function(a,b,c){return"OPTION"===a.nodeName.toUpperCase()?(""!==a.text?(null!=b&&(this.parsed[b].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:a.value,text:a.text,html:a.innerHTML,selected:a.selected,disabled:c===!0?c:a.disabled,group_array_index:b,classes:a.className,style:a.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1):void 0},SelectParser.prototype.escapeExpression=function(a){var b,c;return null==a||a===!1?"":/[\&\<\>\"\'\`]/.test(a)?(b={"<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},c=/&(?!\w+;)|[\<\>\"\'\`]/g,a.replace(c,function(a){return b[a]||"&amp;"})):a},SelectParser}(),SelectParser.select_to_array=function(a){var b,c,d,e,f;for(c=new SelectParser,f=a.childNodes,d=0,e=f.length;e>d;d++)b=f[d],c.add_node(b);return c.parsed},AbstractChosen=function(){function AbstractChosen(a,b){this.form_field=a,this.options=null!=b?b:{},AbstractChosen.browser_is_supported()&&(this.is_multiple=this.form_field.multiple,this.set_default_text(),this.set_default_values(),this.setup(),this.set_up_html(),this.register_observers())}return AbstractChosen.prototype.set_default_values=function(){var a=this;return this.click_test_action=function(b){return a.test_active_click(b)},this.activate_action=function(b){return a.activate_field(b)},this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.result_single_selected=null,this.allow_single_deselect=null!=this.options.allow_single_deselect&&null!=this.form_field.options[0]&&""===this.form_field.options[0].text?this.options.allow_single_deselect:!1,this.disable_search_threshold=this.options.disable_search_threshold||0,this.disable_search=this.options.disable_search||!1,this.enable_split_word_search=null!=this.options.enable_split_word_search?this.options.enable_split_word_search:!0,this.group_search=null!=this.options.group_search?this.options.group_search:!0,this.search_contains=this.options.search_contains||!1,this.single_backstroke_delete=null!=this.options.single_backstroke_delete?this.options.single_backstroke_delete:!0,this.max_selected_options=this.options.max_selected_options||1/0,this.inherit_select_classes=this.options.inherit_select_classes||!1,this.display_selected_options=null!=this.options.display_selected_options?this.options.display_selected_options:!0,this.display_disabled_options=null!=this.options.display_disabled_options?this.options.display_disabled_options:!0},AbstractChosen.prototype.set_default_text=function(){return this.default_text=this.form_field.getAttribute("data-placeholder")?this.form_field.getAttribute("data-placeholder"):this.is_multiple?this.options.placeholder_text_multiple||this.options.placeholder_text||AbstractChosen.default_multiple_text:this.options.placeholder_text_single||this.options.placeholder_text||AbstractChosen.default_single_text,this.results_none_found=this.form_field.getAttribute("data-no_results_text")||this.options.no_results_text||AbstractChosen.default_no_result_text},AbstractChosen.prototype.mouse_enter=function(){return this.mouse_on_container=!0},AbstractChosen.prototype.mouse_leave=function(){return this.mouse_on_container=!1},AbstractChosen.prototype.input_focus=function(){var a=this;if(this.is_multiple){if(!this.active_field)return setTimeout(function(){return a.container_mousedown()},50)}else if(!this.active_field)return this.activate_field()},AbstractChosen.prototype.input_blur=function(){var a=this;return this.mouse_on_container?void 0:(this.active_field=!1,setTimeout(function(){return a.blur_test()},100))},AbstractChosen.prototype.results_option_build=function(a){var b,c,d,e,f;for(b="",f=this.results_data,d=0,e=f.length;e>d;d++)c=f[d],b+=c.group?this.result_add_group(c):this.result_add_option(c),(null!=a?a.first:void 0)&&(c.selected&&this.is_multiple?this.choice_build(c):c.selected&&!this.is_multiple&&this.single_set_selected_text(c.text));return b},AbstractChosen.prototype.result_add_option=function(a){var b,c;return a.search_match?this.include_option_in_results(a)?(b=[],a.disabled||a.selected&&this.is_multiple||b.push("active-result"),!a.disabled||a.selected&&this.is_multiple||b.push("disabled-result"),a.selected&&b.push("result-selected"),null!=a.group_array_index&&b.push("group-option"),""!==a.classes&&b.push(a.classes),c=""!==a.style.cssText?' style="'+a.style+'"':"",'<li class="'+b.join(" ")+'"'+c+' data-option-array-index="'+a.array_index+'">'+a.search_text+"</li>"):"":""},AbstractChosen.prototype.result_add_group=function(a){return a.search_match||a.group_match?a.active_options>0?'<li class="group-result">'+a.search_text+"</li>":"":""},AbstractChosen.prototype.results_update_field=function(){return this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.result_single_selected=null,this.results_build(),this.results_showing?this.winnow_results():void 0},AbstractChosen.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},AbstractChosen.prototype.results_search=function(){return this.results_showing?this.winnow_results():this.results_show()},AbstractChosen.prototype.winnow_results=function(){var a,b,c,d,e,f,g,h,i,j,k,l,m;for(this.no_results_clear(),e=0,g=this.get_search_text(),a=g.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),d=this.search_contains?"":"^",c=new RegExp(d+a,"i"),j=new RegExp(a,"i"),m=this.results_data,k=0,l=m.length;l>k;k++)b=m[k],b.search_match=!1,f=null,this.include_option_in_results(b)&&(b.group&&(b.group_match=!1,b.active_options=0),null!=b.group_array_index&&this.results_data[b.group_array_index]&&(f=this.results_data[b.group_array_index],0===f.active_options&&f.search_match&&(e+=1),f.active_options+=1),(!b.group||this.group_search)&&(b.search_text=b.group?b.label:b.html,b.search_match=this.search_string_match(b.search_text,c),b.search_match&&!b.group&&(e+=1),b.search_match?(g.length&&(h=b.search_text.search(j),i=b.search_text.substr(0,h+g.length)+"</em>"+b.search_text.substr(h+g.length),b.search_text=i.substr(0,h)+"<em>"+i.substr(h)),null!=f&&(f.group_match=!0)):null!=b.group_array_index&&this.results_data[b.group_array_index].search_match&&(b.search_match=!0)));return this.result_clear_highlight(),1>e&&g.length?(this.update_results_content(""),this.no_results(g)):(this.update_results_content(this.results_option_build()),this.winnow_results_set_highlight())},AbstractChosen.prototype.search_string_match=function(a,b){var c,d,e,f;if(b.test(a))return!0;if(this.enable_split_word_search&&(a.indexOf(" ")>=0||0===a.indexOf("["))&&(d=a.replace(/\[|\]/g,"").split(" "),d.length))for(e=0,f=d.length;f>e;e++)if(c=d[e],b.test(c))return!0},AbstractChosen.prototype.choices_count=function(){var a,b,c,d;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,d=this.form_field.options,b=0,c=d.length;c>b;b++)a=d[b],a.selected&&(this.selected_option_count+=1);return this.selected_option_count},AbstractChosen.prototype.choices_click=function(a){return a.preventDefault(),this.results_showing||this.is_disabled?void 0:this.results_show()},AbstractChosen.prototype.keyup_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices_count()>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:if(a.preventDefault(),this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},AbstractChosen.prototype.container_width=function(){return null!=this.options.width?this.options.width:""+this.form_field.offsetWidth+"px"},AbstractChosen.prototype.include_option_in_results=function(a){return this.is_multiple&&!this.display_selected_options&&a.selected?!1:!this.display_disabled_options&&a.disabled?!1:a.empty?!1:!0},AbstractChosen.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:/iP(od|hone)/i.test(window.navigator.userAgent)?!1:/Android/i.test(window.navigator.userAgent)&&/Mobile/i.test(window.navigator.userAgent)?!1:!0},AbstractChosen.default_multiple_text="Select Some Options",AbstractChosen.default_single_text="Select an Option",AbstractChosen.default_no_result_text="No results match",AbstractChosen}(),a=jQuery,a.fn.extend({chosen:function(b){return AbstractChosen.browser_is_supported()?this.each(function(){var c,d;c=a(this),d=c.data("chosen"),"destroy"===b&&d?d.destroy():d||c.data("chosen",new Chosen(this,b))}):this}}),Chosen=function(c){function Chosen(){return b=Chosen.__super__.constructor.apply(this,arguments)}return d(Chosen,c),Chosen.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex,this.is_rtl=this.form_field_jq.hasClass("chosen-rtl")},Chosen.prototype.set_up_html=function(){var b,c;return b=["chosen-container"],b.push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&b.push(this.form_field.className),this.is_rtl&&b.push("chosen-rtl"),c={"class":b.join(" "),style:"width: "+this.container_width()+";",title:this.form_field.title},this.form_field.id.length&&(c.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=a("<div />",c),this.is_multiple?this.container.html('<ul class="chosen-choices"><li class="search-field"><input type="text" value="'+this.default_text+'" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chosen-drop"><ul class="chosen-results"></ul></div>'):this.container.html('<a class="chosen-single chosen-default" tabindex="-1"><span>'+this.default_text+'</span><div><b></b></div></a><div class="chosen-drop"><div class="chosen-search"><input type="text" autocomplete="off" /></div><ul class="chosen-results"></ul></div>'),this.form_field_jq.hide().after(this.container),this.dropdown=this.container.find("div.chosen-drop").first(),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chosen-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chosen-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chosen-search").first(),this.selected_item=this.container.find(".chosen-single").first()),this.results_build(),this.set_tab_index(),this.set_label_behavior(),this.form_field_jq.trigger("chosen:ready",{chosen:this})},Chosen.prototype.register_observers=function(){var a=this;return this.container.bind("mousedown.chosen",function(b){a.container_mousedown(b)}),this.container.bind("mouseup.chosen",function(b){a.container_mouseup(b)}),this.container.bind("mouseenter.chosen",function(b){a.mouse_enter(b)}),this.container.bind("mouseleave.chosen",function(b){a.mouse_leave(b)}),this.search_results.bind("mouseup.chosen",function(b){a.search_results_mouseup(b)}),this.search_results.bind("mouseover.chosen",function(b){a.search_results_mouseover(b)}),this.search_results.bind("mouseout.chosen",function(b){a.search_results_mouseout(b)}),this.search_results.bind("mousewheel.chosen DOMMouseScroll.chosen",function(b){a.search_results_mousewheel(b)}),this.form_field_jq.bind("chosen:updated.chosen",function(b){a.results_update_field(b)}),this.form_field_jq.bind("chosen:activate.chosen",function(b){a.activate_field(b)}),this.form_field_jq.bind("chosen:open.chosen",function(b){a.container_mousedown(b)}),this.search_field.bind("blur.chosen",function(b){a.input_blur(b)}),this.search_field.bind("keyup.chosen",function(b){a.keyup_checker(b)}),this.search_field.bind("keydown.chosen",function(b){a.keydown_checker(b)}),this.search_field.bind("focus.chosen",function(b){a.input_focus(b)}),this.is_multiple?this.search_choices.bind("click.chosen",function(b){a.choices_click(b)}):this.container.bind("click.chosen",function(a){a.preventDefault()})},Chosen.prototype.destroy=function(){return a(document).unbind("click.chosen",this.click_test_action),this.search_field[0].tabIndex&&(this.form_field_jq[0].tabIndex=this.search_field[0].tabIndex),this.container.remove(),this.form_field_jq.removeData("chosen"),this.form_field_jq.show()},Chosen.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field_jq[0].disabled,this.is_disabled?(this.container.addClass("chosen-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus.chosen",this.activate_action),this.close_field()):(this.container.removeClass("chosen-disabled"),this.search_field[0].disabled=!1,this.is_multiple?void 0:this.selected_item.bind("focus.chosen",this.activate_action))},Chosen.prototype.container_mousedown=function(b){return this.is_disabled||(b&&"mousedown"===b.type&&!this.results_showing&&b.preventDefault(),null!=b&&a(b.target).hasClass("search-choice-close"))?void 0:(this.active_field?this.is_multiple||!b||a(b.target)[0]!==this.selected_item[0]&&!a(b.target).parents("a.chosen-single").length||(b.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),a(document).bind("click.chosen",this.click_test_action),this.results_show()),this.activate_field())},Chosen.prototype.container_mouseup=function(a){return"ABBR"!==a.target.nodeName||this.is_disabled?void 0:this.results_reset(a)},Chosen.prototype.search_results_mousewheel=function(a){var b,c,d;return b=-(null!=(c=a.originalEvent)?c.wheelDelta:void 0)||(null!=(d=a.originialEvent)?d.detail:void 0),null!=b?(a.preventDefault(),"DOMMouseScroll"===a.type&&(b=40*b),this.search_results.scrollTop(b+this.search_results.scrollTop())):void 0},Chosen.prototype.blur_test=function(){return!this.active_field&&this.container.hasClass("chosen-container-active")?this.close_field():void 0},Chosen.prototype.close_field=function(){return a(document).unbind("click.chosen",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClass("chosen-container-active"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},Chosen.prototype.activate_field=function(){return this.container.addClass("chosen-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},Chosen.prototype.test_active_click=function(b){return this.container.is(a(b.target).closest(".chosen-container"))?this.active_field=!0:this.close_field()},Chosen.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=SelectParser.select_to_array(this.form_field),this.is_multiple?this.search_choices.find("li.search-choice").remove():this.is_multiple||(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field[0].readOnly=!0,this.container.addClass("chosen-container-single-nosearch")):(this.search_field[0].readOnly=!1,this.container.removeClass("chosen-container-single-nosearch"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},Chosen.prototype.result_do_highlight=function(a){var b,c,d,e,f;if(a.length){if(this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClass("highlighted"),d=parseInt(this.search_results.css("maxHeight"),10),f=this.search_results.scrollTop(),e=d+f,c=this.result_highlight.position().top+this.search_results.scrollTop(),b=c+this.result_highlight.outerHeight(),b>=e)return this.search_results.scrollTop(b-d>0?b-d:0);if(f>c)return this.search_results.scrollTop(c)}},Chosen.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClass("highlighted"),this.result_highlight=null},Chosen.prototype.results_show=function(){return this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.container.addClass("chosen-with-drop"),this.form_field_jq.trigger("chosen:showing_dropdown",{chosen:this}),this.results_showing=!0,this.search_field.focus(),this.search_field.val(this.search_field.val()),this.winnow_results())},Chosen.prototype.update_results_content=function(a){return this.search_results.html(a)},Chosen.prototype.results_hide=function(){return this.results_showing&&(this.result_clear_highlight(),this.container.removeClass("chosen-with-drop"),this.form_field_jq.trigger("chosen:hiding_dropdown",{chosen:this})),this.results_showing=!1},Chosen.prototype.set_tab_index=function(){var a;return this.form_field.tabIndex?(a=this.form_field.tabIndex,this.form_field.tabIndex=-1,this.search_field[0].tabIndex=a):void 0},Chosen.prototype.set_label_behavior=function(){var b=this;return this.form_field_label=this.form_field_jq.parents("label"),!this.form_field_label.length&&this.form_field.id.length&&(this.form_field_label=a("label[for='"+this.form_field.id+"']")),this.form_field_label.length>0?this.form_field_label.bind("click.chosen",function(a){return b.is_multiple?b.container_mousedown(a):b.activate_field()}):void 0},Chosen.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.val(this.default_text),this.search_field.addClass("default")):(this.search_field.val(""),this.search_field.removeClass("default"))},Chosen.prototype.search_results_mouseup=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c.length?(this.result_highlight=c,this.result_select(b),this.search_field.focus()):void 0},Chosen.prototype.search_results_mouseover=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c?this.result_do_highlight(c):void 0},Chosen.prototype.search_results_mouseout=function(b){return a(b.target).hasClass("active-result")?this.result_clear_highlight():void 0},Chosen.prototype.choice_build=function(b){var c,d,e=this;return c=a("<li />",{"class":"search-choice"}).html("<span>"+b.html+"</span>"),b.disabled?c.addClass("search-choice-disabled"):(d=a("<a />",{"class":"search-choice-close","data-option-array-index":b.array_index}),d.bind("click.chosen",function(a){return e.choice_destroy_link_click(a)}),c.append(d)),this.search_container.before(c)},Chosen.prototype.choice_destroy_link_click=function(b){return b.preventDefault(),b.stopPropagation(),this.is_disabled?void 0:this.choice_destroy(a(b.target))},Chosen.prototype.choice_destroy=function(a){return this.result_deselect(a[0].getAttribute("data-option-array-index"))?(this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.search_field.val().length<1&&this.results_hide(),a.parents("li").first().remove(),this.search_field_scale()):void 0},Chosen.prototype.results_reset=function(){return this.form_field.options[0].selected=!0,this.selected_option_count=null,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),this.form_field_jq.trigger("change"),this.active_field?this.results_hide():void 0},Chosen.prototype.results_reset_cleanup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.selected_item.find("abbr").remove()},Chosen.prototype.result_select=function(a){var b,c,d;return this.result_highlight?(b=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?b.removeClass("active-result"):(this.result_single_selected&&(this.result_single_selected.removeClass("result-selected"),d=this.result_single_selected[0].getAttribute("data-option-array-index"),this.results_data[d].selected=!1),this.result_single_selected=b),b.addClass("result-selected"),c=this.results_data[b[0].getAttribute("data-option-array-index")],c.selected=!0,this.form_field.options[c.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(c):this.single_set_selected_text(c.text),(a.metaKey||a.ctrlKey)&&this.is_multiple||this.results_hide(),this.search_field.val(""),(this.is_multiple||this.form_field.selectedIndex!==this.current_selectedIndex)&&this.form_field_jq.trigger("change",{selected:this.form_field.options[c.options_index].value}),this.current_selectedIndex=this.form_field.selectedIndex,this.search_field_scale())):void 0},Chosen.prototype.single_set_selected_text=function(a){return null==a&&(a=this.default_text),a===this.default_text?this.selected_item.addClass("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClass("chosen-default")),this.selected_item.find("span").text(a)},Chosen.prototype.result_deselect=function(a){var b;return b=this.results_data[a],this.form_field.options[b.options_index].disabled?!1:(b.selected=!1,this.form_field.options[b.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),this.form_field_jq.trigger("change",{deselected:this.form_field.options[b.options_index].value}),this.search_field_scale(),!0)},Chosen.prototype.single_deselect_control_build=function(){return this.allow_single_deselect?(this.selected_item.find("abbr").length||this.selected_item.find("span").first().after('<abbr class="search-choice-close"></abbr>'),this.selected_item.addClass("chosen-single-with-deselect")):void 0},Chosen.prototype.get_search_text=function(){return this.search_field.val()===this.default_text?"":a("<div/>").text(a.trim(this.search_field.val())).html()},Chosen.prototype.winnow_results_set_highlight=function(){var a,b;return b=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),a=b.length?b.first():this.search_results.find(".active-result").first(),null!=a?this.result_do_highlight(a):void 0},Chosen.prototype.no_results=function(b){var c;return c=a('<li class="no-results">'+this.results_none_found+' "<span></span>"</li>'),c.find("span").first().html(b),this.search_results.append(c)},Chosen.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},Chosen.prototype.keydown_arrow=function(){var a;return this.results_showing&&this.result_highlight?(a=this.result_highlight.nextAll("li.active-result").first())?this.result_do_highlight(a):void 0:this.results_show()},Chosen.prototype.keyup_arrow=function(){var a;return this.results_showing||this.is_multiple?this.result_highlight?(a=this.result_highlight.prevAll("li.active-result"),a.length?this.result_do_highlight(a.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight())):void 0:this.results_show()},Chosen.prototype.keydown_backstroke=function(){var a;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(a=this.search_container.siblings("li.search-choice").last(),a.length&&!a.hasClass("search-choice-disabled")?(this.pending_backstroke=a,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass("search-choice-focus")):void 0)},Chosen.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},Chosen.prototype.keydown_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),8!==b&&this.pending_backstroke&&this.clear_backstroke(),b){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:a.preventDefault(),this.keydown_arrow()}},Chosen.prototype.search_field_scale=function(){var b,c,d,e,f,g,h,i,j;if(this.is_multiple){for(d=0,h=0,f="position:absolute; left: -1000px; top: -1000px; display:none;",g=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"],i=0,j=g.length;j>i;i++)e=g[i],f+=e+":"+this.search_field.css(e)+";";return b=a("<div />",{style:f}),b.text(this.search_field.val()),a("body").append(b),h=b.width()+25,b.remove(),c=this.container.outerWidth(),h>c-10&&(h=c-10),this.search_field.css({width:h+"px"})}},Chosen}(AbstractChosen)}.call(this);
assets/js/functions.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ jQuery(document).ready(function($) {
2
+
3
+ });
classes/changelog.txt ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Version 1.0.17 (6/23/14)
2
+
3
+ Version 1.0.17 (6/23/14)
4
+ Fix opacity select options from not showing when selected.
5
+
6
+ Version 1.0.15 (6/3/14)
7
+ Added do_action( 'custom_login_admin_enqueue_scripts' ) for extenstions to hook into settings page scripts.
8
+
9
+ Version 1.0.14 (5/14/14)
10
+ One instance.
11
+
12
+ Version 1.0.13 (1/28/14)
13
+ Added image preview on files.
14
+
15
+ Version 1.0.12 (1/25/14)
16
+ Added $cache_time to wp_remote_get_set_transient();
17
+
18
+ Version 1.0.11 (1/23/14)
19
+ Added helper class wp_remote_get_set_transient();
20
+
21
+ Version 1.0.10 (1/8/14)
22
+
23
+ Updated chosen() class names for 1.0.0
24
+ Added static $couters to functions to output scripts once.
25
+
26
+ Version 1.0.9 (12/17/13)
27
+
28
+ Added admin.js
29
+ Updated chosen().js to version 1.0.0
30
+
31
+ Version 1.0.8 (12/3/13)
32
+
33
+ Make sure the $announcement isn't empty or has error before caching.
34
+
35
+ Version 1.0.7 (5/20/13)
36
+
37
+ !empty( $old_message )
38
+
39
+ Version 1.0.4 (4/22/13)
40
+
41
+ Only enqueue admin scripts on "settings_page_custom-login" $hook
classes/class.settings-api.php ADDED
@@ -0,0 +1,1126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Exit if accessed directly
4
+ if ( ! defined( 'ABSPATH' ) ) exit;
5
+
6
+ /**
7
+ * Extendd Plugin Settings API wrapper class
8
+ *
9
+ * @original author: Tareq Hasan <tareq@weDevs.com>
10
+ */
11
+ if ( !class_exists( 'Extendd_Plugin_Settings_API' ) ):
12
+ class Extendd_Plugin_Settings_API {
13
+
14
+ /**
15
+ * Version
16
+ */
17
+ var $api_version = '1.0.18';
18
+
19
+ /**
20
+ * settings sections array
21
+ *
22
+ * @var array
23
+ */
24
+ private $settings_sections = array();
25
+
26
+ /**
27
+ * Settings sections array
28
+ *
29
+ * @var array
30
+ */
31
+ private $settings_sidebars = array();
32
+
33
+ /**
34
+ * Settings fields array
35
+ *
36
+ * @var array
37
+ */
38
+ private $settings_fields = array();
39
+
40
+ /**
41
+ * The Plugin prefix
42
+ *
43
+ * @var string
44
+ */
45
+ private $prefix;
46
+
47
+ /**
48
+ * The Plugin domain
49
+ *
50
+ * @var string
51
+ */
52
+ private $domain;
53
+
54
+ /**
55
+ * The Parent Plugin version
56
+ *
57
+ * @var string
58
+ */
59
+ private $version;
60
+
61
+ /**
62
+ * Singleton instance
63
+ *
64
+ * @var object
65
+ */
66
+ private static $_instance;
67
+
68
+ /**
69
+ * Main Instance
70
+ *
71
+ * @staticvar array $instance
72
+ * @return The one true instance
73
+ */
74
+ public static function instance() {
75
+ if ( ! isset( self::$_instance ) ) {
76
+ self::$_instance = new self;
77
+ self::$_instance->init();
78
+ }
79
+ return self::$_instance;
80
+ }
81
+
82
+ function __construct() {}
83
+
84
+ /**
85
+ * Fire
86
+ *
87
+ */
88
+ function init() {
89
+ add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
90
+ add_action( 'init', array( $this, 'late_init' ), 89 );
91
+ }
92
+
93
+ /**
94
+ * Fire any actions needed a little late
95
+ *
96
+ * @return void
97
+ */
98
+ function late_init() {
99
+ if ( function_exists( 'EXTENDD_settings_init' ) ) {
100
+ $extendd_settings_api = EXTENDD_settings_init();
101
+ add_action( $this->prefix . '_settings_sidebars', array( $extendd_settings_api, 'extendd_plugins_sidebar' ), 11 );
102
+ } else {
103
+ add_action( $this->prefix . '_settings_sidebars', array( $this, 'extendd_plugins_sidebar' ), 11 );
104
+ }
105
+
106
+ add_action( 'admin_notices', array( $this, 'show_notifications' ) );
107
+ add_action( 'admin_init', array( $this, 'notification_ignore' ) );
108
+ add_action( 'admin_menu', array( $this, 'modify_transient' ) );
109
+ }
110
+
111
+ /**
112
+ * Set parent prefix
113
+ *
114
+ * @param string $prefix
115
+ * @return void
116
+ */
117
+ public function set_prefix( $prefix ) {
118
+ $this->prefix = $prefix;
119
+ }
120
+
121
+ /**
122
+ * Set parent domain
123
+ *
124
+ * @param string $domain
125
+ * @return void
126
+ */
127
+ public function set_domain( $domain ) {
128
+ $this->domain = $domain;
129
+ }
130
+
131
+ /**
132
+ * Set parent version
133
+ *
134
+ * @param string $version
135
+ * @return void
136
+ */
137
+ public function set_version( $version ) {
138
+ $this->version = $version;
139
+ }
140
+
141
+ /**
142
+ * Enqueue scripts and styles
143
+ */
144
+ function admin_enqueue_scripts( $hook ) {
145
+ if ( 'settings_page_' . $this->domain !== $hook )
146
+ return;
147
+
148
+ /* Core */
149
+ if ( function_exists( 'wp_enqueue_media' ) ) wp_enqueue_media();
150
+ wp_enqueue_script( 'wp-color-picker' );
151
+ wp_enqueue_style( 'wp-color-picker' );
152
+
153
+ /* jQuery Chosen */
154
+ wp_enqueue_script( 'jquery-chosen', plugins_url( 'assets/js/chosen.jquery.min.js', CUSTOM_LOGIN_FILE ), array( 'jquery' ), '1.0.0', false );
155
+ wp_enqueue_style( 'jquery-chosen', plugins_url( 'assets/css/chosen.css', CUSTOM_LOGIN_FILE ), false, '1.0.0', 'screen' );
156
+
157
+ /* Admin */
158
+ wp_enqueue_script( $this->domain, plugins_url( 'assets/js/admin.js', CUSTOM_LOGIN_FILE ), array( 'jquery' ), $this->version, false );
159
+ wp_enqueue_style( $this->domain, plugins_url( 'assets/css/admin.css', CUSTOM_LOGIN_FILE ), false, $this->version, 'screen' );
160
+
161
+ /* Genericons */
162
+ wp_enqueue_style( 'genericons', plugins_url( 'assets/css/genericons.css', CUSTOM_LOGIN_FILE ), false, '3.0.3', 'screen' );
163
+
164
+ do_action( 'custom_login_admin_enqueue_scripts' );
165
+ }
166
+
167
+ /**
168
+ * Set settings sections
169
+ *
170
+ * @param array $sections setting sections array
171
+ */
172
+ function set_sections( $sections ) {
173
+ $sections = apply_filters( $this->prefix . '_add_settings_sections', $sections );
174
+ $this->settings_sections = $sections;
175
+
176
+ return $this;
177
+ }
178
+
179
+ /**
180
+ * Add a single section
181
+ *
182
+ * @param array $section
183
+ */
184
+ function add_section( $section ) {
185
+ $this->settings_sections[] = $section;
186
+
187
+ return $this;
188
+ }
189
+
190
+ /**
191
+ * Set settings fields
192
+ *
193
+ * @param array $fields settings fields array
194
+ */
195
+ function set_fields( $fields ) {
196
+ $fields = apply_filters( $this->prefix . '_add_settings_fields', $fields );
197
+ $this->settings_fields = $fields;
198
+
199
+ return $this;
200
+ }
201
+
202
+ function add_field( $section, $field ) {
203
+ $defaults = array(
204
+ 'name' => '',
205
+ 'label' => '',
206
+ 'desc' => '',
207
+ 'type' => 'text'
208
+ );
209
+
210
+ $args = wp_parse_args( $field, $defaults );
211
+ $this->settings_fields[$section][] = $args;
212
+
213
+ return $this;
214
+ }
215
+
216
+ /**
217
+ * Add a single section
218
+ *
219
+ * @param array $section
220
+ */
221
+ function add_sidebar( $sidebar = array() ) {
222
+ $sidebar = apply_filters( $this->prefix . '_add_settings_sidebar', $sidebar );
223
+ if ( !empty( $sidebar ) ) {
224
+ $this->settings_sidebars[] = $sidebar;
225
+ }
226
+ }
227
+
228
+ /**
229
+ * Initialize and registers the settings sections and fileds to WordPress
230
+ *
231
+ * Usually this should be called at `admin_init` hook.
232
+ *
233
+ * This function gets the initiated settings sections and fields. Then
234
+ * registers them to WordPress and ready for use.
235
+ */
236
+ function admin_init() {
237
+ //register settings sections
238
+ foreach ( $this->settings_sections as $section ) {
239
+ if ( false == get_option( $section['id'] ) ) {
240
+ add_option( $section['id'] );
241
+ }
242
+
243
+ add_settings_section( $section['id'], $section['title'], '__return_false', $section['id'] );
244
+ }
245
+
246
+ //register settings fields
247
+ foreach ( $this->settings_fields as $section => $field ) {
248
+ foreach ( $field as $option ) {
249
+
250
+ $type = isset( $option['type'] ) ? $option['type'] : 'text';
251
+
252
+ $args = array(
253
+ 'id' => $option['name'],
254
+ 'desc' => isset( $option['desc'] ) ? $option['desc'] : '',
255
+ 'name' => $option['label'],
256
+ 'section' => $section,
257
+ 'size' => isset( $option['size'] ) ? $option['size'] : null,
258
+ 'options' => isset( $option['options'] ) ? $option['options'] : '',
259
+ 'std' => isset( $option['default'] ) ? $option['default'] : '',
260
+ 'sanitize_callback' => isset( $option['sanitize_callback'] ) ? $option['sanitize_callback'] : '',
261
+ 'class' => isset( $option['class'] ) ? $option['class'] : $this,
262
+ );
263
+ $args = wp_parse_args( $args, $option );
264
+ add_settings_field( $section . '[' . $option['name'] . ']', $option['label'], array( $args['class'], 'callback_' . $type ), $section, $section, $args );
265
+ }
266
+ }
267
+
268
+ // creates our settings in the options table
269
+ foreach ( $this->settings_sections as $section ) {
270
+ register_setting( $section['id'], $section['id'], array( $this, 'sanitize_options' ) );
271
+ }
272
+ }
273
+
274
+ /**
275
+ * Displays a text field for a settings field
276
+ *
277
+ * @param array $args settings field args
278
+ */
279
+ function callback_text( $args ) {
280
+
281
+ $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
282
+ $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
283
+
284
+ $html = sprintf( '<input type="text" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s"/>', $size, $args['section'], $args['id'], $value );
285
+ $html .= sprintf( '<span class="description"> %s</span>', $args['desc'] );
286
+
287
+ echo $html;
288
+ }
289
+
290
+ /**
291
+ * Displays a text field for a settings field
292
+ *
293
+ * @param array $args settings field args
294
+ */
295
+ function callback_text_array( $args ) {
296
+ static $counter = 0;
297
+
298
+ $value = $this->get_option( $args['id'], $args['section'], $args['std'] );
299
+ $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
300
+
301
+ $html = '<ul style="margin-top:0">';
302
+
303
+ if ( is_array( $value ) ) {
304
+ foreach ( $value as $key => $val ) {
305
+ $html .= '<li>';
306
+ $html .= sprintf( '<input type="text" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s][]" value="%4$s" data-key="%5$s"/>', $size, $args['section'], $args['id'], esc_attr( $val ), $key );
307
+ $html .= sprintf( '<a href="#" class="button dodelete-%1$s[%2$s]">-</a>', $args['section'], $args['id'] );
308
+ $html .= '</li>';
309
+ }
310
+ } else {
311
+ $html .= '<li>';
312
+ $html .= sprintf( '<input type="text" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s][]" value="%4$s" data-key="0" data-array="false"/>', $size, $args['section'], $args['id'], esc_attr( $value ) );
313
+ $html .= sprintf( '<a href="#" class="button dodelete-%1$s[%2$s]">-</a>', $args['section'], $args['id'] );
314
+ $html .= '</li>';
315
+ }
316
+
317
+ $html .= '</ul>';
318
+ $html .= sprintf( '<a href="#" class="button docopy-%1$s[%2$s]">+</a>', $args['section'], $args['id'] );
319
+
320
+ $counter++;
321
+ ob_start(); ?>
322
+ <script>
323
+ jQuery(document).ready(function($) {
324
+ $('body').on('click', 'a[class^="button docopy-"]', function(e) {
325
+ e.preventDefault();
326
+
327
+ var $this = $(this).prev().children();
328
+ //console.log($this);return;
329
+ var clone = $('input[id="' + $this.children().prop('id') + '"]');
330
+ var value = clone.data('key');
331
+ var newValue = parseInt(value) + 1;
332
+
333
+ //console.log( clone );
334
+ var newInput = $this.last().clone();
335
+ newInput.insertAfter( clone.parent().last() );
336
+ newInput.children().val('').data('key',newValue);
337
+ return false;
338
+ });
339
+ $('body').on('click', 'a[class^="button dodelete-"]', function(e) {
340
+ e.preventDefault();
341
+ // console.log(this);
342
+
343
+ $(this).parent().remove();
344
+ });
345
+ });
346
+ </script><?php
347
+
348
+ $html .= 1 === $counter ? ob_get_clean() : '';
349
+
350
+ $html .= sprintf( '<span class="description"> %s</span>', $args['desc'] );
351
+
352
+ echo $html;
353
+ }
354
+
355
+ /**
356
+ * Displays a text field for a settings field
357
+ *
358
+ * @param array $args settings field args
359
+ */
360
+ function callback_colorpicker( $args ) {
361
+ static $counter = 0;
362
+
363
+ $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
364
+ $check = esc_attr( $this->get_option( $args['id'] . '_checkbox', $args['section'], $args['std'] ) );
365
+ $opacity = esc_attr( $this->get_option( $args['id'] . '_opacity', $args['section'], $args['std'] ) );
366
+ $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'small';
367
+ $opaque_options = array( '1', '0.9', '0.8', '0.7', '0.6', '0.5', '0.4', '0.3', '0.2', '0.1', '0', );
368
+ $class = 'on' != $check ? ' hidden' : '';
369
+
370
+ /* Color */
371
+ $html = sprintf( '<input type="text" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s" style="float:left"/>', $size, $args['section'], $args['id'], $value );
372
+
373
+ /* Allow Opacity */
374
+ $html .= '<div class="checkbox-wrap">';
375
+ $html .= sprintf( '<input type="hidden" name="%1$s[%2$s]" value="off" />', $args['section'], $args['id'] . '_checkbox' );
376
+ $html .= sprintf( '<input type="checkbox" class="checkbox" id="%1$s[%2$s]" name="%1$s[%2$s]" value="on"%4$s />', $args['section'], $args['id'] . '_checkbox', $check, checked( $check, 'on', false ) );
377
+ $html .= sprintf( __( '<label for="%1$s[%2$s]">Opacity</label>', $this->domain ), $args['section'], $args['id'] . '_checkbox' );
378
+ $html .= '</div>';
379
+
380
+ /* Opacity */
381
+ // $html .= sprintf( '<input type="text" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s" style="margin-left:70px;%5$s" />', $size, $args['section'], $args['id'] . '_opacity', $opacity, ( 'on' !== $check ? 'display:none;' : '' ) );
382
+ $html .= sprintf( '<select class="%1$s%4$s" name="%2$s[%3$s]" id="%2$s[%3$s]" style="margin-left:70px;">', $size, $args['section'], $args['id'] . '_opacity', $class );
383
+ foreach ( $opaque_options as $key ) {
384
+ $html .= sprintf( '<option value="%s"%s>%s</option>', $key, selected( $opacity, $key, false ), $key );
385
+ }
386
+ $html .= sprintf( '</select>' );
387
+
388
+ $counter++;
389
+ ob_start(); ?>
390
+ <script>
391
+ jQuery(document).ready(function($) {
392
+ var myOptions = {
393
+ // you can declare a default color here,
394
+ // or in the data-default-color attribute on the input
395
+ defaultColor: false,
396
+ // a callback to fire whenever the color changes to a valid color
397
+ change: function(event, ui){},
398
+ // a callback to fire when the input is emptied or an invalid color
399
+ clear: function() {},
400
+ // hide the color picker controls on load
401
+ hide: true,
402
+ // show a group of common colors beneath the square
403
+ // or, supply an array of colors to customize further
404
+ palettes: true
405
+ };
406
+ $('input[name="<?php echo $args['section'] . '[' . $args['id'] . ']'; ?>"]').wpColorPicker();
407
+
408
+ if ( $('select[name="<?php echo $args['section'] . '[' . $args['id'] . '_opacity]'; ?>"]').hasClass('hidden') ) {
409
+ $('select[name="<?php echo $args['section'] . '[' . $args['id'] . '_opacity]'; ?>"]').removeClass('hidden').chosen().addClass('hidden');
410
+ } else {
411
+ $('select[name="<?php echo $args['section'] . '[' . $args['id'] . '_opacity]'; ?>"]').chosen();
412
+ }
413
+
414
+ if ( $('select[name="<?php echo $args['section'] . '[' . $args['id'] . '_opacity]'; ?>"]').hasClass('hidden') ) {
415
+ $('#<?php echo str_replace( '[', '_', $args['section'] . '[' . $args['id'] . '_opacity' ); ?>__chosen').hide();
416
+ }
417
+
418
+ $('input[name="<?php echo $args['section'] . '[' . $args['id'] . '_checkbox]'; ?>"]').on('change', function() {
419
+ $('#<?php echo str_replace( '[', '_', $args['section'] . '[' . $args['id'] . '_opacity' ); ?>__chosen').toggle();
420
+ });
421
+ });
422
+ </script><?php
423
+ $html .= 1 === $counter ? ob_get_clean() : '';
424
+
425
+ /* Description */
426
+ if ( !empty( $args['desc'] ) )
427
+ $html .= sprintf( '<span class="description"> %s</span>', $args['desc'] );
428
+
429
+ echo $html;
430
+ }
431
+
432
+ /**
433
+ * Displays a checkbox for a settings field
434
+ *
435
+ * @param array $args settings field args
436
+ */
437
+ function callback_checkbox( $args ) {
438
+
439
+ $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
440
+
441
+ $html = '<div class="checkbox-wrap">';
442
+ $html .= sprintf( '<input type="hidden" name="%1$s[%2$s]" value="off" />', $args['section'], $args['id'] );
443
+ $html .= sprintf( '<input type="checkbox" class="checkbox" id="%1$s[%2$s]" name="%1$s[%2$s]" value="on"%4$s />', $args['section'], $args['id'], $value, checked( $value, 'on', false ) );
444
+ $html .= sprintf( '<label for="%1$s[%2$s]"></label>', $args['section'], $args['id'] );
445
+ $html .= '</div>';
446
+ $html .= sprintf( '<span class="description"> %s</label>', $args['desc'] );
447
+
448
+ echo $html;
449
+ }
450
+
451
+ /**
452
+ * Displays a multicheckbox a settings field
453
+ *
454
+ * @param array $args settings field args
455
+ */
456
+ function callback_multicheck( $args ) {
457
+
458
+ $value = $this->get_option( $args['id'], $args['section'], $args['std'] );
459
+
460
+ $html = '<div class="checkbox-wrap">';
461
+ $html .= '<ul>';
462
+ foreach ( $args['options'] as $key => $label ) {
463
+ $checked = isset( $value[$key] ) ? $value[$key] : '0';
464
+ $html .= '<li>';
465
+ $html .= sprintf( '<input type="checkbox" class="checkbox" id="%1$s[%2$s][%3$s]" name="%1$s[%2$s][%3$s]" value="%3$s"%4$s />', $args['section'], $args['id'], $key, checked( $checked, $key, false ) );
466
+ $html .= sprintf( '<label for="%1$s[%2$s][%4$s]" title="%3$s"> %3$s</label>', $args['section'], $args['id'], $label, $key );
467
+ $html .= '</li>';
468
+ }
469
+ $html .= '</ul>';
470
+ $html .= '</div>';
471
+ $html .= sprintf( '<span class="description"> %s</label>', $args['desc'] );
472
+
473
+ echo $html;
474
+ }
475
+
476
+ /**
477
+ * Displays a multicheckbox a settings field
478
+ *
479
+ * @param array $args settings field args
480
+ */
481
+ function callback_radio( $args ) {
482
+
483
+ $value = $this->get_option( $args['id'], $args['section'], $args['std'] );
484
+
485
+ $html = '<div class="radio-wrap">';
486
+ $html .= '<ul>';
487
+ foreach ( $args['options'] as $key => $label ) {
488
+ $html .= '<li>';
489
+ $html .= sprintf( '<input type="radio" class="radio" id="%1$s[%2$s][%3$s]" name="%1$s[%2$s]" value="%3$s"%4$s />', $args['section'], $args['id'], $key, checked( $value, $key, false ) );
490
+ $html .= sprintf( '<label for="%1$s[%2$s][%4$s]" title="%3$s"> %3$s</label><br>', $args['section'], $args['id'], $label, $key );
491
+ $html .= '</li>';
492
+ }
493
+ $html .= '</ul>';
494
+ $html .= '</div>';
495
+
496
+
497
+ $html .= sprintf( '<span class="description"> %s</label>', $args['desc'] );
498
+
499
+ echo $html;
500
+ }
501
+
502
+ /**
503
+ * Displays a selectbox for a settings field
504
+ *
505
+ * @param array $args settings field args
506
+ */
507
+ function callback_select( $args ) {
508
+
509
+ $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
510
+ $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
511
+
512
+ $html = sprintf( '<select class="%1$s" name="%2$s[%3$s]" id="%2$s[%3$s]">', $size, $args['section'], $args['id'] );
513
+ foreach ( $args['options'] as $key => $label ) {
514
+ $html .= sprintf( '<option value="%s"%s>%s</option>', $key, selected( $value, $key, false ), $label );
515
+ }
516
+ $html .= sprintf( '</select>' );
517
+
518
+ ob_start(); ?>
519
+ <script>
520
+ jQuery(document).ready(function($) {
521
+ $('select[name="<?php echo $args['section'] . '[' . $args['id'] . ']'; ?>"]').chosen();
522
+ });
523
+ </script><?php
524
+
525
+ $html .= ob_get_clean();
526
+ $html .= sprintf( '<span class="description"> %s</span>', $args['desc'] );
527
+
528
+ echo $html;
529
+ }
530
+
531
+ /**
532
+ * Displays a textarea for a settings field
533
+ *
534
+ * @param array $args settings field args
535
+ */
536
+ function callback_textarea( $args ) {
537
+
538
+ $value = esc_textarea( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
539
+ //$value = wp_specialchars_decode( stripslashes( $this->get_option( $args['id'], $args['section'], $args['std'] ) ), 1, 0, 1 );
540
+ $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
541
+
542
+ $html = sprintf( '<textarea rows="5" cols="55" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s]">%4$s</textarea>', $size, $args['section'], $args['id'], stripslashes( $value ) );
543
+ $html .= sprintf( '<br><span class="description"> %s</span>', $args['desc'] );
544
+
545
+ echo $html;
546
+ }
547
+
548
+ /**
549
+ * Displays a textarea for a settings field
550
+ *
551
+ * @param array $args settings field args
552
+ */
553
+ function callback_html( $args ) {
554
+ echo $args['desc'];
555
+ }
556
+
557
+ /**
558
+ * Displays a rich text textarea for a settings field
559
+ *
560
+ * @param array $args settings field args
561
+ */
562
+ function callback_wysiwyg( $args ) {
563
+
564
+ $value = wpautop( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
565
+ $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : '500px';
566
+
567
+ echo '<div style="width: ' . $size . ';">';
568
+
569
+ wp_editor( $value, $args['section'] . '[' . $args['id'] . ']', array( 'teeny' => true, 'textarea_rows' => 10 ) );
570
+
571
+ echo '</div>';
572
+
573
+ echo sprintf( '<br><span class="description"> %s</span>', $args['desc'] );
574
+ }
575
+
576
+ /**
577
+ * Displays a file upload field for a settings field
578
+ *
579
+ * @param array $args settings field args
580
+ */
581
+ function callback_file( $args ) {
582
+ static $counter = 0;
583
+
584
+ $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
585
+ $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
586
+ $id = $args['section'] . '[' . $args['id'] . ']';
587
+ $html = sprintf( '<input type="text" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s"/>', $size, $args['section'], $args['id'], $value );
588
+ $html .= '<input type="button" class="button extendd-browse" id="'. $id .'_button" value="Browse" style="margin-left:5px" />';
589
+ $html .= '<input type="button" class="button extendd-clear" id="'. $id .'_clear" value="Clear" style="margin-left:5px" />';
590
+
591
+ $counter++;
592
+ if ( 1 === $counter ) {
593
+ ob_start(); ?>
594
+ <script>
595
+ jQuery(document).ready(function($) {
596
+ // WP 3.5+ uploader
597
+ var file_frame;
598
+ var wp_media_post_id = wp.media.model.settings.post.id; // Store the old id
599
+ var set_to_post_id = <?php echo isset( $args['page_id'] ) ? $args['page_id'] : '0'; ?>; // Set this
600
+ window.formfield = '';
601
+
602
+ $(document.body).on('click', 'input[type="button"].button.extendd-browse', function(e) {
603
+
604
+ e.preventDefault();
605
+
606
+ var button = $(this);
607
+
608
+ window.formfield = $(this).closest('td');
609
+
610
+ // If the media frame already exists, reopen it.
611
+ if ( file_frame ) {
612
+ file_frame.uploader.uploader.param( 'post_id', set_to_post_id );
613
+ file_frame.open();
614
+ return;
615
+ } else {
616
+ // Set the wp.media post id so the uploader grabs the ID we want when initialised
617
+ wp.media.model.settings.post.id = set_to_post_id;
618
+ }
619
+
620
+ // Create the media frame.
621
+ file_frame = wp.media.frames.file_frame = wp.media({
622
+ frame: 'post',
623
+ state: 'insert',
624
+ title: button.data( 'uploader_title' ),
625
+ button: {
626
+ text: button.data( 'uploader_button_text' ),
627
+ },
628
+ library: {
629
+ type: 'image',
630
+ },
631
+ multiple: false // Set to true to allow multiple files to be selected
632
+ });
633
+
634
+ file_frame.on( 'menu:render:default', function(view) {
635
+ // Store our views in an object.
636
+ var views = {};
637
+
638
+ // Unset default menu items
639
+ view.unset('library-separator');
640
+ view.unset('gallery');
641
+ view.unset('featured-image');
642
+ view.unset('embed');
643
+
644
+ // Initialize the views in our view object.
645
+ view.set(views);
646
+ });
647
+
648
+ // When an image is selected, run a callback.
649
+ file_frame.on( 'insert', function() {
650
+ var attachment = file_frame.state().get('selection').first().toJSON();
651
+ // console.log(attachment);
652
+
653
+ window.formfield.find('input[type="text"]').val(attachment.url);
654
+ window.formfield.find('#<?php echo $id; ?>_preview').html('<div class="img" style="width:250px"><img src="'+attachment.url+'" alt="" /><a href="#" class="remove_file_button" rel="<?php echo $id; ?>">Remove Image</a></div>');
655
+ });
656
+
657
+ // Finally, open the modal
658
+ file_frame.open();
659
+ });
660
+
661
+ // WP 3.5+ uploader
662
+ var file_frame;
663
+ window.formfield = '';
664
+
665
+ $('input[type="button"].button.extendd-clear').on('click', function(e) {
666
+ e.preventDefault();
667
+ $(this).closest('td').find('input[type="text"]').val('');
668
+ $(this).closest('td').find('#' + $(this).prop('id').replace( '_clear', '_preview') + ' div.image').remove();
669
+ });
670
+ $('a.remove_file_button').on( 'click', function(e) {
671
+ e.preventDefault();
672
+ $(this).closest('td').find('input[type="text"]').val('');
673
+ $(this).parent().slideUp().remove();
674
+ });
675
+ });
676
+ </script><?php
677
+ $html .= ob_get_clean();
678
+ }
679
+ $html .= sprintf( '<br><span class="description"> %s</span>', $args['desc'] );
680
+
681
+ /* Image */
682
+ $html .= '<div id="' . $id . '_preview" class="' . $id . '_preview">';
683
+ if ( $value != '' ) {
684
+ $check_image = preg_match( '/(^.*\.jpg|jpeg|png|gif|ico*)/i', $value );
685
+ if ( $check_image ) {
686
+ $html .= '<div class="img" style="display:none">';
687
+ $html .= '<img src="' . $value . '" alt="" />';
688
+ $html .= '<a href="#" class="remove_file_button" rel="' . $id . '">Remove Image</a>';
689
+ $html .= '</div>';
690
+ }
691
+ }
692
+ $html .= '</div>';
693
+
694
+ echo $html;
695
+ }
696
+
697
+ /**
698
+ * Displays a password field for a settings field
699
+ *
700
+ * @param array $args settings field args
701
+ */
702
+ function callback_password( $args ) {
703
+
704
+ $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
705
+ $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
706
+
707
+ $html = sprintf( '<input type="password" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s"/>', $size, $args['section'], $args['id'], $value );
708
+ $html .= sprintf( '<span class="description"> %s</span>', $args['desc'] );
709
+
710
+ echo $html;
711
+ }
712
+
713
+ /**
714
+ * Sanitize callback for Settings API
715
+ */
716
+ function sanitize_options( $options ) {
717
+ delete_transient( $this->prefix . '_style' );
718
+ delete_transient( $this->prefix . '_script' );
719
+
720
+ foreach( $options as $option_slug => $option_value ) {
721
+ $sanitize_callback = $this->get_sanitize_callback( $option_slug );
722
+
723
+ // If callback is set, call it
724
+ if ( $sanitize_callback ) {
725
+ $options[ $option_slug ] = call_user_func( $sanitize_callback, $option_value );
726
+ continue;
727
+ }
728
+
729
+ // Treat everything that's not an array as a string
730
+ if ( !is_array( $option_value ) ) {
731
+ $options[ $option_slug ] = sanitize_text_field( $option_value );
732
+ continue;
733
+ }
734
+ }
735
+ return $options;
736
+ }
737
+
738
+ /**
739
+ * Get sanitization callback for given option slug
740
+ *
741
+ * @param string $slug option slug
742
+ *
743
+ * @return mixed string or bool false
744
+ */
745
+ function get_sanitize_callback( $slug = '' ) {
746
+ if ( empty( $slug ) )
747
+ return false;
748
+ // Iterate over registered fields and see if we can find proper callback
749
+ foreach( $this->settings_fields as $section => $options ) {
750
+ foreach ( $options as $option ) {
751
+ if ( $option['name'] != $slug )
752
+ continue;
753
+ // Return the callback name
754
+ return isset( $option['sanitize_callback'] ) && is_callable( $option['sanitize_callback'] ) ? $option['sanitize_callback'] : false;
755
+ }
756
+ }
757
+ return false;
758
+ }
759
+
760
+ /**
761
+ * Get the value of a settings field
762
+ *
763
+ * @param string $option settings field name
764
+ * @param string $section the section name this field belongs to
765
+ * @param string $default default text if it's not found
766
+ * @return string
767
+ */
768
+ function get_option( $option, $section, $default = '' ) {
769
+
770
+ $options = get_option( $section );
771
+
772
+ if ( isset( $options[$option] ) ) {
773
+ return $options[$option];
774
+ }
775
+
776
+ return $default;
777
+ }
778
+
779
+ /**
780
+ * Show navigations as tab
781
+ *
782
+ * Shows all the settings section labels as tab
783
+ */
784
+ function show_navigation() {
785
+ $html = '<h2 class="nav-tab-wrapper">';
786
+
787
+ foreach ( $this->settings_sections as $tab ) {
788
+ $html .= sprintf( '<a href="#%1$s" class="nav-tab" id="%1$s-tab">%2$s</a>', $tab['id'], $tab['title'] );
789
+ }
790
+
791
+ $html .= '</h2>';
792
+
793
+ echo $html;
794
+ }
795
+
796
+ /**
797
+ * Helper function to make remote calls
798
+ *
799
+ * @since 2.2
800
+ */
801
+ function wp_remote_get_set_transient( $url = false, $transient, $type = 'message', $cache_time = null ) {
802
+ if ( !$url ) return;
803
+
804
+ if ( is_null( $cache_time ) ) {
805
+ if ( defined( 'DAY_IN_SECONDS' ) )
806
+ $cache_time = DAY_IN_SECONDS;
807
+ else
808
+ $cache_time = 24 * 60 * 60;
809
+ }
810
+
811
+ if ( false === ( $output = get_transient( $transient ) ) ) {
812
+ $site = wp_remote_get( $url, array( 'timeout' => 15, 'sslverify' => false ) );
813
+ if ( !is_wp_error( $site ) ) {
814
+ if ( isset( $site['body'] ) && strlen( $site['body'] ) > 0 ) {
815
+ $output = json_decode( wp_remote_retrieve_body( $site ) );
816
+
817
+ // For when I mess up the JSON or github is down.
818
+ if ( is_wp_error( $output ) || empty( $output->$type ) )
819
+ return false;
820
+
821
+ set_transient( $transient, $output, $cache_time ); // Cache for two weeks
822
+ update_option( $transient . '_message', $output->$type ); // Update the message
823
+
824
+ // Return the data
825
+ return $output;
826
+ }
827
+ } else {
828
+ // Error, lets return!
829
+ return false;
830
+ }
831
+ }
832
+ return $output;
833
+
834
+ }
835
+
836
+ /**
837
+ * Show the section settings forms
838
+ *
839
+ * This function displays every sections in a different form
840
+ *
841
+ * @uses http://codex.wordpress.org/Transients_API#Using_Time_Constants
842
+ */
843
+ function show_notifications() {
844
+ $transient = $this->prefix . '_announcement';
845
+ $ignore = $this->prefix . '_ignore_announcement';
846
+ $old_message = get_option( $transient . '_message' );
847
+ $user_meta = get_user_meta( get_current_user_id(), $ignore, true );
848
+
849
+ // delete_user_meta( get_current_user_id(), $ignore, 1 );
850
+ // delete_transient( $transient );
851
+ // delete_option( $this->prefix . '_announcement_message' );
852
+
853
+ /* Current user can */
854
+ if ( !current_user_can( 'manage_options' ) )
855
+ return;
856
+
857
+ $announcement = $this->wp_remote_get_set_transient( 'https://raw.github.com/thefrosty/custom-login/master/extensions.json', $transient, 'message' );
858
+
859
+ //print_r( $announcement );
860
+
861
+ if ( false === $announcement ) return;
862
+
863
+ if ( trim( $old_message ) !== trim( $announcement->message ) && !empty( $old_message ) ) {
864
+ delete_user_meta( get_current_user_id(), $ignore, 1 );
865
+ delete_transient( $transient );
866
+ delete_option( $transient . '_message' );
867
+ //echo 'test';
868
+ }
869
+
870
+ $html = '<div class="updated" data-old-message="' . esc_attr( $old_message ) . '" data-announcement="' . esc_attr( $announcement->message ) . '"><p>';
871
+ $html .= sprintf( __( '%1$s | <a href="%2$s">Dismiss notice</a>', $this->domain ), $announcement->message, esc_url( add_query_arg( $ignore, wp_create_nonce( $ignore ), admin_url( 'options-general.php?page=custom-login' ) ) ) );
872
+ $html .= '</p></div>';
873
+
874
+ if ( !$user_meta && 1 !== $user_meta )
875
+ echo $html;
876
+ }
877
+
878
+ /**
879
+ * Remove notification
880
+ *
881
+ * @return void
882
+ */
883
+ function notification_ignore() {
884
+ $ignore = $this->prefix . '_ignore_announcement';
885
+
886
+ //if ( isset( $_GET[$ignore] ) ) echo $_GET[$ignore]; exit;
887
+
888
+ if ( !isset( $_GET[$ignore] ) )
889
+ return;
890
+
891
+ // Check nonce
892
+ check_admin_referer( $ignore, $ignore );
893
+
894
+ /* If user clicks to ignore the notice, add that to their user meta */
895
+ add_user_meta( get_current_user_id(), $ignore, 1, true );
896
+ }
897
+
898
+ /**
899
+ */
900
+ function load_edd_add_ons_page() {
901
+ if ( ! class_exists( 'Easy_Digital_Downloads' ) )
902
+ return;
903
+
904
+ global $edd_add_ons_page;
905
+ add_action( 'load-' . $edd_add_ons_page, array( $this, 'modify_transient' ), 11 );
906
+ }
907
+
908
+ /**
909
+ */
910
+ function modify_transient() {
911
+
912
+ if ( false !== ( $cache = get_transient( 'easydigitaldownloads_add_ons_feed' ) ) ) {
913
+
914
+ if ( false === ( $cl = get_transient( 'custom_login_edd_add_ons_feed' ) ) ) {
915
+ // Replace ?utm_* link
916
+ //$cache = preg_replace( '/(\?|\&|&#038;)utm_[a-z]+=[a-zA-Z0-9-]+/', '', $cache );
917
+ //var_dump( $cache ); exit;
918
+ // Replace 'ref=1' on "Get the Add On" link.
919
+ $cache = preg_replace( '/ref=(\d+)/i', 'ref=116', $cache );
920
+ //echo( $cache ); exit;
921
+ delete_transient( 'easydigitaldownloads_add_ons_feed' );
922
+ set_transient( 'easydigitaldownloads_add_ons_feed', $cache, WEEK_IN_SECONDS * 2 );
923
+ set_transient( 'custom_login_edd_add_ons_feed', '1', WEEK_IN_SECONDS * 2 );
924
+ }
925
+ }
926
+
927
+ }
928
+
929
+ /**
930
+ * Show the section settings forms
931
+ *
932
+ * This function displays every sections in a different form
933
+ */
934
+ function show_forms() { ?>
935
+ <div class="section col-group">
936
+ <div class="postbox col span_2_of_3">
937
+ <?php foreach ( $this->settings_sections as $form ) { ?>
938
+ <div id="<?php echo $form['id']; ?>" class="group">
939
+ <form method="post" action="options.php">
940
+
941
+ <?php do_action( $this->prefix . '_form_top_' . $form['id'], $form ); ?>
942
+ <?php settings_fields( $form['id'] ); ?>
943
+ <div class="inside"><?php do_settings_sections( $form['id'] ); ?></div>
944
+ <?php do_action( $this->prefix . '_form_bottom_' . $form['id'], $form ); ?>
945
+
946
+ <div style="padding-left: 10px">
947
+ <?php submit_button(); ?>
948
+ </div>
949
+ </form>
950
+ </div>
951
+ <?php } ?>
952
+ </div>
953
+ <div class="col span_1_of_3" style="margin-top:0">
954
+ <?php do_action( $this->prefix . '_settings_sidebars', $this->settings_sidebars ); ?>
955
+ </div>
956
+
957
+ </div>
958
+ <br class="clear">
959
+ <?php
960
+ }
961
+
962
+ /**
963
+ * Tabbable JavaScript codes
964
+ *
965
+ * This code uses localstorage for displaying active tabs
966
+ */
967
+ function inline_jquery() { ?>
968
+ <script type="text/javascript">
969
+ jQuery(document).ready(function($) {
970
+ // Switches option sections
971
+ $('.group').hide();
972
+ var activetab = '';
973
+ if (typeof(localStorage) != 'undefined' ) {
974
+ activetab = localStorage.getItem("activetab");
975
+ }
976
+ if (activetab != '' && $(activetab).length ) {
977
+ $(activetab).fadeIn();
978
+ $(activetab + '_sidebar').fadeIn();
979
+ } else {
980
+ $('.group:first').fadeIn();
981
+ $('.metabox-holder.group:first').fadeIn();
982
+ }
983
+ $('.group .collapsed').each(function(){
984
+ $(this).find('input:checked').parent().parent().parent().nextAll().each(
985
+ function(){
986
+ if ($(this).hasClass('last')) {
987
+ $(this).removeClass('hidden');
988
+ return false;
989
+ }
990
+ $(this).filter('.hidden').removeClass('hidden');
991
+ });
992
+ });
993
+
994
+ if (activetab != '' && $(activetab + '-tab').length ) {
995
+ $(activetab + '-tab').addClass('nav-tab-active');
996
+ }
997
+ else {
998
+ $('.nav-tab-wrapper a:first').addClass('nav-tab-active');
999
+ }
1000
+ $('.nav-tab-wrapper a').on('click',function(e) {
1001
+ $('.nav-tab-wrapper a').removeClass('nav-tab-active');
1002
+ $(this).addClass('nav-tab-active').blur();
1003
+ var clicked_group = $(this).attr('href');
1004
+ if (typeof(localStorage) != 'undefined' ) {
1005
+ localStorage.setItem("activetab", $(this).attr('href'));
1006
+ }
1007
+ $('.group').hide();
1008
+ $(clicked_group).fadeIn();
1009
+ $(clicked_group + '_sidebar').fadeIn();
1010
+ e.preventDefault();
1011
+ });
1012
+ <?php if ( isset( $_GET['settings-updated'] ) && 'true' === $_GET['settings-updated'] ) { ?>
1013
+
1014
+ setTimeout( function() {
1015
+ $('#setting-error-settings_updated, #setting-error-transitent_deleted').fadeOut('slow');
1016
+ }, 4000 );
1017
+ <?php } ?>
1018
+ });
1019
+ </script><?php
1020
+ }
1021
+
1022
+ /**
1023
+ * Create a potbox widget.
1024
+ *
1025
+ * @param string $id ID of the postbox.
1026
+ * @param string $title Title of the postbox.
1027
+ * @param string $content Content of the postbox.
1028
+ */
1029
+ public function postbox( $id, $title, $content, $group = false ) {
1030
+ ?>
1031
+ <div class="metabox-holder<?php if ( $group ) echo ' group'; ?>" id="<?php echo $id; ?>">
1032
+ <div class="postbox">
1033
+ <h3><?php echo $title; ?></h3>
1034
+ <div class="inside"><?php echo $content; ?></div>
1035
+ </div>
1036
+ </div>
1037
+ <?php
1038
+ }
1039
+
1040
+ /**
1041
+ * Fetch RSS items from the feed.
1042
+ *
1043
+ * @param int $num Number of items to fetch.
1044
+ * @param string $feed The feed to fetch.
1045
+ * @return array|bool False on error, array of RSS items on success.
1046
+ */
1047
+ public function fetch_rss_items( $num, $feed ) {
1048
+ if ( !function_exists( 'fetch_feed' ) )
1049
+ include_once( ABSPATH . WPINC . '/feed.php' );
1050
+
1051
+ $rss = fetch_feed( $feed );
1052
+
1053
+ // Bail if feed doesn't work
1054
+ if ( !$rss || is_wp_error( $rss ) )
1055
+ return false;
1056
+
1057
+ $rss_items = $rss->get_items( 0, $rss->get_item_quantity( $num ) );
1058
+
1059
+ // If the feed was erroneous
1060
+ if ( !$rss_items ) {
1061
+ $md5 = md5( $feed );
1062
+ delete_transient( 'feed_' . $md5 );
1063
+ delete_transient( 'feed_mod_' . $md5 );
1064
+ $rss = fetch_feed( $feed );
1065
+ $rss_items = $rss->get_items( 0, $rss->get_item_quantity( $num ) );
1066
+ }
1067
+
1068
+ return $rss_items;
1069
+ }
1070
+
1071
+ /**
1072
+ * Box with latest plugins from Extendd.com for sidebar
1073
+ */
1074
+ function extendd_plugins_sidebar( $args ) {
1075
+
1076
+ $defaults = array(
1077
+ 'items' => 6,
1078
+ 'feed' => 'https://extendd.com/feed/?post_type=download',
1079
+ );
1080
+
1081
+ $args = wp_parse_args( $args, $defaults );
1082
+
1083
+ $rss_items = $this->fetch_rss_items( $args['items'], $args['feed'] );
1084
+
1085
+ $content = '<ul>';
1086
+ if ( !$rss_items ) {
1087
+ $content .= '<li>' . __( 'Error fetching feed', $this->domain ) . '</li>';
1088
+ } else {
1089
+ foreach ( $rss_items as $item ) {
1090
+ $url = preg_replace( '/#.*/', '', esc_url( $item->get_permalink(), null, 'display' ) );
1091
+ $content .= '<li>';
1092
+ $content .= '<a class="rsswidget" href="' . $url . '#utm_source=wpadmin&utm_medium=sidebarwidget&utm_term=newsitem&utm_campaign=' . $this->prefix . 'settingsapi">' . esc_html( $item->get_title() ) . '</a> ';
1093
+ $content .= '</li>';
1094
+ }
1095
+ }
1096
+ $content .= '</ul>';
1097
+ $content .= '<ul class="social">';
1098
+ $content .= '<li class="facebook"><span class="genericon genericon-facebook"></span><a href="https://www.facebook.com/WPExtendd">' . __( 'Like Extendd on Facebook', $this->domain ) . '</a></li>';
1099
+ $content .= '<li class="twitter"><span class="genericon genericon-twitter"></span><a href="https://twitter.com/WPExtendd">' . __( 'Follow Extendd on Twitter', $this->domain ) . '</a></li>';
1100
+ $content .= '<li class="twitter"><span class="genericon genericon-twitter"></span><a href="http://twitter.com/TheFrosty">' . __( 'Follow Austin on Twitter', $this->domain ) . '</a></li>';
1101
+ $content .= '<li class="googleplus"><span class="genericon genericon-googleplus"></span><a href="https://plus.google.com/113609352601311785002/">' . __( 'Circle Extendd on Google+', $this->domain ) . '</a></li>';
1102
+ $content .= '<li class="email"><span class="genericons genericons-mail"></span><a href="http://eepurl.com/vi0bz">' . __( 'Subscribe via email', $this->domain ) . '</a></li>';
1103
+
1104
+ $content .= '</ul>';
1105
+ $this->postbox( 'extenddlatest', __( 'Latest plugins from Extendd.com', $this->domain ), $content );
1106
+ }
1107
+
1108
+ }
1109
+ endif;
1110
+
1111
+ /**
1112
+ * The main function responsible for returning the one true
1113
+ * Instance to functions everywhere.
1114
+ *
1115
+ * Use this function like you would a global variable, except without needing
1116
+ * to declare the global.
1117
+ *
1118
+ * Example: <?php $custom_login = CUSTOMLOGIN(); ?>
1119
+ *
1120
+ * @return The one true Instance
1121
+ */
1122
+ if ( !function_exists( 'EXTENDD_PLUGIN_SETTINGS_API' ) ) {
1123
+ function EXTENDD_PLUGIN_SETTINGS_API() {
1124
+ return Extendd_Plugin_Settings_API::instance();
1125
+ }
1126
+ }
classes/edd-remote-install-client/EDD_Remote_Install_Client.php ADDED
@@ -0,0 +1,395 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Allows plugins to install new plugins or upgrades
5
+ *
6
+ * @author Mindshare Studios, Inc.
7
+ * @version 1.7.2 (FROSTY HACK)
8
+ */
9
+
10
+ class Extendd_Remote_Install_Client {
11
+ private $api_url = '';
12
+ private $options = array(
13
+ 'skipplugincheck' => false
14
+ );
15
+
16
+ /**
17
+ * Class constructor.
18
+ *
19
+ *
20
+ * @param string $_api_url The URL pointing to the custom API endpoint.
21
+ * @param string $_plugin_file Path to the plugin file.
22
+ * @param array $_api_data Optional data to send with API calls.
23
+ * @return void
24
+ */
25
+ function __construct( $_api_url, $page, $options = array() ) {
26
+ $this->api_url = trailingslashit( $_api_url );
27
+
28
+ if(isset($options['skipplugincheck']) && $options['skipplugincheck'] == true) {
29
+ $this->options['skipplugincheck'] = true;
30
+ }
31
+
32
+ $options['page'] = $page;
33
+ $this->options = $options;
34
+
35
+ add_action( 'load-' . $page, array($this, 'register_scripts' ));
36
+
37
+ add_action('wp_ajax_edd-activate-plugin-' . $page, array($this, 'activate_plugin'));
38
+ add_action('wp_ajax_edd-deactivate-plugin-' . $page, array($this, 'deactivate_plugin'));
39
+ add_action('wp_ajax_edd-check-plugin-status-' . $page, array($this, 'check_plugin_status'));
40
+ add_action('wp_ajax_edd-check-remote-install-' . $page, array($this, 'check_remote_install'));
41
+ add_action('wp_ajax_edd-do-remote-install-' . $page, array($this, 'do_remote_install'));
42
+
43
+ add_action('wp_ajax_edd-do-manual-install-' . $page, array($this, 'do_manual_install'));
44
+ add_action( 'plugins_api', array($this, 'plugins_api'), 100, 3 );
45
+
46
+ add_action('eddri-install-complete-' . $page, array($this, 'install_complete'), 0, 1);
47
+ }
48
+
49
+ /**
50
+ * Try to convert plugin name to slug
51
+ *
52
+ * @param $str Download name
53
+ * @return $str Slug
54
+ */
55
+
56
+ private function slug($str) {
57
+ $str = strtolower( $str );
58
+ $str = preg_replace("/[\s_]/", "-", $str);
59
+
60
+ return $str;
61
+ }
62
+
63
+ /**
64
+ * Register scripts and styles
65
+ *
66
+ * @return void
67
+ */
68
+
69
+ public function register_scripts() {
70
+ wp_enqueue_script('edd-remote-install-script', plugin_dir_url( __FILE__ ) . '/js/edd-remote-install-admin.js', array('jquery'));
71
+ wp_enqueue_style('edd-remote-install-style', plugin_dir_url( __FILE__ ) . '/css/edd-remote-install-admin.css');
72
+
73
+ wp_localize_script( 'edd-remote-install-script', 'edd_ri_options', $this->options );
74
+ }
75
+
76
+ /**
77
+ * Do manual install
78
+ *
79
+ * If a plugin was unable to be installed automatically, generate an install URL and redirect to the plugins API
80
+ *
81
+ * @param string $_POST['download'] Download requested
82
+ * @param string $_POST['license'] License key
83
+ * @return string $url
84
+ */
85
+
86
+ public function do_manual_install() {
87
+
88
+ $download_name = urlencode($_POST['download']);
89
+ $download_slug = $this->slug($_POST['download']);
90
+
91
+ $license = '';
92
+ if(isset($_POST['license']))
93
+ $license = $_POST['license'];
94
+
95
+ $nonce = wp_create_nonce('install-plugin_' . $download_slug);
96
+
97
+ $url = admin_url('update.php?action=install-plugin&plugin=' . $download_slug . '&name=' . $download_name . '&license=' . $license . '&_wpnonce=' . $nonce . '&eddri=' . $this->options['page']);
98
+
99
+ die($url);
100
+
101
+ }
102
+
103
+ /**
104
+ * Plugins API
105
+ *
106
+ * Overrides the plugins API parameters for download URLs originated by EDDRI
107
+ *
108
+ * @param string $_GET['eddri'] EDDRI page that originated the request
109
+ * @param string $_GET['license'] License key
110
+ * @param string $_GET['name'] Name of the plugin requested
111
+ * @return obj $api
112
+ */
113
+
114
+ public function plugins_api($api, $action, $args) {
115
+
116
+ if($action = 'plugin_information') {
117
+
118
+ if(isset($_GET['eddri']) && $_GET['eddri'] == $this->options['page']) {
119
+
120
+ $api_params = array(
121
+ 'edd_action' => 'get_download',
122
+ 'item_name' => urlencode( $_GET['name'] ),
123
+ 'license' => urlencode( $_GET['license'] )
124
+ );
125
+
126
+ $download_link = add_query_arg($api_params, $this->api_url);
127
+
128
+ ///////////// NEW /////////////////
129
+ $download_id = $this->get_remote_download_id( $_GET['name'] );
130
+ $download_link = $this->get_encoded_download_package_url( $download_id, $_GET['license'] );
131
+ ///////////// NEW /////////////////
132
+
133
+ $api = new stdClass();
134
+ $api->name = $args->slug;
135
+ $api->version = "";
136
+ $api->download_link = $download_link;
137
+
138
+ }
139
+
140
+ }
141
+
142
+ return $api;
143
+
144
+ }
145
+
146
+ /**
147
+ * Callback action that's fired when an install is completed successfully
148
+ *
149
+ * @param array $args Install complete arguments
150
+ * @return void
151
+ */
152
+
153
+ public function install_complete($args) {
154
+
155
+
156
+ }
157
+
158
+ /**
159
+ * Check plugin status
160
+ *
161
+ * Checks to see if a plugin is currently installed and disables the install button if so
162
+ *
163
+ * @param string $_POST['download'] Download requested
164
+ * @return string $response
165
+ */
166
+
167
+ public function check_plugin_status() {
168
+
169
+ $plugin = $this->slug($_POST['download']);
170
+
171
+ if (is_plugin_active($plugin . '/' . $plugin . '.php')) {
172
+ die("active");
173
+ } elseif (file_exists(WP_PLUGIN_DIR . '/' . $plugin . '/' . $plugin . '.php')) {
174
+ die("installed");
175
+ } {
176
+ die(false);
177
+ }
178
+ }
179
+
180
+ /**
181
+ * Check remote install
182
+ *
183
+ * Checks remote server for the specified Download
184
+ *
185
+ * @param string $_POST['download'] Download requested
186
+ * @return string $response
187
+ */
188
+
189
+ public function check_remote_install() {
190
+
191
+ if ( ! current_user_can('install_plugins') )
192
+ die( 'You do not have sufficient permissions to install plugins on this site.' );
193
+
194
+ $api_params = array(
195
+ 'edd_action' => 'check_download',
196
+ 'item_name' => urlencode( $_POST['download'] )
197
+ );
198
+
199
+ $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) );
200
+
201
+ if ( ! is_wp_error( $request ) ):
202
+ $request = json_decode( wp_remote_retrieve_body( $request ) );
203
+ $request = maybe_unserialize( $request );
204
+
205
+ if($request->download == "free") {
206
+
207
+ $response = "0";
208
+
209
+ } else if ($request->download == "not-free") {
210
+
211
+ $response = "1";
212
+
213
+ } else {
214
+
215
+ $response = "does not exist";
216
+
217
+ }
218
+
219
+ else:
220
+
221
+ $response = "Error occurred while trying to reach remote server. Please try again or contact support.";
222
+
223
+ endif;
224
+
225
+ die(json_encode($response));
226
+ }
227
+
228
+ /**
229
+ * Activate plugin
230
+ *
231
+ * Attemps to activate a plugin which is installed and inactive. Triggered by user clicking "Activate".
232
+ *
233
+ * @param string $_POST['download'] Download requested
234
+ * @return response
235
+ */
236
+
237
+ public function activate_plugin() {
238
+
239
+ $slug = $this->slug($_POST['download']);
240
+ $path = WP_PLUGIN_DIR . "/" . $slug . "/" . $slug . ".php";
241
+ activate_plugin( $path );
242
+
243
+ if(is_plugin_active( $slug . '/' . $slug . '.php' )) {
244
+ die('activated');
245
+ } else {
246
+ die('error');
247
+ }
248
+
249
+ }
250
+
251
+ /**
252
+ * Deactivate plugin
253
+ *
254
+ * Attemps to deactivate a plugin. Triggered by user clicking "Deactivate".
255
+ *
256
+ * @param string $_POST['download'] Download requested
257
+ * @return response
258
+ */
259
+
260
+ public function deactivate_plugin() {
261
+
262
+ $slug = $this->slug($_POST['download']);
263
+ $path = WP_PLUGIN_DIR . "/" . $slug . "/" . $slug . ".php";
264
+ deactivate_plugins( $path );
265
+
266
+ if(!is_plugin_active( $slug . '/' . $slug . '.php' )) {
267
+ die('deactivated');
268
+ } else {
269
+ die('error');
270
+ }
271
+
272
+ }
273
+
274
+ /**
275
+ * Manual install
276
+ *
277
+ * Outputs full install log in cases where auto-install failed
278
+ *
279
+ * @param string $_POST['download'] Download requested
280
+ * @return response
281
+ */
282
+
283
+ public function manual_install() {
284
+
285
+ echo "Hi";
286
+
287
+ }
288
+
289
+ /**
290
+ * Do remote install
291
+ *
292
+ * Passes the download and license key (if specified) to the server and receives and installs the plugin package
293
+ *
294
+ * @param string $_POST['license'] License key (if specified)
295
+ * @param string $_POST['download'] Download requested
296
+ * @return response
297
+ */
298
+
299
+ public function do_remote_install() {
300
+
301
+ if ( ! current_user_can('install_plugins') )
302
+ wp_die( 'You do not have sufficient permissions to install plugins on this site.' );
303
+
304
+ $download = $_POST['download'];
305
+
306
+ if(isset($_POST['license'])) {
307
+ $license = $_POST['license'];
308
+
309
+ $api_params = array(
310
+ 'edd_action'=> 'activate_license',
311
+ 'license' => $license,
312
+ 'item_name' => urlencode( $download ) // the name of our product in EDD
313
+ );
314
+
315
+ // Call the custom API.
316
+ $response = wp_remote_get( add_query_arg( $api_params, $this->api_url ), array( 'timeout' => 15, 'sslverify' => false ) );
317
+
318
+ // make sure the response came back okay
319
+ if ( is_wp_error( $response ) )
320
+ return false;
321
+
322
+ // decode the license data
323
+ $license_data = json_decode( wp_remote_retrieve_body( $response ) );
324
+
325
+ if($license_data->license != "valid")
326
+ die("invalid");
327
+
328
+ } else {
329
+
330
+ // If its a free download, don't send a license
331
+ $license = null;
332
+
333
+ }
334
+
335
+ $api_params = array(
336
+ 'edd_action' => 'get_download',
337
+ 'item_name' => urlencode( $download ),
338
+ 'license' => urlencode( $license )
339
+ );
340
+
341
+ //$download_link = add_query_arg($api_params, $this->api_url);
342
+
343
+ // decode the license data
344
+ $download_id = $this->get_remote_download_id( $download );
345
+
346
+ $download_link = $this->get_encoded_download_package_url( $download_id, $license );
347
+ //var_dump( $download_link ); exit;
348
+
349
+ include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; //for plugins_api..
350
+
351
+ $upgrader = new Plugin_Upgrader();
352
+
353
+ $result = $upgrader->install($download_link);
354
+
355
+ if($result == 1) {
356
+ $slug = $this->slug($download);
357
+ $path = WP_PLUGIN_DIR . "/" . $slug . "/" . $slug . ".php";
358
+ $result = activate_plugin( $path );
359
+
360
+ $args['slug'] = $slug;
361
+ $args['license'] = $license;
362
+ do_action('eddri-install-complete-' . $this->options['page'], $args);
363
+ }
364
+
365
+ die();
366
+ }
367
+
368
+ private function get_remote_download_id( $download_title, $download_id = null ) {
369
+
370
+ $api_params = array(
371
+ 'edd_action' => 'get_download_id',
372
+ 'item_name' => urlencode( $download_title )
373
+ );
374
+
375
+ $response = wp_remote_get( add_query_arg( $api_params, $this->api_url ), array( 'timeout' => 15, 'sslverify' => false ) );
376
+
377
+ if ( !is_wp_error( $response ) )
378
+ $download_id = json_decode( wp_remote_retrieve_body( $response ) );
379
+
380
+ return $download_id;
381
+ }
382
+
383
+ private function get_encoded_download_package_url( $download_id, $license ) {
384
+
385
+ $package_url = add_query_arg( array(
386
+ 'edd_action' => 'package_download',
387
+ 'id' => $download_id,
388
+ 'key' => $license,
389
+ 'expires' => rawurlencode( base64_encode( strtotime( '+1 hour' ) ) )
390
+ ), $this->api_url );
391
+
392
+ return apply_filters( 'edd_sl_encoded_package_url', $package_url );
393
+
394
+ }
395
+ }
classes/edd-remote-install-client/css/edd-remote-install-admin.css ADDED
@@ -0,0 +1,210 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .edd-remote-install{
2
+ display: inline-block;
3
+ font-size:14px;
4
+ color:#fff !important;
5
+ text-decoration: none !important;
6
+ padding:14px 60px;
7
+ line-height:1;
8
+ overflow: hidden;
9
+ position:relative;
10
+
11
+ box-shadow:0 1px 1px #ccc;
12
+ border-radius:2px;
13
+
14
+ background-color: #21759b;
15
+ background-image: -webkit-gradient(linear,left top,left bottom,from(#2a95c5),to(#21759b));
16
+ background-image: -webkit-linear-gradient(top,#2a95c5,#21759b);
17
+ background-image: -moz-linear-gradient(top,#2a95c5,#21759b);
18
+ background-image: -ms-linear-gradient(top,#2a95c5,#21759b);
19
+ background-image: -o-linear-gradient(top,#2a95c5,#21759b);
20
+ background-image: linear-gradient(to bottom,#2a95c5,#21759b);
21
+ border: 1px solid #21759b;
22
+ border-bottom-color: #1e6a8d;
23
+ border-radius: 3px;
24
+ -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.5);
25
+ box-shadow: inset 0 1px 0 rgba(120,200,230,0.5);
26
+ text-decoration: none;
27
+ text-shadow: 0 1px 0 rgba(0,0,0,0.1);
28
+
29
+ cursor: pointer;
30
+
31
+ }
32
+
33
+ .edd-remote-install.disabled {
34
+ pointer-events: none;
35
+ cursor: default;
36
+ background-color: #9c9c9c;
37
+ background-image: -webkit-gradient(linear,left top,left bottom,from(#c4c4c4),to(#9c9c9c));
38
+ background-image: -webkit-linear-gradient(top,#c4c4c4,#9c9c9c);
39
+ background-image: -moz-linear-gradient(top,#c4c4c4,#9c9c9c);
40
+ background-image: -ms-linear-gradient(top,#c4c4c4,#9c9c9c);
41
+ background-image: -o-linear-gradient(top,#c4c4c4,#9c9c9c);
42
+ background-image: linear-gradient(to bottom,#c4c4c4,#9c9c9c);
43
+ border: 1px solid #9c9c9c;
44
+ border-bottom-color: #8c8c8c;
45
+ box-shadow: inset 0 1px 0 rgba(0,0,0,0.2);
46
+ }
47
+
48
+ .eddri-addon {
49
+ vertical-align: top;
50
+ border: 1px solid #CCC;
51
+ -moz-box-shadow: 0 0 5px rgba(0,0,0,0.25);
52
+ -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.25);
53
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.25);
54
+ width: auto;
55
+ margin-bottom: 10px;
56
+ }
57
+
58
+ .eddri-addon .eddri-addon-container {
59
+ margin: 5px;
60
+ }
61
+
62
+ .eddri-addon .eddri-img-wrap {
63
+ border: 1px solid #efefef;
64
+ overflow: hidden;
65
+ position: relative;
66
+ }
67
+ .eddri-addon .eddri-img-wrap > p {
68
+ background: #fff;
69
+ bottom: 0;
70
+ margin: 0 0 -25px 0;
71
+ padding: 10px;
72
+ position: absolute;
73
+ opacity: 0.1;
74
+
75
+ -webkit-transition: all 0.15s linear;
76
+ -moz-transition: all 0.15s linear;
77
+ -o-transition: all 0.15s linear;
78
+ transition: all 0.15s linear;
79
+ }
80
+ .eddri-addon .eddri-img-wrap:hover > p {
81
+ margin: 0;
82
+ opacity: 0.98;
83
+ }
84
+
85
+ .eddri-addon .eddri-thumbnail {
86
+ width: 100%;
87
+ height: auto;
88
+ }
89
+
90
+ .eddri-addon a.button {
91
+ margin-top: 12px;
92
+ }
93
+
94
+ .eddri-addon span.eddri-status {
95
+ background-color: #EEE;
96
+ border: 1px solid #DADADA;
97
+ padding: 6px;
98
+ display: block;
99
+ position: relative;
100
+ font-weight: bold;
101
+ color: #424242;
102
+ -webkit-border-radius: 3px;
103
+ -moz-border-radius: 3px;
104
+ border-radius: 3px;
105
+ }
106
+
107
+ .eddri-addon span.eddri-status.eddri-inactive {
108
+ background-color: #FFFBCC;
109
+ border: 1px solid #E6DB55;
110
+ }
111
+
112
+ .eddri-addon span.eddri-status.eddri-active {
113
+ background-color: #CBECA0;
114
+ border: 1px solid #97B48A;
115
+ color: #2D5312;
116
+ }
117
+
118
+ .eddri-addon span.eddri-status.eddri-error {
119
+ color: #A94442;
120
+ background-color: #F2DEDE;
121
+ border: 1px solid #EBCCD1;
122
+ }
123
+
124
+ .eddri-status.in-progress {
125
+ cursor: progress;
126
+ background-color: #D9EDF7 !important;
127
+ }
128
+
129
+ .eddri-status.stopped {
130
+ cursor: pointer;
131
+ background-color: #D9EDF7 !important;
132
+ }
133
+
134
+ .eddri-status.success {
135
+ background-color: #D9EDF7 !important;
136
+ }
137
+
138
+ .eddri-status.failure {
139
+
140
+ }
141
+ /* Hide the original text of the button. Then the loading or finished
142
+ text will be shown in the :after element above it. */
143
+
144
+ .eddri-status.in-progress,
145
+ .eddri-status.finished{
146
+ color:transparent !important;
147
+ text-shadow: none;
148
+ }
149
+
150
+ .eddri-status.in-progress:after,
151
+ .eddri-status.finished:after{
152
+ position: absolute;
153
+ z-index: 2;
154
+ width: 100%;
155
+ height: 100%;
156
+ top: 6px;
157
+ left: 6px;
158
+ color: #424242;
159
+ }
160
+
161
+ /* If the .in-progress class is set on the button, show the
162
+ contents of the data-loading attribute on the butotn */
163
+
164
+ .eddri-status.in-progress:after{
165
+ content:attr(data-loading);
166
+ }
167
+
168
+ /* The same goes for the .finished class */
169
+
170
+ .eddri-status.finished:after{
171
+ content:attr(data-finished);
172
+ }
173
+
174
+ .eddri-status.eddri-error:after{
175
+ color: #A94442;
176
+ }
177
+
178
+ /* The colorful bar that grows depending on the progress */
179
+
180
+ .eddri-status .tz-bar{
181
+ background-color: #428BCA;
182
+ height:3px;
183
+ bottom:0;
184
+ left:0;
185
+ width:0;
186
+ position:absolute;
187
+ z-index:1;
188
+
189
+ border-radius:0 0 2px 2px;
190
+
191
+ -webkit-transition: width 0.5s, height 0.5s;
192
+ -moz-transition: width 0.5s, height 0.5s;
193
+ transition: width 0.5s, height 0.5s;
194
+ }
195
+
196
+ /* The bar can be either horizontal, or vertical */
197
+
198
+ .eddri-status .tz-bar.background-horizontal{
199
+ height:100%;
200
+ border-radius:2px;
201
+ }
202
+
203
+ #license-input {
204
+ display: block;
205
+ position: relative;
206
+ margin-top: 4px;
207
+ outline: none;
208
+ width: 100%;
209
+ line-height: 18px;
210
+ }
classes/edd-remote-install-client/js/edd-remote-install-admin.js ADDED
@@ -0,0 +1,362 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(document).ready(function ($) {
2
+
3
+ if(edd_ri_options.skipplugincheck != true) {
4
+
5
+ $('a[data-edd-install]').each(function() {
6
+
7
+ var downloadButton = $(this);
8
+
9
+ var data = {
10
+ action: 'edd-check-plugin-status-' + edd_ri_options.page,
11
+ download: downloadButton.data('edd-install')
12
+ }
13
+
14
+ $.post(ajaxurl, data, function (res) {
15
+
16
+ if(res) {
17
+ if(res == 'installed') {
18
+ $(downloadButton).prev(".eddri-status").text("Inactive").addClass('eddri-inactive');
19
+ $(downloadButton).text('Activate');
20
+ }
21
+ if(res == 'active') {
22
+ $(downloadButton).prev(".eddri-status").text("Active").addClass('eddri-active');
23
+ $(downloadButton).text('Deactivate');
24
+ }
25
+
26
+ }
27
+
28
+ });
29
+
30
+ });
31
+ }
32
+
33
+ $('body').on('click', 'a[data-edd-install]', function (e) {
34
+ e.preventDefault();
35
+
36
+ var downloadButton = $(this);
37
+ var statusContainer = $(this).prev(".eddri-status");
38
+
39
+ if(downloadButton.text() == 'Activate') {
40
+
41
+ var data = {
42
+ action: 'edd-activate-plugin-' + edd_ri_options.page,
43
+ download: downloadButton.data('edd-install')
44
+ }
45
+
46
+ $.post(ajaxurl, data, function (res) {
47
+
48
+ if(res == 'activated') {
49
+
50
+ $(statusContainer).text("Active").addClass('eddri-active');
51
+ $(downloadButton).text('Deactivate');
52
+
53
+ } else {
54
+
55
+ $(statusContainer).addClass('eddri-error').text("Error activating. Try activating manually from the plugins screen.");
56
+
57
+ }
58
+
59
+ });
60
+
61
+ } else if(downloadButton.text() == 'Deactivate') {
62
+
63
+ var data = {
64
+ action: 'edd-deactivate-plugin-' + edd_ri_options.page,
65
+ download: downloadButton.data('edd-install')
66
+ }
67
+
68
+ $.post(ajaxurl, data, function (res) {
69
+
70
+ if(res == 'deactivated') {
71
+
72
+ $(statusContainer).text("Inactive").removeClass('eddri-active success finished').addClass('eddri-inactive');
73
+ $(downloadButton).text('Activate');
74
+
75
+ } else {
76
+
77
+ $(statusContainer).addClass('eddri-error').text("Error deactivating. Try deactivating manually from the plugins screen.");
78
+
79
+ }
80
+
81
+ });
82
+
83
+ } else {
84
+
85
+ var data = {
86
+ action: 'edd-check-remote-install-' + edd_ri_options.page,
87
+ download: downloadButton.data('edd-install')
88
+ }
89
+
90
+ statusContainer.progressInitialize()
91
+ .progressStart()
92
+ .attr({'data-loading': "Requesting package..."});
93
+
94
+ $.post(ajaxurl, data, function (res) {
95
+ res = $.parseJSON( res );
96
+ if (res == '0') {
97
+ // Free download found
98
+
99
+ var data = {
100
+ action: 'edd-do-remote-install-' + edd_ri_options.page,
101
+ download: downloadButton.data('edd-install')
102
+ };
103
+
104
+ statusContainer.progressSet(50)
105
+ .attr({'data-loading': "Found package. Installing..."});
106
+
107
+ $.post(ajaxurl, data, function (res) {
108
+ $(downloadButton).text('Deactivate');
109
+ return statusContainer.progressFinish(res, downloadButton);
110
+ });
111
+
112
+ } else if (res == '1') {
113
+ // License key required to continue
114
+ statusContainer.validateLicense(downloadButton);
115
+ } else {
116
+
117
+ return statusContainer.progressFinish(res, downloadButton);
118
+ }
119
+
120
+ });
121
+ }
122
+ });
123
+
124
+ // Progress meter functionality defined in jQuery plugins.
125
+
126
+ $.fn.validateLicense = function(downloadButton) {
127
+ var statusContainer = $(downloadButton).prev(".eddri-status");
128
+ var licenseInput;
129
+
130
+ // Pause auto-updating of progress bar and create license key input field
131
+ statusContainer.progressStop(40)
132
+ .attr({'data-loading': "Enter license key to continue:"})
133
+ .after("<input id='license-input' placeholder='License key'></input>")
134
+ .off('click')
135
+ .removeClass('success failure');
136
+
137
+ licenseInput = $('#license-input');
138
+
139
+ licenseInput.click(function() {
140
+
141
+ statusContainer.attr({'data-loading': "Click to proceed."})
142
+
143
+ statusContainer.click(function (e) {
144
+ e.stopPropagation();
145
+ validPost();
146
+ });
147
+
148
+ downloadButton.click(function (e) {
149
+ e.stopPropagation();
150
+ validPost();
151
+ });
152
+
153
+ $(document).keypress(function (e) {
154
+ if(e.which == 13) {
155
+ e.preventDefault();
156
+ validPost();
157
+ }
158
+ });
159
+
160
+ function validPost() {
161
+ var license = licenseInput.val();
162
+ if (!license) return false;
163
+
164
+ var data = {
165
+ action: 'edd-do-remote-install-' + edd_ri_options.page,
166
+ download: downloadButton.data('edd-install'),
167
+ license: license,
168
+ url: edd_ri_options.url
169
+ }
170
+
171
+ licenseInput.remove();
172
+
173
+ statusContainer.progressStart().progressSet(50)
174
+ .attr({'data-loading': "Validating license..."});
175
+
176
+ $.post(ajaxurl, data, function (res) {
177
+ statusContainer.progressFinish(res, downloadButton, license);
178
+ });
179
+ };
180
+ });
181
+ }
182
+
183
+ $.fn.progressInitialize = function() {
184
+ var button = this;
185
+ var progress = 0;
186
+
187
+ // Add markup for the progress bar.
188
+ var bar = $('<span class="tz-bar background-horizontal">').appendTo(button);
189
+
190
+ button.on('progress', function (e, val, absolute, finished) {
191
+ var finished = finished;
192
+
193
+ // Make sure button has `in-progress` class when initialized.
194
+ // And that local var `progress` = 0 to start.
195
+ // Then show the progress bar.
196
+ if (!button.hasClass('in-progress')) {
197
+ button.removeClass('finished').addClass('in-progress');
198
+ progress = 0;
199
+ bar.show();
200
+ }
201
+
202
+ if (absolute) {
203
+ progress = val;
204
+ } else if (progress >= 100) {
205
+ progress = 100;
206
+ finished = true;
207
+ } else {
208
+ progress += val;
209
+ }
210
+
211
+ if (finished) {
212
+ button.removeClass('in-progress').addClass('finished');
213
+
214
+ bar.delay(500).fadeOut(function() {
215
+ button.trigger('progress-finish');
216
+ setProgress(0);
217
+ });
218
+ }
219
+
220
+ setProgress(progress);
221
+ });
222
+
223
+ function setProgress (percentage) {
224
+ bar.filter('.background-horizontal,.background-bar').width(percentage+'%');
225
+ bar.filter('.background-vertical').height(percentage+'%');
226
+ }
227
+
228
+ return button;
229
+ };
230
+
231
+ $.fn.progressStart = function() {
232
+ var button = this;
233
+ var last_progress = new Date().getTime();
234
+
235
+ if (button.hasClass('in-progress')) {
236
+ // Don't start it a second time!
237
+ return button;
238
+ }
239
+
240
+ button.on('progress', function() {
241
+ last_progress = new Date().getTime();
242
+ });
243
+
244
+ // Every half a second check whether the progress
245
+ // has been incremented in the last two seconds
246
+
247
+ var interval = window.setInterval(function() {
248
+
249
+ // Check every half-second to see whether
250
+ // progress has incremented in past 2 seconds.
251
+ if ( new Date().getTime() > 2000+last_progress && !button.hasClass('stopped')) {
252
+
253
+ // There has been no activity for 2s. Increment the progress
254
+ // bar a little bit to show that something is happening.
255
+ button.progressIncrement(5);
256
+ }
257
+
258
+ }, 500);
259
+
260
+ button.on('progress-finish', function() {
261
+ window.clearInterval(interval);
262
+ }).progressIncrement(10);
263
+ return button;
264
+ };
265
+
266
+ $.fn.progressSet = function (val) {
267
+ var button = this;
268
+ var finished = false;
269
+ val = val || 10;
270
+
271
+ if (button.hasClass('stopped')) {
272
+ button.removeClass('stopped');
273
+ }
274
+
275
+ if (val >= 100) {
276
+ finished = true;
277
+ }
278
+
279
+ button.trigger('progress', [val, true, finished]);
280
+ return button;
281
+ };
282
+
283
+ $.fn.progressIncrement = function (val) {
284
+ var button = this;
285
+ val = val || 10;
286
+ button.trigger('progress', [val]);
287
+ return button;
288
+ };
289
+
290
+ $.fn.progressStop = function (val) {
291
+ var button = this;
292
+ button.progressSet(val).addClass('stopped');
293
+ return button;
294
+ };
295
+
296
+ $.fn.progressFinish = function (res, downloadButton, license) {
297
+ // alert(res);
298
+
299
+ var statusContainer = $(downloadButton).prev(".eddri-status");
300
+
301
+ statusContainer.progressSet(100);
302
+
303
+ if (res === 'invalid') {
304
+ statusContainer.attr({'data-finished': "Invalid License"});
305
+
306
+ setTimeout(function() {
307
+ statusContainer.validateLicense(downloadButton);
308
+ }, 1200);
309
+
310
+ } else if (res.search('error') > 0) {
311
+
312
+ // If there was an unknown error, try to run the install manually
313
+
314
+ statusContainer.attr({'data-finished': "Unknown error. Redirecting..."})
315
+ .addClass('eddri-error');
316
+
317
+ var data = {
318
+ action: 'edd-do-manual-install-' + edd_ri_options.page,
319
+ download: downloadButton.data('edd-install'),
320
+ license: license
321
+ }
322
+
323
+ $.post(ajaxurl, data, function (res) {
324
+ window.location.href = res;
325
+ });
326
+
327
+ } else if (res.search('already exists') > 0) {
328
+ statusContainer.attr({'data-finished': "Error: Already installed"})
329
+ .addClass('eddri-error');
330
+
331
+ } else if (res.search('not exist') > 0) {
332
+ statusContainer.attr({'data-finished': "Error: Plugin file does not exist."})
333
+ .addClass('eddri-error');
334
+
335
+ } else if (res.search('installed successfully') > 0) {
336
+ statusContainer.attr({'data-finished': "Success!"})
337
+ .addClass('success');
338
+ $(downloadButton).text('Deactivate');
339
+
340
+ } else {
341
+
342
+ // If there was an unknown error, try to run the install manually
343
+
344
+ statusContainer.attr({'data-finished': "Unknown error. Redirecting..."})
345
+ .addClass('eddri-error');
346
+
347
+ var data = {
348
+ action: 'edd-do-manual-install-' + edd_ri_options.page,
349
+ download: downloadButton.data('edd-install'),
350
+ license: license
351
+ }
352
+
353
+ $.post(ajaxurl, data, function (res) {
354
+ window.location.href = res;
355
+ });
356
+
357
+ }
358
+
359
+ return statusContainer;
360
+ };
361
+
362
+ });
classes/scripts-styles.php ADDED
@@ -0,0 +1,173 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Weclome Page Class
5
+ *
6
+ * @package Custom Login
7
+ * @subpackage Welcome Page
8
+ * @copyright Copyright (c) 2013, Austin Passy
9
+ * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
10
+ * @since 2.0
11
+ */
12
+
13
+ // Exit if accessed directly
14
+ if ( ! defined( 'ABSPATH' ) ) exit;
15
+
16
+ /**
17
+ * Custom Login Welcome Page Class
18
+ *
19
+ * A general class for About and Credits page.
20
+ *
21
+ * @access public
22
+ * @since 2.0
23
+ * @return void
24
+ */
25
+ class Custom_Login_Scripts_Styles {
26
+
27
+ /** Singleton *************************************************************/
28
+ private static $instance;
29
+
30
+ /**
31
+ * Main Instance
32
+ *
33
+ * @staticvar array $instance
34
+ * @return The one true instance
35
+ */
36
+ public static function instance() {
37
+ if ( ! isset( self::$instance ) ) {
38
+ self::$instance = new self;
39
+ }
40
+ return self::$instance;
41
+ }
42
+
43
+ /**
44
+ * Helper function to convert HEX to RGB
45
+ *
46
+ * @ref http://css-tricks.com/snippets/php/convert-hex-to-rgb/#comment-355641
47
+ * @return array
48
+ */
49
+ public function hex2rgb( $color ) {
50
+ if ( $color[0] == '#' ) {
51
+ $color = substr( $color, 1 );
52
+ }
53
+ if ( strlen( $color ) == 6 ) {
54
+ list( $r, $g, $b ) = array( $color[0] . $color[1], $color[2] . $color[3], $color[4] . $color[5] );
55
+ } elseif ( strlen( $color ) == 3 ) {
56
+ list( $r, $g, $b ) = array( $color[0] . $color[0], $color[1] . $color[1], $color[2] . $color[2] );
57
+ } else {
58
+ return false;
59
+ }
60
+ $r = hexdec( $r );
61
+ $g = hexdec( $g );
62
+ $b = hexdec( $b );
63
+ return array( 'red' => $r, 'green' => $g, 'blue' => $b );
64
+ }
65
+
66
+ /**
67
+ * Helper function to convert RGB to HEX
68
+ *
69
+ * @ref http://bavotasan.com/2011/convert-hex-color-to-rgb-using-php/
70
+ * @return string
71
+ */
72
+ public function rgb2hex( $rgb ) {
73
+ $hex = "#";
74
+ $hex .= str_pad( dechex( $rgb[0] ), 2, "0", STR_PAD_LEFT );
75
+ $hex .= str_pad( dechex( $rgb[1] ), 2, "0", STR_PAD_LEFT );
76
+ $hex .= str_pad( dechex( $rgb[2] ), 2, "0", STR_PAD_LEFT );
77
+
78
+ return $hex; // returns the hex value including the number sign (#)
79
+ }
80
+
81
+ /**
82
+ * Helper function to convert RGBA to HEX
83
+ *
84
+ * @ref http://stackoverflow.com/questions/5798129/regular-expression-to-only-allow-whole-numbers-and-commas-in-a-string
85
+ * @return string
86
+ */
87
+ public function rgba2hex( $rgba ) {
88
+ // $rgba = str_replace( array( 'rgb', 'rgba', '(', ')' ), '', $rgba );
89
+ $rgba = preg_replace(
90
+ array(
91
+ '/[^\d,]/', // Matches anything that's not a comma or number.
92
+ '/(?<=,),+/', // Matches consecutive commas.
93
+ '/^,+/', // Matches leading commas.
94
+ '/,+$/' // Matches trailing commas.
95
+ ), '', $rgba );
96
+ $rgba = explode( ',', $rgba );
97
+
98
+ $hex = "#";
99
+ $hex .= str_pad( dechex( $rgba[0] ), 2, "0", STR_PAD_LEFT );
100
+ $hex .= str_pad( dechex( $rgba[1] ), 2, "0", STR_PAD_LEFT );
101
+ $hex .= str_pad( dechex( $rgba[2] ), 2, "0", STR_PAD_LEFT );
102
+
103
+ return $hex; // returns the hex value including the number sign (#)
104
+ }
105
+
106
+ /**
107
+ * Helper function to convert RGB(A) to array
108
+ *
109
+ * @return bool
110
+ */
111
+ public function is_rgba( $str ) {
112
+ $is_rgba = strpos( $str, 'rgba' );
113
+
114
+ if ( false === $is_rgba )
115
+ return false;
116
+
117
+ return true;
118
+ }
119
+
120
+ /**
121
+ * Browser prefixes
122
+ *
123
+ * @since 1.1 (1/8/13)
124
+ */
125
+ public function prefixit( $input, $option ) {
126
+ $prefixs = array( '-webkit-', '-moz-', '-ms-', '-o-', '' );
127
+
128
+ $output = "\n\t";
129
+
130
+ foreach ( $prefixs as $prefix ) {
131
+ $output .= $this->trailingsemicolonit( $prefix . $input . ': ' . esc_attr( $option ) );
132
+ }
133
+
134
+ return $output;
135
+ }
136
+
137
+ /**
138
+ * Add a semi colon
139
+ *
140
+ * Remove esc_attr since it's encoding single quotes in image urls with quotes.
141
+ *
142
+ * @since 1.1 (1/8/13)
143
+ * @updated 1.1.1 (1/9/13)
144
+ */
145
+ public function trailingsemicolonit( $input ) {
146
+ $output = rtrim( $input, ';' );
147
+ $output .= ';' . "\n\t";
148
+
149
+ return $output;
150
+ }
151
+
152
+ /**
153
+ * Open a new CSS rule
154
+ *
155
+ * @since 2.0
156
+ */
157
+ public function cssrule( $rule ) {
158
+ $output = rtrim( $rule, '{' );
159
+ $output .= " {\n\t";
160
+
161
+ return $output;
162
+ }
163
+
164
+ }
165
+
166
+ /**
167
+ * Funky fresh.
168
+ */
169
+ if ( !function_exists( 'CUSTOM_LOGIN_SCRIPT_STYLES' ) ) :
170
+ function CUSTOM_LOGIN_SCRIPT_STYLES() {
171
+ return Custom_Login_Scripts_Styles::instance();
172
+ }
173
+ endif;
classes/templates.php ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Exit if accessed directly
4
+ if ( ! defined( 'ABSPATH' ) ) exit;
5
+
6
+ if ( !class_exists( 'Custom_Login_Templates' ) ) :
7
+ class Custom_Login_Templates {
8
+
9
+ /**
10
+ * Returns the path to the CL templates directory
11
+ *
12
+ * @access private
13
+ * @since 2.0
14
+ * @return string
15
+ */
16
+ function get_templates_dir() {
17
+ return CUSTOM_LOGIN_DIR . 'templates';
18
+ }
19
+
20
+ /**
21
+ * Returns the URL to the CL templates directory
22
+ *
23
+ * @access private
24
+ * @since 2.0
25
+ * @return string
26
+ */
27
+ function get_templates_url() {
28
+ return CUSTOM_LOGIN_URL . 'templates';
29
+ }
30
+
31
+ /**
32
+ * Retrieves a template part
33
+ *
34
+ * @since 2.0
35
+ *
36
+ * @param string $slug
37
+ * @param string $name Optional. Default null
38
+ *
39
+ * @uses custom_login_locate_template()
40
+ * @uses load_template()
41
+ * @uses get_template_part()
42
+ */
43
+ function get_template_part( $slug, $name = null, $load = true ) {
44
+ // Execute code for this part
45
+ do_action( 'get_template_part_' . $slug, $slug, $name );
46
+
47
+ // Setup possible parts
48
+ $templates = array();
49
+ if ( isset( $name ) )
50
+ $templates[] = $slug . '-' . $name . '.php';
51
+ $templates[] = $slug . '.php';
52
+
53
+ // Allow template parst to be filtered
54
+ $templates = apply_filters( 'custom_login_get_template_part', $templates, $slug, $name );
55
+
56
+ // Return the part that is found
57
+ return self::locate_template( $templates, $load, false );
58
+ }
59
+
60
+ /**
61
+ * Retrieve the name of the highest priority template file that exists.
62
+ *
63
+ * Searches in the STYLESHEETPATH before TEMPLATEPATH so that themes which
64
+ * inherit from a parent theme can just overload one file. If the template is
65
+ * not found in either of those, it looks in the theme-compat folder last.
66
+ *
67
+ * @since 2.0
68
+ *
69
+ * @param string|array $template_names Template file(s) to search for, in order.
70
+ * @param bool $load If true the template file will be loaded if it is found.
71
+ * @param bool $require_once Whether to require_once or require. Default true.
72
+ * Has no effect if $load is false.
73
+ * @return string The template filename if one is located.
74
+ */
75
+ function locate_template( $template_names, $load = false, $require_once = true ) {
76
+ // No file found yet
77
+ $located = false;
78
+
79
+ // Try to find a template file
80
+ foreach ( (array) $template_names as $template_name ) {
81
+
82
+ // Continue if template is empty
83
+ if ( empty( $template_name ) )
84
+ continue;
85
+
86
+ // Trim off any slashes from the template name
87
+ $template_name = ltrim( $template_name, '/' );
88
+
89
+ // Check child theme first
90
+ if ( file_exists( trailingslashit( get_stylesheet_directory() ) . 'custom_login_templates/' . $template_name ) ) {
91
+ $located = trailingslashit( get_stylesheet_directory() ) . 'custom_login_templates/' . $template_name;
92
+ break;
93
+
94
+ // Check parent theme next
95
+ } elseif ( file_exists( trailingslashit( get_template_directory() ) . 'custom_login_templates/' . $template_name ) ) {
96
+ $located = trailingslashit( get_template_directory() ) . 'custom_login_templates/' . $template_name;
97
+ break;
98
+
99
+ // Check plugin compatibility last
100
+ } elseif ( file_exists( trailingslashit( self::get_templates_dir() ) . $template_name ) ) {
101
+ $located = trailingslashit( self::get_templates_dir() ) . $template_name;
102
+ break;
103
+ }
104
+ }
105
+
106
+ if ( ( true == $load ) && ! empty( $located ) )
107
+ load_template( $located, $require_once );
108
+
109
+ return $located;
110
+ }
111
+ }
112
+ endif;
classes/welcome.php ADDED
@@ -0,0 +1,193 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Weclome Page Class
4
+ *
5
+ * @package Custom Login
6
+ * @subpackage Welcome Page
7
+ * @copyright Copyright (c) 2013, Austin Passy
8
+ * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
+ * @since 2.0
10
+ */
11
+
12
+ // Exit if accessed directly
13
+ if ( ! defined( 'ABSPATH' ) ) exit;
14
+
15
+ /**
16
+ * Custom Login Welcome Page Class
17
+ *
18
+ * A general class for About and Credits page.
19
+ *
20
+ * @access public
21
+ * @since 2.0
22
+ * @return void
23
+ */
24
+ class Custom_Login_Welcome {
25
+
26
+ /**
27
+ * @var string
28
+ */
29
+ public $minimum_capability = 'manage_options';
30
+
31
+ /**
32
+ * Get things started
33
+ *
34
+ * @access private
35
+ * @since 2.0
36
+ * @return void
37
+ */
38
+ public function __construct() {
39
+ add_action( 'admin_menu', array( $this, 'admin_menus') );
40
+ add_action( 'admin_head', array( $this, 'admin_head' ) );
41
+ add_action( 'admin_init', array( $this, 'welcome' ) );
42
+ }
43
+
44
+ /**
45
+ * Register dashboard pages.
46
+ *
47
+ * Later they are hidden in 'admin_head'.
48
+ *
49
+ * @since 2.0
50
+ * @return void
51
+ */
52
+ public function admin_menus() {
53
+ $login = CUSTOMLOGIN();
54
+ // About Page
55
+ add_dashboard_page(
56
+ __( 'Welcome to Custom Login', $login->domain ),
57
+ __( 'Welcome to Custom Login', $login->domain ),
58
+ $this->minimum_capability,
59
+ 'custom-login-about',
60
+ array( $this, 'about_screen' )
61
+ );
62
+ }
63
+
64
+ /**
65
+ * Hide Individual Dashboard Menus
66
+ *
67
+ * @since 2.0
68
+ * @return void
69
+ */
70
+ public function admin_head() {
71
+ remove_submenu_page( 'index.php', 'custom-login-about' );
72
+
73
+ // Badge for welcome page
74
+ $badge_url = CUSTOM_LOGIN_URL . 'assets/images/welcome-badge.png';
75
+ ?>
76
+ <style type="text/css" media="screen">
77
+ /*<![CDATA[*/
78
+ .cl-badge {
79
+ padding-top: 150px;
80
+ height: 52px;
81
+ width: 185px;
82
+ color: #666;
83
+ font-weight: bold;
84
+ font-size: 14px;
85
+ text-align: center;
86
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8);
87
+ margin: 0 -5px;
88
+ background: url('<?php echo $badge_url; ?>') no-repeat;
89
+ }
90
+ .about-wrap .cl-badge {
91
+ position: absolute;
92
+ top: 0;
93
+ right: 0;
94
+ }
95
+ /*]]>*/
96
+ </style>
97
+ <?php
98
+ }
99
+
100
+ /**
101
+ * Render About Screen
102
+ *
103
+ * @since 2.0
104
+ */
105
+ public function about_screen() {
106
+ list( $display_version ) = explode( '-', CUSTOM_LOGIN_VERSION );
107
+ $login = CUSTOMLOGIN();
108
+ ?>
109
+ <div class="wrap about-wrap">
110
+ <h1><?php printf( __( 'Welcome to Custom Login %s', $login->domain ), $display_version ); ?></h1>
111
+ <div class="about-text"><?php printf( __( 'Thank you for updating to the latest version! Custom Login %s is ready to make your login page better!', $login->domain ), $display_version ); ?></div>
112
+ <div class="cl-badge"><?php printf( __( 'Version %s', $login->domain ), $display_version ); ?></div>
113
+
114
+ <h2 class="nav-tab-wrapper">
115
+ <a class="nav-tab nav-tab-active" href="<?php echo esc_url( admin_url( add_query_arg( array( 'page' => 'custom-login-about' ), 'index.php' ) ) ); ?>">
116
+ <?php _e( "What's New", $login->domain ); ?>
117
+ </a>
118
+ </h2>
119
+
120
+ <div class="changelog">
121
+ <h3><?php _e( 'Improved Settings', $login->domain ); ?></h3>
122
+
123
+ <div class="feature-section">
124
+
125
+ <h4><?php _e( 'Load times', $login->domain ); ?></h4>
126
+ <p><?php _e( 'There were some rare cases in versions 1.x that had the plugin loading on pages it wasn\'t supposted to. Custom Login <strong>2.x</strong> now caches all queries and database calls. Making it over 140% faster.', $login->domain ); ?></p>
127
+
128
+ <h4><?php _e( 'Better features', $login->domain ); ?></h4>
129
+ <p><?php printf( __( 'With a complete rewrite of the plugin, I have to ability to build custom add-ons (think extensions), like stealth login, email logins and 2-step authentication to name a few of the add-ons you can find on %sExtendd.com%s in the future.', $login->domain ), '<a href="https://extendd.com">', '</a>' ); ?></p>
130
+
131
+ </div>
132
+ </div>
133
+
134
+ <div class="changelog">
135
+ <h3><?php _e( 'Extensions', $login->domain ); ?></h3>
136
+
137
+ <div class="feature-section col three-col">
138
+ <div>
139
+ <h4><?php _e( 'Stealth Login', $login->domain ); ?></h4>
140
+ <a href="https://extendd.com/plugin/custom-login-stealth-login/?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=welcome" target="_blank">
141
+ <img src="https://i.imgur.com/mhuymPG.jpg">
142
+ </a>
143
+ <p><?php _e( 'Protect your wp-login.php page from brute force attacks.', $login->domain ); ?></p>
144
+ </div>
145
+
146
+ <div>
147
+ <h4><?php _e( 'Page Template', $login->domain ); ?></h4>
148
+ <a href="https://extendd.com/plugin/custom-login-page-template/?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=welcome" target="_blank">
149
+ <img src="https://i.imgur.com/A0rzS9q.jpg">
150
+ </a>
151
+ <p><?php _e( 'Add a login form to any WordPress page.', $login->domain ); ?></p>
152
+ </div>
153
+
154
+ <div class="last-feature">
155
+ <h4><?php _e( 'Login Redirects', $login->domain ); ?></h4>
156
+ <a href="https://extendd.com/plugin/wordpress-login-redirects/?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=welcome" target="_blank">
157
+ <img class="eddri-thumbnail" src="https://i.imgur.com/aNGoyAa.jpg">
158
+ </a>
159
+ <p><?php _e( 'Manage redirects after logging in.', $login->domain ); ?></p>
160
+ </div>
161
+ </div>
162
+ </div>
163
+
164
+ <div class="return-to-dashboard">
165
+ <a href="<?php echo esc_url( admin_url( 'options-general.php?page=' . $login->domain ) ); ?>"><?php _e( 'Go to Custom Login Settings', $login->domain ); ?></a>
166
+ </div>
167
+ </div>
168
+ <?php
169
+ }
170
+
171
+ /**
172
+ * Sends user to the welcome page on first activation
173
+ *
174
+ * @since 2.0
175
+ * @return void
176
+ */
177
+ public function welcome() {
178
+ // Bail if no activation redirect
179
+ if ( ! get_transient( '_custom_login_activation_redirect' ) )
180
+ return;
181
+
182
+ // Delete the redirect transient
183
+ delete_transient( '_custom_login_activation_redirect' );
184
+
185
+ // Bail if activating from network, or bulk
186
+ if ( is_network_admin() || isset( $_GET['activate-multi'] ) )
187
+ return;
188
+
189
+ wp_safe_redirect( admin_url( 'index.php?page=custom-login-about' ) ); exit;
190
+
191
+ }
192
+ }
193
+ new Custom_Login_Welcome();
custom-login.php CHANGED
@@ -1,272 +1,1002 @@
1
- <?php
2
- /**
3
- * Plugin Name: Custom Login lite
4
- * Plugin URI: http://austinpassy.com/wordpress-plugins/custom-login
5
- * Description: A simple way to customize your WordPress login screen! Use the built in, easy to use <a href="./options-general.php?page=custom-login">settings</a> page to do the work for you. So simple a neanderthal can do it! Now featuring a HTML &amp; CSS box for advanced users. Share you designs on <a href="http://flickr.com/groups/custom-login/">Flickr</a> or upgrade to the <a href="http://thefrosty.com/custom-login-pro/">PRO</a> version!
6
- * Version: 1.1.4
7
- * Author: Austin Passy
8
- * Author URI: http://austinpassy.com
9
- *
10
- * @copyright 2009 - 2013
11
- * @author Austin Passy
12
- * @link http://frostywebdesigns.com/
13
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
14
- *
15
- * This program is distributed in the hope that it will be useful,
16
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18
- *
19
- * @package CustomLogin
20
- */
21
-
22
- /* Set up the plugin. */
23
- add_action( 'plugins_loaded', 'custom_login_setup' );
24
-
25
- /**
26
- * Sets up the Custom Login plugin and loads files at the appropriate time.
27
- *
28
- * @since 0.8
29
- */
30
- function custom_login_setup() {
31
- /* Load translations. */
32
- load_plugin_textdomain( 'custom-login', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
33
-
34
- /* Set constant path to the Custom Login plugin directory. */
35
- define( 'CUSTOM_LOGIN', 'custom-login' );
36
- define( 'CUSTOM_LOGIN_SETTINGS', 'custom_login_settings' );
37
- define( 'CUSTOM_LOGIN_DIR', plugin_dir_path( __FILE__ ) );
38
- define( 'CUSTOM_LOGIN_ADMIN', CUSTOM_LOGIN_DIR . 'library/admin/' );
39
- define( 'CUSTOM_LOGIN_FILE', __FILE__ );
40
-
41
- /* Set constant path to the Custom Login plugin URL. */
42
- define( 'CUSTOM_LOGIN_URL', plugin_dir_url( __FILE__ ) );
43
- define( 'CUSTOM_LOGIN_CSS', CUSTOM_LOGIN_URL . 'library/css/' );
44
- define( 'CUSTOM_LOGIN_JS', CUSTOM_LOGIN_URL . 'library/js/' );
45
-
46
- if ( is_admin() ) {
47
- require_once( CUSTOM_LOGIN_ADMIN . 'admin.php' );
48
-
49
- if ( custom_login_get_setting( 'hide_dashboard' ) != true )
50
- require_once( CUSTOM_LOGIN_ADMIN . 'dashboard.php' );
51
-
52
- if ( custom_login_get_setting( 'disable_presstrends' ) != true )
53
- require_once( CUSTOM_LOGIN_ADMIN . 'presstrends.php' );
54
- }
55
-
56
- /* Add a settings page to the plugin menu */
57
- add_filter( 'plugin_action_links', 'custom_login_plugin_actions', 10, 2 );
58
-
59
- /* Filter in your URL */
60
- add_filter( 'login_headerurl', 'custom_login_url' );
61
- /* Filter in your description */
62
- add_filter( 'login_headertitle', 'custom_login_title' );
63
-
64
- /* Load the login head */
65
- add_action( 'login_head', 'custom_login_head', 1 );
66
- add_action( 'login_enqueue_scripts', 'custom_login_login_scripts' );
67
-
68
- add_action( 'login_footer', 'custom_login_custom_html' );
69
- add_action( 'login_footer', 'custom_login_footer_js' );
70
-
71
- do_action( 'custom_login_loaded' );
72
- }
73
-
74
- /**
75
- * Replace the defualt link to your URL
76
- *
77
- * @since 0.8
78
- */
79
- function custom_login_url() {
80
- return get_bloginfo( 'siteurl' );
81
- }
82
-
83
- /**
84
- * Replace the defualt title to your description
85
- *
86
- * @since 0.8
87
- */
88
- function custom_login_title() {
89
- return get_bloginfo( 'description' );
90
- }
91
-
92
- /**
93
- * Function for quickly grabbing settings for the plugin without having to call get_option()
94
- * every time we need a setting.
95
- *
96
- * @since 0.8
97
- * @update 1.1
98
- */
99
- function custom_login_get_setting( $option = '' ) {
100
- global $custom_login;
101
-
102
- if ( !$option )
103
- return false;
104
-
105
- /* Hopefully a fix to the PHP 5.4 issue */
106
- if ( !$custom_login ) {
107
- $custom_login = new stdClass;
108
- }
109
-
110
- if ( !isset( $custom_login->settings ) )
111
- $custom_login->settings = get_option( 'custom_login_settings' ); //Getting error in PHP 5.4 (http://wordpress.org/support/topic/custom-login-and-php-54?replies=2#post-3702829)
112
-
113
- if ( !is_array( $custom_login->settings ) || empty( $custom_login->settings[$option] ) )
114
- return false;
115
-
116
- return $custom_login->settings[$option];
117
- }
118
-
119
- /**
120
- * WordPress 3.x check
121
- *
122
- * @since 0.8
123
- */
124
- if ( !function_exists( 'is_version' ) ) {
125
- function is_version( $version = '3.0' ) {
126
- global $wp_version;
127
-
128
- if ( version_compare( $wp_version, $version, '<' ) ) {
129
- return false;
130
- }
131
- return true;
132
- }
133
- }
134
-
135
- /**
136
- * Add stylesheet to the login head
137
- *
138
- * @since 1.1.2
139
- */
140
- function custom_login_head() {
141
- }
142
-
143
- /**
144
- * Add stylesheet to the login head
145
- * For some reason wp_enqueue_script enqueue's but doesn't output
146
- * the scripts. So I have to *_print_scripts.
147
- *
148
- * @since 1.1.2
149
- */
150
- function custom_login_login_scripts() {
151
- /* Generator */
152
- echo '<meta name="generator" content="Custom Login lite" />' . "\n";
153
-
154
- /* Scripts */
155
- wp_register_script( 'gravatar', CUSTOM_LOGIN_JS . 'gravatar.js', array( 'jquery' ), '1.2', false );
156
-
157
- if ( ( custom_login_get_setting( 'custom_jquery' ) != '' || custom_login_get_setting( 'gravatar' ) != false ) && get_option( 'users_can_register' ) ) {
158
- wp_enqueue_script( array( 'jquery', 'gravatar' ) ); // Enqueue to the $wp_scripts engine (doesn't output).
159
- wp_print_scripts( array( 'jquery', 'gravatar' ) ); // Output the registered scripts.
160
- }
161
-
162
- /* Styles */
163
- wp_register_style( 'custom-login-defualt', CUSTOM_LOGIN_CSS . 'custom-login.css', false, '0.8', 'screen' );
164
-
165
- if ( custom_login_get_setting( 'custom' ) != false ) {
166
- require_once( trailingslashit( CUSTOM_LOGIN_DIR ) . 'library/css/custom-login.css.php' );
167
- } else {
168
- wp_enqueue_style( 'custom-login-defualt' );
169
- wp_print_styles( 'custom-login-defualt' );
170
- }
171
- }
172
-
173
- /**
174
- * Add html to the footer
175
- *
176
- * @since 0.4.6
177
- * @updated 1.1.2
178
- */
179
- function custom_login_footer_js() {
180
- global $custom_login;
181
-
182
- if ( false != custom_login_get_setting( 'gravatar' ) ) { ?>
183
-
184
- <script type='text/javascript'>
185
- //<![CDATA[
186
- jQuery(document).ready(
187
- function($) {
188
- <?php if ( get_option( 'users_can_register' ) ) { ?>
189
- var email = $('#user_email').size();
190
- if ( email > 0 ) {
191
- $('#user_email').parent().parent().css('position','relative');
192
- $('#user_email').parent().append('<span id="working"></span>');
193
- $('#user_email').parent().append('<img id="gravatar" style="display:none; position:relative; top:10px; width:37px" />');
194
- $('#user_email').css('width','80.4%').getGravatar({
195
- avatarSize: 48,
196
- start: function(){
197
- $('#working').fadeIn('fast');
198
- },
199
- stop: function(){
200
- $('#working').fadeOut('slow');
201
- },
202
- url: '/includes/get-gravatar.php',
203
- fallback: 'http://0.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536'
204
- });
205
-
206
- $('#working').hide();
207
- $('img#gravatar').delay(2000).fadeTo(400,1);
208
- }
209
- <?php } ?>
210
- }
211
- );
212
- //]]>
213
- </script>
214
- <?php }
215
-
216
- if ( '' != custom_login_get_setting( 'custom_jquery' ) ) { ?>
217
-
218
- <script type='text/javascript'>
219
- //<![CDATA[
220
- jQuery(document).ready(
221
- function($) {
222
- <?php $jquery = str_replace( '\n', '', custom_login_get_setting( 'custom_jquery' ) ); ?>
223
- <?php $jquery = wp_specialchars_decode( stripslashes( $jquery ), 1, 0, 1 ); ?>
224
- <?php $jquery = htmlspecialchars( $jquery, ENT_NOQUOTES ); ?>
225
- <?php echo $jquery; ?>
226
- }
227
- );
228
- //]]>
229
- </script>
230
- <?php }
231
- }
232
-
233
- /**
234
- * Add html to the login footer
235
- * @since 1.1.0
236
- */
237
- function custom_login_custom_html() {
238
- if ( '' != custom_login_get_setting( 'custom_html' ) )
239
- echo wp_specialchars_decode( stripslashes( custom_login_get_setting( 'custom_html' ) ), 1, 0, 1 );
240
- }
241
-
242
-
243
- /**
244
- * Browser prefixes
245
- *
246
- * @since 1.1 (1/8/13)
247
- */
248
- function custom_login_prefix_it( $input, $option ) {
249
- $prefixs = array( '-webkit-', '-moz-', '-ms-', '-o-', '' );
250
-
251
- echo "\n\t";
252
-
253
- foreach ( $prefixs as $prefix ) {
254
- echo trailingsemicolonit( $prefix . $input . ': ' . esc_attr( $option ) );
255
- }
256
- }
257
-
258
- /**
259
- * Add a semi colon
260
- *
261
- * Remove esc_attr since it's encoding single quotes in image urls with quotes.
262
- *
263
- * @since 1.1 (1/8/13)
264
- * @updated 1.1.1 (1/9/13)
265
- */
266
- function trailingsemicolonit( $input ) {
267
- $input = rtrim( $input, ';' );
268
-
269
- return $input . ";\n\t";
270
- }
271
-
272
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Plugin Name: Custom Login
5
+ * Plugin URI: https://extendd.com/plugin/custom-login
6
+ * Description: A simple way to customize your WordPress <code>wp-login.php</code> screen! Use the built in, easy to use <a href="./options-general.php?page=custom-login">settings</a> page to do the work for you. Share you designs on <a href="http://flickr.com/groups/custom-login/">Flickr</a> or get Custom Login extensions at <a href="https://extendd.com/plugins/tag/custom-login-extension">Extendd.com</a>.
7
+ * Version: 2.4.0
8
+ * Author: Austin Passy
9
+ * Author URI: http://austin.passy.co
10
+ * Text Domain: custom-login
11
+ *
12
+ * @copyright 2012 - 2014
13
+ * @author Austin Passy
14
+ * @link http://austin.passy.co/
15
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
16
+ *
17
+ * This program is distributed in the hope that it will be useful,
18
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20
+ *
21
+ * @class custom_login_pro
22
+ */
23
+
24
+ if ( !class_exists( 'Custom_Login' ) ) :
25
+ class Custom_Login {
26
+
27
+ /** Singleton *************************************************************/
28
+ private static $instance;
29
+
30
+ /**
31
+ * Plugin vars
32
+ * @return string
33
+ */
34
+ var $version = '2.4.0',
35
+ $domain,
36
+ $id;
37
+
38
+ /**
39
+ * Private settings
40
+ */
41
+ private $settings_api,
42
+ $remote_install,
43
+ $sections;
44
+
45
+ /**
46
+ * Options page
47
+ */
48
+ public $options_page;
49
+
50
+ /**
51
+ * Main Instance
52
+ *
53
+ * @staticvar array $instance
54
+ * @return The one true instance
55
+ */
56
+ public static function instance() {
57
+ if ( ! isset( self::$instance ) ) {
58
+ self::$instance = new self;
59
+ self::$instance->setup_constants();
60
+ self::$instance->plugin_textdomain();
61
+ self::$instance->required_functions();
62
+ self::$instance->init();
63
+ }
64
+ return self::$instance;
65
+ }
66
+
67
+ /**
68
+ * To infinity and beyond
69
+ */
70
+ function init() {
71
+
72
+ /* vars */
73
+ $this->domain = 'custom-login';
74
+ $this->id = 'custom_login';
75
+
76
+ /* Constants */
77
+ add_action( 'admin_init', array( $this, 'check_version' ), 1 );
78
+
79
+ /* Constants */
80
+ add_action( 'init', array( $this, 'setup_constants' ) );
81
+
82
+ /* Scripts */
83
+ add_action( 'login_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
84
+
85
+ /* Custom jQuery templates */
86
+ add_action( 'login_footer', array( $this, 'login_footer_jquery' ) );
87
+
88
+ /* Includes */
89
+ add_action( 'init', array( $this, 'required_classes' ) );
90
+ add_action( 'init', array( $this, 'required_functions' ) );
91
+
92
+ /* Shortcodes */
93
+ add_action( 'init', array( $this, 'add_shortcodes' ) );
94
+
95
+ /* Settings */
96
+ add_action( 'admin_init', array( $this, 'admin_init' ), 9 );
97
+ add_action( 'admin_menu', array( $this, 'admin_menu' ), 9 );
98
+
99
+ /* Clear transient cache button */
100
+ add_action( $this->id .
101
+ '_form_bottom_' . $this->id, array( $this, 'delete_transient_button_output' ) );
102
+
103
+ /* Delete transient action */
104
+ add_action( 'admin_action_' .
105
+ $this->id . '-delete_transient', array( $this, 'delete_custom_login_transient_cache' ) );
106
+
107
+ /* Notices */
108
+ add_action( 'admin_notices', array( $this, 'admin_messages' ) );
109
+
110
+ /* Add a settings page to the plugin menu */
111
+ add_filter( 'plugin_action_links', array( $this, 'plugin_action_links' ), 10, 2 );
112
+
113
+ /* Filter in your URL */
114
+ add_filter( 'login_headerurl', array( $this, 'login_url' ) );
115
+
116
+ /* Filter in your description */
117
+ add_filter( 'login_headertitle', array( $this, 'login_title' ) );
118
+
119
+ /* Custom HTML */
120
+ add_action( 'login_footer', array( $this, 'login_footer_html' ) );
121
+ }
122
+
123
+ /**
124
+ * WordPress version check
125
+ *
126
+ * @since 2.0.3
127
+ */
128
+ function check_version() {
129
+ global $wp_version;
130
+
131
+ if ( version_compare( $wp_version, '3.5', '<' ) ) {
132
+ add_action( 'admin_notices', array( $this, 'version_notification' ) );
133
+ if ( is_plugin_active( plugin_basename( __FILE__ ) ) ) deactivate_plugins( plugin_basename( __FILE__ ) );
134
+ }
135
+ }
136
+
137
+ /**
138
+ * Deactivation notice
139
+ *
140
+ */
141
+ function version_notification() {
142
+ global $wp_version;
143
+
144
+ $html = '<div class="error"><p>';
145
+ $html .= sprintf( __( 'Custom Login has been deactivated because it requires a WordPress version greater than 3.5. You are running <code>%s</code>', $this->domain ), $wp_version );
146
+ $html .= '</p></div>';
147
+
148
+ echo $html;
149
+ }
150
+
151
+ /**
152
+ * Setup plugin constants
153
+ *
154
+ * @since 2.0
155
+ * @access private
156
+ * @uses plugin_dir_path()
157
+ * @uses plugin_dir_url()
158
+ */
159
+ function setup_constants() {
160
+
161
+ // Plugin version
162
+ if ( ! defined( 'CUSTOM_LOGIN_VERSION' ) )
163
+ define( 'CUSTOM_LOGIN_VERSION', $this->version );
164
+
165
+ // Plugin settings
166
+ if ( ! defined( 'CUSTOM_LOGIN_SETTINGS' ) )
167
+ define( 'CUSTOM_LOGIN_SETTINGS', $this->id );
168
+
169
+ // Plugin Folder URL
170
+ if ( ! defined( 'CUSTOM_LOGIN_URL' ) )
171
+ define( 'CUSTOM_LOGIN_URL', plugin_dir_url( __FILE__ ) );
172
+
173
+ // Plugin Folder Path
174
+ if ( ! defined( 'CUSTOM_LOGIN_DIR' ) )
175
+ define( 'CUSTOM_LOGIN_DIR', plugin_dir_path( __FILE__ ) );
176
+
177
+ // Plugin Root File
178
+ if ( ! defined( 'CUSTOM_LOGIN_FILE' ) )
179
+ define( 'CUSTOM_LOGIN_FILE', __FILE__ );
180
+
181
+ // Plugin version
182
+ if ( ! defined( 'EXTENDD_API_URL' ) )
183
+ define( 'EXTENDD_API_URL', 'http://extendd.com' );
184
+ }
185
+
186
+ /**
187
+ * Load the plugin translations
188
+ *
189
+ */
190
+ function plugin_textdomain() {
191
+ load_plugin_textdomain( 'custom-login', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
192
+ }
193
+
194
+ /**
195
+ * Enqueue additional scripts.
196
+ *
197
+ * @since 2.0
198
+ * @updated 2.1
199
+ */
200
+ function enqueue_scripts() {
201
+ if ( !$this->is_active() )
202
+ return;
203
+
204
+ global $cl_css_atts;
205
+
206
+ $cl_css_atts = array(
207
+ 'version' => CUSTOM_LOGIN_VERSION,
208
+ );
209
+ $cl_css_atts = wp_parse_args( get_option( $this->id, array() ), $cl_css_atts );
210
+
211
+ ob_start();
212
+ echo "<style type=\"text/css\">\n";
213
+ $login_template = new Custom_Login_Templates;
214
+ $login_template->get_template_part( 'wp-login', 'style' );
215
+ echo "\n</style>";
216
+ echo ob_get_clean();
217
+
218
+ /* Custom jQuery */
219
+ $jquery = $this->get_option( 'custom_jquery', $this->id );
220
+ if ( !empty( $jquery ) ) {
221
+ wp_enqueue_script( array( 'jquery' ) );
222
+ }
223
+ }
224
+
225
+ /**
226
+ * Database access to the scripts and styles.
227
+ *
228
+ * @since 2.1
229
+ * @return string|void
230
+ */
231
+ function login_footer_jquery() {
232
+ $jquery = $this->get_option( 'custom_jquery', $this->id );
233
+ if ( !empty( $jquery ) ) :
234
+
235
+ global $cl_js_atts;
236
+
237
+ $cl_js_atts = array(
238
+ 'version' => CUSTOM_LOGIN_VERSION,
239
+ );
240
+ $cl_js_atts = wp_parse_args( get_option( $this->id, array() ), $cl_js_atts );
241
+
242
+ foreach( $cl_js_atts as $atts => $value ) {
243
+ if ( 'custom_jquery' !== $atts && 'version' !== $atts )
244
+ unset( $cl_js_atts[$atts] );
245
+ }
246
+
247
+ ob_start();
248
+ echo "<script type=\"text/javascript\">\n";
249
+ $login_template = new Custom_Login_Templates;
250
+ $login_template->get_template_part( 'wp-login', 'script' );
251
+ echo "\n</script>";
252
+ echo ob_get_clean();
253
+
254
+ endif; // jQUery
255
+ }
256
+
257
+ /**
258
+ * Includes required functions
259
+ *
260
+ */
261
+ function required_classes() {
262
+ require_once( trailingslashit( plugin_dir_path( __FILE__ ) ) . 'classes/class.settings-api.php' );
263
+ $this->settings_api = EXTENDD_PLUGIN_SETTINGS_API();
264
+
265
+ if ( is_admin() ) {
266
+ // Settings API
267
+ $this->settings_api->set_prefix( $this->id );
268
+ $this->settings_api->set_domain( $this->domain );
269
+ $this->settings_api->set_version( $this->version );
270
+
271
+ // Welcome API
272
+ require_once( trailingslashit( plugin_dir_path( __FILE__ ) ) . 'classes/welcome.php' );
273
+
274
+ // Extensions install API
275
+ if ( $this->class_exists_require( 'Extendd_Remote_Install_Client', 'edd-remote-install-client/EDD_Remote_Install_Client.php' ) ) {
276
+ $this->remote_install = new Extendd_Remote_Install_Client( EXTENDD_API_URL, 'settings_page_' . $this->domain,
277
+ array( 'skipplugincheck' => true, 'url' => home_url() )
278
+ );
279
+ add_action( 'eddri-install-complete-settings_page_' . $this->domain, array( $this, 'custom_login_extension_install_complete' ), 10, 1 );
280
+ }
281
+ }
282
+ require_once( trailingslashit( plugin_dir_path( __FILE__ ) ) . 'classes/templates.php' );
283
+ require_once( trailingslashit( plugin_dir_path( __FILE__ ) ) . 'classes/scripts-styles.php' );
284
+ }
285
+
286
+ /**
287
+ * Includes required functions
288
+ *
289
+ */
290
+ function required_functions() {
291
+ require_once( trailingslashit( plugin_dir_path( __FILE__ ) ) . 'functions/upgrades/upgrade-functions.php' );
292
+ require_once( trailingslashit( plugin_dir_path( __FILE__ ) ) . 'functions/upgrades/upgrades.php' );
293
+ }
294
+
295
+ /**
296
+ * Helper function to require classes if they do not exist.
297
+ *
298
+ */
299
+ function class_exists_require( $class_name, $dir_path = null ) {
300
+ if ( !class_exists( $class_name ) ) {
301
+ $dir_path = trailingslashit( plugin_dir_path( __FILE__ ) ) . 'classes/' . $dir_path;
302
+
303
+ if ( file_exists( $dir_path ) ) {
304
+ require_once( $dir_path );
305
+ return true;
306
+ }
307
+ return false;
308
+ }
309
+ return false;
310
+ }
311
+
312
+ /**
313
+ * Add shortcodes
314
+ *
315
+ */
316
+ function add_shortcodes() {
317
+ #add_shortcode( 'custom-login', array( $this, 'login_shortcode' ) );
318
+ }
319
+
320
+ /**
321
+ * Login shortcode
322
+ *
323
+ */
324
+ function login_shortcode( $atts ) {
325
+ return '';
326
+ }
327
+
328
+ /**
329
+ * Get the value of a settings field
330
+ *
331
+ * $this->get_option( 'field_name', 'section_name', 'default value' );
332
+ *
333
+ * @param string $option settings field name
334
+ * @param string $section the section name this field belongs to
335
+ * @param string $default default text if it's not found
336
+ * @return mixed
337
+ */
338
+ public function get_option( $option, $section, $default = '' ) {
339
+
340
+ $options = get_option( $section );
341
+
342
+ if ( isset( $options[$option] ) ) {
343
+ return $options[$option];
344
+ }
345
+
346
+ return $default;
347
+ }
348
+
349
+ /**
350
+ * Registers settings section and fields
351
+ */
352
+ function admin_init() {
353
+
354
+ $this->sections = array(
355
+ array(
356
+ 'id' => $this->id,
357
+ 'title' => __( 'General Settings', $this->domain )
358
+ ),
359
+ );
360
+
361
+ $fields = array(
362
+ $this->id => array(
363
+ array(
364
+ 'name' => 'active',
365
+ 'label' => __( 'Activate', $this->domain ),
366
+ 'desc' => __( 'Toggle this plugin on &amp; off.', $this->domain ),
367
+ 'type' => 'checkbox'
368
+ ),
369
+ /** BREAK **/
370
+ array(
371
+ 'name' => 'break_1',
372
+ 'label' => __( '<h4><abbr title="Hyper Text Markup Language">HTML</abbr></h4>', $this->domain ),
373
+ 'desc' => '',
374
+ 'type' => 'html',
375
+ ),
376
+ /** BREAK **/
377
+ array(
378
+ 'name' => 'html_background_color',
379
+ 'label' => __( 'HTML Background Color', $this->domain ),
380
+ 'desc' => '',
381
+ 'type' => 'colorpicker',
382
+ 'default' => '',
383
+ ),
384
+ array(
385
+ 'name' => 'html_background_url',
386
+ 'label' => __( 'HTML Background Image', $this->domain ),
387
+ 'desc' => __( 'Upload an image or a repeating pattern (optional).', $this->domain ),
388
+ 'type' => 'file',
389
+ 'default' => '',
390
+ 'page_id' => '0',
391
+ 'sanitize_callback' => 'esc_url',
392
+ ),
393
+ array(
394
+ 'name' => 'html_background_position',
395
+ 'label' => __( 'HTML Background Position', $this->domain ),
396
+ 'desc' => sprintf( __( '<a href="%s" target="_blank">html background position</a>.', $this->domain ), 'http://www.w3schools.com/cssref/pr_background-position.asp' ),
397
+ 'type' => 'select',
398
+ 'options' => array(
399
+ 'left top' => 'left top',
400
+ 'left center' => 'left center',
401
+ 'left bottom' => 'left bottom',
402
+ 'right top' => 'right top',
403
+ 'right center' => 'right center',
404
+ 'right bottom' => 'right bottom',
405
+ 'center top' => 'center top',
406
+ 'center center' => 'center center',
407
+ 'center bottom' => 'center bottom',
408
+ ),
409
+ ),
410
+ array(
411
+ 'name' => 'html_background_repeat',
412
+ 'label' => __( 'HTML Background repeat', $this->domain ),
413
+ 'desc' => '',
414
+ 'type' => 'select',
415
+ 'options' => array(
416
+ 'no-repeat' => 'no-repeat',
417
+ 'repeat' => 'repeat',
418
+ 'repeat-x' => 'repeat-x',
419
+ 'repeat-y' => 'repeat-y',
420
+ )
421
+ ),
422
+ array(
423
+ 'name' => 'html_background_size',
424
+ 'label' => __( 'HTML Background size', $this->domain ),
425
+ 'desc' => '',
426
+ 'type' => 'select',
427
+ 'options' => array(
428
+ 'none' => 'none',
429
+ 'cover' => 'cover',
430
+ 'contain' => 'contain',
431
+ 'flex' => 'flex',
432
+ )
433
+ ),
434
+ /** BREAK **/
435
+ array(
436
+ 'name' => 'break_2',
437
+ 'label' => __( '<h4>Logo</h4>', $this->domain ),
438
+ 'desc' => '',
439
+ 'type' => 'html',
440
+ ),
441
+ /** BREAK **/
442
+ array(
443
+ 'name' => 'hide_wp_logo',
444
+ 'label' => __( 'Hide the WP logo', $this->domain ),
445
+ 'desc' => __( 'Works when there is no logo present, otherwise the WP logo is replaced by your logo.', $this->domain ),
446
+ 'type' => 'checkbox'
447
+ ),
448
+ array(
449
+ 'name' => 'logo_background_url',
450
+ 'label' => __( 'Logo', $this->domain ),
451
+ 'desc' => __( 'Replace the WordPress logo (optional).', $this->domain ),
452
+ 'type' => 'file',
453
+ 'default' => '',
454
+ 'page_id' => '0',
455
+ 'sanitize_callback' => 'esc_url',
456
+ ),
457
+ array(
458
+ 'name' => 'logo_background_size_width',
459
+ 'label' => __( 'Logo Image width', $this->domain ),
460
+ 'desc' => __( 'Enter your image size in "pixels" without the "px"', $this->domain ),
461
+ 'type' => 'text',
462
+ 'size' => 'small',
463
+ 'default' => '',
464
+ 'sanitize_callback' => 'absint',
465
+ ),
466
+ array(
467
+ 'name' => 'logo_background_size_height',
468
+ 'label' => __( 'Logo Image height', $this->domain ),
469
+ 'desc' => __( 'Enter your image size in "pixels" without the "px"', $this->domain ),
470
+ 'type' => 'text',
471
+ 'size' => 'small',
472
+ 'default' => '',
473
+ 'sanitize_callback' => 'absint',
474
+ ),
475
+ array(
476
+ 'name' => 'logo_background_position',
477
+ 'label' => __( 'Logo Background Position', $this->domain ),
478
+ 'desc' => sprintf( __( '<a href="%s" target="_blank">html background position</a>.', $this->domain ), 'http://www.w3schools.com/cssref/pr_background-position.asp' ),
479
+ 'type' => 'select',
480
+ 'options' => array(
481
+ 'left top' => 'left top',
482
+ 'left center' => 'left center',
483
+ 'left bottom' => 'left bottom',
484
+ 'right top' => 'right top',
485
+ 'right center' => 'right center',
486
+ 'right bottom' => 'right bottom',
487
+ 'center top' => 'center top',
488
+ 'center center' => 'center center',
489
+ 'center bottom' => 'center bottom',
490
+ ),
491
+ ),
492
+ array(
493
+ 'name' => 'logo_background_repeat',
494
+ 'label' => __( 'Logo Background repeat', $this->domain ),
495
+ 'desc' => '',
496
+ 'type' => 'select',
497
+ 'options' => array(
498
+ 'no-repeat' => 'no-repeat',
499
+ 'repeat' => 'repeat',
500
+ 'repeat-x' => 'repeat-x',
501
+ 'repeat-y' => 'repeat-y',
502
+ )
503
+ ),
504
+ array(
505
+ 'name' => 'logo_background_size',
506
+ 'label' => __( 'Logo Background size', $this->domain ),
507
+ 'desc' => '',
508
+ 'type' => 'select',
509
+ 'options' => array(
510
+ 'none' => 'none',
511
+ 'cover' => 'cover',
512
+ 'contain' => 'contain',
513
+ 'flex' => 'flex',
514
+ 'custom' => 'custom',
515
+ )
516
+ ),
517
+ array(
518
+ 'name' => 'logo_background_size_custom',
519
+ 'label' => __( 'Logo Background size (custom)', $this->domain ),
520
+ 'desc' => sprintf( __( 'Use size values in format "INT unit INT unit". Example: 10px 15px or 55px 55px etc. %sNote: Logo Background size MUST be set to none.%s', $this->domain ), '<strong>', '</strong>' ),
521
+ 'type' => 'text',
522
+ 'size' => 'medium',
523
+ 'default' => '',
524
+ 'sanitize_callback' => '',
525
+ ),
526
+ /** BREAK **/
527
+ array(
528
+ 'name' => 'break_3',
529
+ 'label' => __( '<h4>Login form</h4>', $this->domain ),
530
+ 'desc' => '',
531
+ 'type' => 'html',
532
+ ),
533
+ /** BREAK **/
534
+ array(
535
+ 'name' => 'login_form_background_color',
536
+ 'label' => __( 'Login Form Background Color', $this->domain ),
537
+ 'desc' => '',
538
+ 'type' => 'colorpicker',
539
+ 'default' => ''
540
+ ),
541
+ array(
542
+ 'name' => 'login_form_background_url',
543
+ 'label' => __( 'Login Form Background URL', $this->domain ),
544
+ 'desc' => __( 'Add an image to the form (optional).', $this->domain ),
545
+ 'type' => 'file',
546
+ 'default' => '',
547
+ 'page_id' => '0',
548
+ 'sanitize_callback' => 'esc_url',
549
+ ),
550
+ array(
551
+ 'name' => 'login_form_background_position',
552
+ 'label' => __( 'Login Form Background Position', $this->domain ),
553
+ 'desc' => sprintf( __( '<a href="%s" target="_blank">html background position</a>.', $this->domain ), 'http://www.w3schools.com/cssref/pr_background-position.asp' ),
554
+ 'type' => 'select',
555
+ 'options' => array(
556
+ 'left top' => 'left top',
557
+ 'left center' => 'left center',
558
+ 'left bottom' => 'left bottom',
559
+ 'right top' => 'right top',
560
+ 'right center' => 'right center',
561
+ 'right bottom' => 'right bottom',
562
+ 'center top' => 'center top',
563
+ 'center center' => 'center center',
564
+ 'center bottom' => 'center bottom',
565
+ ),
566
+ ),
567
+ array(
568
+ 'name' => 'login_form_background_repeat',
569
+ 'label' => __( 'Login Form Background repeat', $this->domain ),
570
+ 'desc' => '',
571
+ 'type' => 'select',
572
+ 'options' => array(
573
+ 'no-repeat' => 'no-repeat',
574
+ 'repeat' => 'repeat',
575
+ 'repeat-x' => 'repeat-x',
576
+ 'repeat-y' => 'repeat-y',
577
+ )
578
+ ),
579
+ array(
580
+ 'name' => 'login_form_background_size',
581
+ 'label' => __( 'Login Form Background size', $this->domain ),
582
+ 'desc' => '',
583
+ 'type' => 'select',
584
+ 'options' => array(
585
+ 'none' => 'none',
586
+ 'cover' => 'cover',
587
+ 'contain' => 'contain',
588
+ 'flex' => 'flex',
589
+ )
590
+ ),
591
+ array(
592
+ 'name' => 'login_form_border_radius',
593
+ 'label' => __( 'Login Form Border Radius', $this->domain ),
594
+ 'desc' => '',
595
+ 'type' => 'text',
596
+ 'size' => 'small',
597
+ 'default' => '',
598
+ 'sanitize_callback' => 'absint',
599
+ ),
600
+ array(
601
+ 'name' => 'login_form_border_size',
602
+ 'label' => __( 'Login Form Border Size', $this->domain ),
603
+ 'desc' => '',
604
+ 'type' => 'text',
605
+ 'size' => 'small',
606
+ 'default' => '',
607
+ 'sanitize_callback' => 'absint',
608
+ ),
609
+ array(
610
+ 'name' => 'login_form_border_color',
611
+ 'label' => __( 'Login Form Border Color', $this->domain ),
612
+ 'desc' => '',
613
+ 'type' => 'colorpicker',
614
+ 'default' => ''
615
+ ),
616
+ array(
617
+ 'name' => 'login_form_box_shadow',
618
+ 'label' => __( 'Login Form Box Shadow', $this->domain ),
619
+ 'desc' => sprintf( __( 'Use <a href="%s" target="_blank">box shadow</a> syntax w/ out color. <code>inset h-shadow v-shadow blur spread</code>', $this->domain ), 'http://www.w3schools.com/cssref/css3_pr_box-shadow.asp' ),
620
+ 'type' => 'text',
621
+ 'size' => 'medium',
622
+ 'default' => '5px 5px 10px'
623
+ ),
624
+ array(
625
+ 'name' => 'login_form_box_shadow_color',
626
+ 'label' => __( 'Login Form Box Shadow Color', $this->domain ),
627
+ 'desc' => '',
628
+ 'type' => 'colorpicker',
629
+ 'default' => ''
630
+ ),
631
+ /** BREAK **/
632
+ array(
633
+ 'name' => 'break_4',
634
+ 'label' => __( '<h4>Misc.</h4>', $this->domain ),
635
+ 'desc' => '',
636
+ 'type' => 'html',
637
+ ),
638
+ /** BREAK **/
639
+ array(
640
+ 'name' => 'label_color',
641
+ 'label' => __( 'Login Form Label Color', $this->domain ),
642
+ 'desc' => '',
643
+ 'type' => 'colorpicker',
644
+ 'default' => ''
645
+ ),
646
+ /** BREAK **/
647
+ array(
648
+ 'name' => 'break_5',
649
+ 'label' => __( '<h4>Below form anchor</h4>', $this->domain ),
650
+ 'desc' => '',
651
+ 'type' => 'html',
652
+ ),
653
+ /** BREAK **/
654
+ array(
655
+ 'name' => 'nav_color',
656
+ 'label' => __( 'Below form nav color', $this->domain ),
657
+ 'desc' => '',
658
+ 'type' => 'colorpicker',
659
+ 'default' => '',
660
+ ),
661
+ array(
662
+ 'name' => 'nav_text_shadow_color',
663
+ 'label' => __( 'Below form nav text-shadow color', $this->domain ),
664
+ 'desc' => '',
665
+ 'type' => 'colorpicker',
666
+ 'default' => '',
667
+ ),
668
+ array(
669
+ 'name' => 'nav_hover_color',
670
+ 'label' => __( 'Below form nav color hover', $this->domain ),
671
+ 'desc' => '',
672
+ 'type' => 'colorpicker',
673
+ 'default' => '',
674
+ ),
675
+ array(
676
+ 'name' => 'nav_text_shadow_hover_color',
677
+ 'label' => __( 'Below form nav text-shadow hover', $this->domain ),
678
+ 'desc' => '',
679
+ 'type' => 'colorpicker',
680
+ 'default' => '',
681
+ ),
682
+ /** BREAK **/
683
+ array(
684
+ 'name' => 'break_6',
685
+ 'label' => __( '<h4>Custom HTML/CSS &amp; jQuery</h4>', $this->domain ),
686
+ 'desc' => '',
687
+ 'type' => 'html',
688
+ ),
689
+ /** BREAK **/
690
+ array(
691
+ 'name' => 'custom_css',
692
+ 'label' => __( 'Custom CSS', $this->domain ),
693
+ 'desc' => sprintf( __( 'Use the "Tab" key to format your CSS.<br><strong>New:</strong> %sAllowed variables%s. %s', $this->domain ), '<a href="#" data-toggle="custom-css-variables">', '</a>', '<div id="custom-css-variables" style="display:none"><ul>
694
+ <li>%%BSLASH%% = "\" (backslash)</li>
695
+ <li><a href="http://wordpress.org/support/topic/quotes-in-custom-css-gets-replaced-with-useless-quote?replies=4">Request others</a></li>
696
+ </ul></div>' ),
697
+ 'type' => 'textarea',
698
+ 'sanitize_callback' => 'wp_filter_nohtml_kses',
699
+ ),
700
+ array(
701
+ 'name' => 'custom_html',
702
+ 'label' => __( 'Custom HTML', $this->domain ),
703
+ 'desc' => '',
704
+ 'type' => 'textarea',
705
+ 'sanitize_callback' => 'wp_kses_post', //Allow HTML
706
+ ),
707
+ array(
708
+ 'name' => 'custom_jquery',
709
+ 'label' => __( 'Custom jQuery', $this->domain ),
710
+ 'desc' => '',
711
+ 'type' => 'textarea',
712
+ 'sanitize_callback' => 'wp_specialchars_decode',
713
+ ),
714
+ ),
715
+ );
716
+
717
+ //set sections and fields
718
+ $this->settings_api->set_sections( $this->sections );
719
+ $this->settings_api->set_fields( $fields );
720
+
721
+ //initialize them
722
+ $this->settings_api->admin_init();
723
+
724
+ add_action( $this->id . '_settings_sidebars', array( $this, 'sidebar' ), 1 );
725
+ add_action( $this->id . '_settings_sidebars', array( $this, 'extensions' ), 12 );
726
+
727
+ return $this;
728
+ // wp_die( "Bork! <br><pre>" . print_r( $this->settings_api, true ) . "</pre>" );
729
+ }
730
+
731
+ /**
732
+ * Register the plugin page
733
+ */
734
+ function admin_menu() {
735
+ $this->options_page = add_options_page( __( 'Custom Login Settings', $this->domain ), __( 'Custom Login', $this->domain ), 'manage_options', $this->domain, array( $this, 'plugin_page' ) );
736
+
737
+ add_action( 'admin_footer-' . $this->options_page, array( $this->settings_api, 'inline_jquery' ) );
738
+ }
739
+
740
+ /**
741
+ * Delete the transient
742
+ *
743
+ */
744
+ function delete_transient_button_output() {
745
+ $button = '<div style="padding-left: 10px">';
746
+ $button .= wpautop( $this->delete_transient_button_link() );
747
+ $button .= '<span class="description">' . __( 'If your stylesheet isn\'t updating click update above to delete the transient cache.', $this->domain ) . '</span>';
748
+ $button .= '</div>';
749
+
750
+ echo $button;
751
+ }
752
+
753
+ /**
754
+ * Delete button link output
755
+ *
756
+ * @return string
757
+ */
758
+ function delete_transient_button_link( $class = 'button' ) {
759
+ return sprintf( '<a href="%s" title="%s" class="%s">%s</a>',
760
+ esc_url( wp_nonce_url( add_query_arg( array( 'action' => $this->id . '-delete_transient' ), admin_url() ), $this->id . '-delete_transient' ) ),
761
+ esc_attr__( 'Clear the transient cache', $this->domain ),
762
+ sanitize_html_class( $class ),
763
+ __( 'Clear stylesheet cache', $this->domain )
764
+ );
765
+ }
766
+
767
+ /**
768
+ * Check for post activation on edit.php, when proper action
769
+ * is called set the post ID and write the content (CSS) to file.
770
+ *
771
+ * @return array()
772
+ */
773
+ function delete_custom_login_transient_cache() {
774
+
775
+ if ( !( isset( $_GET[$this->id . '-delete_transient'] ) || ( isset( $_REQUEST['action'] ) && $this->id . '-delete_transient' == $_REQUEST['action'] ) ) )
776
+ return;
777
+
778
+ check_admin_referer( $this->id . '-delete_transient' );
779
+
780
+ delete_transient( $this->id . '_style' );
781
+ delete_transient( $this->id . '_script' );
782
+
783
+ /* Redirect */
784
+ wp_redirect( admin_url( sprintf( 'options-general.php?page=%s&settings-updated=true&message=1', $this->domain ) ) );
785
+ exit;
786
+ }
787
+
788
+ /**
789
+ * Show a message when prompted
790
+ *
791
+ * @return string|void
792
+ */
793
+ function admin_messages() {
794
+ global $pagenow;
795
+
796
+ if ( ( isset( $_GET['page'] ) && isset( $_GET['message'] ) ) && $pagenow == 'options-general.php' && $this->domain == $_GET['page'] ) {
797
+
798
+ $html = '<div id="setting-error-transitent_deleted" class="updated"><p>';
799
+
800
+ switch ( $_GET['message'] ) {
801
+ case 1 :
802
+ $html .= __( 'The cache has been deleted.', $this->domain );
803
+ break;
804
+
805
+ case 2 :
806
+ $html .= '';
807
+ break;
808
+ }
809
+
810
+ $html .= '</p></div>';
811
+
812
+ echo $html;
813
+ }
814
+ }
815
+
816
+ /**
817
+ * Plugin Action
818
+ */
819
+ function plugin_action_links( $links, $file ) {
820
+ if ( plugin_basename( __FILE__ ) === $file ) {
821
+ $settings_link = '<a href="' . admin_url( 'options-general.php?page=custom-login' ) . '">' . __( 'Settings', $this->domain ) . '</a>';
822
+ array_unshift( $links, $settings_link ); // before other links
823
+ }
824
+ return $links;
825
+ }
826
+
827
+ /**
828
+ * Display the plugin settings options page
829
+ */
830
+ function plugin_page() {
831
+ echo '<div class="wrap">';
832
+
833
+ $this->settings_api->show_navigation();
834
+ $this->settings_api->show_forms();
835
+
836
+ echo '</div>';
837
+
838
+ if ( defined( 'WP_LOCAL_DEV' ) && WP_LOCAL_DEV && WP_DEBUG ) {
839
+ /**
840
+ foreach( apply_filters( $this->id . '_add_settings_sections', $this->sections ) as $section )
841
+ echo '<pre data-id="'.$section['id'].'">' . print_r( get_option( $section['id'] ), true ) . '</pre>';
842
+ echo '<pre data-id="custom_login_settings">' . print_r( get_option( 'custom_login_settings' ), true ) . '</pre>';
843
+
844
+ echo '<pre data-id="' . $this->id . '_ignore_announcement">' . print_r( get_user_meta( get_current_user_id(), $this->id . '_ignore_announcement', true ), true ) . '</pre>';
845
+ echo '<pre data-id="' . $this->id . '_announcement_message">' . print_r( get_option( $this->id . '_announcement_message' ), true ) . '</pre>';
846
+ // */
847
+ }
848
+
849
+ }
850
+
851
+ /**
852
+ * Sidebar info about this plugin
853
+ *
854
+ * @since 2.0
855
+ * @return string
856
+ */
857
+ function sidebar( $args ) {
858
+ $content = '<ul class="social">';
859
+ $content .= '<li><span class="genericon genericon-user"></span>&nbsp;<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=X4JPT57AWMTYW">' . __( 'Support this plugin and buy me a beer', $this->domain ) . '</a></li>';
860
+ $content .= '<li><span class="genericon genericon-star"></span>&nbsp;<a href="https://wordpress.org/extend/plugins/custom-login/">' . __( 'Rate this plugin on WordPress.org', $this->domain ) . '</a></li>';
861
+ $content .= '<li><span class="genericon genericon-share"></span>&nbsp;<a href="http://www.flickr.com/groups/custom-login/">' . __( 'Share your designs on <strong style="color:#0066DC;">Flick</strong><strong style="color:#ff0084;">r</strong>', $this->domain ) . '</a></li>';
862
+ $content .= '<li><span class="genericon genericon-wordpress"></span>&nbsp;<a href="https://wordpress.org/support/plugin/custom-login">' . __( 'Get support on WordPress.org', $this->domain ) . '</a></li>';
863
+ $content .= '<li><span class="genericon genericon-github"></span>&nbsp;<a href="https://github.com/thefrosty/custom-login">' . __( 'Contribute development on GitHub', $this->domain ) . '</a></li>';
864
+ $content .= '<li><span class="genericon genericon-link"></span>&nbsp;<a href="https://extendd.com/plugins/tag/custom-login-extension/">' . __( 'Get Custom Login Extensions', $this->domain ) . '</a></li>';
865
+
866
+ if ( defined( 'WP_LOCAL_DEV' ) && WP_LOCAL_DEV ) {
867
+ $content .= '<li><span class="genericon genericon-warning"></span>&nbsp;' . $this->get_queries( true ) . '</li>';
868
+ }
869
+
870
+ $content .= '<li><span class="genericon genericon-warning"></span>&nbsp;' . $this->delete_transient_button_link( '' ) . '</li>';
871
+
872
+ $content .= '</ul>';
873
+ $this->settings_api->postbox( $this->id . '_sidebar', sprintf( __( '<a href="%s">%s</a> | <code>version %s</code>', $this->domain ), 'https://extendd.com/plugin/custom-login', ucwords( str_replace( '-', ' ', $this->domain ) ), $this->version ), $content, false );
874
+ }
875
+
876
+ /**
877
+ * Sidebar info to remote install extensions
878
+ *
879
+ * @since 2.2
880
+ * @return string
881
+ */
882
+ function extensions( $args ) {
883
+ $content = wpautop( __( '<a href="#" data-toggle="extendd-license">Please read!</a> | <a href="#" data-toggle="extendd-license-help">Help</a>', $this->domain ) );
884
+
885
+ $content .= wpautop( sprintf( __( '<span id="extendd-license" style="display:none">Most of these extensions require a license key which can be purchased on <a href="%1$s" target="_blank">%2$s</a>. You\'ll have to have the key ready to install the extension.</span>', $this->domain ), 'https://extendd.com/plugins/tag/custom-login-extension/', 'Extendd.com' ) );
886
+
887
+ $content .= wpautop( __( '<span id="extendd-license-help" style="display:none">Click "install" to auto-install the extension on your site (which will also auto-activate it).<br>Free extensions will auto-install, while paid extensions will need a valid license key. Prices subject to change. Clicking "Purchase License" will show a quick link to purchase the extension (license) directly through PayPal. Choose which license you\'d like and you\'ll receive an email with your license key.</span>', $this->domain ) );
888
+
889
+ $transient = $this->id . '_extensions';
890
+ $old_html = get_option( $transient . '_message' );
891
+
892
+ $extensions = $this->settings_api->wp_remote_get_set_transient( 'https://raw.github.com/thefrosty/custom-login/master/extensions.json', $transient, 'html' );
893
+ if ( false === $extensions ) {
894
+ // FIND THIS CODE in wp.dev (mu-plugins)
895
+ $content .= '<div class="eddri-addon"> <div class="eddri-addon-container"> <div class="eddri-img-wrap"> <a href="http://extendd.com/plugin/custom-login-stealth-login/?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=eddri" target="_blank"><img class="eddri-thumbnail" src="https://i.imgur.com/mhuymPG.jpg"></a> <p>Protect your wp-login.php page from brute force attacks.</p> </div> <h3>Stealth Login</h3> <span class="eddri-status">Not Installed</span> <a class="button" data-edd-install="Custom Login Stealth Login">Install</a> <a class="button show-if-not-purchased" data-toggle="purchase-links-1" style="display:none">Purchase License</a> <div id="purchase-links-1" style="display:none"> <ul> <li><a href="http://extendd.com/checkout?edd_action=straight_to_gateway&download_id=7819&edd_options[price_id]=0">Single site license ($25)</a></li> <li><a href="http://extendd.com/checkout?edd_action=straight_to_gateway&download_id=7819&edd_options[price_id]=1">Up to 5 site licenses ($70)</a></li> <li><a href="http://extendd.com/checkout?edd_action=straight_to_gateway&download_id=7819&edd_options[price_id]=2">Unlimited site licenses ($100)</a></li> </ul> </div> </div> </div><div class="eddri-addon"> <div class="eddri-addon-container"> <div class="eddri-img-wrap"> <a href="http://extendd.com/plugin/custom-login-page-template/?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=eddri" target="_blank"><img class="eddri-thumbnail" src="https://i.imgur.com/A0rzS9q.jpg"></a> <p>Add a login form to any WordPress page.</p> </div> <h3>Page Template</h3> <span class="eddri-status">Not Installed</span> <a class="button" data-edd-install="Custom Login Page Template">Install</a> <a class="button show-if-not-purchased" data-toggle="purchase-links-2" style="display:none">Purchase License</a> <div id="purchase-links-2" style="display:none"> <ul> <li><a href="http://extendd.com/checkout?edd_action=straight_to_gateway&download_id=13528">One price! ($35)</a></li> </ul> </div> </div> </div><div class="eddri-addon"> <div class="eddri-addon-container"> <div class="eddri-img-wrap"> <a href="http://extendd.com/plugin/wordpress-login-redirects/?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=eddri" target="_blank"><img class="eddri-thumbnail" src="https://i.imgur.com/aNGoyAa.jpg"></a> <p>Manage redirects after logging in.</p> </div> <h3>Login Redirects</h3> <span class="eddri-status">Not Installed</span> <a class="button" data-edd-install="WordPress Login Redirects">Install</a> <a class="button show-if-not-purchased" data-toggle="purchase-links-3" style="display:none">Purchase License</a> <div id="purchase-links-3" style="display:none"> <ul> <li><a href="http://extendd.com/checkout?edd_action=straight_to_gateway&download_id=14333&edd_options[price_id]=0">Single site license ($30)</a></li> <li><a href="http://extendd.com/checkout?edd_action=straight_to_gateway&download_id=14333&edd_options[price_id]=1">Up to 5 site licenses ($70)</a></li> <li><a href="http://extendd.com/checkout?edd_action=straight_to_gateway&download_id=14333&edd_options[price_id]=2">Unlimited site licenses ($150)</a></li> </ul> </div> </div> </div>';
896
+ }
897
+ else {
898
+ $content .= $extensions->html;
899
+
900
+ if ( trim( $old_html ) !== trim( $extensions->html ) && !empty( $old_html ) ) {
901
+ delete_transient( $transient );
902
+ delete_option( $transient . '_message' );
903
+ }
904
+ }
905
+
906
+ $this->settings_api->postbox( $this->id . '_extensions', __( 'Custom Login Extensions', $this->domain ), $content, false );
907
+ }
908
+
909
+ /**
910
+ * Is plugin active
911
+ *
912
+ */
913
+ function is_active() {
914
+ $active = $this->get_option( 'active', $this->id );
915
+ if ( isset( $active ) && 'on' === $active )
916
+ return true;
917
+
918
+ return false;
919
+ }
920
+
921
+ /**
922
+ * Replace the default link to your URL
923
+ *
924
+ */
925
+ function login_url() {
926
+ if ( !is_multisite() ) return home_url( '/' );
927
+ else return network_home_url( '/' );
928
+ }
929
+
930
+ /**
931
+ * Replace the default title to your description
932
+ *
933
+ */
934
+ function login_title() {
935
+ return get_bloginfo( 'description' );
936
+ }
937
+
938
+ /**
939
+ * If there is custom HTML set in the settings echo it to the
940
+ * `login_footer` hook in wp-login.php.
941
+ *
942
+ */
943
+ function login_footer_html() {
944
+ $custom_html = $this->get_option( 'custom_html', $this->id );
945
+ $html = '';
946
+
947
+ if ( !empty( $custom_html ) )
948
+ $html .= $custom_html;
949
+
950
+ $html .= defined( 'WP_DEBUG' ) && WP_DEBUG ? $this->get_queries() : '';
951
+ $html .= "\n";
952
+
953
+ echo $html;
954
+ }
955
+
956
+ /**
957
+ * Helper function to get total numer of queries and execution time
958
+ *
959
+ */
960
+ function get_queries( $display = false ) {
961
+ return sprintf( ( $display ? '' : '<div style="display:none">' ) . esc_attr__( '%s queries in %s seconds.', $this->domain ) . ( $display ? '' : '</div>' ), get_num_queries(), timer_stop() );
962
+ }
963
+
964
+ /**
965
+ * Activate the license key for the Extendd Settings API.
966
+ *
967
+ * Extendd settings format: 'extendd_' . 'plugin_folder_name'
968
+ */
969
+ function custom_login_extension_install_complete( $args ) {
970
+ $plugin = 'extendd_' . str_replace( '-', '_', $args['slug'] );
971
+ $option = get_option( $plugin, array() );
972
+
973
+ if ( empty( $option ) || empty( $option['license_key'] ) ) {
974
+ $option['license_key'] = $args['license'];
975
+ $option['license_active'] = $args['license_active'];
976
+ // Update the settings
977
+ update_option( $plugin, $option );
978
+ }
979
+ }
980
+
981
+ }
982
+ endif;
983
+
984
+ /**
985
+ * The main function responsible for returning the one true
986
+ * Instance to functions everywhere.
987
+ *
988
+ * Use this function like you would a global variable, except without needing
989
+ * to declare the global.
990
+ *
991
+ * Example: <?php $custom_login = CUSTOMLOGIN(); ?>
992
+ *
993
+ * @return The one true Instance
994
+ */
995
+ if ( !function_exists( 'CUSTOMLOGIN' ) ) {
996
+ function CUSTOMLOGIN() {
997
+ return Custom_Login::instance();
998
+ }
999
+ }
1000
+
1001
+ // Out of the frying pan, and into the fire.
1002
+ CUSTOMLOGIN();
extensions.json ADDED
@@ -0,0 +1 @@
 
1
+ {"version":"2.3.9 10\/27\/14","message":"Download the <a href=\"https:\/\/extendd.com\/plugin\/custom-login-bundle\/\" target=\"_blank\">Custom Login Bundle<\/a> and save over $200!","html":"<div class=\"eddri-addon\"> <div class=\"eddri-addon-container\"> <div class=\"eddri-img-wrap\"> <a href=\"http:\/\/extendd.com\/plugin\/custom-login-stealth-login\/?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=eddri\" target=\"_blank\"><img class=\"eddri-thumbnail\" src=\"https:\/\/i.imgur.com\/mhuymPG.jpg\"><\/a> <p>Protect your wp-login.php page from brute force attacks.<\/p> <\/div> <h3>Stealth Login<\/h3> <span class=\"eddri-status\">Not Installed<\/span> <a class=\"button\" data-edd-install=\"Custom Login Stealth Login\">Install<\/a> <a class=\"button show-if-not-purchased\" data-toggle=\"purchase-links-1\" style=\"display:none\">Purchase License<\/a> <div id=\"purchase-links-1\" style=\"display:none\"> <ul> <li><a href=\"http:\/\/extendd.com\/checkout?edd_action=straight_to_gateway&download_id=7819&edd_options[price_id]=0\">Single site license ($25)<\/a><\/li> <li><a href=\"http:\/\/extendd.com\/checkout?edd_action=straight_to_gateway&download_id=7819&edd_options[price_id]=1\">Up to 5 site licenses ($70)<\/a><\/li> <li><a href=\"http:\/\/extendd.com\/checkout?edd_action=straight_to_gateway&download_id=7819&edd_options[price_id]=2\">Unlimited site licenses ($100)<\/a><\/li> <\/ul> <\/div> <\/div> <\/div><div class=\"eddri-addon\"> <div class=\"eddri-addon-container\"> <div class=\"eddri-img-wrap\"> <a href=\"http:\/\/extendd.com\/plugin\/custom-login-page-template\/?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=eddri\" target=\"_blank\"><img class=\"eddri-thumbnail\" src=\"https:\/\/i.imgur.com\/A0rzS9q.jpg\"><\/a> <p>Add a login form to any WordPress page.<\/p> <\/div> <h3>Page Template<\/h3> <span class=\"eddri-status\">Not Installed<\/span> <a class=\"button\" data-edd-install=\"Custom Login Page Template\">Install<\/a> <a class=\"button show-if-not-purchased\" data-toggle=\"purchase-links-2\" style=\"display:none\">Purchase License<\/a> <div id=\"purchase-links-2\" style=\"display:none\"> <ul> <li><a href=\"http:\/\/extendd.com\/checkout?edd_action=straight_to_gateway&download_id=13528\">One price! ($35)<\/a><\/li> <\/ul> <\/div> <\/div> <\/div><div class=\"eddri-addon\"> <div class=\"eddri-addon-container\"> <div class=\"eddri-img-wrap\"> <a href=\"http:\/\/extendd.com\/plugin\/wordpress-login-redirects\/?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=eddri\" target=\"_blank\"><img class=\"eddri-thumbnail\" src=\"https:\/\/i.imgur.com\/aNGoyAa.jpg\"><\/a> <p>Manage redirects after logging in.<\/p> <\/div> <h3>Login Redirects<\/h3> <span class=\"eddri-status\">Not Installed<\/span> <a class=\"button\" data-edd-install=\"WordPress Login Redirects\">Install<\/a> <a class=\"button show-if-not-purchased\" data-toggle=\"purchase-links-3\" style=\"display:none\">Purchase License<\/a> <div id=\"purchase-links-3\" style=\"display:none\"> <ul> <li><a href=\"http:\/\/extendd.com\/checkout?edd_action=straight_to_gateway&download_id=14333&edd_options[price_id]=0\">Single site license ($30)<\/a><\/li> <li><a href=\"http:\/\/extendd.com\/checkout?edd_action=straight_to_gateway&download_id=14333&edd_options[price_id]=1\">Up to 5 site licenses ($70)<\/a><\/li> <li><a href=\"http:\/\/extendd.com\/checkout?edd_action=straight_to_gateway&download_id=14333&edd_options[price_id]=2\">Unlimited site licenses ($150)<\/a><\/li> <\/ul> <\/div> <\/div> <\/div>"}
functions/install.php ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Install Function
4
+ *
5
+ * @package Custom Login
6
+ * @subpackage Install Function
7
+ * @copyright Copyright (c) 2013, Austin Passy
8
+ * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
+ * @since 2.0
10
+ */
11
+
12
+ // Exit if accessed directly
13
+ if ( ! defined( 'ABSPATH' ) ) exit;
14
+
15
+ /**
16
+ * Install
17
+ *
18
+ * Runs on plugin install.
19
+ *
20
+ * @access private
21
+ * @since 1.0
22
+ * @return void
23
+ */
24
+ function ap_custom_login_install() {
25
+
26
+ // Setup the Custom Post Type
27
+ ap_custom_login_post_types();
28
+
29
+ // Clear the permalinks
30
+ flush_rewrite_rules();
31
+
32
+ $cl_settings_page = get_page_by_title( __( 'Custom Login Settings', 'custom-login' ), '', 'custom_login' );
33
+
34
+ // Checks if the purchase page option exists
35
+ if ( empty( $cl_settings_page ) ) {
36
+
37
+ // Settings Page
38
+ $settings = wp_insert_post(
39
+ array(
40
+ 'post_title' => __( 'Custom Login Settings', 'custom-login' ),
41
+ 'post_content' => '',
42
+ 'post_status' => 'publish',
43
+ 'post_author' => 1,
44
+ 'post_type' => 'custom_login',
45
+ 'comment_status' => 'closed',
46
+ 'ping_status' => 'closed',
47
+ )
48
+ );
49
+
50
+ // update_option( 'custom_login_version', CUSTOM_LOGIN_VERSION );
51
+ }
52
+
53
+ // Bail if activating from network, or bulk
54
+ if ( is_network_admin() || isset( $_GET['activate-multi'] ) )
55
+ return;
56
+
57
+ // Add the transient to redirect
58
+ set_transient( '_custom_login_activation_redirect', true, 30 );
59
+ }
60
+ register_activation_hook( CUSTOM_LOGIN_FILE, 'ap_custom_login_install' );
functions/post-types.php ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Post Type Functions
4
+ *
5
+ * @package Custom Login
6
+ * @subpackage Post Type Functions
7
+ * @copyright Copyright (c) 2013, Austin Passy
8
+ * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
+ * @since 2.0
10
+ */
11
+
12
+ // Exit if accessed directly
13
+ if ( ! defined( 'ABSPATH' ) ) exit;
14
+
15
+ /**
16
+ * Setup Core Post Type
17
+ *
18
+ * @access private
19
+ * @since 2.0
20
+ * @return void
21
+ */
22
+ function ap_custom_login_post_types() {
23
+ /** Payment Post Type */
24
+ $labels = array(
25
+ 'name' => _x('Logins', 'post type general name', 'custom-login' ),
26
+ 'singular_name' => _x('Login', 'post type singular name', 'custom-login' ),
27
+ 'add_new' => __( 'Add New', 'custom-login' ),
28
+ 'add_new_item' => __( 'Add New Login', 'custom-login' ),
29
+ 'edit_item' => __( 'Edit Login', 'custom-login' ),
30
+ 'new_item' => __( 'New Login', 'custom-login' ),
31
+ 'all_items' => __( 'All Logins', 'custom-login' ),
32
+ 'view_item' => __( 'View Login', 'custom-login' ),
33
+ 'search_items' => __( 'Search Logins', 'custom-login' ),
34
+ 'not_found' => __( 'No Logins found', 'custom-login' ),
35
+ 'not_found_in_trash'=> __( 'No Logins found in Trash', 'custom-login' ),
36
+ 'parent_item_colon' => '',
37
+ 'menu_name' => __( 'Custom Login', 'custom-login' )
38
+ );
39
+
40
+ $args = array(
41
+ 'labels' => $labels,
42
+ 'public' => false,
43
+ 'query_var' => false,
44
+ 'rewrite' => false,
45
+ 'capability_type' => 'page',
46
+ 'map_meta_cap' => true,
47
+ 'supports' => array( 'title' ),
48
+ 'can_export' => false
49
+ );
50
+ register_post_type( 'custom_login', $args );
51
+ }
52
+ add_action( 'init', 'ap_custom_login_post_types', 75 );
functions/upgrades/upgrade-functions.php ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Upgrade Functions
4
+ *
5
+ * @package Custom Login
6
+ * @copyright Copyright (c) 2013, Austin Passy
7
+ * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
8
+ * @since 2.0
9
+ */
10
+
11
+ // Exit if accessed directly
12
+ if ( ! defined( 'ABSPATH' ) ) exit;
13
+
14
+ /**
15
+ * Display Upgrade Notices
16
+ *
17
+ * @access private
18
+ * @since 2.0
19
+ * @return void
20
+ */
21
+ function ap_custom_login_show_upgrade_notices() {
22
+ if ( isset( $_GET['page'] ) && $_GET['page'] == 'custom-login-upgrades' )
23
+ return; // Don't show notices on the upgrades page
24
+
25
+ $login = CUSTOMLOGIN();
26
+
27
+ $old_settings = get_option( 'custom_login_settings' );
28
+
29
+ /* New install */
30
+ if ( empty( $old_settings ) )
31
+ return;
32
+
33
+ if ( !empty( $old_settings ) && !empty( $old_settings['version'] ) )
34
+ $cl_version = $old_settings['version'];
35
+ else
36
+ $cl_version = $login->version;
37
+
38
+ //versions less than 2.0
39
+ if ( version_compare( $cl_version, '2.0', '<' ) ) {
40
+ printf(
41
+ '<div class="updated"><p>' . esc_html__( 'Custom Login needs to be upgraded, please click %shere%s to start the upgrade.', $login->domain ) . '</p></div>',
42
+ '<a href="' . esc_url( admin_url( 'options.php?page=custom-login-upgrades' ) ) . '">',
43
+ '</a>'
44
+ );
45
+ }
46
+ }
47
+ add_action( 'admin_notices', 'ap_custom_login_show_upgrade_notices' );
48
+
49
+ /**
50
+ * Triggers all upgrade functions
51
+ *
52
+ * This function is usually triggered via ajax
53
+ *
54
+ * @access private
55
+ * @since 2.0
56
+ */
57
+ function ap_custom_login_trigger_upgrades() {
58
+ $login = CUSTOMLOGIN();
59
+
60
+ $old_settings = get_option( 'custom_login_settings' );
61
+
62
+ if ( !empty( $old_settings ) && !empty( $old_settings['version'] ) )
63
+ $cl_version = $old_settings['version'];
64
+ else
65
+ $cl_version = $login->version;
66
+
67
+ if ( version_compare( $cl_version, '2.0', '<' ) ) {
68
+ ap_custom_login_v2_0_0_upgrades();
69
+ }
70
+
71
+ if ( DOING_AJAX ) die( 'complete' ); // Let ajax know we are done
72
+ }
73
+ add_action( 'wp_ajax_custom_login_trigger_upgrades', 'ap_custom_login_trigger_upgrades' );
74
+
75
+ /**
76
+ * Upgrade routine for v2.0.0
77
+ *
78
+ * @access private
79
+ * @since 2.0
80
+ * @return void
81
+ */
82
+ function ap_custom_login_v2_0_0_upgrades() {
83
+ $login = CUSTOMLOGIN();
84
+ $ss = CUSTOM_LOGIN_SCRIPT_STYLES();
85
+ $old_settings = get_option( 'custom_login_settings' );
86
+ $new_settings = get_option( $login->id, array() );
87
+
88
+ $new_settings['active'] = $login->version;
89
+ $new_settings['active'] = true === $old_settings['custom'] ? 'on' : 'off';
90
+ $new_settings['html_background_color'] = $ss->is_rgba( $old_settings['html_background_color'] ) ? $ss->rgba2hex( $old_settings['html_background_color'] ) : $old_settings['html_background_color'];
91
+ $new_settings['html_background_color_checkbox'] = 'off';
92
+ $new_settings['html_background_color_opacity'] = '';
93
+ $new_settings['html_background_url'] = $old_settings['html_background_url'];
94
+ $new_settings['html_background_position'] = 'left top';
95
+ $new_settings['html_background_repeat'] = $old_settings['html_background_repeat'];
96
+ $new_settings['html_background_size'] = $old_settings['html_background_size'];
97
+ $new_settomgs['hide_wp_logo'] = 'on';
98
+ $new_settings['logo_background_url'] = $old_settings['login_form_logo'];
99
+ $new_settings['logo_background_position'] = 'top center';
100
+ $new_settings['logo_background_repeat'] = '';
101
+ $new_settings['logo_background_size'] = '';
102
+ $new_settings['login_form_background_color'] = $ss->is_rgba( $old_settings['html_background_color'] ) ? $ss->rgba2hex( $old_settings['login_form_background_color'] ) : $old_settings['login_form_background_color'];
103
+ $new_settings['login_form_background_color_checkbox'] = 'off';
104
+ $new_settings['login_form_background_color_opacity'] = '';
105
+ $new_settings['login_form_background_url'] = $old_settings['login_form_background'];
106
+ $new_settings['login_form_background_position'] = '';
107
+ $new_settings['login_form_background_repeat'] = '';
108
+ $new_settings['login_form_background_size'] = $old_settings['login_form_background_size'];
109
+ $new_settings['login_form_border_radius'] = $old_settings['login_form_border_radius'];
110
+ $new_settings['login_form_border_size'] = $old_settings['login_form_border'];
111
+ $new_settings['login_form_border_color'] = $ss->is_rgba( $old_settings['html_background_color'] ) ? $ss->rgba2hex( $old_settings['login_form_border_color'] ) : $old_settings['login_form_border_color'];
112
+ $new_settings['login_form_border_color_checkbox'] = 'off';
113
+ $new_settings['login_form_border_color_opacity'] = '';
114
+ $new_settings['login_form_box_shadow'] = $old_settings['login_form_box_shadow_1'] . 'px ' . $old_settings['login_form_box_shadow_2'] . 'px ' . $old_settings['login_form_box_shadow_3'] . 'px';
115
+ $new_settings['login_form_box_shadow_color'] = $ss->is_rgba( $old_settings['html_background_color'] ) ? $ss->rgba2hex( $old_settings['login_form_box_shadow_4'] ) : $old_settings['login_form_box_shadow_4'];
116
+ $new_settings['login_form_box_shadow_color_checkbox'] = 'off';
117
+ $new_settings['login_form_box_shadow_color_opacity'] = '';
118
+ $new_settings['label_color'] = $ss->is_rgba( $old_settings['html_background_color'] ) ? $ss->rgba2hex( $old_settings['label_color'] ) : $old_settings['label_color'];
119
+ $new_settings['label_color_checkbox'] = 'off';
120
+ $new_settings['label_color_opacity'] = '';
121
+ $new_settings['nav_color'] = '';
122
+ $new_settings['nav_color_checkbox'] = 'off';
123
+ $new_settings['nav_color_opacity'] = '';
124
+ $new_settings['nav_text_shadow_color'] = '';
125
+ $new_settings['nav_text_shadow_color_checkbox'] = 'off';
126
+ $new_settings['nav_text_shadow_color_opacity'] = '';
127
+ $new_settings['nav_hover_color'] = '';
128
+ $new_settings['nav_hover_color_checkbox'] = 'off';
129
+ $new_settings['nav_hover_color_opacity'] = '';
130
+ $new_settings['nav_text_shadow_hover_color'] = '';
131
+ $new_settings['nav_text_shadow_hover_color_checkbox'] = 'off';
132
+ $new_settings['nav_text_shadow_hover_color_opacity'] = '';
133
+ $new_settings['custom_css'] = esc_attr( $old_settings['custom_css'] );
134
+ $new_settings['custom_html'] = wp_specialchars_decode( stripslashes( $old_settings['custom_html'] ), 1, 0, 1 );
135
+ $new_settings['custom_jquery'] = esc_html( $old_settings['custom_jquery'] );
136
+
137
+ update_option( $login->id, $new_settings );
138
+ delete_option( 'custom_login_settings' );
139
+ return true;
140
+ }
141
+
142
+ /**
143
+ *
144
+ option_name: custom_login_settings
145
+ option_value:
146
+ a:30:{s:7:"version";s:5:"1.1.4";s:6:"custom";b:1;s:8:"gravatar";b:0;s:14:"hide_dashboard";b:0;s:19:"disable_presstrends";b:0;s:12:"hide_upgrade";b:0;s:16:"upgrade_complete";b:0;s:10:"custom_css";s:0:"";s:11:"custom_html";s:0:"";s:13:"custom_jquery";s:0:"";s:21:"html_border_top_color";s:0:"";s:26:"html_border_top_background";s:0:"";s:21:"html_background_color";s:0:"";s:19:"html_background_url";s:0:"";s:22:"html_background_repeat";s:8:"repeat-x";s:20:"html_background_size";s:5:"cover";s:15:"login_form_logo";s:0:"";s:27:"login_form_border_top_color";s:0:"";s:27:"login_form_background_color";s:0:"";s:21:"login_form_background";s:0:"";s:26:"login_form_background_size";s:5:"cover";s:24:"login_form_border_radius";s:2:"11";s:17:"login_form_border";s:1:"1";s:23:"login_form_border_color";s:0:"";s:23:"login_form_box_shadow_1";s:1:"5";s:23:"login_form_box_shadow_2";s:1:"5";s:23:"login_form_box_shadow_3";s:2:"18";s:23:"login_form_box_shadow_4";s:7:"#464646";s:22:"login_form_padding_top";b:1;s:11:"label_color";s:7:"#ffffff";}
147
+
148
+ a:46:{s:6:"active";s:2:"on";s:21:"html_background_color";s:0:"";s:30:"html_background_color_checkbox";s:3:"off";s:29:"html_background_color_opacity";s:1:"1";s:19:"html_background_url";s:0:"";s:24:"html_background_position";s:8:"left top";s:22:"html_background_repeat";s:9:"no-repeat";s:20:"html_background_size";s:4:"none";s:19:"logo_background_url";s:0:"";s:24:"logo_background_position";s:8:"left top";s:22:"logo_background_repeat";s:9:"no-repeat";s:20:"logo_background_size";s:4:"none";s:27:"login_form_background_color";s:0:"";s:36:"login_form_background_color_checkbox";s:3:"off";s:35:"login_form_background_color_opacity";s:1:"1";s:25:"login_form_background_url";s:0:"";s:30:"login_form_background_position";s:8:"left top";s:28:"login_form_background_repeat";s:9:"no-repeat";s:26:"login_form_background_size";s:4:"none";s:24:"login_form_border_radius";s:0:"";s:22:"login_form_border_size";s:0:"";s:23:"login_form_border_color";s:0:"";s:32:"login_form_border_color_checkbox";s:3:"off";s:31:"login_form_border_color_opacity";s:1:"1";s:21:"login_form_box_shadow";s:12:"5px 5px 10px";s:27:"login_form_box_shadow_color";s:0:"";s:36:"login_form_box_shadow_color_checkbox";s:3:"off";s:35:"login_form_box_shadow_color_opacity";s:1:"1";s:11:"label_color";s:0:"";s:20:"label_color_checkbox";s:3:"off";s:19:"label_color_opacity";s:1:"1";s:9:"nav_color";s:0:"";s:18:"nav_color_checkbox";s:3:"off";s:17:"nav_color_opacity";s:1:"1";s:21:"nav_text_shadow_color";s:0:"";s:30:"nav_text_shadow_color_checkbox";s:3:"off";s:29:"nav_text_shadow_color_opacity";s:1:"1";s:15:"nav_hover_color";s:0:"";s:24:"nav_hover_color_checkbox";s:3:"off";s:23:"nav_hover_color_opacity";s:1:"1";s:27:"nav_text_shadow_hover_color";s:0:"";s:36:"nav_text_shadow_hover_color_checkbox";s:3:"off";s:35:"nav_text_shadow_hover_color_opacity";s:1:"1";s:10:"custom_css";s:0:"";s:11:"custom_html";s:0:"";s:13:"custom_jquery";s:0:"";}
149
+ **/
functions/upgrades/upgrades.php ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Upgrade Screen
4
+ *
5
+ * @package Custom Login
6
+ * @subpackage functions/upgrades
7
+ * @copyright Copyright (c) 2013, Austin Passy
8
+ * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
+ * @since 2.0
10
+ */
11
+
12
+ // Exit if accessed directly
13
+ if ( !defined( 'ABSPATH' ) ) exit;
14
+
15
+ /**
16
+ * Render Upgrades Screen
17
+ *
18
+ * @access private
19
+ * @since 2.0
20
+ * @return void
21
+ */
22
+ function ap_custom_login_upgrades_screen() {
23
+ $login = CUSTOMLOGIN(); ?>
24
+ <div class="wrap">
25
+ <h2><?php _e( 'Custom Login - Upgrades', $login->domain ); ?></h2>
26
+ <div id="custom-login-upgrade-status">
27
+ <p>
28
+ <?php _e( 'The upgrade process has started, please be patient. This could take several minutes. You will be automatically redirected when the upgrade is finished.', $login->domain ); ?>
29
+ <img src="<?php echo esc_url( admin_url( 'images/loading.gif' ) ); ?>" id="custom-login-upgrade-loader"/>
30
+ </p>
31
+ </div>
32
+ <script type="text/javascript">
33
+ jQuery( document ).ready( function() {
34
+ // Trigger upgrades on page load
35
+ var data = { action: 'custom_login_trigger_upgrades' };
36
+ jQuery.post( ajaxurl, data, function (response) {
37
+ if ( response == 'complete' ) {
38
+ jQuery('#custom-login-upgrade-loader').hide();
39
+ document.location.href = 'index.php?page=custom-login-about'; // Redirect to the welcome page
40
+ }
41
+ });
42
+ });
43
+ </script>
44
+ </div>
45
+ <?php
46
+ }
47
+
48
+ /**
49
+ * Add Options Link
50
+ *
51
+ * Creates the admin submenu pages.
52
+ *
53
+ * @access private
54
+ * @since 1.0
55
+ * @return void
56
+ */
57
+ function ap_custom_login_upgrades_page() {
58
+ $login = CUSTOMLOGIN();
59
+ add_submenu_page( null, __( 'Custom Login Upgrades', $login->domain ), __( 'Custom Login Upgrades', $login->domain ), 'update_plugins', 'custom-login-upgrades', 'ap_custom_login_upgrades_screen' );
60
+ }
61
+ add_action( 'admin_menu', 'ap_custom_login_upgrades_page', 10 );
languages/custom-login-es_ES.mo DELETED
Binary file
languages/custom-login-es_ES.po DELETED
@@ -1,157 +0,0 @@
1
- # Translation of the WordPress plugin Custom Login 0.8 by Austin Passy.
2
- # Copyright (C) 2010 Austin Passy
3
- # This file is distributed under the same license as the Custom Login package.
4
- # FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
5
- #
6
- msgid ""
7
- msgstr ""
8
- "Project-Id-Version: Custom Login 0.8\n"
9
- "Report-Msgid-Bugs-To: http://wordpress.org/tag/custom-login\n"
10
- "POT-Creation-Date: 2010-09-16 22:04+0000\n"
11
- "PO-Revision-Date: 2012-03-13 05:22-0600\n"
12
- "Last-Translator: AA\n"
13
- "Language-Team: -es_ES <arcos.alejandro@gmail.com>\n"
14
- "MIME-Version: 1.0\n"
15
- "Content-Type: text/plain; charset=utf-8\n"
16
- "Content-Transfer-Encoding: 8bit\n"
17
- "X-Poedit-Country: MEXICO\n"
18
-
19
- #. #-#-#-#-# plugin.pot (Custom Login 0.8) #-#-#-#-#
20
- #. Plugin Name of the plugin/theme
21
- #: library/admin/admin.php:70
22
- msgid "Custom Login"
23
- msgstr "Custom Login"
24
-
25
- #: library/admin/admin.php:215
26
- msgid "Avtivation &mdash; <em>to infinity and beyond</em>"
27
- msgstr "Avtivation &mdash; <em>al infinito y más allá</em>"
28
-
29
- #: library/admin/admin.php:217
30
- msgid "Announcements"
31
- msgstr "Anuncios"
32
-
33
- #: library/admin/admin.php:219
34
- msgid "General Settings"
35
- msgstr "Configuración general"
36
-
37
- #: library/admin/admin.php:221
38
- msgid "Advanced Settings"
39
- msgstr "Configuración avanzada"
40
-
41
- #: library/admin/admin.php:223
42
- msgid "About Custom Login"
43
- msgstr "Acerca de Custom Login"
44
-
45
- #: library/admin/admin.php:225
46
- msgid "Support Custom Login"
47
- msgstr "Soporte de Custom Login"
48
-
49
- #: library/admin/admin.php:227
50
- msgid "Preview your work, <em>Master</em>"
51
- msgstr "Vista previa de su trabajo, <em>Maestro</em>"
52
-
53
- #: library/admin/admin.php:229
54
- msgid "TheFrosty Network"
55
- msgstr "TheFrosty Network"
56
-
57
- #: library/admin/admin.php:242
58
- msgid "Activate:"
59
- msgstr "Activar:"
60
-
61
- #: library/admin/admin.php:253
62
- msgid "Gravatar:"
63
- msgstr "Gravatar:"
64
-
65
- #: library/admin/admin.php:286
66
- msgid "Plugin:"
67
- msgstr "Plugin:"
68
-
69
- #: library/admin/admin.php:290
70
- msgid "Author:"
71
- msgstr "Autor:"
72
-
73
- #: library/admin/admin.php:294
74
- msgid "Description:"
75
- msgstr "Descripción:"
76
-
77
- #: library/admin/admin.php:309
78
- msgid "Donate:"
79
- msgstr "Donar:"
80
-
81
- #: library/admin/admin.php:310
82
- msgid "<a href=\"https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=X4JPT57AWMTYW\">PayPal</a>."
83
- msgstr "<a href=\"https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=X4JPT57AWMTYW\">PayPal</a>."
84
-
85
- #: library/admin/admin.php:313
86
- msgid "Rate:"
87
- msgstr "Calificar:"
88
-
89
- #: library/admin/admin.php:314
90
- msgid "<a href=\"http://wordpress.org/extend/plugins/custom-login/\">This plugin on WordPress.org</a>."
91
- msgstr "<a href=\"http://wordpress.org/extend/plugins/custom-login/\">Este plugin en WordPress.org</a>."
92
-
93
- #: library/admin/admin.php:317
94
- msgid "Share:"
95
- msgstr "Compartir:"
96
-
97
- #: library/admin/admin.php:318
98
- msgid "Your design on <a href=\"http://www.flickr.com/groups/custom-login/\"><span style=\"color:#0066DC;font-weight:bold;\">Flick</span><span style=\"color:#ff0084;font-weight:bold;\">r</span></a>."
99
- msgstr "Su diseño en <a href=\"http://www.flickr.com/groups/custom-login/\"><span style=\"color:#0066DC;font-weight:bold;\">Flick</span><span style=\"color:#ff0084;font-weight:bold;\">r</span></a>."
100
-
101
- #: library/admin/admin.php:321
102
- msgid "Support:"
103
- msgstr "Soporte:"
104
-
105
- #: library/admin/admin.php:322
106
- msgid "<a href=\"http://wordpress.org/tags/custom-login\">WordPress support forums</a>."
107
- msgstr "<a href=\"http://wordpress.org/tags/custom-login\">Foros de soporte de WordPress</a>."
108
-
109
- #: library/admin/admin.php:347
110
- msgid "Custom CSS:"
111
- msgstr "CSS a la medida"
112
-
113
- #: library/admin/admin.php:362
114
- msgid "Custom HTML:"
115
- msgstr "HTML a la medida"
116
-
117
- #: library/admin/admin.php:602
118
- msgid "Don&prime;t you feel good. You just saved me."
119
- msgstr "Siéntase muy bien. Acabas de salvarme."
120
-
121
- #: library/admin/admin.php:620
122
- msgid "Custom Login Settings"
123
- msgstr "Configuración de Custom Login"
124
-
125
- #: library/admin/admin.php:639
126
- msgid "Update Settings"
127
- msgstr "Actualizar la configuración"
128
-
129
- #: library/admin/admin.php:704
130
- msgid "Settings"
131
- msgstr "Opciones"
132
-
133
- #: library/admin/admin.php:723
134
- #, php-format
135
- msgid "Custom Login plugin is not configured yet. It will use the defualt theme unless you configure the %1$s."
136
- msgstr "El plugin Custom Login no está configurado aún. Usará el tema instalado por omisión a menos que usted lo configure el %1$s."
137
-
138
- #: library/admin/dashboard.php:9
139
- msgid "The Frosty Network <em>feeds</em>"
140
- msgstr "El feed de Frosty Network"
141
-
142
- #. Plugin URI of the plugin/theme
143
- msgid "http://austinpassy.com/wordpress-plugins/custom-login"
144
- msgstr "http://austinpassy.com/wordpress-plugins/custom-login"
145
-
146
- #. Description of the plugin/theme
147
- msgid "A simple way to customize your WordPress login screen! Use the built in, easy to use <a href=\"./options-general.php?page=custom-login\">settings</a> page to do the work for you. So simple a caveboy can do it! Now featuring a HTML &amp; CSS box for advanced users. Share you designs on <a href=\"http://flickr.com/groups/custom-login/\">Flickr</a>!"
148
- msgstr "Una forma sencila de configurar su pantalla de entrada. Modifique las opciones fáciles de usar para que hagan el trabajo por usted. ¡Tan sencillo que cualquiera puede hacerlo!. hora cuenta con soporte para HTML &amp; CSS en su porpio campo para los usuarios avanzados. ¡Compartá sus diseños en <a href=\"http://flickr.com/groups/custom-login/\">Flickr</a>!"
149
-
150
- #. Author of the plugin/theme
151
- msgid "Austin Passy"
152
- msgstr "Austin Passy"
153
-
154
- #. Author URI of the plugin/theme
155
- msgid "http://frostywebdesigns.com"
156
- msgstr "http://frostywebdesigns.com"
157
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
languages/custom-login-tr_TR.mo CHANGED
Binary file
languages/custom-login-tr_TR.po DELETED
@@ -1,490 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: Custom Login\n"
4
- "Report-Msgid-Bugs-To: http://wordpress.org/tag/custom-login\n"
5
- "POT-Creation-Date: 2012-04-02 16:51:21+00:00\n"
6
- "PO-Revision-Date: 2013-01-11 14:37+0200\n"
7
- "Last-Translator: HakanEr <hakanerwptr@gmail.com>\n"
8
- "Language-Team: hakaner <hakanerwptr@gmail.com>\n"
9
- "Language: tr_TR\n"
10
- "MIME-Version: 1.0\n"
11
- "Content-Type: text/plain; charset=UTF-8\n"
12
- "Content-Transfer-Encoding: 8bit\n"
13
- "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n"
14
- "X-Poedit-Basepath: .\n"
15
- "Plural-Forms: nplurals=2; plural=n != 1;\n"
16
- "X-Poedit-SourceCharset: UTF-8\n"
17
- "X-Generator: Poedit 1.5.4\n"
18
- "X-Poedit-SearchPath-0: .\n"
19
-
20
- #: library/admin/admin.php:74
21
- msgid "Custom Login"
22
- msgstr "Custom Login"
23
-
24
- #: library/admin/admin.php:75
25
- msgid "Custom Login Upgrade"
26
- msgstr "Custom Login Yükseltme"
27
-
28
- #: library/admin/admin.php:75 library/admin/admin.php:964
29
- msgid "Upgrade"
30
- msgstr "Yükselt"
31
-
32
- #: library/admin/admin.php:271
33
- msgid "Avtivation &mdash; <em>to infinity and beyond</em>"
34
- msgstr "Etkinleştirme &mdash; <em>sonsuzluk ve ötesine</em>"
35
-
36
- #: library/admin/admin.php:273
37
- msgid "Announcements"
38
- msgstr "Duyurular"
39
-
40
- #: library/admin/admin.php:275
41
- msgid "About Custom Login"
42
- msgstr "Custom Login Hakkında"
43
-
44
- #: library/admin/admin.php:277
45
- msgid "Support Custom Login"
46
- msgstr "Custom Login Destekle"
47
-
48
- #: library/admin/admin.php:279
49
- msgid "Dashboard Widget"
50
- msgstr "Pano Widget"
51
-
52
- #: library/admin/admin.php:281
53
- msgid "Preview your work, <em>Master</em>"
54
- msgstr "Yaptığın işin ön izlemesi, <em>Üstat</em>"
55
-
56
- #: library/admin/admin.php:285 library/admin/admin.php:286
57
- msgid "Upgrade Custom Login"
58
- msgstr "Custom Login Yükselt"
59
-
60
- #: library/admin/admin.php:288
61
- msgid "General Settings"
62
- msgstr "Genel Ayarlar"
63
-
64
- #: library/admin/admin.php:290
65
- msgid "Advanced Settings"
66
- msgstr "GeliÅŸmiÅŸ Ayarlar"
67
-
68
- #: library/admin/admin.php:292
69
- msgid "TheFrosty Network"
70
- msgstr "TheFrosty Ağı"
71
-
72
- #: library/admin/admin.php:305
73
- msgid "Activate:"
74
- msgstr "EtkinleÅŸtir:"
75
-
76
- #: library/admin/admin.php:310
77
- msgid ""
78
- "Check this box to use your own CSS, leave unchecked to use the default style."
79
- msgstr ""
80
- "Bu kutuyu işaretleyerek kendi CSS inizi kullanın, varsayılan stil için boş "
81
- "bırakın."
82
-
83
- #: library/admin/admin.php:315
84
- msgid "Gravatar:"
85
- msgstr "Gravatar:"
86
-
87
- #: library/admin/admin.php:320
88
- msgid "This feature only works for sites with registration enabled."
89
- msgstr "Bu özellik yalnızca üye olma seçeneği etkin olan siteler için çalışır."
90
-
91
- #: library/admin/admin.php:320
92
- msgid "Check this box to activate a AJAX Gravatar image for registration."
93
- msgstr ""
94
- "Üye kaydında AJAX Gravatar resimlerini açmak için bu kutuyu işaretleyin."
95
-
96
- #: library/admin/admin.php:347
97
- msgid "Plugin:"
98
- msgstr "Eklenti:"
99
-
100
- #: library/admin/admin.php:351
101
- msgid "Author:"
102
- msgstr "Yazar:"
103
-
104
- #: library/admin/admin.php:355
105
- msgid "Description:"
106
- msgstr "Açıklama:"
107
-
108
- #: library/admin/admin.php:393
109
- msgid "Thanks for purchasing the plugin! Here is your download link: "
110
- msgstr "Eklentiyi satın aldığınız için teşekkürler! İndirme linkiniz burada:"
111
-
112
- #: library/admin/admin.php:425
113
- msgid "Hide the upgrade form?"
114
- msgstr "Yükseltme formunu gizle?"
115
-
116
- #: library/admin/admin.php:434
117
- msgid ""
118
- "Want to upgrade to Pro? If you've purchase the plugin login below to get "
119
- "your download link. Need a login? Click %s to purchase the plugin."
120
- msgstr ""
121
- "Pro sürüme yükseltmek mi istiyorsunuz? Eğer eklentiyi satın aldıysanız "
122
- "indirme linkiniz için alttan giriş yapın. Giriş yapmak mı istiyorsunuz? %s "
123
- "tıklayarak satın alın."
124
-
125
- #: library/admin/admin.php:466
126
- msgid "Upgrade to Custom Login PRO"
127
- msgstr "Custom Login PRO Yükselt"
128
-
129
- #: library/admin/admin.php:470
130
- msgid "You have already downloaded the plugin, download again?"
131
- msgstr "Ekletiyi zaten indirdin, tekrar indirmek ister misin?"
132
-
133
- #: library/admin/admin.php:471 library/admin/admin.php:899
134
- msgid "Get download link"
135
- msgstr "İndirme bağlantısını al"
136
-
137
- #: library/admin/admin.php:485
138
- msgid "Donate:"
139
- msgstr "Bağış:"
140
-
141
- #: library/admin/admin.php:486
142
- msgid ""
143
- "<a href=\"https://www.paypal.com/cgi-bin/webscr?cmd=_s-"
144
- "xclick&hosted_button_id=X4JPT57AWMTYW\">PayPal</a>."
145
- msgstr ""
146
- "<a href=\"https://www.paypal.com/cgi-bin/webscr?cmd=_s-"
147
- "xclick&hosted_button_id=X4JPT57AWMTYW\">PayPal</a>."
148
-
149
- #: library/admin/admin.php:489
150
- msgid "Rate:"
151
- msgstr "Oy ver:"
152
-
153
- #: library/admin/admin.php:490
154
- msgid ""
155
- "<a href=\"http://wordpress.org/extend/plugins/custom-login/\">This plugin on "
156
- "WordPress.org</a>."
157
- msgstr ""
158
- "<a href=\"http://wordpress.org/extend/plugins/custom-login/\">WordPress.org "
159
- "eklenti sayfasına gidin</a>."
160
-
161
- #: library/admin/admin.php:493
162
- msgid "Share:"
163
- msgstr "PaylaÅŸ:"
164
-
165
- #: library/admin/admin.php:494
166
- msgid ""
167
- "Your design on <a href=\"http://www.flickr.com/groups/custom-login/\"><span "
168
- "style=\"color:#0066DC;font-weight:bold;\">Flick</span><span style=\"color:"
169
- "#ff0084;font-weight:bold;\">r</span></a>."
170
- msgstr ""
171
- "Tasarımınız <a href=\"http://www.flickr.com/groups/custom-login/\"><span "
172
- "style=\"color:#0066DC;font-weight:bold;\">Flick</span><span style=\"color:"
173
- "#ff0084;font-weight:bold;\">r</span></a>'da."
174
-
175
- #: library/admin/admin.php:497
176
- msgid "Support:"
177
- msgstr "Destek:"
178
-
179
- #: library/admin/admin.php:498
180
- msgid ""
181
- "<a href=\"http://wordpress.org/tags/custom-login\">WordPress support forums</"
182
- "a>."
183
- msgstr ""
184
- "<a href=\"http://wordpress.org/tags/custom-login\">WordPress destek "
185
- "forumları</a>."
186
-
187
- #: library/admin/admin.php:501
188
- msgid "Go PRO:"
189
- msgstr "PRO Sürüm:"
190
-
191
- #: library/admin/admin.php:517
192
- msgid "Dashboard:"
193
- msgstr "Pano:"
194
-
195
- #: library/admin/admin.php:521
196
- msgid "Hide the dashboard widget?"
197
- msgstr "Pano widget gizlensin mi?"
198
-
199
- #: library/admin/admin.php:534
200
- msgid "Click here to see a live preview!"
201
- msgstr "Buraya tıklayarak ön izlemeyi gör!"
202
-
203
- #: library/admin/admin.php:535
204
- msgid "(May not work as of WordPress 3.1.1)"
205
- msgstr "(WordPress 3.1.1 ile çalışmayabilir)"
206
-
207
- #: library/admin/admin.php:554
208
- msgid "html border-top color:"
209
- msgstr "html üst-çerçeve rengi:"
210
-
211
- #: library/admin/admin.php:559
212
- msgid ""
213
- "Use HEX color <strong>with</strong> &ldquo;#&rdquo; <strong>or</strong> RGB/"
214
- "A format.<br />\r\n"
215
- "\t\t\t\t<strong>This is the top 15px border color section</strong><br />\r\n"
216
- "\t\t\t\tExample: &sup1;<code>#121212</code> &sup2;<code>rgba(255,255,255,0.4)"
217
- "</code>"
218
- msgstr ""
219
- "HEX renk kodları <strong>ile</strong> &ldquo;#&rdquo; <strong>veya</"
220
- "strong>RGB/A formatı kullanın.<br />\n"
221
- "<strong>Bu üst çerçeve 15px renk bölümüdür</strong><br />\n"
222
- "Örneğin: &sup1;<code>#121212</code> &sup2;<code>rgba(255,255,255,0.4)</code>"
223
-
224
- #: library/admin/admin.php:568
225
- msgid "html border-top background:"
226
- msgstr "html üst-çerçeve arkaplanı:"
227
-
228
- #: library/admin/admin.php:574
229
- msgid ""
230
- "This can replace the new background image at the top of the login screen. "
231
- "Upload an image and put the full path here.<br />\r\n"
232
- " Suggested size: <code>1px X 31px</code> (for a repeating "
233
- "background)."
234
- msgstr ""
235
- "Bununla giriş ekranının üst kısmına yeni bir arka plan resmi "
236
- "ekleyebilirsiniz. Bir resim yükleyin ve buraya tam yolunu koyun.<br />\n"
237
- " Tavsiye boyut: <code>1px X 31px</code> (tekrarlayan bir arka "
238
- "plan için)."
239
-
240
- #: library/admin/admin.php:582
241
- msgid "html background color:"
242
- msgstr "html arkaplan rengi:"
243
-
244
- #: library/admin/admin.php:587
245
- msgid ""
246
- "Use HEX color <strong>with</strong> &ldquo;#&rdquo; <strong>or</strong> RGB/"
247
- "A format.<br />\r\n"
248
- "\t\t\t\tExample: &sup1;<code>#121212</code> &sup2;<code>rgba(255,255,255,0.4)"
249
- "</code>"
250
- msgstr ""
251
- "HEX renk kodları <strong>ile</strong> &ldquo;#&rdquo; <strong>veya</"
252
- "strong>RGB/A formatı kullanın.<br />\n"
253
- "Örneğin: &sup1;<code>#121212</code> &sup2;<code>rgba(255,255,255,0.4)</code>"
254
-
255
- #: library/admin/admin.php:595
256
- msgid "html background url:"
257
- msgstr "html arkaplan linki:"
258
-
259
- #: library/admin/admin.php:601
260
- msgid ""
261
- "Upload an image and put the full path here.<br />\r\n"
262
- " Suggested size: <code>10px X 500px</code> (for a repeating "
263
- "background) or<br />\r\n"
264
- " Full size image with a 100% stretched to fit window image."
265
- msgstr ""
266
- "Bir resim yükleyin ve buraya tam yolunu koyun.<br />\n"
267
- " Tavsiye boyut: <code>10px X 500px</code> (tekrarlayan bir "
268
- "arka plan için) veya <br />\n"
269
- " Pencereye %100 sığacak bir tam boy resim."
270
-
271
- #: library/admin/admin.php:610
272
- msgid "html background repeat:"
273
- msgstr "html arkaplan tekrarı:"
274
-
275
- #: library/admin/admin.php:615
276
- msgid ""
277
- "Use <code>no-repeat</code>, <code>repeat</code>, <code>repeat-x</code> or "
278
- "<code>repeat.</code>"
279
- msgstr ""
280
- "<code>no-repeat</code>, <code>repeat</code>, <code>repeat-x</code> veya "
281
- "<code>repeat.</code> kullanın"
282
-
283
- #: library/admin/admin.php:622
284
- msgid "Logo:"
285
- msgstr "Logo:"
286
-
287
- #: library/admin/admin.php:628
288
- msgid ""
289
- "Upload an image and put the full path here.<br />\r\n"
290
- " Suggested size: <code>310px X 70px</code>, which will "
291
- "replace WordPress logo. Be sure to leave blank if not in use. NOTE: Will go "
292
- "<strong>above</strong> the form and it&prime;s border."
293
- msgstr ""
294
- "Bir resim yükleyin ve buraya tam yolunu koyun.<br />\n"
295
- " Tavsiye boyut: <code>310px X 70px</code>, WordPress logosu "
296
- "yerini alır. Eğer kullanımda değilse boş bıraktığınızdan emin olun. NOT: "
297
- "Formun üstü ve çereçevesine yerleşir."
298
-
299
- #: library/admin/admin.php:637
300
- msgid "login form background color:"
301
- msgstr "GiriÅŸ formu arkaplan rengi:"
302
-
303
- #: library/admin/admin.php:642 library/admin/admin.php:691
304
- #: library/admin/admin.php:732
305
- msgid ""
306
- "Use HEX color <strong>with</strong> &ldquo;#&rdquo; or RGB/A format.<br />"
307
- "\r\n"
308
- "\t\t\t\tExample: &sup1;<code>#121212</code> &sup2;<code>rgba(255,255,255,0.4)"
309
- "</code>"
310
- msgstr ""
311
- "HEX renk kodları <strong>ile</strong> &ldquo;#&rdquo; <strong>veya</"
312
- "strong>RGB/A formatı kullanın.<br />\n"
313
- "Örneğin: &sup1;<code>#121212</code> &sup2;<code>rgba(255,255,255,0.4)</code>"
314
-
315
- #: library/admin/admin.php:650
316
- msgid "login form background url:"
317
- msgstr "GiriÅŸ formu arkaplan linki:"
318
-
319
- #: library/admin/admin.php:664
320
- msgid "login form border radius:"
321
- msgstr "Giriş formu çerçeve çapı:"
322
-
323
- #: library/admin/admin.php:669
324
- msgid ""
325
- "Choose your border radius, ie <code>8</code> or <code>12</code>. Do not put "
326
- "&ldquo;<strong>px</strong>&rdquo;!"
327
- msgstr ""
328
- "Çerçeve çapını seçin, örn. <code>8</code> ya da <code>12</code>. &ldquo;"
329
- "<strong>px</strong>&rdquo; koymayın!"
330
-
331
- #: library/admin/admin.php:675
332
- msgid "login form border thickness:"
333
- msgstr "Giriş formu çerçeve kalınlığı:"
334
-
335
- #: library/admin/admin.php:680
336
- msgid ""
337
- "Choose your border thickness, i.e. <code>1</code> or <code>2</code>. Do not "
338
- "put &ldquo;<strong>px</strong>&rdquo;!"
339
- msgstr ""
340
- "Çerçeve kalınlığını seçin, örn. <code>1</code> ya da <code>2</code>. &ldquo;"
341
- "<strong>px</strong>&rdquo; koymayın!"
342
-
343
- #: library/admin/admin.php:686
344
- msgid "login form border color:"
345
- msgstr "Giriş formu çerçeve rengi:"
346
-
347
- #: library/admin/admin.php:699
348
- msgid "login form box shadow:"
349
- msgstr "Giriş formu kutu gölgesi:"
350
-
351
- #: library/admin/admin.php:707
352
- msgid ""
353
- "Choose your box shadow settings, i.e. <code>5px 5px 18px #464646</code> "
354
- "<em>example code - <code>offset, offset, blur, color</code></em>."
355
- msgstr ""
356
- "Kutu gölge ayarlarını seçin, örn. <code>5px 5px 18px #464646</code> "
357
- "<em>örnek kod - <code>konum, konum, bulanıklık, renk</code></em>."
358
-
359
- #: library/admin/admin.php:714
360
- msgid "login form padding fix:"
361
- msgstr "Giriş formu dolgu düzeltme:"
362
-
363
- #: library/admin/admin.php:719
364
- msgid "Select the box if you would like the padding of the form to fit better."
365
- msgstr "Eğer daha uyumlu bir form dolgusu istiyorsanız kutuyu işaretleyin."
366
-
367
- #: library/admin/admin.php:728
368
- msgid "label font color:"
369
- msgstr "Font etiket rengi:"
370
-
371
- #: library/admin/admin.php:750
372
- msgid "Custom CSS:"
373
- msgstr "KiÅŸisel CSS:"
374
-
375
- #: library/admin/admin.php:755
376
- msgid ""
377
- "Use this box to enter any custom CSS code that may not be shown below.<br />"
378
- "\r\n"
379
- " <strong>Example:</strong> <code>.login #backtoblog a { color:"
380
- "#990000; }</code><br />\r\n"
381
- " &sect; <strong>Example:</strong> <code>#snow { display:"
382
- "block; position:absolute; } #snow img { height:auto; width:100%; }</"
383
- "code><br />\r\n"
384
- " &sect; example CSS code for custom html code example.."
385
- msgstr ""
386
- "Bu kutuyu kullanarak altta gösterilmeyen herhangi bir kişisel CSS kodu girin."
387
- "<br />\n"
388
- "<strong>Örnek:</strong> <code>.login #backtoblog a { color:#990000; }</"
389
- "code><br />\n"
390
- " &sect; <strong>Örnek:</strong> <code>#snow { display:block; "
391
- "position:absolute; } #snow img { height:auto; width:100%; }</code><br />\n"
392
- " &sect; Kişisel html kod örneği için kişisel CSS kod "
393
- "örneğidir.."
394
-
395
- #: library/admin/admin.php:765
396
- msgid "Custom HTML:"
397
- msgstr "KiÅŸisel HTML:"
398
-
399
- #: library/admin/admin.php:770
400
- msgid ""
401
- "Use this box to enter any custom HTML coded that you can add custom style to "
402
- "in the custom CSS box.<br />\r\n"
403
- " <strong>Example:</strong> <code>&lt;div id=\"snow\"&gt;&lt;"
404
- "img src=\"../image.jpg\" alt=\"\" /&gt;&lt;/div&gt;<br />&lt;div id=\"snow-"
405
- "bird\"&gt; &lt;/div&gt;</code>"
406
- msgstr ""
407
- "Bu kutuyu kullanarak kişisel CSS kutusuna girdiğiniz kişisel stil için "
408
- "kodlanmış kişisel HTML kodlarını girin.<br />\n"
409
- " <strong>Örnek:</strong> <code>&lt;div id=\"snow\"&gt;&lt;img "
410
- "src=\"../image.jpg\" alt=\"\" /&gt;&lt;/div&gt;<br />&lt;div id=\"snow-bird"
411
- "\"&gt; &lt;/div&gt;</code>"
412
-
413
- #: library/admin/admin.php:823
414
- msgid "Don&prime;t you feel good. You just saved me."
415
- msgstr "İyi hissetmiyor musun. Beni kurtardın."
416
-
417
- #: library/admin/admin.php:841
418
- msgid "Custom Login Settings"
419
- msgstr "Custom Login Ayarları"
420
-
421
- #: library/admin/admin.php:861
422
- msgid "Update Settings"
423
- msgstr "Ayarları Güncelle"
424
-
425
- #: library/admin/admin.php:884
426
- msgid "Custom Login Pro Upgrade Check"
427
- msgstr "Custom Login Pro Yükseltme Kontrolu"
428
-
429
- #: library/admin/admin.php:962
430
- msgid "Settings"
431
- msgstr "Ayarlar"
432
-
433
- #: library/admin/admin.php:982
434
- msgid ""
435
- "Custom Login plugin is not configured yet. It will use the defualt theme "
436
- "unless you configure the %1$s."
437
- msgstr ""
438
- "Custom Login eklentisi henüz yapılandırılmadı. %1$s ayarlamadığınız sürece "
439
- "varsayılan temayı kullanır."
440
-
441
- #: library/admin/dashboard.php:9
442
- msgid "The Frosty Network <em>feeds</em>"
443
- msgstr "The Frosty AÄŸ <em>beslemesi</em>"
444
-
445
- #. Plugin Name of the plugin/theme
446
- msgid "Custom Login lite"
447
- msgstr "Custom Login lite"
448
-
449
- #. Plugin URI of the plugin/theme
450
- msgid "http://austinpassy.com/wordpress-plugins/custom-login"
451
- msgstr "http://austinpassy.com/wordpress-plugins/custom-login"
452
-
453
- #. Description of the plugin/theme
454
- msgid ""
455
- "A simple way to customize your WordPress login screen! Use the built in, "
456
- "easy to use <a href=\"./options-general.php?page=custom-login\">settings</a> "
457
- "page to do the work for you. So simple a neanderthal can do it! Now "
458
- "featuring a HTML &amp; CSS box for advanced users. Share you designs on <a "
459
- "href=\"http://flickr.com/groups/custom-login/\">Flickr</a> or upgrade to the "
460
- "<a href=\"http://thefrosty.com/custom-login-pro/\">PRO</a> version!"
461
- msgstr ""
462
- "WordPress giriş ekranını kişiselleştirmek için kolay bir yol! İşinizi yapmak "
463
- "için yerleşik, kullanımı kolay <a href=\"./options-general.php?page=custom-"
464
- "login\">ayarlar</a> sayfası. Bir mağara adamının bile yapabileceği "
465
- "basitlikte! Şimdi, gelişmiş kullanıcılar için HTML &amp; CSS özellikleri de "
466
- "var. Tasarımlarınızı <a href=\"http://flickr.com/groups/custom-login/"
467
- "\">Flickr</a> üzerinde paylaşın veya <a href=\"http://thefrosty.com/custom-"
468
- "login-pro/\">PRO</a> sürüme yükseltin!"
469
-
470
- #. Author of the plugin/theme
471
- msgid "Austin Passy"
472
- msgstr "Austin Passy"
473
-
474
- #. Author URI of the plugin/theme
475
- msgid "http://frostywebdesigns.com"
476
- msgstr "http://frostywebdesigns.com"
477
-
478
- #~ msgid ""
479
- #~ "<a href=\"http://thefrosty.com/custom-login-pro/?ref=custom-login&url="
480
- #~ msgstr ""
481
- #~ "<a href=\"http://thefrosty.com/custom-login-pro/?ref=custom-login&url="
482
-
483
- #~ msgid ""
484
- #~ "Upload an image and put the full path here. Suggested size: <code>308px X "
485
- #~ "108px</code><br />\n"
486
- #~ " My suggestion: use a transparent .png or .gif. <a href=\""
487
- #~ msgstr ""
488
- #~ "Bir resim yükleyin ve buraya tam yolunu koyun. Tavsiye boyut: <code>308px "
489
- #~ "X 108px</code><br />\n"
490
- #~ "Benim önerim: transparan bir png ya da .gif kullanın. <a href=\""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
languages/custom-login-tr_TR.pot ADDED
@@ -0,0 +1,423 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Custom Login 2.0\n"
4
+ "POT-Creation-Date: 2013-04-15 22:01-0800\n"
5
+ "PO-Revision-Date: 2013-04-17 07:30+0200\n"
6
+ "Last-Translator: HakanEr <hakanerwptr@gmail.com>\n"
7
+ "Language-Team: hakaner <hakanerwptr@gmail.com>\n"
8
+ "MIME-Version: 1.0\n"
9
+ "Content-Type: text/plain; charset=UTF-8\n"
10
+ "Content-Transfer-Encoding: 8bit\n"
11
+ "X-Generator: Poedit 1.5.5\n"
12
+ "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e;_x\n"
13
+ "X-Poedit-Basepath: .\n"
14
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
15
+ "Language: turkish\n"
16
+ "X-Poedit-SourceCharset: UTF-8\n"
17
+ "X-Poedit-SearchPath-0: .\n"
18
+
19
+ #: custom-login.php:319 custom-login.php:630 functions/install.php:32
20
+ #: functions/install.php:40
21
+ msgid "Custom Login Settings"
22
+ msgstr "Custom Login Ayarları"
23
+
24
+ #: custom-login.php:324
25
+ msgid "General Settings"
26
+ msgstr "Genel Ayarlar"
27
+
28
+ #: custom-login.php:332
29
+ msgid "Activate"
30
+ msgstr "EtkinleÅŸtir"
31
+
32
+ #: custom-login.php:333
33
+ msgid "Toggle this plugin on &amp; off."
34
+ msgstr "Eklentiyi açmak ve kapatmak arasında geçiş yap."
35
+
36
+ #: custom-login.php:339
37
+ msgid "<h4><abbr title=\"Hyper Text Markup Language\">HTML</abbr></h4>"
38
+ msgstr "<h4><abbr title=\"Hyper Text Markup Language\">HTML</abbr></h4>"
39
+
40
+ #: custom-login.php:346
41
+ msgid "HTML Background Color"
42
+ msgstr "HTML Arkaplan Rengi"
43
+
44
+ #: custom-login.php:353
45
+ msgid "HTML Background Image"
46
+ msgstr "HTML Arkaplan Resmi"
47
+
48
+ #: custom-login.php:354
49
+ msgid "Upload an image or a repeating pattern (optional)."
50
+ msgstr "Bir resim veya tekrar eden bir desen yükle (isteğe bağlı)."
51
+
52
+ #: custom-login.php:361
53
+ msgid "HTML Background Position"
54
+ msgstr "HTML Arkaplan Pozisyonu"
55
+
56
+ #: custom-login.php:362 custom-login.php:410 custom-login.php:465
57
+ msgid ""
58
+ "Allowed strings <code>left, top, center, right, bottom</code>. No more than "
59
+ "two combined! Space delimiter."
60
+ msgstr ""
61
+ "Ä°zin verilen dizeler <code>left, top, center, right, bottom</code>. Ä°kiden "
62
+ "fazla kombinasyon olmaz! Alan sınırlayıcı."
63
+
64
+ #: custom-login.php:369
65
+ msgid "HTML Background repeat"
66
+ msgstr "HTML Arkaplan tekrarı"
67
+
68
+ #: custom-login.php:381
69
+ msgid "HTML Background size"
70
+ msgstr "HTML Arkaplan boyutu"
71
+
72
+ #: custom-login.php:394
73
+ msgid "<h4>Logo</h4>"
74
+ msgstr "<h4>Logo</h4>"
75
+
76
+ #: custom-login.php:401
77
+ msgid "Logo"
78
+ msgstr "Logo"
79
+
80
+ #: custom-login.php:402
81
+ msgid "Replace the WordPress logo (optional)."
82
+ msgstr "WordPress logosunu değiştir (isteğe bağlı)."
83
+
84
+ #: custom-login.php:409
85
+ msgid "Logo Background Position"
86
+ msgstr "Logo Arkaplan Pozisyonu"
87
+
88
+ #: custom-login.php:417
89
+ msgid "Logo Background repeat"
90
+ msgstr "Logo Arkaplan tekrarı"
91
+
92
+ #: custom-login.php:429
93
+ msgid "Logo Background size"
94
+ msgstr "Logo Arkaplan boyutu"
95
+
96
+ #: custom-login.php:442
97
+ msgid "<h4>Login form</h4>"
98
+ msgstr "<h4>GiriÅŸ formu</h4>"
99
+
100
+ #: custom-login.php:449
101
+ msgid "Login Form Background Color"
102
+ msgstr "GiriÅŸ Formu Arkaplan Rengi"
103
+
104
+ #: custom-login.php:456
105
+ msgid "Login Form Background URL"
106
+ msgstr "GiriÅŸ Formu Arkaplan URL"
107
+
108
+ #: custom-login.php:457
109
+ msgid "Add an image to the form (optional)."
110
+ msgstr "Forma bir resim ekle (isteğe bağlı)."
111
+
112
+ #: custom-login.php:464
113
+ msgid "Login Form Background Position"
114
+ msgstr "GiriÅŸ Formu Arkaplan Pozisyonu"
115
+
116
+ #: custom-login.php:472
117
+ msgid "Login Form Background repeat"
118
+ msgstr "Giriş Formu Arkaplan tekrarı"
119
+
120
+ #: custom-login.php:484
121
+ msgid "Login Form Background size"
122
+ msgstr "GiriÅŸ Formu Arkaplan boyutu"
123
+
124
+ #: custom-login.php:496
125
+ msgid "Login Form Border Radius"
126
+ msgstr "Giriş Formu Çerçeve Yarıçapı"
127
+
128
+ #: custom-login.php:504
129
+ msgid "Login Form Border Size"
130
+ msgstr "Giriş Formu Çerçeve Boyutu"
131
+
132
+ #: custom-login.php:512
133
+ msgid "Login Form Border Color"
134
+ msgstr "Giriş Formu Çerçeve Rengi"
135
+
136
+ #: custom-login.php:519
137
+ msgid "Login Form Box Shadow"
138
+ msgstr "Giriş Formu Kutu Gölgesi"
139
+
140
+ #: custom-login.php:520
141
+ #, php-format
142
+ msgid "Use <a href=\"%s\">box shadow</a> syntax w/ out color. <code>%s</code>"
143
+ msgstr ""
144
+ "Renksiz bir şekilde <a href=\"%s\">box shadow</a> syntax kullanın. <code>%s</"
145
+ "code>"
146
+
147
+ #: custom-login.php:527
148
+ msgid "Login Form Box Shadow Color"
149
+ msgstr "Giriş Formu Kutu Gölge Rengi"
150
+
151
+ #: custom-login.php:535
152
+ msgid "<h4>Misc.</h4>"
153
+ msgstr "<h4>Çeşitli</h4>"
154
+
155
+ #: custom-login.php:542
156
+ msgid "Login Form Label Color"
157
+ msgstr "GiriÅŸ Formu Etiket Rengi"
158
+
159
+ #: custom-login.php:550
160
+ msgid "<h4>Below form anchor</h4>"
161
+ msgstr "<h4>Form altı bağlamı</h4>"
162
+
163
+ #: custom-login.php:557
164
+ msgid "Below form nav color"
165
+ msgstr "Form altı nav rengi"
166
+
167
+ #: custom-login.php:564
168
+ msgid "Below form nav text-shadow color"
169
+ msgstr "Form altı nav metni-gölge rengi"
170
+
171
+ #: custom-login.php:571
172
+ msgid "Below form nav color hover"
173
+ msgstr "Form altı nav vurgu rengi"
174
+
175
+ #: custom-login.php:578
176
+ msgid "Below form nav text-shadow hover"
177
+ msgstr "Form altı nav metni-vurgu gölgesi"
178
+
179
+ #: custom-login.php:586
180
+ msgid "<h4>Custom HTML/CSS &amp; jQuery</h4>"
181
+ msgstr "<h4>KiÅŸisel HTML/CSS &amp; jQuery</h4>"
182
+
183
+ #: custom-login.php:593
184
+ msgid "Custom CSS"
185
+ msgstr "KiÅŸisel CSS"
186
+
187
+ #: custom-login.php:599
188
+ msgid "Custom HTML"
189
+ msgstr "KiÅŸisel HTML"
190
+
191
+ #: custom-login.php:606
192
+ msgid "Custom jQuery"
193
+ msgstr "KiÅŸisel jQuery"
194
+
195
+ #: custom-login.php:630 functions/post-types.php:37
196
+ msgid "Custom Login"
197
+ msgstr "Custom Login"
198
+
199
+ #: custom-login.php:640
200
+ msgid "Settings"
201
+ msgstr "Ayarlar"
202
+
203
+ #: custom-login.php:672
204
+ msgid "Support this plugin and buy me a beer"
205
+ msgstr "Bu eklentiyi destekle ve bana bir bira satın al"
206
+
207
+ #: custom-login.php:673
208
+ msgid "Rate this plugin on WordPress.org"
209
+ msgstr "WordPress.org üzerinde bu eklentiye oy ver"
210
+
211
+ #: custom-login.php:674
212
+ msgid ""
213
+ "Share your designs on <strong style=\"color:#0066DC;\">Flick</strong><strong "
214
+ "style=\"color:#ff0084;\">r</strong>"
215
+ msgstr ""
216
+ "Tasarımlarını <strong style=\"color:#0066DC;\">Flick</strong><strong style="
217
+ "\"color:#ff0084;\">r</strong> üzerinde paylaş"
218
+
219
+ #: custom-login.php:675
220
+ msgid "Get support on WordPress.org"
221
+ msgstr "WordPress.org üzerinde destek al"
222
+
223
+ #: custom-login.php:676
224
+ msgid "Contribute development on GitHub"
225
+ msgstr "GitHub üzerinde geliştirmeye katkıda bulun"
226
+
227
+ #: custom-login.php:677
228
+ msgid "Get Custom Login Add-ons"
229
+ msgstr "Custom Login Eklentileri Al"
230
+
231
+ #: custom-login.php:683
232
+ #, php-format
233
+ msgid "<a href=\"%s\">%s</a> | <code>version %s</code>"
234
+ msgstr "<a href=\"%s\">%s</a> | <code>sürüm %s</code>"
235
+
236
+ #: classes/class.settings-api.php:745
237
+ #, php-format
238
+ msgid "%1$s | <a href=\"%2$s\">Dismiss notice</a>"
239
+ msgstr "%1$s | <a href=\"%2$s\">Bildirimi yok say</a>"
240
+
241
+ #: classes/class.settings-api.php:930
242
+ msgid "Error fetching feed"
243
+ msgstr "Besleme getirme hatası"
244
+
245
+ #: classes/class.settings-api.php:941
246
+ msgid "Like Extendd on Facebook"
247
+ msgstr "Facebook üzerinde Extendd'i Beğen"
248
+
249
+ #: classes/class.settings-api.php:942
250
+ msgid "Follow Extendd on Twitter"
251
+ msgstr "Twitter üzerinde Extendd'i Takip et"
252
+
253
+ #: classes/class.settings-api.php:943
254
+ msgid "Follow Austin on Twitter"
255
+ msgstr "Twitter üzerinde Austin'i Takip et"
256
+
257
+ #: classes/class.settings-api.php:944
258
+ msgid "Circle Extendd on Google+"
259
+ msgstr "Google+ üzerinde Extendd'i ekle"
260
+
261
+ #: classes/class.settings-api.php:945
262
+ msgid "Subscribe via email"
263
+ msgstr "Eposta ile abone ol"
264
+
265
+ #: classes/class.settings-api.php:948
266
+ msgid "Latest plugins from Extendd.com"
267
+ msgstr "Extendd.com'dan en son eklentiler"
268
+
269
+ #: functions/post-types.php:25
270
+ msgid "Logins"
271
+ msgstr "GiriÅŸ"
272
+
273
+ #: functions/post-types.php:26
274
+ msgid "Login"
275
+ msgstr "GiriÅŸ"
276
+
277
+ #: functions/post-types.php:27
278
+ msgid "Add New"
279
+ msgstr "Yeni Ekle"
280
+
281
+ #: functions/post-types.php:28
282
+ msgid "Add New Login"
283
+ msgstr "Yeni GiriÅŸ Ekle"
284
+
285
+ #: functions/post-types.php:29
286
+ msgid "Edit Login"
287
+ msgstr "Girişi Düzenle"
288
+
289
+ #: functions/post-types.php:30
290
+ msgid "New Login"
291
+ msgstr "Yeni GiriÅŸ"
292
+
293
+ #: functions/post-types.php:31
294
+ msgid "All Logins"
295
+ msgstr "Tüm Girişler"
296
+
297
+ #: functions/post-types.php:32
298
+ msgid "View Login"
299
+ msgstr "Girişi Gör"
300
+
301
+ #: functions/post-types.php:33
302
+ msgid "Search Logins"
303
+ msgstr "GiriÅŸleri Ara"
304
+
305
+ #: functions/post-types.php:34
306
+ msgid "No Logins found"
307
+ msgstr "Herhangi bir Giriş bulunamadı"
308
+
309
+ #: functions/post-types.php:35
310
+ msgid "No Logins found in Trash"
311
+ msgstr "Çöpte herhangi bir Giriş bulunamadı"
312
+
313
+ #: functions/welcome.php:56 functions/welcome.php:57
314
+ msgid "Welcome to Custom Login"
315
+ msgstr "Custom Login'e HoÅŸ Geldiniz"
316
+
317
+ #: functions/welcome.php:111
318
+ #, php-format
319
+ msgid "Welcome to Custom Login %s"
320
+ msgstr "Custom Login %s HoÅŸ Geldiniz"
321
+
322
+ #: functions/welcome.php:112
323
+ #, php-format
324
+ msgid ""
325
+ "Thank you for updating to the latest version! Custom Login %s is ready to "
326
+ "make your login page better!"
327
+ msgstr ""
328
+ "Son sürüme güncellediğiniz için teşekkürler! Custom Login %s giriş sayfanızı "
329
+ "daha iyi hale getirmek için hazır!"
330
+
331
+ #: functions/welcome.php:113
332
+ #, php-format
333
+ msgid "Version %s"
334
+ msgstr "Sürüm %s"
335
+
336
+ #: functions/welcome.php:117
337
+ msgid "What's New"
338
+ msgstr "Neler Yeni"
339
+
340
+ #: functions/welcome.php:122
341
+ msgid "Improved Settings"
342
+ msgstr "GeliÅŸtirilmiÅŸ Ayarlar"
343
+
344
+ #: functions/welcome.php:126
345
+ msgid "Load times"
346
+ msgstr "Yükleme süreleri"
347
+
348
+ #: functions/welcome.php:127
349
+ msgid ""
350
+ "There were issues in the past version that had the plugin loading on pages "
351
+ "it wasn't supposted to. <strong>CL</strong> now caches all queries and "
352
+ "database calls."
353
+ msgstr ""
354
+ "Önceki sürümünde, eklentinin sayfalarda yüklenmesiyle ilgili istenmeyen "
355
+ "sorunları vardı. <strong>CL</strong> artık tüm sorguları ve veritabanı "
356
+ "çağrılarını önbelleğe alır."
357
+
358
+ #: functions/welcome.php:129
359
+ msgid "Better features"
360
+ msgstr "Daha iyi özellikler"
361
+
362
+ #: functions/welcome.php:130
363
+ #, php-format
364
+ msgid ""
365
+ "With a complete rewrite of the plugin, I have to ability to build custom add-"
366
+ "ons (think extensions), like stealth login, email logins and 2-step "
367
+ "authentication to name a few of the add-ons you can find on %sExtendd.com%s "
368
+ "in the future."
369
+ msgstr ""
370
+ "Eklentiyi tamamen yeniden yazmam ile, kiÅŸisel eklentiler yazma yeteÄŸim var "
371
+ "(uzantıları düşün), gizli giriş, eposta girişleri ve 2 adım kimlik doğrulama "
372
+ "gibi ileride %sExtendd.com%s üzerinde bulabileceğiniz birkaç eklenti ismi "
373
+ "verebilirim."
374
+
375
+ #: functions/welcome.php:136
376
+ msgid "Under the Hood"
377
+ msgstr "Kaputun Altı"
378
+
379
+ #: functions/welcome.php:140
380
+ msgid "Settings Class"
381
+ msgstr "Ayarlar Sınıfı"
382
+
383
+ #: functions/welcome.php:141
384
+ #, php-format
385
+ msgid ""
386
+ "The new settings class allows to add your own add-ons! Documentation can be "
387
+ "found on the %sExtendd.com%s site."
388
+ msgstr ""
389
+ "Yeni ayarlar sınıfı kendi eklentilerinizi eklemenize izin verir! Belgeler "
390
+ "%sExtendd.com%s sitesinde bulunabilir."
391
+
392
+ #: functions/welcome.php:145
393
+ msgid "Templates"
394
+ msgstr "Åžablonlar"
395
+
396
+ #: functions/welcome.php:146
397
+ #, php-format
398
+ msgid ""
399
+ "Custom login %stemplates%s can be created in your theme using the new login "
400
+ "template add-on (coming soon)."
401
+ msgstr ""
402
+ "Custom login %sşablonları%s yeni login template eklentisi ile (yakında "
403
+ "geliyor) temanızın içinde oluşturulabilir."
404
+
405
+ #: functions/welcome.php:156
406
+ msgid "Go to Custom Login Settings"
407
+ msgstr "Custom Login Ayarlarına Gidin"
408
+
409
+ #: functions/upgrades/upgrades.php:25
410
+ msgid "Custom Login - Upgrades"
411
+ msgstr "Custom Login - Yükseltmeler"
412
+
413
+ #: functions/upgrades/upgrades.php:28
414
+ msgid ""
415
+ "The upgrade process has started, please be patient. This could take several "
416
+ "minutes. You will be automatically redirected when the upgrade is finished."
417
+ msgstr ""
418
+ "Yükseltme işlemi başladı, lütfen sabırlı olun. Bu işlem birkaç dakika "
419
+ "sürebilir. Yükseltme bittiğinde otomatik olarak yönlendirileceksiniz."
420
+
421
+ #: functions/upgrades/upgrades.php:59
422
+ msgid "Custom Login Upgrades"
423
+ msgstr "Custom Login Yükseltmeleri"
languages/custom-login.mo CHANGED
Binary file
languages/custom-login.po CHANGED
@@ -1,158 +1,489 @@
1
- # Translation of the WordPress plugin Custom Login 0.8 by Austin Passy.
2
- # Copyright (C) 2010 Austin Passy
3
- # This file is distributed under the same license as the Custom Login package.
4
- # FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
5
- #
6
- msgid ""
7
- msgstr ""
8
- "Project-Id-Version: Custom Login\n"
9
- "Report-Msgid-Bugs-To: http://wordpress.org/tag/custom-login\n"
10
- "POT-Creation-Date: 2010-09-16 22:04+0000\n"
11
- "PO-Revision-Date: 2012-10-02 11:38-0800\n"
12
- "Last-Translator: Austin Passy <austin@thefrosty.com>\n"
13
  "Language-Team: \n"
 
14
  "MIME-Version: 1.0\n"
15
  "Content-Type: text/plain; charset=UTF-8\n"
16
  "Content-Transfer-Encoding: 8bit\n"
17
- "X-Poedit-KeywordsList: __;_e\n"
 
18
  "X-Poedit-Basepath: .\n"
 
 
 
19
 
20
- #. #-#-#-#-# plugin.pot (Custom Login 0.8) #-#-#-#-#
21
- #. Plugin Name of the plugin/theme
22
- #: library/admin/admin.php:70
23
- msgid "Custom Login"
 
24
  msgstr ""
25
 
26
- #: library/admin/admin.php:215
27
- msgid "Avtivation &mdash; <em>to infinity and beyond</em>"
28
  msgstr ""
29
 
30
- #: library/admin/admin.php:217
31
- msgid "Announcements"
32
  msgstr ""
33
 
34
- #: library/admin/admin.php:219
35
- msgid "General Settings"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  msgstr ""
37
 
38
- #: library/admin/admin.php:221
39
- msgid "Advanced Settings"
40
  msgstr ""
41
 
42
- #: library/admin/admin.php:223
43
- msgid "About Custom Login"
44
  msgstr ""
45
 
46
- #: library/admin/admin.php:225
47
- msgid "Support Custom Login"
48
  msgstr ""
49
 
50
- #: library/admin/admin.php:227
51
- msgid "Preview your work, <em>Master</em>"
52
  msgstr ""
53
 
54
- #: library/admin/admin.php:229
55
- msgid "TheFrosty Network"
56
  msgstr ""
57
 
58
- #: library/admin/admin.php:242
59
- msgid "Activate:"
60
  msgstr ""
61
 
62
- #: library/admin/admin.php:253
63
- msgid "Gravatar:"
64
  msgstr ""
65
 
66
- #: library/admin/admin.php:286
67
- msgid "Plugin:"
68
  msgstr ""
69
 
70
- #: library/admin/admin.php:290
71
- msgid "Author:"
72
  msgstr ""
73
 
74
- #: library/admin/admin.php:294
75
- msgid "Description:"
76
  msgstr ""
77
 
78
- #: library/admin/admin.php:309
79
- msgid "Donate:"
 
 
 
 
 
 
 
 
 
 
 
80
  msgstr ""
81
 
82
- #: library/admin/admin.php:310
83
- msgid "<a href=\"https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=X4JPT57AWMTYW\">PayPal</a>."
84
  msgstr ""
85
 
86
- #: library/admin/admin.php:313
87
- msgid "Rate:"
88
  msgstr ""
89
 
90
- #: library/admin/admin.php:314
91
- msgid "<a href=\"http://wordpress.org/extend/plugins/custom-login/\">This plugin on WordPress.org</a>."
92
  msgstr ""
93
 
94
- #: library/admin/admin.php:317
95
- msgid "Share:"
96
  msgstr ""
97
 
98
- #: library/admin/admin.php:318
99
- msgid "Your design on <a href=\"http://www.flickr.com/groups/custom-login/\"><span style=\"color:#0066DC;font-weight:bold;\">Flick</span><span style=\"color:#ff0084;font-weight:bold;\">r</span></a>."
100
  msgstr ""
101
 
102
- #: library/admin/admin.php:321
103
- msgid "Support:"
104
  msgstr ""
105
 
106
- #: library/admin/admin.php:322
107
- msgid "<a href=\"http://wordpress.org/tags/custom-login\">WordPress support forums</a>."
108
  msgstr ""
109
 
110
- #: library/admin/admin.php:347
111
- msgid "Custom CSS:"
112
  msgstr ""
113
 
114
- #: library/admin/admin.php:362
115
- msgid "Custom HTML:"
116
  msgstr ""
117
 
118
- #: library/admin/admin.php:602
119
- msgid "Don&prime;t you feel good. You just saved me."
120
  msgstr ""
121
 
122
- #: library/admin/admin.php:620
 
123
  msgid "Custom Login Settings"
124
  msgstr ""
125
 
126
- #: library/admin/admin.php:639
127
- msgid "Update Settings"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
  msgstr ""
129
 
130
- #: library/admin/admin.php:704
131
  msgid "Settings"
132
  msgstr ""
133
 
134
- #: library/admin/admin.php:723
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  #, php-format
136
- msgid "Custom Login plugin is not configured yet. It will use the defualt theme unless you configure the %1$s."
137
  msgstr ""
138
 
139
- #: library/admin/dashboard.php:9
140
- msgid "The Frosty Network <em>feeds</em>"
 
 
141
  msgstr ""
142
 
143
- #. Plugin URI of the plugin/theme
144
- msgid "http://austinpassy.com/wordpress-plugins/custom-login"
 
 
 
 
 
145
  msgstr ""
146
 
147
- #. Description of the plugin/theme
148
- msgid "A simple way to customize your WordPress login screen! Use the built in, easy to use <a href=\"./options-general.php?page=custom-login\">settings</a> page to do the work for you. So simple a caveboy can do it! Now featuring a HTML &amp; CSS box for advanced users. Share you designs on <a href=\"http://flickr.com/groups/custom-login/\">Flickr</a>!"
 
 
 
 
149
  msgstr ""
150
 
151
- #. Author of the plugin/theme
152
- msgid "Austin Passy"
153
  msgstr ""
154
 
155
- #. Author URI of the plugin/theme
156
- msgid "http://frostywebdesigns.com"
 
157
  msgstr ""
158
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Custom Login 2.0\n"
4
+ "POT-Creation-Date: 2014-01-23 16:36-0800\n"
5
+ "PO-Revision-Date: 2014-01-23 16:36-0800\n"
6
+ "Last-Translator: \n"
 
 
 
 
 
 
7
  "Language-Team: \n"
8
+ "Language: en\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.6.3\n"
13
+ "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e;_x\n"
14
  "X-Poedit-Basepath: .\n"
15
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
16
+ "X-Poedit-SearchPath-0: .\n"
17
+ "X-Poedit-SearchPath-1: ..\n"
18
 
19
+ #: ../custom-login.php:146
20
+ #, php-format
21
+ msgid ""
22
+ "Custom Login has been deactivated because it requires a WordPress version "
23
+ "greater than 3.5. You are running <code>%s</code>"
24
  msgstr ""
25
 
26
+ #: ../custom-login.php:348
27
+ msgid "General Settings"
28
  msgstr ""
29
 
30
+ #: ../custom-login.php:356
31
+ msgid "Activate"
32
  msgstr ""
33
 
34
+ #: ../custom-login.php:357
35
+ msgid "Toggle this plugin on &amp; off."
36
+ msgstr ""
37
+
38
+ #: ../custom-login.php:363
39
+ msgid "<h4><abbr title=\"Hyper Text Markup Language\">HTML</abbr></h4>"
40
+ msgstr ""
41
+
42
+ #: ../custom-login.php:370
43
+ msgid "HTML Background Color"
44
+ msgstr ""
45
+
46
+ #: ../custom-login.php:377
47
+ msgid "HTML Background Image"
48
+ msgstr ""
49
+
50
+ #: ../custom-login.php:378
51
+ msgid "Upload an image or a repeating pattern (optional)."
52
+ msgstr ""
53
+
54
+ #: ../custom-login.php:386
55
+ msgid "HTML Background Position"
56
+ msgstr ""
57
+
58
+ #: ../custom-login.php:387 ../custom-login.php:469 ../custom-login.php:544
59
+ #, php-format
60
+ msgid "<a href=\"%s\" target=\"_blank\">html background position</a>."
61
+ msgstr ""
62
+
63
+ #: ../custom-login.php:403
64
+ msgid "HTML Background repeat"
65
+ msgstr ""
66
+
67
+ #: ../custom-login.php:415
68
+ msgid "HTML Background size"
69
+ msgstr ""
70
+
71
+ #: ../custom-login.php:428
72
+ msgid "<h4>Logo</h4>"
73
+ msgstr ""
74
+
75
+ #: ../custom-login.php:435
76
+ msgid "Hide the WP logo"
77
+ msgstr ""
78
+
79
+ #: ../custom-login.php:436
80
+ msgid ""
81
+ "Works when there is no logo present, otherwise the WP logo is replaced by "
82
+ "your logo."
83
+ msgstr ""
84
+
85
+ #: ../custom-login.php:441
86
+ msgid "Logo"
87
+ msgstr ""
88
+
89
+ #: ../custom-login.php:442
90
+ msgid "Replace the WordPress logo (optional)."
91
+ msgstr ""
92
+
93
+ #: ../custom-login.php:450
94
+ msgid "Logo Image width"
95
+ msgstr ""
96
+
97
+ #: ../custom-login.php:451 ../custom-login.php:460
98
+ msgid "Enter your image size in \"pixels\" without the \"px\""
99
+ msgstr ""
100
+
101
+ #: ../custom-login.php:459
102
+ msgid "Logo Image height"
103
+ msgstr ""
104
+
105
+ #: ../custom-login.php:468
106
+ msgid "Logo Background Position"
107
+ msgstr ""
108
+
109
+ #: ../custom-login.php:485
110
+ msgid "Logo Background repeat"
111
+ msgstr ""
112
+
113
+ #: ../custom-login.php:497
114
+ msgid "Logo Background size"
115
+ msgstr ""
116
+
117
+ #: ../custom-login.php:510
118
+ msgid "Logo Background size (custom)"
119
+ msgstr ""
120
+
121
+ #: ../custom-login.php:511
122
+ #, php-format
123
+ msgid ""
124
+ "Use size values in format \"INT unit INT unit\". Example: 10px 15px or 55px "
125
+ "55px etc. %sNote: Logo Background size MUST be set to none.%s"
126
+ msgstr ""
127
+
128
+ #: ../custom-login.php:520
129
+ msgid "<h4>Login form</h4>"
130
  msgstr ""
131
 
132
+ #: ../custom-login.php:527
133
+ msgid "Login Form Background Color"
134
  msgstr ""
135
 
136
+ #: ../custom-login.php:534
137
+ msgid "Login Form Background URL"
138
  msgstr ""
139
 
140
+ #: ../custom-login.php:535
141
+ msgid "Add an image to the form (optional)."
142
  msgstr ""
143
 
144
+ #: ../custom-login.php:543
145
+ msgid "Login Form Background Position"
146
  msgstr ""
147
 
148
+ #: ../custom-login.php:560
149
+ msgid "Login Form Background repeat"
150
  msgstr ""
151
 
152
+ #: ../custom-login.php:572
153
+ msgid "Login Form Background size"
154
  msgstr ""
155
 
156
+ #: ../custom-login.php:584
157
+ msgid "Login Form Border Radius"
158
  msgstr ""
159
 
160
+ #: ../custom-login.php:593
161
+ msgid "Login Form Border Size"
162
  msgstr ""
163
 
164
+ #: ../custom-login.php:602
165
+ msgid "Login Form Border Color"
166
  msgstr ""
167
 
168
+ #: ../custom-login.php:609
169
+ msgid "Login Form Box Shadow"
170
  msgstr ""
171
 
172
+ #: ../custom-login.php:610
173
+ #, php-format
174
+ msgid ""
175
+ "Use <a href=\"%s\" target=\"_blank\">box shadow</a> syntax w/ out color. "
176
+ "<code>inset h-shadow v-shadow blur spread</code>"
177
+ msgstr ""
178
+
179
+ #: ../custom-login.php:617
180
+ msgid "Login Form Box Shadow Color"
181
+ msgstr ""
182
+
183
+ #: ../custom-login.php:625
184
+ msgid "<h4>Misc.</h4>"
185
  msgstr ""
186
 
187
+ #: ../custom-login.php:632
188
+ msgid "Login Form Label Color"
189
  msgstr ""
190
 
191
+ #: ../custom-login.php:640
192
+ msgid "<h4>Below form anchor</h4>"
193
  msgstr ""
194
 
195
+ #: ../custom-login.php:647
196
+ msgid "Below form nav color"
197
  msgstr ""
198
 
199
+ #: ../custom-login.php:654
200
+ msgid "Below form nav text-shadow color"
201
  msgstr ""
202
 
203
+ #: ../custom-login.php:661
204
+ msgid "Below form nav color hover"
205
  msgstr ""
206
 
207
+ #: ../custom-login.php:668
208
+ msgid "Below form nav text-shadow hover"
209
  msgstr ""
210
 
211
+ #: ../custom-login.php:676
212
+ msgid "<h4>Custom HTML/CSS &amp; jQuery</h4>"
213
  msgstr ""
214
 
215
+ #: ../custom-login.php:683
216
+ msgid "Custom CSS"
217
  msgstr ""
218
 
219
+ #: ../custom-login.php:690
220
+ msgid "Custom HTML"
221
  msgstr ""
222
 
223
+ #: ../custom-login.php:697
224
+ msgid "Custom jQuery"
225
  msgstr ""
226
 
227
+ #: ../custom-login.php:723 ../functions/install.php:32
228
+ #: ../functions/install.php:40
229
  msgid "Custom Login Settings"
230
  msgstr ""
231
 
232
+ #: ../custom-login.php:723 ../functions/post-types.php:37
233
+ msgid "Custom Login"
234
+ msgstr ""
235
+
236
+ #: ../custom-login.php:735
237
+ msgid ""
238
+ "If your stylesheet isn't updating click update above to delete the transient "
239
+ "cache."
240
+ msgstr ""
241
+
242
+ #: ../custom-login.php:751
243
+ msgid "Clear stylesheet cache"
244
+ msgstr ""
245
+
246
+ #: ../custom-login.php:790
247
+ msgid "The cache has been deleted."
248
  msgstr ""
249
 
250
+ #: ../custom-login.php:809
251
  msgid "Settings"
252
  msgstr ""
253
 
254
+ #: ../custom-login.php:847
255
+ msgid "Support this plugin and buy me a beer"
256
+ msgstr ""
257
+
258
+ #: ../custom-login.php:848
259
+ msgid "Rate this plugin on WordPress.org"
260
+ msgstr ""
261
+
262
+ #: ../custom-login.php:849
263
+ msgid ""
264
+ "Share your designs on <strong style=\"color:#0066DC;\">Flick</strong><strong "
265
+ "style=\"color:#ff0084;\">r</strong>"
266
+ msgstr ""
267
+
268
+ #: ../custom-login.php:850
269
+ msgid "Get support on WordPress.org"
270
+ msgstr ""
271
+
272
+ #: ../custom-login.php:851
273
+ msgid "Contribute development on GitHub"
274
+ msgstr ""
275
+
276
+ #: ../custom-login.php:852
277
+ msgid "Get Custom Login Extensions"
278
+ msgstr ""
279
+
280
+ #: ../custom-login.php:861
281
  #, php-format
282
+ msgid "<a href=\"%s\">%s</a> | <code>version %s</code>"
283
  msgstr ""
284
 
285
+ #: ../custom-login.php:871
286
+ msgid ""
287
+ "<a href=\"#\" data-toggle=\"extendd-license\">Please read!</a> | <a href=\"#"
288
+ "\" data-toggle=\"extendd-license-help\">Help</a>"
289
  msgstr ""
290
 
291
+ #: ../custom-login.php:873
292
+ #, php-format
293
+ msgid ""
294
+ "<span id=\"extendd-license\" style=\"display:none\">Most of these extensions "
295
+ "require a license key which can be purchased on <a href=\"%1$s\" target="
296
+ "\"_blank\">%2$s</a>. You'll have to have the key ready to install the "
297
+ "extension.</span>"
298
  msgstr ""
299
 
300
+ #: ../custom-login.php:875
301
+ msgid ""
302
+ "<span id=\"extendd-license-help\" style=\"display:none\">Click \"install\" "
303
+ "to auto-install the extension on your site (which will also auto-activate "
304
+ "it).<br>Free extensions will auto-install, while paid extensions will need a "
305
+ "valid license key.</span>"
306
  msgstr ""
307
 
308
+ #: ../custom-login.php:902
309
+ msgid "Custom Login Extensions"
310
  msgstr ""
311
 
312
+ #: ../classes/class.settings-api.php:356
313
+ #, php-format
314
+ msgid "<label for=\"%1$s[%2$s]\">Opacity</label>"
315
  msgstr ""
316
 
317
+ #: ../classes/class.settings-api.php:820
318
+ #, php-format
319
+ msgid "%1$s | <a href=\"%2$s\">Dismiss notice</a>"
320
+ msgstr ""
321
+
322
+ #: ../classes/class.settings-api.php:1005
323
+ msgid "Error fetching feed"
324
+ msgstr ""
325
+
326
+ #: ../classes/class.settings-api.php:1016
327
+ msgid "Like Extendd on Facebook"
328
+ msgstr ""
329
+
330
+ #: ../classes/class.settings-api.php:1017
331
+ msgid "Follow Extendd on Twitter"
332
+ msgstr ""
333
+
334
+ #: ../classes/class.settings-api.php:1018
335
+ msgid "Follow Austin on Twitter"
336
+ msgstr ""
337
+
338
+ #: ../classes/class.settings-api.php:1019
339
+ msgid "Circle Extendd on Google+"
340
+ msgstr ""
341
+
342
+ #: ../classes/class.settings-api.php:1020
343
+ msgid "Subscribe via email"
344
+ msgstr ""
345
+
346
+ #: ../classes/class.settings-api.php:1023
347
+ msgid "Latest plugins from Extendd.com"
348
+ msgstr ""
349
+
350
+ #: ../classes/welcome.php:56 ../classes/welcome.php:57
351
+ msgid "Welcome to Custom Login"
352
+ msgstr ""
353
+
354
+ #: ../classes/welcome.php:111
355
+ #, php-format
356
+ msgid "Welcome to Custom Login %s"
357
+ msgstr ""
358
+
359
+ #: ../classes/welcome.php:112
360
+ #, php-format
361
+ msgid ""
362
+ "Thank you for updating to the latest version! Custom Login %s is ready to "
363
+ "make your login page better!"
364
+ msgstr ""
365
+
366
+ #: ../classes/welcome.php:113
367
+ #, php-format
368
+ msgid "Version %s"
369
+ msgstr ""
370
+
371
+ #: ../classes/welcome.php:117
372
+ msgid "What's New"
373
+ msgstr ""
374
+
375
+ #: ../classes/welcome.php:122
376
+ msgid "Improved Settings"
377
+ msgstr ""
378
+
379
+ #: ../classes/welcome.php:126
380
+ msgid "Load times"
381
+ msgstr ""
382
+
383
+ #: ../classes/welcome.php:127
384
+ msgid ""
385
+ "There were issues in the past version that had the plugin loading on pages "
386
+ "it wasn't supposted to. <strong>CL</strong> now caches all queries and "
387
+ "database calls."
388
+ msgstr ""
389
+
390
+ #: ../classes/welcome.php:129
391
+ msgid "Better features"
392
+ msgstr ""
393
+
394
+ #: ../classes/welcome.php:130
395
+ #, php-format
396
+ msgid ""
397
+ "With a complete rewrite of the plugin, I have to ability to build custom add-"
398
+ "ons (think extensions), like stealth login, email logins and 2-step "
399
+ "authentication to name a few of the add-ons you can find on %sExtendd.com%s "
400
+ "in the future."
401
+ msgstr ""
402
+
403
+ #: ../classes/welcome.php:136
404
+ msgid "Under the Hood"
405
+ msgstr ""
406
+
407
+ #: ../classes/welcome.php:140
408
+ msgid "Settings Class"
409
+ msgstr ""
410
+
411
+ #: ../classes/welcome.php:141
412
+ #, php-format
413
+ msgid ""
414
+ "The new settings class allows to add your own add-ons! Documentation can be "
415
+ "found on the %sExtendd.com%s site."
416
+ msgstr ""
417
+
418
+ #: ../classes/welcome.php:145
419
+ msgid "Templates"
420
+ msgstr ""
421
+
422
+ #: ../classes/welcome.php:146
423
+ #, php-format
424
+ msgid ""
425
+ "Custom login %stemplates%s can be created in your theme using the new login "
426
+ "template add-on (coming soon)."
427
+ msgstr ""
428
+
429
+ #: ../classes/welcome.php:156
430
+ msgid "Go to Custom Login Settings"
431
+ msgstr ""
432
+
433
+ #: ../functions/post-types.php:25
434
+ msgid "Logins"
435
+ msgstr ""
436
+
437
+ #: ../functions/post-types.php:26
438
+ msgid "Login"
439
+ msgstr ""
440
+
441
+ #: ../functions/post-types.php:27
442
+ msgid "Add New"
443
+ msgstr ""
444
+
445
+ #: ../functions/post-types.php:28
446
+ msgid "Add New Login"
447
+ msgstr ""
448
+
449
+ #: ../functions/post-types.php:29
450
+ msgid "Edit Login"
451
+ msgstr ""
452
+
453
+ #: ../functions/post-types.php:30
454
+ msgid "New Login"
455
+ msgstr ""
456
+
457
+ #: ../functions/post-types.php:31
458
+ msgid "All Logins"
459
+ msgstr ""
460
+
461
+ #: ../functions/post-types.php:32
462
+ msgid "View Login"
463
+ msgstr ""
464
+
465
+ #: ../functions/post-types.php:33
466
+ msgid "Search Logins"
467
+ msgstr ""
468
+
469
+ #: ../functions/post-types.php:34
470
+ msgid "No Logins found"
471
+ msgstr ""
472
+
473
+ #: ../functions/post-types.php:35
474
+ msgid "No Logins found in Trash"
475
+ msgstr ""
476
+
477
+ #: ../functions/upgrades/upgrades.php:25
478
+ msgid "Custom Login - Upgrades"
479
+ msgstr ""
480
+
481
+ #: ../functions/upgrades/upgrades.php:28
482
+ msgid ""
483
+ "The upgrade process has started, please be patient. This could take several "
484
+ "minutes. You will be automatically redirected when the upgrade is finished."
485
+ msgstr ""
486
+
487
+ #: ../functions/upgrades/upgrades.php:59
488
+ msgid "Custom Login Upgrades"
489
+ msgstr ""
languages/custom-login.pot CHANGED
@@ -1,404 +1,399 @@
1
- # Copyright (C) 2012 Custom Login lite
2
- # This file is distributed under the same license as the Custom Login lite package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Custom Login lite 1.0.1\n"
6
- "Report-Msgid-Bugs-To: http://wordpress.org/tag/custom-login\n"
7
- "POT-Creation-Date: 2012-04-02 16:51:21+00:00\n"
 
 
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2012-MO-DA HO:MI+ZONE\n"
12
- "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
- "Language-Team: LANGUAGE <LL@li.org>\n"
 
14
 
15
- #: library/admin/admin.php:74
16
- msgid "Custom Login"
 
17
  msgstr ""
18
 
19
- #: library/admin/admin.php:75
20
- msgid "Custom Login Upgrade"
21
  msgstr ""
22
 
23
- #: library/admin/admin.php:75 library/admin/admin.php:964
24
- msgid "Upgrade"
25
  msgstr ""
26
 
27
- #: library/admin/admin.php:271
28
- msgid "Avtivation &mdash; <em>to infinity and beyond</em>"
29
  msgstr ""
30
 
31
- #: library/admin/admin.php:273
32
- msgid "Announcements"
33
  msgstr ""
34
 
35
- #: library/admin/admin.php:275
36
- msgid "About Custom Login"
37
  msgstr ""
38
 
39
- #: library/admin/admin.php:277
40
- msgid "Support Custom Login"
41
  msgstr ""
42
 
43
- #: library/admin/admin.php:279
44
- msgid "Dashboard Widget"
45
  msgstr ""
46
 
47
- #: library/admin/admin.php:281
48
- msgid "Preview your work, <em>Master</em>"
49
  msgstr ""
50
 
51
- #: library/admin/admin.php:285 library/admin/admin.php:286
52
- msgid "Upgrade Custom Login"
 
 
53
  msgstr ""
54
 
55
- #: library/admin/admin.php:288
56
- msgid "General Settings"
57
  msgstr ""
58
 
59
- #: library/admin/admin.php:290
60
- msgid "Advanced Settings"
61
  msgstr ""
62
 
63
- #: library/admin/admin.php:292
64
- msgid "TheFrosty Network"
65
  msgstr ""
66
 
67
- #: library/admin/admin.php:305
68
- msgid "Activate:"
69
  msgstr ""
70
 
71
- #: library/admin/admin.php:310
72
- msgid ""
73
- "Check this box to use your own CSS, leave unchecked to use the default style."
74
  msgstr ""
75
 
76
- #: library/admin/admin.php:315
77
- msgid "Gravatar:"
78
  msgstr ""
79
 
80
- #: library/admin/admin.php:320
81
- msgid "This feature only works for sites with registration enabled."
82
  msgstr ""
83
 
84
- #: library/admin/admin.php:320
85
- msgid "Check this box to activate a AJAX Gravatar image for registration."
86
  msgstr ""
87
 
88
- #: library/admin/admin.php:347
89
- msgid "Plugin:"
90
  msgstr ""
91
 
92
- #: library/admin/admin.php:351
93
- msgid "Author:"
94
  msgstr ""
95
 
96
- #: library/admin/admin.php:355
97
- msgid "Description:"
98
  msgstr ""
99
 
100
- #: library/admin/admin.php:393
101
- msgid "Thanks for purchasing the plugin! Here is your download link: "
102
  msgstr ""
103
 
104
- #: library/admin/admin.php:425
105
- msgid "Hide the upgrade form?"
106
  msgstr ""
107
 
108
- #: library/admin/admin.php:434
109
- msgid ""
110
- "Want to upgrade to Pro? If you've purchase the plugin login below to get "
111
- "your download link. Need a login? Click %s to purchase the plugin."
112
  msgstr ""
113
 
114
- #: library/admin/admin.php:466
115
- msgid "Upgrade to Custom Login PRO"
116
  msgstr ""
117
 
118
- #: library/admin/admin.php:470
119
- msgid "You have already downloaded the plugin, download again?"
120
  msgstr ""
121
 
122
- #: library/admin/admin.php:471 library/admin/admin.php:899
123
- msgid "Get download link"
124
  msgstr ""
125
 
126
- #: library/admin/admin.php:485
127
- msgid "Donate:"
128
  msgstr ""
129
 
130
- #: library/admin/admin.php:486
131
- msgid ""
132
- "<a href=\"https://www.paypal.com/cgi-bin/webscr?cmd=_s-"
133
- "xclick&hosted_button_id=X4JPT57AWMTYW\">PayPal</a>."
134
  msgstr ""
135
 
136
- #: library/admin/admin.php:489
137
- msgid "Rate:"
 
138
  msgstr ""
139
 
140
- #: library/admin/admin.php:490
141
- msgid ""
142
- "<a href=\"http://wordpress.org/extend/plugins/custom-login/\">This plugin on "
143
- "WordPress.org</a>."
144
  msgstr ""
145
 
146
- #: library/admin/admin.php:493
147
- msgid "Share:"
148
  msgstr ""
149
 
150
- #: library/admin/admin.php:494
151
- msgid ""
152
- "Your design on <a href=\"http://www.flickr.com/groups/custom-login/\"><span "
153
- "style=\"color:#0066DC;font-weight:bold;\">Flick</span><span style=\"color:"
154
- "#ff0084;font-weight:bold;\">r</span></a>."
155
  msgstr ""
156
 
157
- #: library/admin/admin.php:497
158
- msgid "Support:"
159
  msgstr ""
160
 
161
- #: library/admin/admin.php:498
162
- msgid ""
163
- "<a href=\"http://wordpress.org/tags/custom-login\">WordPress support forums</"
164
- "a>."
165
  msgstr ""
166
 
167
- #: library/admin/admin.php:501
168
- msgid "Go PRO:"
169
  msgstr ""
170
 
171
- #: library/admin/admin.php:517
172
- msgid "Dashboard:"
173
  msgstr ""
174
 
175
- #: library/admin/admin.php:521
176
- msgid "Hide the dashboard widget?"
177
  msgstr ""
178
 
179
- #: library/admin/admin.php:534
180
- msgid "Click here to see a live preview!"
181
  msgstr ""
182
 
183
- #: library/admin/admin.php:535
184
- msgid "(May not work as of WordPress 3.1.1)"
185
  msgstr ""
186
 
187
- #: library/admin/admin.php:554
188
- msgid "html border-top color:"
189
  msgstr ""
190
 
191
- #: library/admin/admin.php:559
192
- msgid ""
193
- "Use HEX color <strong>with</strong> &ldquo;#&rdquo; <strong>or</strong> RGB/"
194
- "A format.<br />\r\n"
195
- "\t\t\t\t<strong>This is the top 15px border color section</strong><br />\r\n"
196
- "\t\t\t\tExample: &sup1;<code>#121212</code> &sup2;<code>rgba(255,255,255,0.4)"
197
- "</code>"
198
  msgstr ""
199
 
200
- #: library/admin/admin.php:568
201
- msgid "html border-top background:"
202
  msgstr ""
203
 
204
- #: library/admin/admin.php:574
205
- msgid ""
206
- "This can replace the new background image at the top of the login screen. "
207
- "Upload an image and put the full path here.<br />\r\n"
208
- " Suggested size: <code>1px X 31px</code> (for a repeating "
209
- "background)."
210
  msgstr ""
211
 
212
- #: library/admin/admin.php:582
213
- msgid "html background color:"
214
  msgstr ""
215
 
216
- #: library/admin/admin.php:587
217
  msgid ""
218
- "Use HEX color <strong>with</strong> &ldquo;#&rdquo; <strong>or</strong> RGB/"
219
- "A format.<br />\r\n"
220
- "\t\t\t\tExample: &sup1;<code>#121212</code> &sup2;<code>rgba(255,255,255,0.4)"
221
- "</code>"
222
  msgstr ""
223
 
224
- #: library/admin/admin.php:595
225
- msgid "html background url:"
226
  msgstr ""
227
 
228
- #: library/admin/admin.php:601
229
- msgid ""
230
- "Upload an image and put the full path here.<br />\r\n"
231
- " Suggested size: <code>10px X 500px</code> (for a repeating "
232
- "background) or<br />\r\n"
233
- " Full size image with a 100% stretched to fit window image."
234
  msgstr ""
235
 
236
- #: library/admin/admin.php:610
237
- msgid "html background repeat:"
238
  msgstr ""
239
 
240
- #: library/admin/admin.php:615
241
- msgid ""
242
- "Use <code>no-repeat</code>, <code>repeat</code>, <code>repeat-x</code> or "
243
- "<code>repeat.</code>"
244
  msgstr ""
245
 
246
- #: library/admin/admin.php:622
247
- msgid "Logo:"
 
248
  msgstr ""
249
 
250
- #: library/admin/admin.php:628
251
- msgid ""
252
- "Upload an image and put the full path here.<br />\r\n"
253
- " Suggested size: <code>310px X 70px</code>, which will "
254
- "replace WordPress logo. Be sure to leave blank if not in use. NOTE: Will go "
255
- "<strong>above</strong> the form and it&prime;s border."
256
  msgstr ""
257
 
258
- #: library/admin/admin.php:637
259
- msgid "login form background color:"
260
  msgstr ""
261
 
262
- #: library/admin/admin.php:642 library/admin/admin.php:691
263
- #: library/admin/admin.php:732
264
- msgid ""
265
- "Use HEX color <strong>with</strong> &ldquo;#&rdquo; or RGB/A format.<br />"
266
- "\r\n"
267
- "\t\t\t\tExample: &sup1;<code>#121212</code> &sup2;<code>rgba(255,255,255,0.4)"
268
- "</code>"
269
  msgstr ""
270
 
271
- #: library/admin/admin.php:650
272
- msgid "login form background url:"
273
  msgstr ""
274
 
275
- #: library/admin/admin.php:664
276
- msgid "login form border radius:"
277
  msgstr ""
278
 
279
- #: library/admin/admin.php:669
280
- msgid ""
281
- "Choose your border radius, ie <code>8</code> or <code>12</code>. Do not put "
282
- "&ldquo;<strong>px</strong>&rdquo;!"
283
  msgstr ""
284
 
285
- #: library/admin/admin.php:675
286
- msgid "login form border thickness:"
287
  msgstr ""
288
 
289
- #: library/admin/admin.php:680
290
- msgid ""
291
- "Choose your border thickness, i.e. <code>1</code> or <code>2</code>. Do not "
292
- "put &ldquo;<strong>px</strong>&rdquo;!"
293
  msgstr ""
294
 
295
- #: library/admin/admin.php:686
296
- msgid "login form border color:"
297
  msgstr ""
298
 
299
- #: library/admin/admin.php:699
300
- msgid "login form box shadow:"
301
  msgstr ""
302
 
303
- #: library/admin/admin.php:707
304
- msgid ""
305
- "Choose your box shadow settings, i.e. <code>5px 5px 18px #464646</code> "
306
- "<em>example code - <code>offset, offset, blur, color</code></em>."
307
  msgstr ""
308
 
309
- #: library/admin/admin.php:714
310
- msgid "login form padding fix:"
311
  msgstr ""
312
 
313
- #: library/admin/admin.php:719
314
- msgid "Select the box if you would like the padding of the form to fit better."
315
  msgstr ""
316
 
317
- #: library/admin/admin.php:728
318
- msgid "label font color:"
319
  msgstr ""
320
 
321
- #: library/admin/admin.php:750
322
- msgid "Custom CSS:"
323
  msgstr ""
324
 
325
- #: library/admin/admin.php:755
326
- msgid ""
327
- "Use this box to enter any custom CSS code that may not be shown below.<br />"
328
- "\r\n"
329
- " <strong>Example:</strong> <code>.login #backtoblog a { color:"
330
- "#990000; }</code><br />\r\n"
331
- " &sect; <strong>Example:</strong> <code>#snow { display:"
332
- "block; position:absolute; } #snow img { height:auto; width:100%; }</"
333
- "code><br />\r\n"
334
- " &sect; example CSS code for custom html code example.."
335
  msgstr ""
336
 
337
- #: library/admin/admin.php:765
338
- msgid "Custom HTML:"
339
  msgstr ""
340
 
341
- #: library/admin/admin.php:770
 
 
 
 
 
 
 
 
 
 
 
 
 
 
342
  msgid ""
343
- "Use this box to enter any custom HTML coded that you can add custom style to "
344
- "in the custom CSS box.<br />\r\n"
345
- " <strong>Example:</strong> <code>&lt;div id=\"snow\"&gt;&lt;"
346
- "img src=\"../image.jpg\" alt=\"\" /&gt;&lt;/div&gt;<br />&lt;div id=\"snow-"
347
- "bird\"&gt; &lt;/div&gt;</code>"
348
  msgstr ""
349
 
350
- #: library/admin/admin.php:823
351
- msgid "Don&prime;t you feel good. You just saved me."
 
352
  msgstr ""
353
 
354
- #: library/admin/admin.php:841
355
- msgid "Custom Login Settings"
356
  msgstr ""
357
 
358
- #: library/admin/admin.php:861
359
- msgid "Update Settings"
360
  msgstr ""
361
 
362
- #: library/admin/admin.php:884
363
- msgid "Custom Login Pro Upgrade Check"
364
  msgstr ""
365
 
366
- #: library/admin/admin.php:962
367
- msgid "Settings"
 
 
 
 
 
 
 
368
  msgstr ""
369
 
370
- #: library/admin/admin.php:982
 
371
  msgid ""
372
- "Custom Login plugin is not configured yet. It will use the defualt theme "
373
- "unless you configure the %1$s."
 
 
374
  msgstr ""
375
 
376
- #: library/admin/dashboard.php:9
377
- msgid "The Frosty Network <em>feeds</em>"
378
  msgstr ""
379
 
380
- #. Plugin Name of the plugin/theme
381
- msgid "Custom Login lite"
 
 
 
 
 
 
 
382
  msgstr ""
383
 
384
- #. Plugin URI of the plugin/theme
385
- msgid "http://austinpassy.com/wordpress-plugins/custom-login"
386
  msgstr ""
387
 
388
- #. Description of the plugin/theme
 
389
  msgid ""
390
- "A simple way to customize your WordPress login screen! Use the built in, "
391
- "easy to use <a href=\"./options-general.php?page=custom-login\">settings</a> "
392
- "page to do the work for you. So simple a neanderthal can do it! Now "
393
- "featuring a HTML &amp; CSS box for advanced users. Share you designs on <a "
394
- "href=\"http://flickr.com/groups/custom-login/\">Flickr</a> or upgrade to the "
395
- "<a href=\"http://thefrosty.com/custom-login-pro/\">PRO</a> version!"
396
  msgstr ""
397
 
398
- #. Author of the plugin/theme
399
- msgid "Austin Passy"
 
 
 
 
 
 
 
 
 
 
400
  msgstr ""
401
 
402
- #. Author URI of the plugin/theme
403
- msgid "http://frostywebdesigns.com"
404
  msgstr ""
 
 
1
  msgid ""
2
  msgstr ""
3
+ "Project-Id-Version: Custom Login 2.0\n"
4
+ "POT-Creation-Date: 2013-04-15 22:01-0800\n"
5
+ "PO-Revision-Date: 2013-04-15 22:03-0800\n"
6
+ "Last-Translator: Austin Passy <austin@thefrosty.com>\n"
7
+ "Language-Team: \n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "X-Generator: Poedit 1.5.5\n"
12
+ "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e;_x\n"
13
+ "X-Poedit-Basepath: .\n"
14
+ "X-Poedit-SearchPath-0: .\n"
15
 
16
+ #: custom-login.php:319 custom-login.php:630 functions/install.php:32
17
+ #: functions/install.php:40
18
+ msgid "Custom Login Settings"
19
  msgstr ""
20
 
21
+ #: custom-login.php:324
22
+ msgid "General Settings"
23
  msgstr ""
24
 
25
+ #: custom-login.php:332
26
+ msgid "Activate"
27
  msgstr ""
28
 
29
+ #: custom-login.php:333
30
+ msgid "Toggle this plugin on &amp; off."
31
  msgstr ""
32
 
33
+ #: custom-login.php:339
34
+ msgid "<h4><abbr title=\"Hyper Text Markup Language\">HTML</abbr></h4>"
35
  msgstr ""
36
 
37
+ #: custom-login.php:346
38
+ msgid "HTML Background Color"
39
  msgstr ""
40
 
41
+ #: custom-login.php:353
42
+ msgid "HTML Background Image"
43
  msgstr ""
44
 
45
+ #: custom-login.php:354
46
+ msgid "Upload an image or a repeating pattern (optional)."
47
  msgstr ""
48
 
49
+ #: custom-login.php:361
50
+ msgid "HTML Background Position"
51
  msgstr ""
52
 
53
+ #: custom-login.php:362 custom-login.php:410 custom-login.php:465
54
+ msgid ""
55
+ "Allowed strings <code>left, top, center, right, bottom</code>. No more than "
56
+ "two combined! Space delimiter."
57
  msgstr ""
58
 
59
+ #: custom-login.php:369
60
+ msgid "HTML Background repeat"
61
  msgstr ""
62
 
63
+ #: custom-login.php:381
64
+ msgid "HTML Background size"
65
  msgstr ""
66
 
67
+ #: custom-login.php:394
68
+ msgid "<h4>Logo</h4>"
69
  msgstr ""
70
 
71
+ #: custom-login.php:401
72
+ msgid "Logo"
73
  msgstr ""
74
 
75
+ #: custom-login.php:402
76
+ msgid "Replace the WordPress logo (optional)."
 
77
  msgstr ""
78
 
79
+ #: custom-login.php:409
80
+ msgid "Logo Background Position"
81
  msgstr ""
82
 
83
+ #: custom-login.php:417
84
+ msgid "Logo Background repeat"
85
  msgstr ""
86
 
87
+ #: custom-login.php:429
88
+ msgid "Logo Background size"
89
  msgstr ""
90
 
91
+ #: custom-login.php:442
92
+ msgid "<h4>Login form</h4>"
93
  msgstr ""
94
 
95
+ #: custom-login.php:449
96
+ msgid "Login Form Background Color"
97
  msgstr ""
98
 
99
+ #: custom-login.php:456
100
+ msgid "Login Form Background URL"
101
  msgstr ""
102
 
103
+ #: custom-login.php:457
104
+ msgid "Add an image to the form (optional)."
105
  msgstr ""
106
 
107
+ #: custom-login.php:464
108
+ msgid "Login Form Background Position"
109
  msgstr ""
110
 
111
+ #: custom-login.php:472
112
+ msgid "Login Form Background repeat"
 
 
113
  msgstr ""
114
 
115
+ #: custom-login.php:484
116
+ msgid "Login Form Background size"
117
  msgstr ""
118
 
119
+ #: custom-login.php:496
120
+ msgid "Login Form Border Radius"
121
  msgstr ""
122
 
123
+ #: custom-login.php:504
124
+ msgid "Login Form Border Size"
125
  msgstr ""
126
 
127
+ #: custom-login.php:512
128
+ msgid "Login Form Border Color"
129
  msgstr ""
130
 
131
+ #: custom-login.php:519
132
+ msgid "Login Form Box Shadow"
 
 
133
  msgstr ""
134
 
135
+ #: custom-login.php:520
136
+ #, php-format
137
+ msgid "Use <a href=\"%s\">box shadow</a> syntax w/ out color. <code>%s</code>"
138
  msgstr ""
139
 
140
+ #: custom-login.php:527
141
+ msgid "Login Form Box Shadow Color"
 
 
142
  msgstr ""
143
 
144
+ #: custom-login.php:535
145
+ msgid "<h4>Misc.</h4>"
146
  msgstr ""
147
 
148
+ #: custom-login.php:542
149
+ msgid "Login Form Label Color"
 
 
 
150
  msgstr ""
151
 
152
+ #: custom-login.php:550
153
+ msgid "<h4>Below form anchor</h4>"
154
  msgstr ""
155
 
156
+ #: custom-login.php:557
157
+ msgid "Below form nav color"
 
 
158
  msgstr ""
159
 
160
+ #: custom-login.php:564
161
+ msgid "Below form nav text-shadow color"
162
  msgstr ""
163
 
164
+ #: custom-login.php:571
165
+ msgid "Below form nav color hover"
166
  msgstr ""
167
 
168
+ #: custom-login.php:578
169
+ msgid "Below form nav text-shadow hover"
170
  msgstr ""
171
 
172
+ #: custom-login.php:586
173
+ msgid "<h4>Custom HTML/CSS &amp; jQuery</h4>"
174
  msgstr ""
175
 
176
+ #: custom-login.php:593
177
+ msgid "Custom CSS"
178
  msgstr ""
179
 
180
+ #: custom-login.php:599
181
+ msgid "Custom HTML"
182
  msgstr ""
183
 
184
+ #: custom-login.php:606
185
+ msgid "Custom jQuery"
 
 
 
 
 
186
  msgstr ""
187
 
188
+ #: custom-login.php:630 functions/post-types.php:37
189
+ msgid "Custom Login"
190
  msgstr ""
191
 
192
+ #: custom-login.php:640
193
+ msgid "Settings"
194
+ msgstr ""
195
+
196
+ #: custom-login.php:672
197
+ msgid "Support this plugin and buy me a beer"
198
  msgstr ""
199
 
200
+ #: custom-login.php:673
201
+ msgid "Rate this plugin on WordPress.org"
202
  msgstr ""
203
 
204
+ #: custom-login.php:674
205
  msgid ""
206
+ "Share your designs on <strong style=\"color:#0066DC;\">Flick</strong><strong "
207
+ "style=\"color:#ff0084;\">r</strong>"
 
 
208
  msgstr ""
209
 
210
+ #: custom-login.php:675
211
+ msgid "Get support on WordPress.org"
212
  msgstr ""
213
 
214
+ #: custom-login.php:676
215
+ msgid "Contribute development on GitHub"
 
 
 
 
216
  msgstr ""
217
 
218
+ #: custom-login.php:677
219
+ msgid "Get Custom Login Add-ons"
220
  msgstr ""
221
 
222
+ #: custom-login.php:683
223
+ #, php-format
224
+ msgid "<a href=\"%s\">%s</a> | <code>version %s</code>"
 
225
  msgstr ""
226
 
227
+ #: classes/class.settings-api.php:745
228
+ #, php-format
229
+ msgid "%1$s | <a href=\"%2$s\">Dismiss notice</a>"
230
  msgstr ""
231
 
232
+ #: classes/class.settings-api.php:930
233
+ msgid "Error fetching feed"
 
 
 
 
234
  msgstr ""
235
 
236
+ #: classes/class.settings-api.php:941
237
+ msgid "Like Extendd on Facebook"
238
  msgstr ""
239
 
240
+ #: classes/class.settings-api.php:942
241
+ msgid "Follow Extendd on Twitter"
 
 
 
 
 
242
  msgstr ""
243
 
244
+ #: classes/class.settings-api.php:943
245
+ msgid "Follow Austin on Twitter"
246
  msgstr ""
247
 
248
+ #: classes/class.settings-api.php:944
249
+ msgid "Circle Extendd on Google+"
250
  msgstr ""
251
 
252
+ #: classes/class.settings-api.php:945
253
+ msgid "Subscribe via email"
 
 
254
  msgstr ""
255
 
256
+ #: classes/class.settings-api.php:948
257
+ msgid "Latest plugins from Extendd.com"
258
  msgstr ""
259
 
260
+ #: functions/post-types.php:25
261
+ msgid "Logins"
 
 
262
  msgstr ""
263
 
264
+ #: functions/post-types.php:26
265
+ msgid "Login"
266
  msgstr ""
267
 
268
+ #: functions/post-types.php:27
269
+ msgid "Add New"
270
  msgstr ""
271
 
272
+ #: functions/post-types.php:28
273
+ msgid "Add New Login"
 
 
274
  msgstr ""
275
 
276
+ #: functions/post-types.php:29
277
+ msgid "Edit Login"
278
  msgstr ""
279
 
280
+ #: functions/post-types.php:30
281
+ msgid "New Login"
282
  msgstr ""
283
 
284
+ #: functions/post-types.php:31
285
+ msgid "All Logins"
286
  msgstr ""
287
 
288
+ #: functions/post-types.php:32
289
+ msgid "View Login"
290
  msgstr ""
291
 
292
+ #: functions/post-types.php:33
293
+ msgid "Search Logins"
 
 
 
 
 
 
 
 
294
  msgstr ""
295
 
296
+ #: functions/post-types.php:34
297
+ msgid "No Logins found"
298
  msgstr ""
299
 
300
+ #: functions/post-types.php:35
301
+ msgid "No Logins found in Trash"
302
+ msgstr ""
303
+
304
+ #: functions/welcome.php:56 functions/welcome.php:57
305
+ msgid "Welcome to Custom Login"
306
+ msgstr ""
307
+
308
+ #: functions/welcome.php:111
309
+ #, php-format
310
+ msgid "Welcome to Custom Login %s"
311
+ msgstr ""
312
+
313
+ #: functions/welcome.php:112
314
+ #, php-format
315
  msgid ""
316
+ "Thank you for updating to the latest version! Custom Login %s is ready to "
317
+ "make your login page better!"
 
 
 
318
  msgstr ""
319
 
320
+ #: functions/welcome.php:113
321
+ #, php-format
322
+ msgid "Version %s"
323
  msgstr ""
324
 
325
+ #: functions/welcome.php:117
326
+ msgid "What's New"
327
  msgstr ""
328
 
329
+ #: functions/welcome.php:122
330
+ msgid "Improved Settings"
331
  msgstr ""
332
 
333
+ #: functions/welcome.php:126
334
+ msgid "Load times"
335
  msgstr ""
336
 
337
+ #: functions/welcome.php:127
338
+ msgid ""
339
+ "There were issues in the past version that had the plugin loading on pages "
340
+ "it wasn't supposted to. <strong>CL</strong> now caches all queries and "
341
+ "database calls."
342
+ msgstr ""
343
+
344
+ #: functions/welcome.php:129
345
+ msgid "Better features"
346
  msgstr ""
347
 
348
+ #: functions/welcome.php:130
349
+ #, php-format
350
  msgid ""
351
+ "With a complete rewrite of the plugin, I have to ability to build custom add-"
352
+ "ons (think extensions), like stealth login, email logins and 2-step "
353
+ "authentication to name a few of the add-ons you can find on %sExtendd.com%s "
354
+ "in the future."
355
  msgstr ""
356
 
357
+ #: functions/welcome.php:136
358
+ msgid "Under the Hood"
359
  msgstr ""
360
 
361
+ #: functions/welcome.php:140
362
+ msgid "Settings Class"
363
+ msgstr ""
364
+
365
+ #: functions/welcome.php:141
366
+ #, php-format
367
+ msgid ""
368
+ "The new settings class allows to add your own add-ons! Documentation can be "
369
+ "found on the %sExtendd.com%s site."
370
  msgstr ""
371
 
372
+ #: functions/welcome.php:145
373
+ msgid "Templates"
374
  msgstr ""
375
 
376
+ #: functions/welcome.php:146
377
+ #, php-format
378
  msgid ""
379
+ "Custom login %stemplates%s can be created in your theme using the new login "
380
+ "template add-on (coming soon)."
 
 
 
 
381
  msgstr ""
382
 
383
+ #: functions/welcome.php:156
384
+ msgid "Go to Custom Login Settings"
385
+ msgstr ""
386
+
387
+ #: functions/upgrades/upgrades.php:25
388
+ msgid "Custom Login - Upgrades"
389
+ msgstr ""
390
+
391
+ #: functions/upgrades/upgrades.php:28
392
+ msgid ""
393
+ "The upgrade process has started, please be patient. This could take several "
394
+ "minutes. You will be automatically redirected when the upgrade is finished."
395
  msgstr ""
396
 
397
+ #: functions/upgrades/upgrades.php:59
398
+ msgid "Custom Login Upgrades"
399
  msgstr ""
library/admin/Sprite.jpg DELETED
Binary file
library/admin/admin.php DELETED
@@ -1,925 +0,0 @@
1
- <?php
2
- /**
3
- * Administration functions for loading and displaying the settings page and saving settings
4
- * are handled in this file.
5
- *
6
- * @package CustomLogin
7
- */
8
-
9
- /* Initialize the theme admin functionality. */
10
- add_action( 'init', 'custom_login_admin_init' );
11
-
12
- /**
13
- * Initializes the theme administration functions.
14
- *
15
- * @since 0.8
16
- */
17
- function custom_login_admin_init() {
18
- add_action( 'admin_init', 'custom_login_scripts' );
19
-
20
- add_action( 'admin_init', 'custom_login_styles' );
21
-
22
- add_action( 'admin_menu', 'custom_login_settings_page_init' );
23
-
24
- add_action( 'custom_login_update_settings_page', 'custom_login_save_settings' );
25
- }
26
-
27
- /**
28
- * Register the javascript.
29
- *
30
- * @since 0.8
31
- */
32
- function custom_login_scripts() {
33
- $plugin_data = get_plugin_data( CUSTOM_LOGIN_DIR . 'custom-login.php' );
34
-
35
- wp_register_script( 'autosize', CUSTOM_LOGIN_JS . 'jquery.autosize.js', array( 'jquery' ), '1.15.3', false );
36
-
37
- wp_register_script( 'custom-login', CUSTOM_LOGIN_JS . 'custom-login.js', array( 'jquery' ), $plugin_data['Version'], false );
38
-
39
- wp_register_script( 'jscolor', CUSTOM_LOGIN_JS . 'jscolor.js', false, '1.4.0', false );
40
-
41
- wp_register_script( 'gravatar', CUSTOM_LOGIN_JS . 'gravatar.js', array( 'jquery' ), '1.2', false );
42
- }
43
-
44
- /**
45
- * Register the stylesheets.
46
- *
47
- * @since 0.8
48
- */
49
- function custom_login_styles() {
50
- $plugin_data = get_plugin_data( CUSTOM_LOGIN_DIR . 'custom-login.php' );
51
-
52
- wp_register_style( 'custom-login-tabs', CUSTOM_LOGIN_CSS . 'tabs.css', false, $plugin_data['Version'], 'screen' );
53
-
54
- wp_register_style( 'custom-login-admin', CUSTOM_LOGIN_CSS . 'admin.css', false, $plugin_data['Version'], 'screen' );
55
- }
56
-
57
- /**
58
- * Sets up the cleaner gallery settings page and loads the appropriate functions when needed.
59
- *
60
- * @since 0.8
61
- */
62
- function custom_login_settings_page_init() {
63
- global $custom_login;
64
-
65
- $role = 'manage_options';
66
- $img = '<div style="width: 16px; height: 16px; overflow: hidden; display: block; float: left;"><img src="' . plugin_dir_url( __FILE__ ) . 'Sprite.jpg" style="background-position: -31px 0 !important" /></div>';
67
- $img = '';
68
-
69
- /* Create the theme settings page. */
70
- $custom_login->settings_page = add_options_page( __( 'Custom Login', 'custom-login' ), $img . __( 'Custom Login', 'custom-login' ), $role, 'custom-login', 'custom_login_settings_page' );
71
-
72
- /* Register the default theme settings meta boxes. */
73
- add_action( "load-{$custom_login->settings_page}", 'custom_login_create_settings_meta_boxes' );
74
-
75
- /* Make sure the settings are saved. */
76
- add_action( "load-{$custom_login->settings_page}", 'custom_login_load_settings_page' );
77
-
78
- /* Load the JavaScript and stylehsheets needed for the theme settings. */
79
- add_action( "load-{$custom_login->settings_page}", 'custom_login_settings_page_enqueue_script' );
80
- add_action( "load-{$custom_login->settings_page}", 'custom_login_settings_page_enqueue_style' );
81
-
82
- add_action( "admin_head-{$custom_login->settings_page}", 'custom_login_settings_page_load_scripts' );
83
- }
84
-
85
- /**
86
- * Returns an array with the default plugin settings.
87
- *
88
- * @since 0.8
89
- */
90
- function custom_login_settings() {
91
- $plugin_data = get_plugin_data( CUSTOM_LOGIN_DIR . 'custom-login.php' );
92
-
93
- $settings = array(
94
- 'version' => $plugin_data['Version'],
95
- /* Activate */
96
- 'custom' => false,
97
- /* Gravatar */
98
- 'gravatar' => false,
99
- /* Core */
100
- 'hide_dashboard' => false,
101
- 'disable_presstrends' => false,
102
- /* Upgrade */
103
- 'hide_upgrade' => false,
104
- 'upgrade_complete' => false, //if the upgrade is good, hide it all forever.
105
- /* Custom css */
106
- 'custom_css' => '',
107
- /* Custom html */
108
- 'custom_html' => '',
109
- /* Custom jQUery */
110
- 'custom_jquery' => '',
111
- /* html */
112
- 'html_border_top_color' => '', //WP < 3.x
113
- 'html_border_top_background' => '', //WP > 3.x
114
- 'html_background_color' => '',
115
- 'html_background_url' => '',
116
- 'html_background_repeat' => 'repeat-x',
117
- 'html_background_size' => 'cover',
118
- /* Login form */
119
- 'login_form_logo' => '',
120
- 'login_form_border_top_color' => '',
121
- 'login_form_background_color' => '',
122
- 'login_form_background' => '',
123
- 'login_form_background_size' => 'cover',
124
- 'login_form_border_radius' => '11',
125
- 'login_form_border' => '1',
126
- 'login_form_border_color' => '',
127
- /* Box Shadows */
128
- 'login_form_box_shadow_1' => '5',
129
- 'login_form_box_shadow_2' => '5',
130
- 'login_form_box_shadow_3' => '18',
131
- 'login_form_box_shadow_4' => '#464646',
132
- /* Form Padding */
133
- 'login_form_padding_top' => true,
134
- /* Label color */
135
- 'label_color' => '#ffffff',
136
- );
137
- return apply_filters( 'custom_login_settings', $settings );
138
- }
139
-
140
- /**
141
- * Function run at load time of the settings page, which is useful for hooking save functions into.
142
- *
143
- * @since 0.8
144
- */
145
- function custom_login_load_settings_page() {
146
-
147
- //delete_option( 'custom_login_settings' );
148
- /* Get theme settings from the database. */
149
- $settings = get_option( 'custom_login_settings' );
150
-
151
- ///////////////////////////////////////////////////////////////////////////////////////////////
152
- // TO BE REMOVED IN VERSION 0.9 //
153
- /* If the old settings are available, delete the old settings. */
154
- //if ( !empty( $settings['use_custom'] ) ) {
155
- //delete_option( 'custom_login_settings' );
156
-
157
- /* Redirect the page so that the settings are reflected on the settings page. */
158
- //wp_redirect( admin_url( 'options-general.php?page=custom-login' ) );
159
- //exit;
160
- //}
161
- ///////////////////////////////////////////////////////////////////////////////////////////////
162
-
163
- /* If no settings are available, add the default settings to the database. */
164
- if ( empty( $settings ) ) {
165
- add_option( 'custom_login_settings', custom_login_settings(), '', 'yes' );
166
-
167
- /* Redirect the page so that the settings are reflected on the settings page. */
168
- wp_redirect( admin_url( 'options-general.php?page=custom-login' ) );
169
- exit;
170
- }
171
-
172
- /* If the form has been submitted, check the referer and execute available actions. */
173
- elseif ( isset( $_POST['custom-login-settings-submit'] ) ) {
174
-
175
- /* Make sure the form is valid. */
176
- check_admin_referer( 'custom-login-settings-page' );
177
-
178
- /* Available hook for saving settings. */
179
- do_action( 'custom_login_update_settings_page' );
180
-
181
- /* Redirect the page so that the new settings are reflected on the settings page. */
182
- wp_redirect( admin_url( 'options-general.php?page=custom-login&updated=true' ) );
183
- exit;
184
- }
185
- }
186
-
187
-
188
- /**
189
- * Validates the plugin settings.
190
- *
191
- * @since 0.8
192
- */
193
- function custom_login_save_settings() {
194
-
195
- /* Get the current theme settings. */
196
- $settings = get_option( 'custom_login_settings' );
197
- $plugin_data = get_plugin_data( CUSTOM_LOGIN_DIR . 'custom-login.php' );
198
-
199
- $settings['version'] = ( ( isset( $_POST['version'] ) ) ? esc_html( $_POST['version'] ) : $plugin_data['Version'] );
200
- $settings['custom'] = ( ( isset( $_POST['custom'] ) ) ? true : false );
201
- $settings['gravatar'] = ( ( isset( $_POST['gravatar'] ) ) ? true : false );
202
- $settings['hide_dashboard'] = ( ( isset( $_POST['hide_dashboard'] ) ) ? true : false );
203
- $settings['disable_presstrends'] = ( ( isset( $_POST['disable_presstrends'] ) ) ? true : false );
204
- $settings['hide_upgrade'] = ( ( isset( $_POST['hide_upgrade'] ) ) ? true : false );
205
-
206
- $settings['custom_css'] = esc_html( $_POST['custom_css'] );
207
- $settings['custom_html'] = esc_html( $_POST['custom_html'] );
208
- $settings['custom_jquery'] = esc_html( $_POST['custom_jquery'] );
209
-
210
- $settings['html_border_top_color'] = ( ( isset( $_POST['html_border_top_color'] ) ) ? esc_html( $_POST['html_border_top_color'] ) : '' ); // > 3.0.x
211
- $settings['html_border_top_background'] = isset( $_POST['html_border_top_background'] ) ? esc_html( $_POST['html_border_top_background'] ) : '';
212
- $settings['html_background_color'] = esc_html( $_POST['html_background_color'] );
213
- $settings['html_background_url'] = esc_html( $_POST['html_background_url'] );
214
- $settings['html_background_repeat'] = esc_attr( $_POST['html_background_repeat'] );
215
- $settings['html_background_size'] = esc_attr( $_POST['html_background_size'] );
216
-
217
- $settings['login_form_logo'] = esc_html( $_POST['login_form_logo'] );
218
- $settings['login_form_border_top_color'] = ( ( isset( $_POST['login_form_border_top_color'] ) ) ? esc_html( $_POST['login_form_border_top_color'] ) : '' );
219
- $settings['login_form_background_color'] = esc_html( $_POST['login_form_background_color'] );
220
- $settings['login_form_background'] = esc_html( $_POST['login_form_background'] );
221
- $settings['login_form_background_size'] = esc_attr( $_POST['login_form_background_size'] );
222
- $settings['login_form_border_radius'] = esc_html( $_POST['login_form_border_radius'] );
223
- $settings['login_form_border'] = esc_html( $_POST['login_form_border'] );
224
- $settings['login_form_border_color'] = esc_html( $_POST['login_form_border_color'] );
225
- $settings['login_form_box_shadow_1'] = esc_html( $_POST['login_form_box_shadow_1'] );
226
- $settings['login_form_box_shadow_2'] = esc_html( $_POST['login_form_box_shadow_2'] );
227
- $settings['login_form_box_shadow_3'] = esc_html( $_POST['login_form_box_shadow_3'] );
228
- $settings['login_form_box_shadow_4'] = esc_html( $_POST['login_form_box_shadow_4'] );
229
- $settings['login_form_padding_top'] = ( ( isset( $_POST['login_form_padding_top'] ) ) ? true : false );
230
- $settings['label_color'] = esc_html( $_POST['label_color'] );
231
-
232
- /* Update the theme settings. */
233
- $updated = update_option( 'custom_login_settings', $settings );
234
- }
235
-
236
- /**
237
- * Registers the plugin meta boxes for use on the settings page.
238
- *
239
- * @since 0.8
240
- */
241
- function custom_login_create_settings_meta_boxes() {
242
- global $custom_login;
243
-
244
-
245
- add_meta_box( 'custom-login-activate-meta-box', __( 'Avtivation &mdash; <em>to infinity and beyond</em>', 'custom-login' ), 'custom_login_activate_meta_box', $custom_login->settings_page, 'normal', 'high' );
246
-
247
- add_meta_box( 'custom-login-announcement-meta-box', __( 'Announcements', 'custom-login' ), 'custom_login_announcement_meta_box', $custom_login->settings_page, 'normal', 'high' );
248
-
249
- add_meta_box( 'custom-login-about-meta-box', __( 'About Custom Login', 'custom-login' ), 'custom_login_about_meta_box', $custom_login->settings_page, 'advanced', 'high' );
250
-
251
- add_meta_box( 'custom-login-support-meta-box', __( 'Support Custom Login', 'custom-login' ), 'custom_login_support_meta_box', $custom_login->settings_page, 'advanced', 'high' );
252
-
253
- add_meta_box( 'custom-login-dasboard-meta-box', __( 'Core Settings', 'custom-login' ), 'custom_login_dashboard_meta_box', $custom_login->settings_page, 'advanced', 'high' );
254
-
255
- add_meta_box( 'custom-login-preview-meta-box', __( 'Preview your work, <em>Master</em>', 'custom-login' ), 'custom_login_preview_meta_box', $custom_login->settings_page, 'advanced', 'high' );
256
-
257
- /* Remove the upgrade meta box when upgrade is good */
258
- add_meta_box( 'custom-login-upgrade-link-meta-box', __( 'Upgrade Custom Login', 'custom-login' ), 'custom_login_upgrade_link_meta_box', $custom_login->settings_page, 'advanced', 'high' );
259
-
260
- add_meta_box( 'custom-login-general-meta-box', __( 'General Settings', 'custom-login' ), 'custom_login_general_meta_box', $custom_login->settings_page, 'normal', 'high' );
261
-
262
- add_meta_box( 'custom-login-advanced-meta-box', __( 'Advanced Settings', 'custom-login' ), 'custom_login_advanced_meta_box', $custom_login->settings_page, 'normal', 'high' );
263
-
264
- add_meta_box( 'custom-login-tabs-meta-box', __( 'TheFrosty Network', 'custom-login' ), 'custom_login_tabs_meta_box', $custom_login->settings_page, 'side', 'low' );
265
- }
266
-
267
- /**
268
- * Displays activation meta box.
269
- *
270
- * @since 0.8
271
- */
272
- function custom_login_activate_meta_box() { ?>
273
-
274
- <table class="form-table side">
275
- <tr>
276
- <th>
277
- <label for="custom"><?php _e( 'Activate:', 'custom-login' ); ?></label>
278
- </th>
279
- <td>
280
- <input id="custom" name="custom" type="checkbox" <?php checked( custom_login_get_setting( 'custom' ), true ); ?> value="true" />
281
- <a class="question" title="Help &amp; Examples">[?]</a><br />
282
- <span class="hide"><?php _e( 'Check this box to use your own CSS, leave unchecked to use the default style.', 'custom-login' ); ?></span>
283
- </td>
284
- </tr>
285
- <tr>
286
- <th>
287
- <label for="gravatar"><?php _e( 'Gravatar:', 'custom-login' ); ?></label>
288
- </th>
289
- <td>
290
- <input id="gravatar" name="gravatar" type="checkbox" <?php checked( custom_login_get_setting( 'gravatar' ), true ); ?> value="true" <?php if ( !get_option( 'users_can_register' ) ) echo 'disabled="disabled" readonly="readonly"'; ?> />
291
- <a class="question" title="Help &amp; Examples">[?]</a><br />
292
- <span class="hide"><?php if ( !get_option( 'users_can_register' ) ) { _e( 'This feature only works for sites with registration enabled.', 'custom-login' ); } else { _e( 'Check this box to activate a AJAX Gravatar image for registration.', 'custom-login' ); } ?></span>
293
- </td>
294
- </tr>
295
- </table><!-- .form-table --><?php
296
- }
297
-
298
- /**
299
- * Display an announcement meta box.
300
- *
301
- * @since 0.8
302
- */
303
- function custom_login_announcement_meta_box() { ?>
304
-
305
- <iframe allowtransparency="true" src="http://austinpassy.com/custom-login.php" scrolling="no" style="height:50px;width:100%;">
306
- </iframe><!-- .form-table --><?php
307
- }
308
-
309
- /**
310
- * Displays the about meta box.
311
- *
312
- * @since 0.8
313
- */
314
- function custom_login_about_meta_box() {
315
- $plugin_data = get_plugin_data( CUSTOM_LOGIN_DIR . 'custom-login.php' ); ?>
316
-
317
- <table class="form-table side">
318
- <tr>
319
- <th><?php _e( 'Plugin:', 'custom-login' ); ?></th>
320
- <td><?php echo $plugin_data['Title']; ?> <?php echo $plugin_data['Version']; ?></td>
321
- </tr>
322
- <tr>
323
- <th><?php _e( 'Author:', 'custom-login' ); ?></th>
324
- <td><?php echo $plugin_data['Author']; ?> &ndash; @<a href="http://twitter.com/TheFrosty" title="Follow me on Twitter">TheFrosty</a></td>
325
- </tr>
326
- <tr style="display: none;">
327
- <th><?php _e( 'Description:', 'custom-login' ); ?></th>
328
- <td><?php echo $plugin_data['Description']; ?></td>
329
- </tr>
330
- </table><!-- .form-table --><?php
331
- }
332
-
333
- /**
334
- * link to upgrade page
335
- * http://codex.wordpress.org/Function_Reference/remove_submenu_page
336
- *
337
- * @since 1.0.1
338
- */
339
- function custom_login_upgrade_link_meta_box() {
340
- global $custom_login; ?>
341
-
342
- <div style="height: 25px; padding: 25px; text-align: center"><a href="http://extendd.com/plugin/custom-login-pro/" class="button-secondary"/><?php esc_attr_e('Upgrade to Custom Login PRO', 'custom-login'); ?></a></div><?php
343
- }
344
-
345
- /**
346
- * Displays the support meta box.
347
- *
348
- * @since 0.8
349
- */
350
- function custom_login_support_meta_box() { ?>
351
-
352
- <table class="form-table side">
353
- <tr>
354
- <th><?php _e( 'Donate:', 'custom-login' ); ?></th>
355
- <td><?php _e( '<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=X4JPT57AWMTYW">PayPal</a>.', 'custom-login' ); ?></td>
356
- </tr>
357
- <tr>
358
- <th><?php _e( 'Flattr:', 'custom-login' ); ?></th>
359
- <td><a href="http://flattr.com/thing/846561/Custom-Login" target="_blank"><img src="http://api.flattr.com/button/flattr-badge-large.png" alt="<?php _e( 'Flattr:', 'custom-login' ); ?>" title="<?php _e( 'Flattr:', 'custom-login' ); ?>" /></a></td>
360
- </tr>
361
- <tr>
362
- <th><?php _e( 'Rate:', 'custom-login' ); ?></th>
363
- <td><?php _e( '<a href="http://wordpress.org/extend/plugins/custom-login/">This plugin on WordPress.org</a>.', 'custom-login' ); ?></td>
364
- </tr>
365
- <tr>
366
- <th><?php _e( 'Share:', 'custom-login' ); ?></th>
367
- <td><?php _e( 'Your design on <a href="http://www.flickr.com/groups/custom-login/"><span style="color:#0066DC;font-weight:bold;">Flick</span><span style="color:#ff0084;font-weight:bold;">r</span></a>.', 'custom-login' ); ?></td>
368
- </tr>
369
- <tr>
370
- <th><?php _e( 'Support:', 'custom-login' ); ?></th>
371
- <td><?php _e( '<a href="http://wordpress.org/support/plugin/custom-login">WordPress support forums</a>.', 'custom-login' ); ?></td>
372
- </tr>
373
- <tr>
374
- <th><?php _e( 'Contribute:', 'custom-login' ); ?></th>
375
- <td><?php _e( '<a href="https://github.com/thefrosty/custom-login">GitHub</a>.', 'custom-login' ); ?></td>
376
- </tr>
377
- <tr class="alt">
378
- <th><?php _e( 'Go PRO:', 'custom-login' ); ?></th>
379
- <td><?php _e( '<a href="http://extendd.com/plugin/custom-login-pro/?ref=custom-login&url='.get_home_url().'">Custom Login PRO</a>.', 'custom-login' ); ?></td>
380
- </tr>
381
- </table><!-- .form-table --><?php
382
- }
383
-
384
- /**
385
- * Displays the preview meta box.
386
- *
387
- * @since 0.8
388
- */
389
- function custom_login_dashboard_meta_box() { ?>
390
-
391
- <table class="form-table side">
392
- <tr>
393
- <td>
394
- <input id="hide_dashboard" name="hide_dashboard" type="checkbox" <?php checked( custom_login_get_setting( 'hide_dashboard' ), true ); ?> value="true" />
395
- <span class="hide"><?php _e( 'Hide the dashboard widget?', 'custom-login' ); ?></span>
396
- </td>
397
- </tr>
398
- <tr>
399
- <td>
400
- <input id="disable_presstrends" name="disable_presstrends" type="checkbox" <?php checked( custom_login_get_setting( 'disable_presstrends' ), true ); ?> value="true" />
401
- <span class="hide"><?php _e( 'Disable <a href="http://presstrends.io">presstrends.io</a>', 'custom-login' ); ?></span>
402
- </td>
403
- </tr>
404
- </table><!-- .form-table --><?php
405
-
406
- if ( defined( 'WP_LOCAL_DEV' ) && WP_LOCAL_DEV ) echo '<code>' . print_r( CUSTOM_LOGIN_FILE, true ) . '</code>';
407
- }
408
-
409
- /**
410
- * Displays the preview meta box.
411
- *
412
- * @since 0.8
413
- */
414
- function custom_login_preview_meta_box() { ?>
415
-
416
- <p style="font-weight: bold; text-align: center;"><a class="thickbox thickbox-preview" href="<?php echo wp_login_url(); ?>?TB_iframe=true" title=""><?php _e( 'Click here to see a live preview!', 'custom-login' ); ?></a></p>
417
- <p style="text-align: center;"><small><?php //_e( '(May not work as of WordPress 3.1.1)', 'custom-login' ); ?></small></p><?php
418
- }
419
-
420
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////
421
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////
422
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////
423
- // login_form_border_top_color
424
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////
425
-
426
- /**
427
- * Displays the general meta box.
428
- *
429
- * @since 0.8
430
- */
431
- function custom_login_general_meta_box() {
432
-
433
- $background_size = array( 'none', 'cover', 'contain', 'flex' );
434
-
435
- ?>
436
- <table class="form-table">
437
- <th>
438
- <label for="html_background_color"><?php _e( 'html background color:', 'custom-login' ); ?></label>
439
- </th>
440
- <td>
441
- <input class="color {hash:true,required:false,adjust:false}" id="html_background_color" name="html_background_color" value="<?php echo custom_login_get_setting( 'html_background_color' ); ?>" size="10" maxlength="21" />
442
- <a class="question" title="Help &amp; Examples">[?]</a><br />
443
- <span class="hide"><?php _e( 'Use HEX color <strong>with</strong> &ldquo;#&rdquo; <strong>or</strong> RGB/A format.<br />
444
- Example: &sup1;<code>#121212</code> &sup2;<code>rgba(255,255,255,0.4)</code>', 'custom-login' ); ?>
445
- </span>
446
- </td>
447
- </tr>
448
-
449
- <tr>
450
- <th>
451
- <label for="html_background_url"><?php _e( 'html background url:', 'custom-login' ); ?></label>
452
- </th>
453
- <td>
454
- <input class="upload_image" id="html_background_url" name="html_background_url" value="<?php echo custom_login_get_setting( 'html_background_url' ); ?>" size="40" />
455
- <input class="upload_image_button" type="button" value="Upload" />
456
- <a class="question" title="Help &amp; Examples">[?]</a><br />
457
- <span class="hide"><?php _e( 'Upload an image and put the full path here.<br />
458
- Suggested size: <code>10px X 500px</code> (for a repeating background) or<br />
459
- Full size image with a 100% stretched to fit window image.', 'custom-login' ); ?>
460
- </span>
461
- </td>
462
- </tr>
463
-
464
- <tr>
465
- <th>
466
- <label for="html_background_repeat"><?php _e( 'html background repeat:', 'custom-login' ); ?></label>
467
- </th>
468
- <td>
469
- <?php $background_repeat = array( 'no-repeat', 'repeat', 'repeat-x', 'repeat-y' ); ?>
470
- <select name="html_background_repeat" id="html_background_repeat" style="width:88px;">
471
- <?php foreach ( $background_repeat as $option ) { ?>
472
- <option value="<?php echo $option; ?>" <?php selected( $option, custom_login_get_setting( 'html_background_repeat' ) ); ?>><?php echo $option; ?></option>
473
- <?php } ?>
474
- </select>
475
- <a class="question" title="Help &amp; Examples">[?]</a><br />
476
- <span class="hide"><?php _e( 'Use <code>no-repeat</code>, <code>repeat</code>, <code>repeat-x</code> or <code>repeat-y.</code>', 'custom-login' ); ?></span>
477
- </td>
478
- </tr>
479
-
480
- <tr>
481
- <th>
482
- <label for="html_background_size"><?php _e( 'html background size:', 'custom-login' ); ?></label>
483
- </th>
484
- <td>
485
- <select name="html_background_size" id="html_background_size" style="width:88px;">
486
- <?php foreach ( $background_size as $option ) { ?>
487
- <option value="<?php echo $option; ?>" <?php selected( $option, custom_login_get_setting( 'html_background_size' ) ); ?>><?php echo $option; ?></option>
488
- <?php } ?>
489
- </select>
490
- <a class="question" title="Help &amp; Examples">[?]</a><br />
491
- <span class="hide"><?php _e( 'See <a href="http://css-tricks.com/perfect-full-page-background-image/">CSS-Tricks</a> and <a href="http://davidwalsh.name/background-size">David Walsh</a> for examples.', 'custom-login' ); ?></span>
492
- </td>
493
- </tr>
494
- <!-- Break -->
495
-
496
- <tr style="border-top: 1px solid #eee;">
497
- <th>
498
- <label for="login_form_logo"><?php _e( 'Logo:', 'custom-login' ); ?></label>
499
- </th>
500
- <td>
501
- <input class="upload_image" id="login_form_logo" name="login_form_logo" value="<?php echo custom_login_get_setting( 'login_form_logo' ); ?>" size="40" />
502
- <input class="upload_image_button" type="button" value="Upload" />
503
- <a class="question" title="Help &amp; Examples">[?]</a><br />
504
- <span class="hide"><?php _e( 'Upload an image and put the full path here.<br />
505
- Suggested size: <code>310px X 70px</code>, which will replace WordPress logo. Be sure to leave blank if not in use. NOTE: Will go <strong>above</strong> the form and it&prime;s border.', 'custom-login' ); ?>
506
- </span>
507
- </td>
508
- </tr>
509
- <!-- Break -->
510
-
511
- <tr style="border-top: 1px solid #eee;">
512
- <th>
513
- <label for="login_form_background_color"><?php _e( 'login form background color:', 'custom-login' ); ?></label>
514
- </th>
515
- <td>
516
- <input class="color {hash:true,required:false,adjust:false}" id="login_form_background_color" name="login_form_background_color" value="<?php echo custom_login_get_setting( 'login_form_background_color' ); ?>" size="10" maxlength="21" />
517
- <a class="question" title="Help &amp; Examples">[?]</a><br />
518
- <span class="hide"><?php _e( 'Use HEX color <strong>with</strong> &ldquo;#&rdquo; or RGB/A format.<br />
519
- Example: &sup1;<code>#121212</code> &sup2;<code>rgba(255,255,255,0.4)</code>', 'custom-login' ); ?>
520
- </span>
521
- </td>
522
- </tr>
523
-
524
- <tr>
525
- <th>
526
- <label for="login_form_background"><?php _e( 'login form background url:', 'custom-login' ); ?></label>
527
- </th>
528
- <td>
529
- <input class="upload_image" id="login_form_background" name="login_form_background" value="<?php echo custom_login_get_setting( 'login_form_background' ); ?>" size="40" />
530
- <input class="upload_image_button" type="button" value="Upload" />
531
- <a class="question" title="Help &amp; Examples">[?]</a><br />
532
- <span class="hide"><?php _e( 'Upload an image and put the full path here. Suggested size: <code>308px X 108px</code><br />
533
- My suggestion: use a transparent .png or .gif. <a href="' . CUSTOM_LOGIN_URL . 'library/psd/custom-login.psd">Download included .psd file</a>.', 'custom-login' ); ?>
534
- </span>
535
- </td>
536
- </tr>
537
-
538
- <tr>
539
- <th>
540
- <label for="login_form_background_size"><?php _e( 'form background size:', 'custom-login' ); ?></label>
541
- </th>
542
- <td>
543
- <select name="login_form_background_size" id="login_form_background_size" style="width:88px;">
544
- <?php foreach ( $background_size as $option ) { ?>
545
- <option value="<?php echo $option; ?>" <?php selected( $option, custom_login_get_setting( 'login_form_background_size' ) ); ?>><?php echo $option; ?></option>
546
- <?php } ?>
547
- </select>
548
- <a class="question" title="Help &amp; Examples">[?]</a><br />
549
- <span class="hide"><?php _e( 'See <a href="http://css-tricks.com/perfect-full-page-background-image/">CSS-Tricks</a> and <a href="http://davidwalsh.name/background-size">David Walsh</a> for examples.', 'custom-login' ); ?></span>
550
- </td>
551
- </tr>
552
-
553
- <tr>
554
- <th>
555
- <label for="login_form_border_radius"><?php _e( 'login form border radius:', 'custom-login' ); ?></label>
556
- </th>
557
- <td>
558
- <input id="login_form_border_radius" name="login_form_border_radius" value="<?php echo custom_login_get_setting( 'login_form_border_radius' ); ?>" size="3" maxlength="2" />px
559
- <a class="question" title="Help &amp; Examples">[?]</a><br />
560
- <span class="hide"><?php _e( 'Choose your border radius, ie <code>8</code> or <code>12</code>. Do not put &ldquo;<strong>px</strong>&rdquo;!', 'custom-login' ); ?></span>
561
- </td>
562
- </tr>
563
-
564
- <tr>
565
- <th>
566
- <label for="login_form_border"><?php _e( 'login form border thickness:', 'custom-login' ); ?></label>
567
- </th>
568
- <td>
569
- <input id="login_form_border" name="login_form_border" value="<?php echo custom_login_get_setting( 'login_form_border' ); ?>" size="2" maxlength="2" />px
570
- <a class="question" title="Help &amp; Examples">[?]</a><br />
571
- <span class="hide"><?php _e( 'Choose your border thickness, i.e. <code>1</code> or <code>2</code>. Do not put &ldquo;<strong>px</strong>&rdquo;!', 'custom-login' ); ?></span>
572
- </td>
573
- </tr>
574
-
575
- <tr>
576
- <th>
577
- <label for="login_form_border_color"><?php _e( 'login form border color:', 'custom-login' ); ?></label>
578
- </th>
579
- <td>
580
- <input class="color {hash:true,required:false,adjust:false}" id="login_form_border_color" name="login_form_border_color" value="<?php echo custom_login_get_setting( 'login_form_border_color' ); ?>" size="10" maxlength="21" />
581
- <a class="question" title="Help &amp; Examples">[?]</a><br />
582
- <span class="hide"><?php _e( 'Use HEX color <strong>with</strong> &ldquo;#&rdquo; or RGB/A format.<br />
583
- Example: &sup1;<code>#121212</code> &sup2;<code>rgba(255,255,255,0.4)</code>', 'custom-login' ); ?>
584
- </span>
585
- </td>
586
- </tr>
587
-
588
- <tr>
589
- <th>
590
- <label for="login_form_box_shadow_1"><?php _e( 'login form box shadow:', 'custom-login' ); ?></label>
591
- </th>
592
- <td>
593
- <input id="login_form_box_shadow_1" name="login_form_box_shadow_1" value="<?php echo custom_login_get_setting( 'login_form_box_shadow_1' ); ?>" size="2" maxlength="2" />px
594
- <input id="login_form_box_shadow_2" name="login_form_box_shadow_2" value="<?php echo custom_login_get_setting( 'login_form_box_shadow_2' ); ?>" size="2" maxlength="2" />px
595
- <input id="login_form_box_shadow_3" name="login_form_box_shadow_3" value="<?php echo custom_login_get_setting( 'login_form_box_shadow_3' ); ?>" size="2" maxlength="2" />px
596
- <input class="color {hash:true,required:false,adjust:false}" id="login_form_box_shadow_4" name="login_form_box_shadow_4" value="<?php echo custom_login_get_setting( 'login_form_box_shadow_4' ); ?>" size="10" maxlength="21" />
597
- <a class="question" title="Help &amp; Examples">[?]</a><br />
598
- <span class="hide"><?php _e( 'Choose your box shadow settings, i.e. <code>5px 5px 18px #464646</code> <em>example code - <code>offset, offset, blur, color</code></em>.', 'custom-login' ); ?>
599
- </span>
600
- </td>
601
- </tr>
602
-
603
- <tr>
604
- <th>
605
- <label for="login_form_padding_top"><?php _e( 'login form padding fix:', 'custom-login' ); ?></label>
606
- </th>
607
- <td>
608
- <input id="login_form_padding_top" name="login_form_padding_top" type="checkbox" <?php checked( custom_login_get_setting( 'login_form_padding_top' ), true ); ?> value="true" />
609
- <a class="question" title="Help &amp; Examples">[?]</a><br />
610
- <span class="hide"><?php _e( 'Select the box if you would like the padding of the form to fit better.', 'custom-login' ); ?>
611
- </span>
612
- </td>
613
- </tr>
614
-
615
- <!-- Break -->
616
-
617
- <tr style="border-top: 1px solid #eee;">
618
- <th>
619
- <label for="label_color"><?php _e( 'label font color:', 'custom-login' ); ?></label>
620
- </th>
621
- <td>
622
- <input class="color {hash:true,required:false,adjust:false}" id="label_color" name="label_color" value="<?php echo custom_login_get_setting( 'label_color' ); ?>" size="10" maxlength="21" /> <a class="question" title="Help &amp; Examples">[?]</a><br />
623
- <span class="hide"><?php _e( 'Use HEX color <strong>with</strong> &ldquo;#&rdquo; or RGB/A format.<br />
624
- Example: &sup1;<code>#121212</code> &sup2;<code>rgba(255,255,255,0.4)</code>', 'custom-login' ); ?>
625
- </span>
626
- </td>
627
- </tr>
628
- </table><!-- .form-table --><?php
629
- }
630
-
631
- /**
632
- * Displays the gallery settings meta box.
633
- *
634
- * @since 0.8
635
- */
636
- function custom_login_advanced_meta_box() { ?>
637
-
638
- <table class="form-table">
639
- <tr>
640
- <th>
641
- <label for="custom_css"><?php _e( 'Custom CSS:', 'custom-login' ); ?></label>
642
- </th>
643
- <td>
644
- <textarea id="custom_css" name="custom_css" cols="50" rows="3" class="large-text code"><?php echo wp_specialchars_decode( stripslashes( custom_login_get_setting( 'custom_css' ) ), 1, 0, 1 ); ?></textarea>
645
- <a class="question" title="Help &amp; Examples">[?]</a><br />
646
- <span class="hide"><?php _e( 'Use this box to enter any custom CSS code that may not be shown below.<br />
647
- <strong>Example code for resgister, forgot password, back to blog:</strong><br>
648
- <code>.login #nav, .login #backtoblog { text-shadow: none;}</code><br />
649
- <code>.login #nav a{color:#FFFFFF!important;}
650
- .login #nav a:hover{color:#FFFFFF!important;}</code><br />
651
- <code>.login #nav a{text-decoration:none!important;}
652
- .login #nav a:hover{text-decoration:underline!important;}</code><br />
653
- <code>.login #backtoblog a{text-decoration:none!important;}
654
- .login #backtoblog a:hover{text-decoration:underline!important;}</code><br />
655
- <code>.login #backtoblog a{color:#FFFFFF!important;}
656
- .login #backtoblog a:hover{color:#FFFFFF!important;}</code><br />
657
- <hr>
658
- <strong>Example:</strong> <code>.login #backtoblog a { color:#990000; }</code><br />
659
- &sect; <strong>Example:</strong> <code>#snow { display:block; position:absolute; } #snow img { height:auto; width:100%; }</code><br />
660
- &sect; example CSS code for custom html code example..', 'custom-login' ); ?>
661
- </span>
662
- </td>
663
- </tr>
664
-
665
- <tr>
666
- <th>
667
- <label for="custom_html"><?php _e( 'Custom HTML:', 'custom-login' ); ?></label>
668
- </th>
669
- <td>
670
- <textarea id="custom_html" name="custom_html" cols="50" rows="3" class="large-text code"><?php echo wp_specialchars_decode( stripslashes( custom_login_get_setting( 'custom_html' ) ), 1, 0, 1 ); ?></textarea>
671
- <a class="question" title="Help &amp; Examples">[?]</a><br />
672
- <span class="hide"><?php _e( 'Use this box to enter any custom HTML coded that you can add custom style to in the custom CSS box.<br />
673
- <strong>Example:</strong> <code>&lt;div id="snow"&gt;&lt;img src="../image.jpg" alt="" /&gt;&lt;/div&gt;<br />&lt;div id="snow-bird"&gt; &lt;/div&gt;</code>', 'custom-login' ); ?>
674
- </span>
675
- </td>
676
- </tr>
677
-
678
- <tr>
679
- <th>
680
- <label for="custom_jquery"><?php _e( 'Custom jQuery:', 'custom-login' ); ?></label>
681
- </th>
682
- <td>
683
- <textarea id="custom_jquery" name="custom_jquery" cols="50" rows="3" class="large-text code"><?php echo wp_specialchars_decode( stripslashes( custom_login_get_setting( 'custom_jquery' ) ), 1, 0, 1 ); ?></textarea>
684
- <a class="question" title="Help &amp; Examples">[?]</a><br />
685
- <span class="hide"><?php _e( 'Use this box to enter any custom jQuery.<br />
686
- <strong>Example:</strong> <code>$(\'#login\').delay(300).fadeTo(800,1);</code>', 'custom-login' ); ?>
687
- </span>
688
- </td>
689
- </tr>
690
- </table><!-- .form-table --><?php
691
- }
692
-
693
- /**
694
- * Displays the support meta box.
695
- *
696
- * @since 0.8
697
- */
698
- function custom_login_tabs_meta_box() { ?>
699
- <table class="form-table">
700
- <div id="tab" class="tabbed inside">
701
-
702
- <ul class="tabs">
703
- <li class="t1 t"><a class="t1 tab">Austin Passy</a></li>
704
- <li class="t2 t"><a class="t2 tab">WordCamp<strong>LA</strong></a></li>
705
- <li class="t4 t"><a class="t3 tab">Extendd</a></li>
706
- <li class="t4 t"><a class="t4 tab">Premium WP Plugins</a></li>
707
- <li class="t4 t"><a class="t5 tab">Infield Box</a></li>
708
- <li class="t5 t"><a class="t6 tab">Float-O-holics</a></li>
709
- <li class="t6 t"><a class="t7 tab">Great Escape</a></li>
710
- <li class="t7 t"><a class="t8 tab">PDXbyPix</a></li>
711
- <li class="t8 t"><a class="t9 tab">Jeana Arter</a></li>
712
- </ul>
713
-
714
- <?php
715
- if ( function_exists( 'thefrosty_network_feed' ) ) {
716
- thefrosty_network_feed( 'http://feeds.feedburner.com/AustinPassy', '1' );
717
- thefrosty_network_feed( 'http://feeds.feedburner.com/WordCampLA', '2' );
718
- thefrosty_network_feed( 'http://extendd.com/feed', '3' );
719
- thefrosty_network_feed( 'http://extendd.com/feed?post_type=plugin', '4' );
720
- thefrosty_network_feed( 'http://infieldbox.com/feed', '5' );
721
- thefrosty_network_feed( 'http://floatoholics.com/feed', '6' );
722
- thefrosty_network_feed( 'http://greatescapecabofishing.com/feed', '7' );
723
- thefrosty_network_feed( 'http://pdxbypix.com/feed', '8' );
724
- thefrosty_network_feed( 'http://feeds.feedburner.com/JeanaArter', '9' );
725
- } ?>
726
-
727
- </div>
728
- </table><!-- .form-table --><?php
729
- }
730
-
731
- /**
732
- * Displays a settings saved message.
733
- *
734
- * @since 0.8
735
- */
736
- function custom_login_settings_update_message() { ?>
737
- <div class="updated fade">
738
- <p><strong><?php _e( 'Don&prime;t you feel good. You just saved me.', 'custom-login' ); ?></strong></p>
739
- </div><?php
740
- }
741
-
742
- /**
743
- * Outputs the HTML and calls the meta boxes for the settings page.
744
- *
745
- * @since 0.8
746
- */
747
- function custom_login_settings_page() {
748
- global $custom_login;
749
-
750
- $plugin_data = get_plugin_data( CUSTOM_LOGIN_DIR . 'custom-login.php' ); ?>
751
-
752
- <div class="wrap">
753
-
754
- <?php if ( function_exists( 'screen_icon' ) ) screen_icon(); ?>
755
-
756
- <h2><?php _e( 'Custom Login Settings', 'custom-login' ); ?></h2>
757
-
758
- <?php //if ( isset( $_GET['updated'] ) && 'true' == esc_attr( $_GET['updated'] ) ) custom_login_settings_update_message(); ?>
759
-
760
- <div id="poststuff">
761
-
762
- <form method="post" action="<?php echo esc_url( admin_url( 'options-general.php?page=custom-login' ) ); ?>">
763
-
764
- <?php wp_nonce_field( 'custom-login-settings-page' ); ?>
765
- <?php wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?>
766
-
767
- <?php wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); ?>
768
-
769
- <div class="metabox-holder">
770
- <div class="post-box-container column-1 normal"><?php do_meta_boxes( $custom_login->settings_page, 'normal', $plugin_data ); ?></div>
771
- <div class="post-box-container column-2 advanced"><?php do_meta_boxes( $custom_login->settings_page, 'advanced', $plugin_data ); ?></div>
772
- <div class="post-box-container column-3 side" style="clear:both;"><?php do_meta_boxes( $custom_login->settings_page, 'side', $plugin_data ); ?></div>
773
- </div>
774
-
775
- <p class="submit" style="clear: both;">
776
- <input type="submit" name="Submit" class="button-primary" value="<?php _e( 'Update Settings', 'custom-login' ); ?>" />
777
- <input type="hidden" name="custom-login-settings-submit" value="true" />
778
- </p><!-- .submit -->
779
-
780
- </form>
781
-
782
- </div><!-- #poststuff -->
783
-
784
- </div><!-- .wrap --><?php
785
- }
786
-
787
- /**
788
- * Loads the scripts needed for the settings page.
789
- *
790
- * @since 0.8
791
- */
792
- function custom_login_settings_page_enqueue_script() {
793
- wp_enqueue_script( 'media-upload' );
794
- wp_enqueue_script( 'common' );
795
- wp_enqueue_script( 'wp-lists' );
796
- wp_enqueue_script( 'postbox' );
797
- wp_enqueue_script( 'thickbox' );
798
- wp_enqueue_script( 'theme-preview' );
799
- wp_enqueue_script( 'autosize' );
800
- wp_enqueue_script( 'custom-login' );
801
- wp_enqueue_script( 'jscolor' );
802
- }
803
-
804
- /**
805
- * Loads the stylesheets needed for the settings page.
806
- *
807
- * @since 0.8
808
- */
809
- function custom_login_settings_page_enqueue_style() {
810
- wp_enqueue_style( 'thickbox' );
811
- wp_enqueue_style( 'custom-login-tabs' );
812
- wp_enqueue_style( 'custom-login-admin' );
813
- }
814
-
815
- /**
816
- * Loads the metabox toggle JavaScript in the settings page head.
817
- *
818
- * @since 0.8
819
- */
820
- function custom_login_settings_page_load_scripts() {
821
- global $custom_login; ?>
822
- <script type="text/javascript">
823
- //<![CDATA[
824
- jQuery(document).ready( function($) {
825
- $('.if-js-closed').removeClass('if-js-closed').addClass('closed');
826
- postboxes.add_postbox_toggles( '<?php echo $custom_login->settings_page; ?>' );
827
- });
828
- //]]>
829
- </script><?php
830
- }
831
-
832
- /**
833
- * Plugin Action /Settings on plugins page
834
- * @since 0.4.2
835
- * @package plugin
836
- */
837
- function custom_login_plugin_actions( $links, $file ) {
838
- if( $file == 'custom-login/custom-login.php' && function_exists( "admin_url" ) ) {
839
- $settings_link = '<a href="' . admin_url( 'options-general.php?page=custom-login' ) . '">' . __('Settings', 'custom-login' ) . '</a>';
840
- array_unshift( $links, $settings_link ); // before other links
841
- $links[] = '<a href="http://extendd.com/plugin/custom-login-pro/?ref=plugin-upgrade&refer=' . urlencode( home_url() ) . '" target="_blank">' . __('Go Pro', 'custom-login' ) . '</a>';
842
- }
843
- return $links;
844
- }
845
-
846
- /**
847
- * Warnings
848
- * @since 0.5
849
- * @package admin
850
- */
851
- function custom_login_admin_warnings() {
852
- global $custom_login;
853
-
854
- function custom_login_warning() {
855
- global $custom_login;
856
-
857
- if ( custom_login_get_setting( 'use_custom' ) != true )?>
858
- <p id="custom-login-warning" class="updated fade below-h2" style="padding: 5px 10px;">
859
- <strong><?php sprintf( _e( 'Custom Login plugin is not configured yet. It will use the defualt theme unless you configure the %1$s.', 'custom-login' ), '<a href="' . admin_url( 'options-general.php?page=custom-login' ) . '">options</a>' ); ?></strong>
860
- </p><?php
861
- }
862
-
863
- add_action( 'admin_notices', 'custom_login_warning' );
864
-
865
- return;
866
- }
867
-
868
- /**
869
- * RSS Feed
870
- * @since 0.3
871
- * @updated 1.1
872
- * @package Admin
873
- */
874
- if ( !function_exists( 'thefrosty_network_feed' ) ) {
875
- function thefrosty_network_feed( $url, $count ) {
876
-
877
- $items = custom_login_fetch_rss_items( 3, $url );
878
-
879
- echo '<div class="t' . esc_attr( $count ) . ' tab-content postbox open feed">';
880
- echo '<ul>';
881
- if ( empty( $items ) ) {
882
- echo '<li>' . __( 'Error fetching feed' ) . '</li>';
883
- } else {
884
- foreach( $items as $item ) : ?>
885
- <li>
886
- <a href='<?php echo esc_url( $item->get_permalink() ); ?>' title='<?php esc_attr_e( $item->get_description() ); ?>'><?php esc_attr_e( $item->get_title() ); ?></a><br />
887
- <span style="font-size:10px; color:#aaa;"><?php esc_attr_e( $item->get_date('F, jS Y | g:i a') ); ?></span>
888
- </li>
889
- <?php endforeach;
890
- }
891
- echo '</ul>';
892
- echo '</div>';
893
- }
894
- }
895
-
896
- /**
897
- * Fetch RSS items from the feed.
898
- *
899
- * @param int $num Number of items to fetch.
900
- * @param string $feed The feed to fetch.
901
- * @return array|bool False on error, array of RSS items on success.
902
- */
903
- function custom_login_fetch_rss_items( $num, $feed ) {
904
- include_once( ABSPATH . WPINC . '/feed.php' );
905
- $rss = fetch_feed( $feed );
906
-
907
- // Bail if feed doesn't work
908
- if ( !$rss || is_wp_error( $rss ) )
909
- return false;
910
-
911
- $rss_items = $rss->get_items( 0, $rss->get_item_quantity( $num ) );
912
-
913
- // If the feed was erroneous
914
- if ( !$rss_items ) {
915
- $md5 = md5( $feed );
916
- delete_transient( 'feed_' . $md5 );
917
- delete_transient( 'feed_mod_' . $md5 );
918
- $rss = fetch_feed( $feed );
919
- $rss_items = $rss->get_items( 0, $rss->get_item_quantity( $num ) );
920
- }
921
-
922
- return $rss_items;
923
- }
924
-
925
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
library/admin/dashboard.php DELETED
@@ -1,168 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Load the feed from The Frosty network
5
- *
6
- * @since 12/3/12
7
- * @updated 12/3/12
8
- */
9
- if ( !class_exists( 'the_frosty_dashboard' ) ) :
10
- class the_frosty_dashboard {
11
-
12
- /**
13
- * To infinity.
14
- *
15
- */
16
- function __construct() {
17
- add_action( 'wp_dashboard_setup', array( $this, 'add_dashboard_widget' ) );
18
- }
19
-
20
- /**
21
- * Add the dashboard widget
22
- *
23
- * @return void
24
- */
25
- function add_dashboard_widget() {
26
- wp_add_dashboard_widget( 'thefrosty_dashboard', __( 'The Frosty Network <em>feeds</em>' ), array( $this, 'dashboard' ), array( $this, 'dashboard_control' ) );
27
- }
28
-
29
- /**
30
- * Fetch RSS items from the feed.
31
- *
32
- * @param int $num Number of items to fetch.
33
- * @param string $feed The feed to fetch.
34
- * @return array|bool False on error, array of RSS items on success.
35
- */
36
- public function fetch_rss_items( $num, $feed ) {
37
- include_once( ABSPATH . WPINC . '/feed.php' );
38
- $rss = fetch_feed( $feed );
39
-
40
- // Bail if feed doesn't work
41
- if ( !$rss || is_wp_error( $rss ) )
42
- return false;
43
-
44
- $rss_items = $rss->get_items( 0, $rss->get_item_quantity( $num ) );
45
-
46
- // If the feed was erroneous
47
- if ( !$rss_items ) {
48
- $md5 = md5( $feed );
49
- delete_transient( 'feed_' . $md5 );
50
- delete_transient( 'feed_mod_' . $md5 );
51
- $rss = fetch_feed( $feed );
52
- $rss_items = $rss->get_items( 0, $rss->get_item_quantity( $num ) );
53
- }
54
- return $rss_items;
55
- }
56
-
57
- /**
58
- * Output CSS
59
- *
60
- * @return string
61
- */
62
- function style() {
63
- ?>
64
- <style>
65
- #frosty-dashboard .frosty-image {
66
- display: inline-block;
67
- height: 25px;
68
- float: left;
69
- width: 25px;
70
- overflow: hidden
71
- }
72
- #frosty-dashboard .frosty-image span {
73
- background: url('<?php echo esc_url( plugin_dir_url( __FILE__ ) ) . 'Sprite.jpg'; ?>') 0 0 no-repeat;
74
- -webkit-background-size: 300px 25px;
75
- -moz-background-size: 300px 25px;
76
- -ms-background-size: 300px 25px;
77
- -o-background-size: 300px 25px;
78
- background-size: 300px 25px;
79
- display: inline-block;
80
- height: 25px;
81
- width: 25px
82
- }
83
- #frosty-dashboard li { padding-left:30px }
84
- span.austinpassy { background-position: -25px 0 !important }
85
- span.frostywebdesigns { background-position: -50px 0 !important }
86
- span.jeanaarter { background-position: -75px 0 !important }
87
- span.wordcampla { background-position: -100px 0 !important }
88
- span.floatoholics { background-position: -125px 0 !important }
89
- span.thefrosty { background-position: -150px 0 !important }
90
- span.greatescapecabofishing { background-position: -175px 0 !important }
91
- span.eateryengine { background-position: -200px 0 !important }
92
- span.extendd { background-position: -225px 0 !important }
93
- </style>
94
- <?php
95
- }
96
-
97
- /**
98
- * Print the dashboard widget
99
- *
100
- * @return string
101
- */
102
- function dashboard( $sidebar_args ) {
103
- $widget_options = get_option( 'the_frosty_dashboard_widget_options' );
104
-
105
- $item_count = !empty( $widget_options['items'] ) ? $widget_options['items'] : 6;
106
- $rss_items = $this->fetch_rss_items( $item_count, 'http://pipes.yahoo.com/pipes/pipe.run?_id=52c339c010550750e3e64d478b1c96ea&_render=rss' );
107
-
108
- $this->style();
109
- $content = '<ul id="frosty-dashboard">';
110
- if ( !$rss_items ) {
111
- $content .= '<li>' . __( 'Error fetching feed' ) . '</li>';
112
- } else {
113
- foreach ( $rss_items as $item ) {
114
- $title = esc_attr( strtolower( sanitize_title_with_dashes( htmlentities( $item->get_title() ) ) ) );
115
-
116
- $class = str_replace( array( 'http://', 'https://' ), '', $item->get_permalink() );
117
- $class = str_replace( array( '2010.', '2011.', '2012.', '2013.', '2014.', '2015.' ), '', $class );
118
- $class = str_replace( array( '.com/', '.net/', '.org/', '.la/', 'la.' ), ' ', $class );
119
- $class = str_replace( array( '2011/', '2012/', '2013/', '2014/' ), '', $class );
120
- $class = str_replace( array( '01/', '02/', '03/', '04/', '05/', '06/', '07/', '08/', '09/', '10/', '11/', '12/' ), '', $class );
121
- $class = str_replace( $title, '', $class );
122
- $class = str_replace( '/', '', $class );
123
- $class = str_replace( 'feedproxy.google', '', $class );
124
- $class = str_replace( '~r', '', $class );
125
- $class = str_replace( '~', ' ', $class );
126
- $class = trim( $class );
127
- list( $class, $therest ) = explode( ' ', $class );
128
- // Redundant, I know. Can you make a preg_replace for this?
129
-
130
- $url = preg_replace( '/#.*/', '', esc_url( $item->get_permalink(), null, 'display' ) );
131
- $content .= '<div class="frosty-image"><span class="' . strtolower( $class ) . '">&nbsp;</span></div>';
132
- $content .= '<li>';
133
- $content .= '<a class="rsswidget" href="' . $url . '">' . esc_html( $item->get_title() ) . '</a> ';
134
- $content .= '<span style="font-size:10px; color:#aaa;">' . esc_attr( $item->get_date('F, jS Y') ) . '</span>';
135
- $content .= '</li>';
136
- }
137
- }
138
- $content .= '</ul>';
139
- echo $content;
140
- }
141
-
142
- /**
143
- * Print the dashboard control widget
144
- *
145
- * @return string
146
- */
147
- function dashboard_control() {
148
- if ( !$widget_options = get_option( 'the_frosty_dashboard_widget_options' ) )
149
- $widget_options = array();
150
-
151
- if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['widget_id']) && 'thefrosty_dashboard' == $_POST['widget_id'] ) {
152
- $items = stripslashes_deep( $_POST['thefrosty_dashboard_items'] );
153
- $widget_options['items'] = $items;
154
- update_option( 'the_frosty_dashboard_widget_options', $widget_options );
155
- }
156
- //print_r( $widget_options ); ?>
157
- <p><label for="thefrosty_dashboard_items"><?php _e('How many items would you like to display?'); ?></label>
158
- <select name="thefrosty_dashboard_items">
159
- <?php for ( $i = 3; $i <= 20; ++$i ) echo "<option value='$i' " . selected( $items, $i, false ) . ">$i</option>"; ?>
160
- </select></p>
161
- <?php
162
- }
163
-
164
- }
165
- $the_frosty_dashboard = new the_frosty_dashboard;
166
- endif;
167
-
168
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
library/admin/presstrends.php DELETED
@@ -1,69 +0,0 @@
1
- <?php
2
-
3
- function presstrends_dirname() {
4
- return dirname( dirname( __FILE__ ) );
5
- }
6
- /**
7
- * PressTrends Plugin API
8
- */
9
- function presstrends_CustomLogin_plugin() {
10
-
11
- // PressTrends Account API Key
12
- $api_key = 'ehq5aafw0sujyv62ks5roabop0flmh0admwh';
13
- $auth = 'ynpujn2oj1xgterwuv8ce93gmx9y3w1lr';
14
-
15
- // Start of Metrics
16
- global $wpdb;
17
- $data = get_transient( 'presstrends_cache_data' );
18
- if ( !$data || $data == '' ) {
19
- $api_base = 'http://api.presstrends.io/index.php/api/pluginsites/update/auth/';
20
- $url = $api_base . $auth . '/api/' . $api_key . '/';
21
-
22
- $count_posts = wp_count_posts();
23
- $count_pages = wp_count_posts( 'page' );
24
- $comments_count = wp_count_comments();
25
-
26
- // wp_get_theme was introduced in 3.4, for compatibility with older versions, let's do a workaround for now.
27
- if ( function_exists( 'wp_get_theme' ) ) {
28
- $theme_data = wp_get_theme();
29
- $theme_name = urlencode( $theme_data->Name );
30
- } else {
31
- $theme_data = get_theme_data( get_stylesheet_directory() . '/style.css' );
32
- $theme_name = $theme_data['Name'];
33
- }
34
-
35
- $plugin_name = '&';
36
- foreach ( get_plugins() as $plugin_info ) {
37
- $plugin_name .= $plugin_info['Name'] . '&';
38
- }
39
- // CHANGE __FILE__ PATH IF LOCATED OUTSIDE MAIN PLUGIN FILE
40
- $plugin_data = get_plugin_data( CUSTOM_LOGIN_FILE );
41
- $posts_with_comments = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts WHERE post_type='post' AND comment_count > 0" );
42
- $data = array(
43
- 'url' => stripslashes( str_replace( array( 'http://', '/', ':' ), '', site_url() ) ),
44
- 'posts' => $count_posts->publish,
45
- 'pages' => $count_pages->publish,
46
- 'comments' => $comments_count->total_comments,
47
- 'approved' => $comments_count->approved,
48
- 'spam' => $comments_count->spam,
49
- 'pingbacks' => $wpdb->get_var( "SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_type = 'pingback'" ),
50
- 'post_conversion' => ( $count_posts->publish > 0 && $posts_with_comments > 0 ) ? number_format( ( $posts_with_comments / $count_posts->publish ) * 100, 0, '.', '' ) : 0,
51
- 'theme_version' => $plugin_data['Version'],
52
- 'theme_name' => $theme_name,
53
- 'site_name' => str_replace( ' ', '', get_bloginfo( 'name' ) ),
54
- 'plugins' => count( get_option( 'active_plugins' ) ),
55
- 'plugin' => urlencode( $plugin_name ),
56
- 'wpversion' => get_bloginfo( 'version' ),
57
- );
58
-
59
- foreach ( $data as $k => $v ) {
60
- $url .= $k . '/' . $v . '/';
61
- }
62
- wp_remote_get( $url );
63
- set_transient( 'presstrends_cache_data', $data, 60 * 60 * 24 );
64
- }
65
- }
66
-
67
- // PressTrends WordPress Action
68
- add_action('admin_init', 'presstrends_CustomLogin_plugin');
69
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
library/css/admin.css DELETED
@@ -1,49 +0,0 @@
1
- /* Theme settings page. */
2
- .form-table.side th {
3
- width: 20% !important;
4
- }
5
- #custom-login-general-meta-box .form-table th {
6
- width: 33% !important;
7
- }
8
-
9
- .upload_image {
10
- float: left;
11
- margin-right: 5px;
12
- }
13
- .upload_image_button {
14
- height: 22px;
15
- padding-top: 1px;
16
- }
17
- .upload_image_button:hover {
18
- cursor: pointer;
19
- }
20
-
21
- .metabox-holder .column-1 {
22
- float: left;
23
- width: 65%;
24
- }
25
- .metabox-holder .column-2 {
26
- float: right;
27
- width: 33%;
28
- }
29
- .metabox-holder .column-3 {
30
- clear: both;
31
- width: 100%;
32
- }
33
-
34
- /* Questions */
35
- a.question, a.addrows {
36
- font-weight: bold;
37
- text-decoration: none;
38
- }
39
- a.question:hover, a.addrows:hover {
40
- cursor: pointer;
41
- }
42
- textarea {
43
- display: block;
44
- -webkit-transition: height 0.2s;
45
- -moz-transition: height 0.2s;
46
- -ms-transition: height 0.2s;
47
- -o-transition: height 0.2s;
48
- transition: height 0.2s;
49
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
library/css/custom-login.css DELETED
@@ -1,171 +0,0 @@
1
- body {
2
- background-color: #666;
3
- background-image: -webkit-gradient(
4
- linear,
5
- left bottom,
6
- left top,
7
- color-stop(0, #666),
8
- color-stop(1, #999)
9
- );
10
- background-image: -webkit-linear-gradient(
11
- center bottom,
12
- color-stop(0, #666) 37%,
13
- color-stop(1, #999) 69%
14
- );
15
- background-image: -moz-linear-gradient(
16
- center bottom,
17
- color-stop(0, #666) 37%,
18
- color-stop(1, #999) 69%
19
- );
20
- background-image: -ms-linear-gradient(
21
- center bottom,
22
- color-stop(0, #666) 37%,
23
- color-stop(1, #999) 69%
24
- );
25
- background-image: -o-linear-gradient(
26
- center bottom,
27
- color-stop(0, #666) 37%,
28
- color-stop(1, #999) 69%
29
- );
30
- }
31
- body.login {
32
- background: grey;
33
- }
34
- body:before {
35
- content: "Powered by the Custom Login lite plugin for WordPress";
36
- position: absolute;
37
- left: 25px;
38
- bottom: 10px;
39
- }
40
- body:after {
41
- content: "";
42
- position: absolute;
43
- top: 0; left: 0; bottom: 0; right: 0;
44
- background-image:
45
- -webkit-gradient(linear, 0 0, 100% 100%,
46
- color-stop(.25, rgba(255, 255, 255, .2)),
47
- color-stop(.25, transparent), color-stop(.5, transparent),
48
- color-stop(.5, rgba(255, 255, 255, .2)),
49
- color-stop(.75, rgba(255, 255, 255, .2)),
50
- color-stop(.75, transparent), to(transparent)
51
- );
52
- background-image:
53
- -webkit-linear-gradient(
54
- -45deg,
55
- rgba(255, 255, 255, .2) 25%,
56
- transparent 25%,
57
- transparent 50%,
58
- rgba(255, 255, 255, .2) 50%,
59
- rgba(255, 255, 255, .2) 75%,
60
- transparent 75%,
61
- transparent
62
- );
63
- background-image:
64
- -moz-linear-gradient(
65
- -45deg,
66
- rgba(255, 255, 255, .2) 25%,
67
- transparent 25%,
68
- transparent 50%,
69
- rgba(255, 255, 255, .2) 50%,
70
- rgba(255, 255, 255, .2) 75%,
71
- transparent 75%,
72
- transparent
73
- );
74
- background-image:
75
- -ms-linear-gradient(
76
- -45deg,
77
- rgba(255, 255, 255, .2) 25%,
78
- transparent 25%,
79
- transparent 50%,
80
- rgba(255, 255, 255, .2) 50%,
81
- rgba(255, 255, 255, .2) 75%,
82
- transparent 75%,
83
- transparent
84
- );
85
- background-image:
86
- -o-linear-gradient(
87
- -45deg,
88
- rgba(255, 255, 255, .2) 25%,
89
- transparent 25%,
90
- transparent 50%,
91
- rgba(255, 255, 255, .2) 50%,
92
- rgba(255, 255, 255, .2) 75%,
93
- transparent 75%,
94
- transparent
95
- );
96
- z-index: 1;
97
- -webkit-background-size: 50px 50px;
98
- -moz-background-size: 50px 50px;
99
- overflow: hidden;
100
- }
101
-
102
- #login {
103
- position: relative;
104
- z-index: 2;
105
- }
106
- #login form {
107
- background: #5A5E78;
108
- padding-top: 20px;
109
- margin-top: 0;
110
- -moz-border-radius: 8px;
111
- -khtml-border-radius: 8px;
112
- -webkit-border-radius: 8px;
113
- -o-border-radius: 8px;
114
- border-radius: 8px;
115
- border: 1px solid #003333;
116
- -moz-box-shadow: 8px 8px 18px #122222;
117
- -webkit-box-shadow: 8px 8px 18px #122222;
118
- -khtml-box-shadow: 8px 8px 18px #122222;
119
- -o-box-shadow: 8px 8px 18px #122222;
120
- box-shadow: 8px 8px 18px #122222;
121
-
122
- -webkit-transition: all .5s linear;
123
- -khtml-transition: all .5s linear;
124
- -moz-transition: all .5s linear;
125
- -o-transition: all .5s linear;
126
- transition: all .5s linear;
127
- }
128
- #login form:hover, #login form:active {
129
- background: #111;
130
- border: 1px solid #aaa;
131
- -moz-box-shadow: 0 0 28px 15px #ddd;
132
- -webkit-box-shadow: 0 0 28px 15px #ddd;
133
- -khtml-box-shadow: 0 0 28px 15px #ddd;
134
- -o-box-shadow: 0 0 28px 15px #ddd;
135
- box-shadow: 0 0 28px 15px #ddd;
136
- }
137
-
138
- #login h1 {
139
- margin: 0;
140
- display: none;
141
- }
142
-
143
- .login #nav a, .login #backtoblog a {
144
- color: #222 !important;
145
- text-shadow: 0 1px 0 #bbb;
146
- -moz-text-shadow: 0 1px 0 #bbb;
147
- -webkit-text-shadow: 0 1px 0 #bbb;
148
- -khtml-text-shadow: 0 1px 0 #bbb;
149
- }
150
- .login #nav a:hover, .login #backtoblog a:hover {
151
- color: #000 !important;
152
- }
153
-
154
- label {
155
- color: #fff !important;
156
- text-shadow: 0 1px 0 #000;
157
- -moz-text-shadow: 0 1px 0 #000;
158
- -webkit-text-shadow: 0 1px 0 #000;
159
- -khtml-text-shadow: 0 1px 0 #000;
160
- }
161
-
162
- span.byauthor {
163
- color: #ccc;
164
- position: absolute;
165
- right: 10px;
166
- text-decoration: none;
167
- top: 7px;
168
- }
169
- span.byauthor a {
170
- position: static !important;
171
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
library/css/custom-login.css.php DELETED
@@ -1,133 +0,0 @@
1
- <?php
2
-
3
- error_reporting(0);
4
-
5
- /**
6
- * Extract the options from the database
7
- * print_r( get_option( 'custom_login_settings' ) );
8
- *
9
- * @return Array (
10
- [version]
11
- [custom]
12
- [gravatar]
13
- [hide_dashboard]
14
- [disable_presstrends]
15
- [hide_upgrade]
16
- [upgrade_complete]
17
- [custom_css]
18
- [custom_html]
19
- [html_border_top_color] //Deprecated
20
- [html_border_top_background] //Deprecated
21
- [html_background_color]
22
- [html_background_url]
23
- [html_background_repeat]
24
- [login_form_logo]
25
- [login_form_border_top_color]
26
- [login_form_background_color]
27
- [login_form_background]
28
- [login_form_background_size]
29
- [login_form_border_radius]
30
- [login_form_border]
31
- [login_form_border_color]
32
- [login_form_box_shadow_1]
33
- [login_form_box_shadow_2]
34
- [login_form_box_shadow_3]
35
- [login_form_box_shadow_4]
36
- [login_form_padding_top]
37
- [label_color]
38
- [html_background_size]
39
- */
40
- extract( get_option( 'custom_login_settings' ) );
41
-
42
- ?><style type="text/css"><?php
43
-
44
- echo "
45
- /**
46
- * Custom Login lite by Austin Passy
47
- *
48
- * Plugin URI : http://austinpassy.com/wordpress-plugins/custom-login
49
- * Version : $version
50
- * Author URI : http://austinpassy.com
51
- * Pro Version : http://extendd.com/plugin/custom-login-pro
52
- *
53
- */\n\n";
54
-
55
- /* Custom user input */
56
- if ( $custom_css ) echo wp_specialchars_decode( stripslashes( $custom_css ), 1, 0, 1 ) . "\n"; ?>
57
-
58
- html {
59
- background-color: <?php
60
-
61
- if ( !empty( $html_background_color ) ) echo trailingsemicolonit( $html_background_color );
62
-
63
- if ( !empty( $html_background_url ) ) {
64
- echo trailingsemicolonit( "background-image: url('{$html_background_url}')" );
65
- echo trailingsemicolonit( 'background-position: left top' );
66
- echo trailingsemicolonit( "background-repeat: {$html_background_repeat}" );
67
-
68
- if ( !empty( $html_background_size ) && 'none' != $html_background_size ) {
69
- $html_background_size = ( 'flex' != $html_background_size ) ? $html_background_size : '100% auto';
70
- custom_login_prefix_it( 'background-size', $html_background_size );
71
- }
72
- } ?>
73
-
74
- }
75
-
76
- <?php if ( !empty( $html_background_url ) ) { ?>
77
- body.login {
78
- background: transparent !important;
79
- }
80
- <?php } ?>
81
-
82
- #login form {
83
- <?php
84
- if ( !empty( $login_form_background_color ) ) echo trailingsemicolonit( "background-color: {$login_form_background_color}" );
85
- if ( !empty( $login_form_background ) ) {
86
- echo trailingsemicolonit( "background-image: url('{$login_form_background}')" );
87
- echo trailingsemicolonit( 'background-position: center top' );
88
- echo trailingsemicolonit( 'background-repeat: no-repeat' );
89
-
90
- if ( !empty( $form_background_size ) && 'none' != $form_background_size ) {
91
- $form_background_size = ( 'flex' != $login_form_background_size ) ? $login_form_background_size : '100% auto';
92
- custom_login_prefix_it( 'background-size', $form_background_size );
93
- }
94
- }
95
-
96
- if ( true == $login_form_padding_top ) echo trailingsemicolonit( 'padding-top: 20px' ); else echo trailingsemicolonit( 'padding-top: 100px' );
97
-
98
- if ( !empty( $login_form_border ) ) {
99
- $login_form_border = rtrim( $login_form_border, 'px' );
100
- echo trailingsemicolonit( "border: {$login_form_border}px solid {$login_form_border_color}" );
101
- }
102
-
103
- if ( absint( $login_form_border_radius ) ) {
104
- $login_form_border_radius = rtrim( $login_form_border_radius, 'px' ) . 'px';
105
- custom_login_prefix_it( 'border-radius', $login_form_border_radius );
106
- }
107
-
108
- $login_form_box_shadow_1 = rtrim( $login_form_box_shadow_1, 'px' ) . 'px';
109
- $login_form_box_shadow_2 = rtrim( $login_form_box_shadow_2, 'px' ) . 'px';
110
- $login_form_box_shadow_3 = rtrim( $login_form_box_shadow_3, 'px' ) . 'px';
111
-
112
- $box_shadow = $login_form_box_shadow_1 . ' ' . $login_form_box_shadow_2 . ' ' . $login_form_box_shadow_3 . ' ' . $login_form_box_shadow_4;
113
-
114
- custom_login_prefix_it( 'box-shadow', $box_shadow ); ?>
115
-
116
- }
117
-
118
- <?php if ( empty( $login_form_logo ) ) { ?>
119
- #login h1 {
120
- display: none;
121
- }
122
- <?php }
123
-
124
- if ( !empty( $login_form_logo ) ) { ?>
125
- .login h1 a {
126
- background: transparent url('<?php echo $login_form_logo; ?>') no-repeat scroll center top;
127
- }
128
- <?php } ?>
129
-
130
- label {
131
- color: <?php echo $label_color; ?> !important;
132
- }
133
- </style>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
library/css/tabs.css DELETED
@@ -1,47 +0,0 @@
1
- ul.tabs {
2
- display: block !important;
3
- list-style: none;
4
- margin: 0;
5
- overflow: hidden;
6
- width: 100%;
7
- }
8
- ul.tabs li {
9
- float: left;
10
- display: inline;
11
- margin: 0;
12
- padding: 0;
13
- background: transparent;
14
- }
15
- ul.tabs li a {
16
- border-radius: 6px 6px 0 0 !important;
17
- -moz-border-radius: 6px 6px 0 0 !important;
18
- -webkit-border-radius: 6px 6px 0 0 !important;
19
- -khtml-border-radius: 6px 6px 0 0 !important;
20
- display: block;
21
- float: left;
22
- margin: 0 3px 0 0;
23
- padding: 4px 6px;
24
- color: #aaa;
25
- text-shadow: 0 1px 0 #fff;
26
- -moz-text-shadow: 0 1px 0 #fff;
27
- -webkit-text-shadow: 0 1px 0 #fff;
28
- -khtml-text-shadow: 0 1px 0 #fff;
29
- }
30
- ul.tabs li a:hover {
31
- background: #DFDFDF url(../../../../../../wp-admin/images/gray-grad.png) repeat-x scroll left top;
32
- color: #444;
33
- text-decoration: none;
34
- }
35
- ul.tabs li a.tab-current {
36
- background: #DFDFDF url(../../../../../../wp-admin/images/gray-grad.png) repeat-x scroll left top;
37
- color: #222;
38
- font-weight: bold;
39
- }
40
- .postbox.open.feed {
41
- border-radius: 0 0 6px 6px !important;
42
- -moz-border-radius: 0 0 6px 6px !important;
43
- -webkit-border-radius: 0 0 6px 6px !important;
44
- -khtml-border-radius: 0 0 6px 6px !important;
45
- padding: 5px 6px;
46
- width: 95.6%;
47
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
library/js/arrow.gif DELETED
Binary file
library/js/cross.gif DELETED
Binary file
library/js/custom-login.js DELETED
@@ -1,54 +0,0 @@
1
- jQuery(document).ready(
2
- function($) {
3
- var Version = jQuery.fn.jquery;
4
-
5
- $('.upload_image_button').click(function() {
6
- if( Version > '1.6' )
7
- formfield = $(this).parent().find('.upload_image').prop('name');
8
- else
9
- formfield = $(this).parent().find('.upload_image').attr('name');
10
- //console.log(formfield);
11
- tb_show('', 'media-upload.php?type=image&amp;TB_iframe=true');
12
- return false;
13
- });
14
-
15
- window.send_to_editor = function(html) {
16
- if( Version > '1.6' )
17
- imgurl = $('img',html).prop('src');
18
- else
19
- imgurl = $('img',html).attr('src');
20
- $('#' + formfield).val(imgurl);
21
- tb_remove();
22
- }
23
-
24
- // Tabs
25
- $('div.tabbed div').hide();
26
- $('div.t1').show();
27
- $('div.tabbed ul.tabs li.t1 a').addClass('tab-current');
28
- $('div.tabbed ul li a').css('cursor','pointer');
29
-
30
- $('div.tabbed ul li a').click(function(){
31
- var thisClass = this.className.slice(0,2);
32
- $('div.tabbed div').hide();
33
- $('div.' + thisClass).show();
34
- $('div.tabbed ul.tabs li a').removeClass('tab-current');
35
- $(this).addClass('tab-current');
36
- });
37
-
38
- // Queations
39
- $('#normal-sortables span.hide').hide();
40
- $('#normal-sortables a.question').click(function() {
41
- $(this).next().next().toggleClass('hide').toggleClass('show').toggle(380);
42
- });
43
-
44
- $('textarea').autosize({
45
- append : "\n"
46
- });
47
-
48
- // External links
49
- $('a').filter(function() {
50
- return this.hostname && this.hostname !== location.hostname;
51
- }).attr('target','_blank');
52
-
53
- }
54
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
library/js/gravatar.js DELETED
@@ -1,6 +0,0 @@
1
- /*************************************************
2
- ** Get Gravatar v1.2
3
- ** Copyright � 2009 Josh Pyles / Pixelmatrix Design LLC
4
- ** http://pixelmatrixdesign.com
5
- **************************************************/
6
- (function(a){a.fn.getGravatar=function(b){var c=a.extend({},a.fn.getGravatar.defaults,b);return this.each(function(){$this=a(this);var e=a.meta?a.extend({},c,$this.data()):c;var d="";if($this.is("input[type='text']")){a.fn.getGravatar.getUrl(e,$this.val());$this.keyup(function(){clearTimeout(d);var f=$this.val();d=setTimeout(function(){a.fn.getGravatar.getUrl(e,f)},500)})}})};a.fn.getGravatar.getUrl=function(d,c){if(d.start){d.start($this)}id=a.fn.getGravatar.md5(c);var b="http://gravatar.com/avatar.php?gravatar_id="+id+"&default="+d.fallback+"&size="+d.avatarSize;a.fn.getGravatar.output(d.avatarContainer,b,d.stop)};a.fn.getGravatar.output=function(b,c,d){img=new Image();a(img).load(function(){a(b).prop("src",c);if(d){d()}}).prop("src",c)};a.fn.getGravatar.md5=function(C){var D;var w=function(c,b){return(c<<b)|(c>>>(32-b))};var H=function(x,c){var W,b,k,V,d;k=(x&2147483648);V=(c&2147483648);W=(x&1073741824);b=(c&1073741824);d=(x&1073741823)+(c&1073741823);if(W&b){return(d^2147483648^k^V)}if(W|b){if(d&1073741824){return(d^3221225472^k^V)}else{return(d^1073741824^k^V)}}else{return(d^k^V)}};var r=function(b,d,c){return(b&d)|((~b)&c)};var q=function(b,d,c){return(b&c)|(d&(~c))};var p=function(b,d,c){return(b^d^c)};var n=function(b,d,c){return(d^(b|(~c)))};var u=function(W,V,aa,Z,k,X,Y){W=H(W,H(H(r(V,aa,Z),k),Y));return H(w(W,X),V)};var f=function(W,V,aa,Z,k,X,Y){W=H(W,H(H(q(V,aa,Z),k),Y));return H(w(W,X),V)};var F=function(W,V,aa,Z,k,X,Y){W=H(W,H(H(p(V,aa,Z),k),Y));return H(w(W,X),V)};var t=function(W,V,aa,Z,k,X,Y){W=H(W,H(H(n(V,aa,Z),k),Y));return H(w(W,X),V)};var e=function(W){var X;var k=W.length;var d=k+8;var c=(d-(d%64))/64;var V=(c+1)*16;var Y=new Array(V-1);var b=0;var x=0;while(x<k){X=(x-(x%4))/4;b=(x%4)*8;Y[X]=(Y[X]|(W.charCodeAt(x)<<b));x++}X=(x-(x%4))/4;b=(x%4)*8;Y[X]=Y[X]|(128<<b);Y[V-2]=k<<3;Y[V-1]=k>>>29;return Y};var s=function(k){var b="",c="",x,d;for(d=0;d<=3;d++){x=(k>>>(d*8))&255;c="0"+x.toString(16);b=b+c.substr(c.length-2,2)}return b};var E=[],L,h,G,v,g,U,T,S,R,O=7,M=12,J=17,I=22,B=5,A=9,z=14,y=20,o=4,m=11,l=16,j=23,Q=6,P=10,N=15,K=21;C=a.fn.getGravatar.utf8_encode(C);E=e(C);U=1732584193;T=4023233417;S=2562383102;R=271733878;D=E.length;for(L=0;L<D;L+=16){h=U;G=T;v=S;g=R;U=u(U,T,S,R,E[L+0],O,3614090360);R=u(R,U,T,S,E[L+1],M,3905402710);S=u(S,R,U,T,E[L+2],J,606105819);T=u(T,S,R,U,E[L+3],I,3250441966);U=u(U,T,S,R,E[L+4],O,4118548399);R=u(R,U,T,S,E[L+5],M,1200080426);S=u(S,R,U,T,E[L+6],J,2821735955);T=u(T,S,R,U,E[L+7],I,4249261313);U=u(U,T,S,R,E[L+8],O,1770035416);R=u(R,U,T,S,E[L+9],M,2336552879);S=u(S,R,U,T,E[L+10],J,4294925233);T=u(T,S,R,U,E[L+11],I,2304563134);U=u(U,T,S,R,E[L+12],O,1804603682);R=u(R,U,T,S,E[L+13],M,4254626195);S=u(S,R,U,T,E[L+14],J,2792965006);T=u(T,S,R,U,E[L+15],I,1236535329);U=f(U,T,S,R,E[L+1],B,4129170786);R=f(R,U,T,S,E[L+6],A,3225465664);S=f(S,R,U,T,E[L+11],z,643717713);T=f(T,S,R,U,E[L+0],y,3921069994);U=f(U,T,S,R,E[L+5],B,3593408605);R=f(R,U,T,S,E[L+10],A,38016083);S=f(S,R,U,T,E[L+15],z,3634488961);T=f(T,S,R,U,E[L+4],y,3889429448);U=f(U,T,S,R,E[L+9],B,568446438);R=f(R,U,T,S,E[L+14],A,3275163606);S=f(S,R,U,T,E[L+3],z,4107603335);T=f(T,S,R,U,E[L+8],y,1163531501);U=f(U,T,S,R,E[L+13],B,2850285829);R=f(R,U,T,S,E[L+2],A,4243563512);S=f(S,R,U,T,E[L+7],z,1735328473);T=f(T,S,R,U,E[L+12],y,2368359562);U=F(U,T,S,R,E[L+5],o,4294588738);R=F(R,U,T,S,E[L+8],m,2272392833);S=F(S,R,U,T,E[L+11],l,1839030562);T=F(T,S,R,U,E[L+14],j,4259657740);U=F(U,T,S,R,E[L+1],o,2763975236);R=F(R,U,T,S,E[L+4],m,1272893353);S=F(S,R,U,T,E[L+7],l,4139469664);T=F(T,S,R,U,E[L+10],j,3200236656);U=F(U,T,S,R,E[L+13],o,681279174);R=F(R,U,T,S,E[L+0],m,3936430074);S=F(S,R,U,T,E[L+3],l,3572445317);T=F(T,S,R,U,E[L+6],j,76029189);U=F(U,T,S,R,E[L+9],o,3654602809);R=F(R,U,T,S,E[L+12],m,3873151461);S=F(S,R,U,T,E[L+15],l,530742520);T=F(T,S,R,U,E[L+2],j,3299628645);U=t(U,T,S,R,E[L+0],Q,4096336452);R=t(R,U,T,S,E[L+7],P,1126891415);S=t(S,R,U,T,E[L+14],N,2878612391);T=t(T,S,R,U,E[L+5],K,4237533241);U=t(U,T,S,R,E[L+12],Q,1700485571);R=t(R,U,T,S,E[L+3],P,2399980690);S=t(S,R,U,T,E[L+10],N,4293915773);T=t(T,S,R,U,E[L+1],K,2240044497);U=t(U,T,S,R,E[L+8],Q,1873313359);R=t(R,U,T,S,E[L+15],P,4264355552);S=t(S,R,U,T,E[L+6],N,2734768916);T=t(T,S,R,U,E[L+13],K,1309151649);U=t(U,T,S,R,E[L+4],Q,4149444226);R=t(R,U,T,S,E[L+11],P,3174756917);S=t(S,R,U,T,E[L+2],N,718787259);T=t(T,S,R,U,E[L+9],K,3951481745);U=H(U,h);T=H(T,G);S=H(S,v);R=H(R,g)}var i=s(U)+s(T)+s(S)+s(R);return i.toLowerCase()};a.fn.getGravatar.utf8_encode=function(b){var i=(b+"");var j="";var c,f;var d=0;c=f=0;d=i.length;for(var e=0;e<d;e++){var h=i.charCodeAt(e);var g=null;if(h<128){f++}else{if(h>127&&h<2048){g=String.fromCharCode((h>>6)|192)+String.fromCharCode((h&63)|128)}else{g=String.fromCharCode((h>>12)|224)+String.fromCharCode(((h>>6)&63)|128)+String.fromCharCode((h&63)|128)}}if(g!==null){if(f>c){j+=i.substring(c,f)}j+=g;c=f=e+1}}if(f>c){j+=i.substring(c,i.length)}return j};a.fn.getGravatar.defaults={fallback:"",avatarSize:50,avatarContainer:"#gravatar",start:null,stop:null}})(jQuery);
 
 
 
 
 
 
library/js/hs.png DELETED
Binary file
library/js/hv.png DELETED
Binary file
library/js/jquery.autosize.js DELETED
@@ -1,171 +0,0 @@
1
- // Autosize 1.15.3 - jQuery plugin for textareas
2
- // (c) 2013 Jack Moore - jacklmoore.com
3
- // license: www.opensource.org/licenses/mit-license.php
4
-
5
- (function ($) {
6
- var
7
- defaults = {
8
- className: 'autosizejs',
9
- append: '',
10
- callback: false
11
- },
12
- hidden = 'hidden',
13
- borderBox = 'border-box',
14
- lineHeight = 'lineHeight',
15
-
16
- // border:0 is unnecessary, but avoids a bug in FireFox on OSX (http://www.jacklmoore.com/autosize#comment-851)
17
- copy = '<textarea tabindex="-1" style="position:absolute; top:-9999px; left:-9999px; right:auto; bottom:auto; border:0; -moz-box-sizing:content-box; -webkit-box-sizing:content-box; box-sizing:content-box; word-wrap:break-word; height:0 !important; min-height:0 !important; overflow:hidden;"/>',
18
-
19
- // line-height is conditionally included because IE7/IE8/old Opera do not return the correct value.
20
- copyStyle = [
21
- 'fontFamily',
22
- 'fontSize',
23
- 'fontWeight',
24
- 'fontStyle',
25
- 'letterSpacing',
26
- 'textTransform',
27
- 'wordSpacing',
28
- 'textIndent'
29
- ],
30
- oninput = 'oninput',
31
- onpropertychange = 'onpropertychange',
32
-
33
- // to keep track which textarea is being mirrored when adjust() is called.
34
- mirrored,
35
-
36
- // the mirror element, which is used to calculate what size the mirrored element should be.
37
- mirror = $(copy).data('autosize', true)[0];
38
-
39
- // test that line-height can be accurately copied.
40
- mirror.style.lineHeight = '99px';
41
- if ($(mirror).css(lineHeight) === '99px') {
42
- copyStyle.push(lineHeight);
43
- }
44
- mirror.style.lineHeight = '';
45
-
46
- $.fn.autosize = function (options) {
47
- options = $.extend({}, defaults, options || {});
48
-
49
- if (mirror.parentNode !== document.body) {
50
- $(document.body).append(mirror);
51
- }
52
-
53
- return this.each(function () {
54
- var
55
- ta = this,
56
- $ta = $(ta),
57
- minHeight = $ta.height(),
58
- active,
59
- resize,
60
- boxOffset = 0,
61
- callback = $.isFunction(options.callback);
62
-
63
- if ($ta.data('autosize')) {
64
- // exit if autosize has already been applied, or if the textarea is the mirror element.
65
- return;
66
- }
67
-
68
- if ($ta.css('box-sizing') === borderBox || $ta.css('-moz-box-sizing') === borderBox || $ta.css('-webkit-box-sizing') === borderBox){
69
- boxOffset = $ta.outerHeight() - $ta.height();
70
- }
71
-
72
- resize = ($ta.css('resize') === 'none' || $ta.css('resize') === 'vertical') ? 'none' : 'horizontal';
73
-
74
- $ta.css({
75
- overflow: hidden,
76
- overflowY: hidden,
77
- wordWrap: 'break-word',
78
- resize: resize
79
- }).data('autosize', true);
80
-
81
- function initMirror() {
82
- mirrored = ta;
83
- mirror.className = options.className;
84
-
85
- // mirror is a duplicate textarea located off-screen that
86
- // is automatically updated to contain the same text as the
87
- // original textarea. mirror always has a height of 0.
88
- // This gives a cross-browser supported way getting the actual
89
- // height of the text, through the scrollTop property.
90
- $.each(copyStyle, function(i, val){
91
- mirror.style[val] = $ta.css(val);
92
- });
93
- }
94
-
95
- // Using mainly bare JS in this function because it is going
96
- // to fire very often while typing, and needs to very efficient.
97
- function adjust() {
98
- var height, overflow, original;
99
-
100
- if (mirrored !== ta) {
101
- initMirror();
102
- }
103
-
104
- // the active flag keeps IE from tripping all over itself. Otherwise
105
- // actions in the adjust function will cause IE to call adjust again.
106
- if (!active) {
107
- active = true;
108
- mirror.value = ta.value + options.append;
109
- mirror.style.overflowY = ta.style.overflowY;
110
- original = parseInt(ta.style.height,10);
111
-
112
- // Update the width in case the original textarea width has changed
113
- mirror.style.width = $ta.width() + 'px';
114
-
115
- // The following three lines can be replaced with `height = mirror.scrollHeight` when dropping IE7 support.
116
- mirror.scrollTop = 0;
117
- mirror.scrollTop = 9e4;
118
- height = mirror.scrollTop;
119
-
120
- var maxHeight = parseInt($ta.css('maxHeight'), 10);
121
- // Opera returns '-1px' when max-height is set to 'none'.
122
- maxHeight = maxHeight && maxHeight > 0 ? maxHeight : 9e4;
123
- if (height > maxHeight) {
124
- height = maxHeight;
125
- overflow = 'scroll';
126
- } else if (height < minHeight) {
127
- height = minHeight;
128
- }
129
- height += boxOffset;
130
- ta.style.overflowY = overflow || hidden;
131
-
132
- if (original !== height) {
133
- ta.style.height = height + 'px';
134
- if (callback) {
135
- options.callback.call(ta);
136
- }
137
- }
138
-
139
- // This small timeout gives IE a chance to draw it's scrollbar
140
- // before adjust can be run again (prevents an infinite loop).
141
- setTimeout(function () {
142
- active = false;
143
- }, 1);
144
- }
145
- }
146
-
147
- if (onpropertychange in ta) {
148
- if (oninput in ta) {
149
- // Detects IE9. IE9 does not fire onpropertychange or oninput for deletions,
150
- // so binding to onkeyup to catch most of those occassions. There is no way that I
151
- // know of to detect something like 'cut' in IE9.
152
- ta[oninput] = ta.onkeyup = adjust;
153
- } else {
154
- // IE7 / IE8
155
- ta[onpropertychange] = adjust;
156
- }
157
- } else {
158
- // Modern Browsers
159
- ta[oninput] = adjust;
160
- }
161
-
162
- $(window).resize(adjust);
163
-
164
- // Allow for manual triggering if needed.
165
- $ta.bind('autosize', adjust);
166
-
167
- // Call adjust in case the textarea already contains text.
168
- adjust();
169
- });
170
- };
171
- }(window.jQuery || window.Zepto));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
library/js/jscolor.js DELETED
@@ -1,953 +0,0 @@
1
- /**
2
- * jscolor, JavaScript Color Picker
3
- *
4
- * @version 1.4.0
5
- * @license GNU Lesser General Public License, http://www.gnu.org/copyleft/lesser.html
6
- * @author Jan Odvarko, http://odvarko.cz
7
- * @created 2008-06-15
8
- * @updated 2012-07-06
9
- * @link http://jscolor.com
10
- */
11
-
12
-
13
- var jscolor = {
14
-
15
-
16
- dir : '', // location of jscolor directory (leave empty to autodetect)
17
- bindClass : 'color', // class name
18
- binding : true, // automatic binding via <input class="...">
19
- preloading : true, // use image preloading?
20
-
21
-
22
- install : function() {
23
- jscolor.addEvent(window, 'load', jscolor.init);
24
- },
25
-
26
-
27
- init : function() {
28
- if(jscolor.binding) {
29
- jscolor.bind();
30
- }
31
- if(jscolor.preloading) {
32
- jscolor.preload();
33
- }
34
- },
35
-
36
-
37
- getDir : function() {
38
- if(!jscolor.dir) {
39
- var detected = jscolor.detectDir();
40
- jscolor.dir = detected!==false ? detected : 'jscolor/';
41
- }
42
- return jscolor.dir;
43
- },
44
-
45
-
46
- detectDir : function() {
47
- var base = location.href;
48
-
49
- var e = document.getElementsByTagName('base');
50
- for(var i=0; i<e.length; i+=1) {
51
- if(e[i].href) { base = e[i].href; }
52
- }
53
-
54
- var e = document.getElementsByTagName('script');
55
- for(var i=0; i<e.length; i+=1) {
56
- if(e[i].src && /(^|\/)jscolor\.js([?#].*)?$/i.test(e[i].src)) {
57
- var src = new jscolor.URI(e[i].src);
58
- var srcAbs = src.toAbsolute(base);
59
- srcAbs.path = srcAbs.path.replace(/[^\/]+$/, ''); // remove filename
60
- srcAbs.query = null;
61
- srcAbs.fragment = null;
62
- return srcAbs.toString();
63
- }
64
- }
65
- return false;
66
- },
67
-
68
-
69
- bind : function() {
70
- var matchClass = new RegExp('(^|\\s)('+jscolor.bindClass+')\\s*(\\{[^}]*\\})?', 'i');
71
- var e = document.getElementsByTagName('input');
72
- for(var i=0; i<e.length; i+=1) {
73
- var m;
74
- if(!e[i].color && e[i].className && (m = e[i].className.match(matchClass))) {
75
- var prop = {};
76
- if(m[3]) {
77
- try {
78
- prop = (new Function ('return (' + m[3] + ')'))();
79
- } catch(eInvalidProp) {}
80
- }
81
- e[i].color = new jscolor.color(e[i], prop);
82
- }
83
- }
84
- },
85
-
86
-
87
- preload : function() {
88
- for(var fn in jscolor.imgRequire) {
89
- if(jscolor.imgRequire.hasOwnProperty(fn)) {
90
- jscolor.loadImage(fn);
91
- }
92
- }
93
- },
94
-
95
-
96
- images : {
97
- pad : [ 181, 101 ],
98
- sld : [ 16, 101 ],
99
- cross : [ 15, 15 ],
100
- arrow : [ 7, 11 ]
101
- },
102
-
103
-
104
- imgRequire : {},
105
- imgLoaded : {},
106
-
107
-
108
- requireImage : function(filename) {
109
- jscolor.imgRequire[filename] = true;
110
- },
111
-
112
-
113
- loadImage : function(filename) {
114
- if(!jscolor.imgLoaded[filename]) {
115
- jscolor.imgLoaded[filename] = new Image();
116
- jscolor.imgLoaded[filename].src = jscolor.getDir()+filename;
117
- }
118
- },
119
-
120
-
121
- fetchElement : function(mixed) {
122
- return typeof mixed === 'string' ? document.getElementById(mixed) : mixed;
123
- },
124
-
125
-
126
- addEvent : function(el, evnt, func) {
127
- if(el.addEventListener) {
128
- el.addEventListener(evnt, func, false);
129
- } else if(el.attachEvent) {
130
- el.attachEvent('on'+evnt, func);
131
- }
132
- },
133
-
134
-
135
- fireEvent : function(el, evnt) {
136
- if(!el) {
137
- return;
138
- }
139
- if(document.createEvent) {
140
- var ev = document.createEvent('HTMLEvents');
141
- ev.initEvent(evnt, true, true);
142
- el.dispatchEvent(ev);
143
- } else if(document.createEventObject) {
144
- var ev = document.createEventObject();
145
- el.fireEvent('on'+evnt, ev);
146
- } else if(el['on'+evnt]) { // alternatively use the traditional event model (IE5)
147
- el['on'+evnt]();
148
- }
149
- },
150
-
151
-
152
- getElementPos : function(e) {
153
- var e1=e, e2=e;
154
- var x=0, y=0;
155
- if(e1.offsetParent) {
156
- do {
157
- x += e1.offsetLeft;
158
- y += e1.offsetTop;
159
- } while(e1 = e1.offsetParent);
160
- }
161
- while((e2 = e2.parentNode) && e2.nodeName.toUpperCase() !== 'BODY') {
162
- x -= e2.scrollLeft;
163
- y -= e2.scrollTop;
164
- }
165
- return [x, y];
166
- },
167
-
168
-
169
- getElementSize : function(e) {
170
- return [e.offsetWidth, e.offsetHeight];
171
- },
172
-
173
-
174
- getRelMousePos : function(e) {
175
- var x = 0, y = 0;
176
- if (!e) { e = window.event; }
177
- if (typeof e.offsetX === 'number') {
178
- x = e.offsetX;
179
- y = e.offsetY;
180
- } else if (typeof e.layerX === 'number') {
181
- x = e.layerX;
182
- y = e.layerY;
183
- }
184
- return { x: x, y: y };
185
- },
186
-
187
-
188
- getViewPos : function() {
189
- if(typeof window.pageYOffset === 'number') {
190
- return [window.pageXOffset, window.pageYOffset];
191
- } else if(document.body && (document.body.scrollLeft || document.body.scrollTop)) {
192
- return [document.body.scrollLeft, document.body.scrollTop];
193
- } else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
194
- return [document.documentElement.scrollLeft, document.documentElement.scrollTop];
195
- } else {
196
- return [0, 0];
197
- }
198
- },
199
-
200
-
201
- getViewSize : function() {
202
- if(typeof window.innerWidth === 'number') {
203
- return [window.innerWidth, window.innerHeight];
204
- } else if(document.body && (document.body.clientWidth || document.body.clientHeight)) {
205
- return [document.body.clientWidth, document.body.clientHeight];
206
- } else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
207
- return [document.documentElement.clientWidth, document.documentElement.clientHeight];
208
- } else {
209
- return [0, 0];
210
- }
211
- },
212
-
213
-
214
- URI : function(uri) { // See RFC3986
215
-
216
- this.scheme = null;
217
- this.authority = null;
218
- this.path = '';
219
- this.query = null;
220
- this.fragment = null;
221
-
222
- this.parse = function(uri) {
223
- var m = uri.match(/^(([A-Za-z][0-9A-Za-z+.-]*)(:))?((\/\/)([^\/?#]*))?([^?#]*)((\?)([^#]*))?((#)(.*))?/);
224
- this.scheme = m[3] ? m[2] : null;
225
- this.authority = m[5] ? m[6] : null;
226
- this.path = m[7];
227
- this.query = m[9] ? m[10] : null;
228
- this.fragment = m[12] ? m[13] : null;
229
- return this;
230
- };
231
-
232
- this.toString = function() {
233
- var result = '';
234
- if(this.scheme !== null) { result = result + this.scheme + ':'; }
235
- if(this.authority !== null) { result = result + '//' + this.authority; }
236
- if(this.path !== null) { result = result + this.path; }
237
- if(this.query !== null) { result = result + '?' + this.query; }
238
- if(this.fragment !== null) { result = result + '#' + this.fragment; }
239
- return result;
240
- };
241
-
242
- this.toAbsolute = function(base) {
243
- var base = new jscolor.URI(base);
244
- var r = this;
245
- var t = new jscolor.URI;
246
-
247
- if(base.scheme === null) { return false; }
248
-
249
- if(r.scheme !== null && r.scheme.toLowerCase() === base.scheme.toLowerCase()) {
250
- r.scheme = null;
251
- }
252
-
253
- if(r.scheme !== null) {
254
- t.scheme = r.scheme;
255
- t.authority = r.authority;
256
- t.path = removeDotSegments(r.path);
257
- t.query = r.query;
258
- } else {
259
- if(r.authority !== null) {
260
- t.authority = r.authority;
261
- t.path = removeDotSegments(r.path);
262
- t.query = r.query;
263
- } else {
264
- if(r.path === '') {
265
- t.path = base.path;
266
- if(r.query !== null) {
267
- t.query = r.query;
268
- } else {
269
- t.query = base.query;
270
- }
271
- } else {
272
- if(r.path.substr(0,1) === '/') {
273
- t.path = removeDotSegments(r.path);
274
- } else {
275
- if(base.authority !== null && base.path === '') {
276
- t.path = '/'+r.path;
277
- } else {
278
- t.path = base.path.replace(/[^\/]+$/,'')+r.path;
279
- }
280
- t.path = removeDotSegments(t.path);
281
- }
282
- t.query = r.query;
283
- }
284
- t.authority = base.authority;
285
- }
286
- t.scheme = base.scheme;
287
- }
288
- t.fragment = r.fragment;
289
-
290
- return t;
291
- };
292
-
293
- function removeDotSegments(path) {
294
- var out = '';
295
- while(path) {
296
- if(path.substr(0,3)==='../' || path.substr(0,2)==='./') {
297
- path = path.replace(/^\.+/,'').substr(1);
298
- } else if(path.substr(0,3)==='/./' || path==='/.') {
299
- path = '/'+path.substr(3);
300
- } else if(path.substr(0,4)==='/../' || path==='/..') {
301
- path = '/'+path.substr(4);
302
- out = out.replace(/\/?[^\/]*$/, '');
303
- } else if(path==='.' || path==='..') {
304
- path = '';
305
- } else {
306
- var rm = path.match(/^\/?[^\/]*/)[0];
307
- path = path.substr(rm.length);
308
- out = out + rm;
309
- }
310
- }
311
- return out;
312
- }
313
-
314
- if(uri) {
315
- this.parse(uri);
316
- }
317
-
318
- },
319
-
320
-
321
- /*
322
- * Usage example:
323
- * var myColor = new jscolor.color(myInputElement)
324
- */
325
-
326
- color : function(target, prop) {
327
-
328
-
329
- this.required = true; // refuse empty values?
330
- this.adjust = true; // adjust value to uniform notation?
331
- this.hash = false; // prefix color with # symbol?
332
- this.caps = true; // uppercase?
333
- this.slider = true; // show the value/saturation slider?
334
- this.valueElement = target; // value holder
335
- this.styleElement = target; // where to reflect current color
336
- this.onImmediateChange = null; // onchange callback (can be either string or function)
337
- this.hsv = [0, 0, 1]; // read-only 0-6, 0-1, 0-1
338
- this.rgb = [1, 1, 1]; // read-only 0-1, 0-1, 0-1
339
- this.minH = 0; // read-only 0-6
340
- this.maxH = 6; // read-only 0-6
341
- this.minS = 0; // read-only 0-1
342
- this.maxS = 1; // read-only 0-1
343
- this.minV = 0; // read-only 0-1
344
- this.maxV = 1; // read-only 0-1
345
-
346
- this.pickerOnfocus = true; // display picker on focus?
347
- this.pickerMode = 'HSV'; // HSV | HVS
348
- this.pickerPosition = 'bottom'; // left | right | top | bottom
349
- this.pickerSmartPosition = true; // automatically adjust picker position when necessary
350
- this.pickerButtonHeight = 20; // px
351
- this.pickerClosable = false;
352
- this.pickerCloseText = 'Close';
353
- this.pickerButtonColor = 'ButtonText'; // px
354
- this.pickerFace = 10; // px
355
- this.pickerFaceColor = 'ThreeDFace'; // CSS color
356
- this.pickerBorder = 1; // px
357
- this.pickerBorderColor = 'ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight'; // CSS color
358
- this.pickerInset = 1; // px
359
- this.pickerInsetColor = 'ThreeDShadow ThreeDHighlight ThreeDHighlight ThreeDShadow'; // CSS color
360
- this.pickerZIndex = 10000;
361
-
362
-
363
- for(var p in prop) {
364
- if(prop.hasOwnProperty(p)) {
365
- this[p] = prop[p];
366
- }
367
- }
368
-
369
-
370
- this.hidePicker = function() {
371
- if(isPickerOwner()) {
372
- removePicker();
373
- }
374
- };
375
-
376
-
377
- this.showPicker = function() {
378
- if(!isPickerOwner()) {
379
- var tp = jscolor.getElementPos(target); // target pos
380
- var ts = jscolor.getElementSize(target); // target size
381
- var vp = jscolor.getViewPos(); // view pos
382
- var vs = jscolor.getViewSize(); // view size
383
- var ps = getPickerDims(this); // picker size
384
- var a, b, c;
385
- switch(this.pickerPosition.toLowerCase()) {
386
- case 'left': a=1; b=0; c=-1; break;
387
- case 'right':a=1; b=0; c=1; break;
388
- case 'top': a=0; b=1; c=-1; break;
389
- default: a=0; b=1; c=1; break;
390
- }
391
- var l = (ts[b]+ps[b])/2;
392
-
393
- // picker pos
394
- if (!this.pickerSmartPosition) {
395
- var pp = [
396
- tp[a],
397
- tp[b]+ts[b]-l+l*c
398
- ];
399
- } else {
400
- var pp = [
401
- -vp[a]+tp[a]+ps[a] > vs[a] ?
402
- (-vp[a]+tp[a]+ts[a]/2 > vs[a]/2 && tp[a]+ts[a]-ps[a] >= 0 ? tp[a]+ts[a]-ps[a] : tp[a]) :
403
- tp[a],
404
- -vp[b]+tp[b]+ts[b]+ps[b]-l+l*c > vs[b] ?
405
- (-vp[b]+tp[b]+ts[b]/2 > vs[b]/2 && tp[b]+ts[b]-l-l*c >= 0 ? tp[b]+ts[b]-l-l*c : tp[b]+ts[b]-l+l*c) :
406
- (tp[b]+ts[b]-l+l*c >= 0 ? tp[b]+ts[b]-l+l*c : tp[b]+ts[b]-l-l*c)
407
- ];
408
- }
409
- drawPicker(pp[a], pp[b]);
410
- }
411
- };
412
-
413
-
414
- this.importColor = function() {
415
- if(!valueElement) {
416
- this.exportColor();
417
- } else {
418
- if(!this.adjust) {
419
- if(!this.fromString(valueElement.value, leaveValue)) {
420
- styleElement.style.backgroundImage = styleElement.jscStyle.backgroundImage;
421
- styleElement.style.backgroundColor = styleElement.jscStyle.backgroundColor;
422
- styleElement.style.color = styleElement.jscStyle.color;
423
- this.exportColor(leaveValue | leaveStyle);
424
- }
425
- } else if(!this.required && /^\s*$/.test(valueElement.value)) {
426
- valueElement.value = '';
427
- styleElement.style.backgroundImage = styleElement.jscStyle.backgroundImage;
428
- styleElement.style.backgroundColor = styleElement.jscStyle.backgroundColor;
429
- styleElement.style.color = styleElement.jscStyle.color;
430
- this.exportColor(leaveValue | leaveStyle);
431
-
432
- } else if(this.fromString(valueElement.value)) {
433
- // OK
434
- } else {
435
- this.exportColor();
436
- }
437
- }
438
- };
439
-
440
-
441
- this.exportColor = function(flags) {
442
- if(!(flags & leaveValue) && valueElement) {
443
- var value = this.toString();
444
- if(this.caps) { value = value.toUpperCase(); }
445
- if(this.hash) { value = '#'+value; }
446
- valueElement.value = value;
447
- }
448
- if(!(flags & leaveStyle) && styleElement) {
449
- styleElement.style.backgroundImage = "none";
450
- styleElement.style.backgroundColor =
451
- '#'+this.toString();
452
- styleElement.style.color =
453
- 0.213 * this.rgb[0] +
454
- 0.715 * this.rgb[1] +
455
- 0.072 * this.rgb[2]
456
- < 0.5 ? '#FFF' : '#000';
457
- }
458
- if(!(flags & leavePad) && isPickerOwner()) {
459
- redrawPad();
460
- }
461
- if(!(flags & leaveSld) && isPickerOwner()) {
462
- redrawSld();
463
- }
464
- };
465
-
466
-
467
- this.fromHSV = function(h, s, v, flags) { // null = don't change
468
- if(h !== null) { h = Math.max(0.0, this.minH, Math.min(6.0, this.maxH, h)); }
469
- if(s !== null) { s = Math.max(0.0, this.minS, Math.min(1.0, this.maxS, s)); }
470
- if(v !== null) { v = Math.max(0.0, this.minV, Math.min(1.0, this.maxV, v)); }
471
-
472
- this.rgb = HSV_RGB(
473
- h===null ? this.hsv[0] : (this.hsv[0]=h),
474
- s===null ? this.hsv[1] : (this.hsv[1]=s),
475
- v===null ? this.hsv[2] : (this.hsv[2]=v)
476
- );
477
-
478
- this.exportColor(flags);
479
- };
480
-
481
-
482
- this.fromRGB = function(r, g, b, flags) { // null = don't change
483
- if(r !== null) { r = Math.max(0.0, Math.min(1.0, r)); }
484
- if(g !== null) { g = Math.max(0.0, Math.min(1.0, g)); }
485
- if(b !== null) { b = Math.max(0.0, Math.min(1.0, b)); }
486
-
487
- var hsv = RGB_HSV(
488
- r===null ? this.rgb[0] : r,
489
- g===null ? this.rgb[1] : g,
490
- b===null ? this.rgb[2] : b
491
- );
492
- if(hsv[0] !== null) {
493
- this.hsv[0] = Math.max(0.0, this.minH, Math.min(6.0, this.maxH, hsv[0]));
494
- }
495
- if(hsv[2] !== 0) {
496
- this.hsv[1] = hsv[1]===null ? null : Math.max(0.0, this.minS, Math.min(1.0, this.maxS, hsv[1]));
497
- }
498
- this.hsv[2] = hsv[2]===null ? null : Math.max(0.0, this.minV, Math.min(1.0, this.maxV, hsv[2]));
499
-
500
- // update RGB according to final HSV, as some values might be trimmed
501
- var rgb = HSV_RGB(this.hsv[0], this.hsv[1], this.hsv[2]);
502
- this.rgb[0] = rgb[0];
503
- this.rgb[1] = rgb[1];
504
- this.rgb[2] = rgb[2];
505
-
506
- this.exportColor(flags);
507
- };
508
-
509
-
510
- this.fromString = function(hex, flags) {
511
- var m = hex.match(/^\W*([0-9A-F]{3}([0-9A-F]{3})?)\W*$/i);
512
- if(!m) {
513
- return false;
514
- } else {
515
- if(m[1].length === 6) { // 6-char notation
516
- this.fromRGB(
517
- parseInt(m[1].substr(0,2),16) / 255,
518
- parseInt(m[1].substr(2,2),16) / 255,
519
- parseInt(m[1].substr(4,2),16) / 255,
520
- flags
521
- );
522
- } else { // 3-char notation
523
- this.fromRGB(
524
- parseInt(m[1].charAt(0)+m[1].charAt(0),16) / 255,
525
- parseInt(m[1].charAt(1)+m[1].charAt(1),16) / 255,
526
- parseInt(m[1].charAt(2)+m[1].charAt(2),16) / 255,
527
- flags
528
- );
529
- }
530
- return true;
531
- }
532
- };
533
-
534
-
535
- this.toString = function() {
536
- return (
537
- (0x100 | Math.round(255*this.rgb[0])).toString(16).substr(1) +
538
- (0x100 | Math.round(255*this.rgb[1])).toString(16).substr(1) +
539
- (0x100 | Math.round(255*this.rgb[2])).toString(16).substr(1)
540
- );
541
- };
542
-
543
-
544
- function RGB_HSV(r, g, b) {
545
- var n = Math.min(Math.min(r,g),b);
546
- var v = Math.max(Math.max(r,g),b);
547
- var m = v - n;
548
- if(m === 0) { return [ null, 0, v ]; }
549
- var h = r===n ? 3+(b-g)/m : (g===n ? 5+(r-b)/m : 1+(g-r)/m);
550
- return [ h===6?0:h, m/v, v ];
551
- }
552
-
553
-
554
- function HSV_RGB(h, s, v) {
555
- if(h === null) { return [ v, v, v ]; }
556
- var i = Math.floor(h);
557
- var f = i%2 ? h-i : 1-(h-i);
558
- var m = v * (1 - s);
559
- var n = v * (1 - s*f);
560
- switch(i) {
561
- case 6:
562
- case 0: return [v,n,m];
563
- case 1: return [n,v,m];
564
- case 2: return [m,v,n];
565
- case 3: return [m,n,v];
566
- case 4: return [n,m,v];
567
- case 5: return [v,m,n];
568
- }
569
- }
570
-
571
-
572
- function removePicker() {
573
- delete jscolor.picker.owner;
574
- document.getElementsByTagName('body')[0].removeChild(jscolor.picker.boxB);
575
- }
576
-
577
-
578
- function drawPicker(x, y) {
579
- if(!jscolor.picker) {
580
- jscolor.picker = {
581
- box : document.createElement('div'),
582
- boxB : document.createElement('div'),
583
- pad : document.createElement('div'),
584
- padB : document.createElement('div'),
585
- padM : document.createElement('div'),
586
- sld : document.createElement('div'),
587
- sldB : document.createElement('div'),
588
- sldM : document.createElement('div'),
589
- btn : document.createElement('div'),
590
- btnS : document.createElement('span'),
591
- btnT : document.createTextNode(THIS.pickerCloseText)
592
- };
593
- for(var i=0,segSize=4; i<jscolor.images.sld[1]; i+=segSize) {
594
- var seg = document.createElement('div');
595
- seg.style.height = segSize+'px';
596
- seg.style.fontSize = '1px';
597
- seg.style.lineHeight = '0';
598
- jscolor.picker.sld.appendChild(seg);
599
- }
600
- jscolor.picker.sldB.appendChild(jscolor.picker.sld);
601
- jscolor.picker.box.appendChild(jscolor.picker.sldB);
602
- jscolor.picker.box.appendChild(jscolor.picker.sldM);
603
- jscolor.picker.padB.appendChild(jscolor.picker.pad);
604
- jscolor.picker.box.appendChild(jscolor.picker.padB);
605
- jscolor.picker.box.appendChild(jscolor.picker.padM);
606
- jscolor.picker.btnS.appendChild(jscolor.picker.btnT);
607
- jscolor.picker.btn.appendChild(jscolor.picker.btnS);
608
- jscolor.picker.box.appendChild(jscolor.picker.btn);
609
- jscolor.picker.boxB.appendChild(jscolor.picker.box);
610
- }
611
-
612
- var p = jscolor.picker;
613
-
614
- // controls interaction
615
- p.box.onmouseup =
616
- p.box.onmouseout = function() { target.focus(); };
617
- p.box.onmousedown = function() { abortBlur=true; };
618
- p.box.onmousemove = function(e) {
619
- if (holdPad || holdSld) {
620
- holdPad && setPad(e);
621
- holdSld && setSld(e);
622
- if (document.selection) {
623
- document.selection.empty();
624
- } else if (window.getSelection) {
625
- window.getSelection().removeAllRanges();
626
- }
627
- dispatchImmediateChange();
628
- }
629
- };
630
- p.padM.onmouseup =
631
- p.padM.onmouseout = function() { if(holdPad) { holdPad=false; jscolor.fireEvent(valueElement,'change'); } };
632
- p.padM.onmousedown = function(e) {
633
- // if the slider is at the bottom, move it up
634
- switch(modeID) {
635
- case 0: if (THIS.hsv[2] === 0) { THIS.fromHSV(null, null, 1.0); }; break;
636
- case 1: if (THIS.hsv[1] === 0) { THIS.fromHSV(null, 1.0, null); }; break;
637
- }
638
- holdPad=true;
639
- setPad(e);
640
- dispatchImmediateChange();
641
- };
642
- p.sldM.onmouseup =
643
- p.sldM.onmouseout = function() { if(holdSld) { holdSld=false; jscolor.fireEvent(valueElement,'change'); } };
644
- p.sldM.onmousedown = function(e) {
645
- holdSld=true;
646
- setSld(e);
647
- dispatchImmediateChange();
648
- };
649
-
650
- // picker
651
- var dims = getPickerDims(THIS);
652
- p.box.style.width = dims[0] + 'px';
653
- p.box.style.height = dims[1] + 'px';
654
-
655
- // picker border
656
- p.boxB.style.position = 'absolute';
657
- p.boxB.style.clear = 'both';
658
- p.boxB.style.left = x+'px';
659
- p.boxB.style.top = y+'px';
660
- p.boxB.style.zIndex = THIS.pickerZIndex;
661
- p.boxB.style.border = THIS.pickerBorder+'px solid';
662
- p.boxB.style.borderColor = THIS.pickerBorderColor;
663
- p.boxB.style.background = THIS.pickerFaceColor;
664
-
665
- // pad image
666
- p.pad.style.width = jscolor.images.pad[0]+'px';
667
- p.pad.style.height = jscolor.images.pad[1]+'px';
668
-
669
- // pad border
670
- p.padB.style.position = 'absolute';
671
- p.padB.style.left = THIS.pickerFace+'px';
672
- p.padB.style.top = THIS.pickerFace+'px';
673
- p.padB.style.border = THIS.pickerInset+'px solid';
674
- p.padB.style.borderColor = THIS.pickerInsetColor;
675
-
676
- // pad mouse area
677
- p.padM.style.position = 'absolute';
678
- p.padM.style.left = '0';
679
- p.padM.style.top = '0';
680
- p.padM.style.width = THIS.pickerFace + 2*THIS.pickerInset + jscolor.images.pad[0] + jscolor.images.arrow[0] + 'px';
681
- p.padM.style.height = p.box.style.height;
682
- p.padM.style.cursor = 'crosshair';
683
-
684
- // slider image
685
- p.sld.style.overflow = 'hidden';
686
- p.sld.style.width = jscolor.images.sld[0]+'px';
687
- p.sld.style.height = jscolor.images.sld[1]+'px';
688
-
689
- // slider border
690
- p.sldB.style.display = THIS.slider ? 'block' : 'none';
691
- p.sldB.style.position = 'absolute';
692
- p.sldB.style.right = THIS.pickerFace+'px';
693
- p.sldB.style.top = THIS.pickerFace+'px';
694
- p.sldB.style.border = THIS.pickerInset+'px solid';
695
- p.sldB.style.borderColor = THIS.pickerInsetColor;
696
-
697
- // slider mouse area
698
- p.sldM.style.display = THIS.slider ? 'block' : 'none';
699
- p.sldM.style.position = 'absolute';
700
- p.sldM.style.right = '0';
701
- p.sldM.style.top = '0';
702
- p.sldM.style.width = jscolor.images.sld[0] + jscolor.images.arrow[0] + THIS.pickerFace + 2*THIS.pickerInset + 'px';
703
- p.sldM.style.height = p.box.style.height;
704
- try {
705
- p.sldM.style.cursor = 'pointer';
706
- } catch(eOldIE) {
707
- p.sldM.style.cursor = 'hand';
708
- }
709
-
710
- // "close" button
711
- function setBtnBorder() {
712
- var insetColors = THIS.pickerInsetColor.split(/\s+/);
713
- var pickerOutsetColor = insetColors.length < 2 ? insetColors[0] : insetColors[1] + ' ' + insetColors[0] + ' ' + insetColors[0] + ' ' + insetColors[1];
714
- p.btn.style.borderColor = pickerOutsetColor;
715
- }
716
- p.btn.style.display = THIS.pickerClosable ? 'block' : 'none';
717
- p.btn.style.position = 'absolute';
718
- p.btn.style.left = THIS.pickerFace + 'px';
719
- p.btn.style.bottom = THIS.pickerFace + 'px';
720
- p.btn.style.padding = '0 15px';
721
- p.btn.style.height = '18px';
722
- p.btn.style.border = THIS.pickerInset + 'px solid';
723
- setBtnBorder();
724
- p.btn.style.color = THIS.pickerButtonColor;
725
- p.btn.style.font = '12px sans-serif';
726
- p.btn.style.textAlign = 'center';
727
- try {
728
- p.btn.style.cursor = 'pointer';
729
- } catch(eOldIE) {
730
- p.btn.style.cursor = 'hand';
731
- }
732
- p.btn.onmousedown = function () {
733
- THIS.hidePicker();
734
- };
735
- p.btnS.style.lineHeight = p.btn.style.height;
736
-
737
- // load images in optimal order
738
- switch(modeID) {
739
- case 0: var padImg = 'hs.png'; break;
740
- case 1: var padImg = 'hv.png'; break;
741
- }
742
- p.padM.style.backgroundImage = "url('"+jscolor.getDir()+"cross.gif')";
743
- p.padM.style.backgroundRepeat = "no-repeat";
744
- p.sldM.style.backgroundImage = "url('"+jscolor.getDir()+"arrow.gif')";
745
- p.sldM.style.backgroundRepeat = "no-repeat";
746
- p.pad.style.backgroundImage = "url('"+jscolor.getDir()+padImg+"')";
747
- p.pad.style.backgroundRepeat = "no-repeat";
748
- p.pad.style.backgroundPosition = "0 0";
749
-
750
- // place pointers
751
- redrawPad();
752
- redrawSld();
753
-
754
- jscolor.picker.owner = THIS;
755
- document.getElementsByTagName('body')[0].appendChild(p.boxB);
756
- }
757
-
758
-
759
- function getPickerDims(o) {
760
- var dims = [
761
- 2*o.pickerInset + 2*o.pickerFace + jscolor.images.pad[0] +
762
- (o.slider ? 2*o.pickerInset + 2*jscolor.images.arrow[0] + jscolor.images.sld[0] : 0),
763
- o.pickerClosable ?
764
- 4*o.pickerInset + 3*o.pickerFace + jscolor.images.pad[1] + o.pickerButtonHeight :
765
- 2*o.pickerInset + 2*o.pickerFace + jscolor.images.pad[1]
766
- ];
767
- return dims;
768
- }
769
-
770
-
771
- function redrawPad() {
772
- // redraw the pad pointer
773
- switch(modeID) {
774
- case 0: var yComponent = 1; break;
775
- case 1: var yComponent = 2; break;
776
- }
777
- var x = Math.round((THIS.hsv[0]/6) * (jscolor.images.pad[0]-1));
778
- var y = Math.round((1-THIS.hsv[yComponent]) * (jscolor.images.pad[1]-1));
779
- jscolor.picker.padM.style.backgroundPosition =
780
- (THIS.pickerFace+THIS.pickerInset+x - Math.floor(jscolor.images.cross[0]/2)) + 'px ' +
781
- (THIS.pickerFace+THIS.pickerInset+y - Math.floor(jscolor.images.cross[1]/2)) + 'px';
782
-
783
- // redraw the slider image
784
- var seg = jscolor.picker.sld.childNodes;
785
-
786
- switch(modeID) {
787
- case 0:
788
- var rgb = HSV_RGB(THIS.hsv[0], THIS.hsv[1], 1);
789
- for(var i=0; i<seg.length; i+=1) {
790
- seg[i].style.backgroundColor = 'rgb('+
791
- (rgb[0]*(1-i/seg.length)*100)+'%,'+
792
- (rgb[1]*(1-i/seg.length)*100)+'%,'+
793
- (rgb[2]*(1-i/seg.length)*100)+'%)';
794
- }
795
- break;
796
- case 1:
797
- var rgb, s, c = [ THIS.hsv[2], 0, 0 ];
798
- var i = Math.floor(THIS.hsv[0]);
799
- var f = i%2 ? THIS.hsv[0]-i : 1-(THIS.hsv[0]-i);
800
- switch(i) {
801
- case 6:
802
- case 0: rgb=[0,1,2]; break;
803
- case 1: rgb=[1,0,2]; break;
804
- case 2: rgb=[2,0,1]; break;
805
- case 3: rgb=[2,1,0]; break;
806
- case 4: rgb=[1,2,0]; break;
807
- case 5: rgb=[0,2,1]; break;
808
- }
809
- for(var i=0; i<seg.length; i+=1) {
810
- s = 1 - 1/(seg.length-1)*i;
811
- c[1] = c[0] * (1 - s*f);
812
- c[2] = c[0] * (1 - s);
813
- seg[i].style.backgroundColor = 'rgb('+
814
- (c[rgb[0]]*100)+'%,'+
815
- (c[rgb[1]]*100)+'%,'+
816
- (c[rgb[2]]*100)+'%)';
817
- }
818
- break;
819
- }
820
- }
821
-
822
-
823
- function redrawSld() {
824
- // redraw the slider pointer
825
- switch(modeID) {
826
- case 0: var yComponent = 2; break;
827
- case 1: var yComponent = 1; break;
828
- }
829
- var y = Math.round((1-THIS.hsv[yComponent]) * (jscolor.images.sld[1]-1));
830
- jscolor.picker.sldM.style.backgroundPosition =
831
- '0 ' + (THIS.pickerFace+THIS.pickerInset+y - Math.floor(jscolor.images.arrow[1]/2)) + 'px';
832
- }
833
-
834
-
835
- function isPickerOwner() {
836
- return jscolor.picker && jscolor.picker.owner === THIS;
837
- }
838
-
839
-
840
- function blurTarget() {
841
- if(valueElement === target) {
842
- THIS.importColor();
843
- }
844
- if(THIS.pickerOnfocus) {
845
- THIS.hidePicker();
846
- }
847
- }
848
-
849
-
850
- function blurValue() {
851
- if(valueElement !== target) {
852
- THIS.importColor();
853
- }
854
- }
855
-
856
-
857
- function setPad(e) {
858
- var mpos = jscolor.getRelMousePos(e);
859
- var x = mpos.x - THIS.pickerFace - THIS.pickerInset;
860
- var y = mpos.y - THIS.pickerFace - THIS.pickerInset;
861
- switch(modeID) {
862
- case 0: THIS.fromHSV(x*(6/(jscolor.images.pad[0]-1)), 1 - y/(jscolor.images.pad[1]-1), null, leaveSld); break;
863
- case 1: THIS.fromHSV(x*(6/(jscolor.images.pad[0]-1)), null, 1 - y/(jscolor.images.pad[1]-1), leaveSld); break;
864
- }
865
- }
866
-
867
-
868
- function setSld(e) {
869
- var mpos = jscolor.getRelMousePos(e);
870
- var y = mpos.y - THIS.pickerFace - THIS.pickerInset;
871
- switch(modeID) {
872
- case 0: THIS.fromHSV(null, null, 1 - y/(jscolor.images.sld[1]-1), leavePad); break;
873
- case 1: THIS.fromHSV(null, 1 - y/(jscolor.images.sld[1]-1), null, leavePad); break;
874
- }
875
- }
876
-
877
-
878
- function dispatchImmediateChange() {
879
- if (THIS.onImmediateChange) {
880
- var callback;
881
- if (typeof THIS.onImmediateChange === 'string') {
882
- callback = new Function (THIS.onImmediateChange);
883
- } else {
884
- callback = THIS.onImmediateChange;
885
- }
886
- callback.call(THIS);
887
- }
888
- }
889
-
890
-
891
- var THIS = this;
892
- var modeID = this.pickerMode.toLowerCase()==='hvs' ? 1 : 0;
893
- var abortBlur = false;
894
- var
895
- valueElement = jscolor.fetchElement(this.valueElement),
896
- styleElement = jscolor.fetchElement(this.styleElement);
897
- var
898
- holdPad = false,
899
- holdSld = false;
900
- var
901
- leaveValue = 1<<0,
902
- leaveStyle = 1<<1,
903
- leavePad = 1<<2,
904
- leaveSld = 1<<3;
905
-
906
- // target
907
- jscolor.addEvent(target, 'focus', function() {
908
- if(THIS.pickerOnfocus) { THIS.showPicker(); }
909
- });
910
- jscolor.addEvent(target, 'blur', function() {
911
- if(!abortBlur) {
912
- window.setTimeout(function(){ abortBlur || blurTarget(); abortBlur=false; }, 0);
913
- } else {
914
- abortBlur = false;
915
- }
916
- });
917
-
918
- // valueElement
919
- if(valueElement) {
920
- var updateField = function() {
921
- THIS.fromString(valueElement.value, leaveValue);
922
- dispatchImmediateChange();
923
- };
924
- jscolor.addEvent(valueElement, 'keyup', updateField);
925
- jscolor.addEvent(valueElement, 'input', updateField);
926
- jscolor.addEvent(valueElement, 'blur', blurValue);
927
- valueElement.setAttribute('autocomplete', 'off');
928
- }
929
-
930
- // styleElement
931
- if(styleElement) {
932
- styleElement.jscStyle = {
933
- backgroundImage : styleElement.style.backgroundImage,
934
- backgroundColor : styleElement.style.backgroundColor,
935
- color : styleElement.style.color
936
- };
937
- }
938
-
939
- // require images
940
- switch(modeID) {
941
- case 0: jscolor.requireImage('hs.png'); break;
942
- case 1: jscolor.requireImage('hv.png'); break;
943
- }
944
- jscolor.requireImage('cross.gif');
945
- jscolor.requireImage('arrow.gif');
946
-
947
- this.importColor();
948
- }
949
-
950
- };
951
-
952
-
953
- jscolor.install();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
license.txt DELETED
@@ -1,339 +0,0 @@
1
- GNU GENERAL PUBLIC LICENSE
2
- Version 2, June 1991
3
-
4
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
5
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6
- Everyone is permitted to copy and distribute verbatim copies
7
- of this license document, but changing it is not allowed.
8
-
9
- Preamble
10
-
11
- The licenses for most software are designed to take away your
12
- freedom to share and change it. By contrast, the GNU General Public
13
- License is intended to guarantee your freedom to share and change free
14
- software--to make sure the software is free for all its users. This
15
- General Public License applies to most of the Free Software
16
- Foundation's software and to any other program whose authors commit to
17
- using it. (Some other Free Software Foundation software is covered by
18
- the GNU Lesser General Public License instead.) You can apply it to
19
- your programs, too.
20
-
21
- When we speak of free software, we are referring to freedom, not
22
- price. Our General Public Licenses are designed to make sure that you
23
- have the freedom to distribute copies of free software (and charge for
24
- this service if you wish), that you receive source code or can get it
25
- if you want it, that you can change the software or use pieces of it
26
- in new free programs; and that you know you can do these things.
27
-
28
- To protect your rights, we need to make restrictions that forbid
29
- anyone to deny you these rights or to ask you to surrender the rights.
30
- These restrictions translate to certain responsibilities for you if you
31
- distribute copies of the software, or if you modify it.
32
-
33
- For example, if you distribute copies of such a program, whether
34
- gratis or for a fee, you must give the recipients all the rights that
35
- you have. You must make sure that they, too, receive or can get the
36
- source code. And you must show them these terms so they know their
37
- rights.
38
-
39
- We protect your rights with two steps: (1) copyright the software, and
40
- (2) offer you this license which gives you legal permission to copy,
41
- distribute and/or modify the software.
42
-
43
- Also, for each author's protection and ours, we want to make certain
44
- that everyone understands that there is no warranty for this free
45
- software. If the software is modified by someone else and passed on, we
46
- want its recipients to know that what they have is not the original, so
47
- that any problems introduced by others will not reflect on the original
48
- authors' reputations.
49
-
50
- Finally, any free program is threatened constantly by software
51
- patents. We wish to avoid the danger that redistributors of a free
52
- program will individually obtain patent licenses, in effect making the
53
- program proprietary. To prevent this, we have made it clear that any
54
- patent must be licensed for everyone's free use or not licensed at all.
55
-
56
- The precise terms and conditions for copying, distribution and
57
- modification follow.
58
-
59
- GNU GENERAL PUBLIC LICENSE
60
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61
-
62
- 0. This License applies to any program or other work which contains
63
- a notice placed by the copyright holder saying it may be distributed
64
- under the terms of this General Public License. The "Program", below,
65
- refers to any such program or work, and a "work based on the Program"
66
- means either the Program or any derivative work under copyright law:
67
- that is to say, a work containing the Program or a portion of it,
68
- either verbatim or with modifications and/or translated into another
69
- language. (Hereinafter, translation is included without limitation in
70
- the term "modification".) Each licensee is addressed as "you".
71
-
72
- Activities other than copying, distribution and modification are not
73
- covered by this License; they are outside its scope. The act of
74
- running the Program is not restricted, and the output from the Program
75
- is covered only if its contents constitute a work based on the
76
- Program (independent of having been made by running the Program).
77
- Whether that is true depends on what the Program does.
78
-
79
- 1. You may copy and distribute verbatim copies of the Program's
80
- source code as you receive it, in any medium, provided that you
81
- conspicuously and appropriately publish on each copy an appropriate
82
- copyright notice and disclaimer of warranty; keep intact all the
83
- notices that refer to this License and to the absence of any warranty;
84
- and give any other recipients of the Program a copy of this License
85
- along with the Program.
86
-
87
- You may charge a fee for the physical act of transferring a copy, and
88
- you may at your option offer warranty protection in exchange for a fee.
89
-
90
- 2. You may modify your copy or copies of the Program or any portion
91
- of it, thus forming a work based on the Program, and copy and
92
- distribute such modifications or work under the terms of Section 1
93
- above, provided that you also meet all of these conditions:
94
-
95
- a) You must cause the modified files to carry prominent notices
96
- stating that you changed the files and the date of any change.
97
-
98
- b) You must cause any work that you distribute or publish, that in
99
- whole or in part contains or is derived from the Program or any
100
- part thereof, to be licensed as a whole at no charge to all third
101
- parties under the terms of this License.
102
-
103
- c) If the modified program normally reads commands interactively
104
- when run, you must cause it, when started running for such
105
- interactive use in the most ordinary way, to print or display an
106
- announcement including an appropriate copyright notice and a
107
- notice that there is no warranty (or else, saying that you provide
108
- a warranty) and that users may redistribute the program under
109
- these conditions, and telling the user how to view a copy of this
110
- License. (Exception: if the Program itself is interactive but
111
- does not normally print such an announcement, your work based on
112
- the Program is not required to print an announcement.)
113
-
114
- These requirements apply to the modified work as a whole. If
115
- identifiable sections of that work are not derived from the Program,
116
- and can be reasonably considered independent and separate works in
117
- themselves, then this License, and its terms, do not apply to those
118
- sections when you distribute them as separate works. But when you
119
- distribute the same sections as part of a whole which is a work based
120
- on the Program, the distribution of the whole must be on the terms of
121
- this License, whose permissions for other licensees extend to the
122
- entire whole, and thus to each and every part regardless of who wrote it.
123
-
124
- Thus, it is not the intent of this section to claim rights or contest
125
- your rights to work written entirely by you; rather, the intent is to
126
- exercise the right to control the distribution of derivative or
127
- collective works based on the Program.
128
-
129
- In addition, mere aggregation of another work not based on the Program
130
- with the Program (or with a work based on the Program) on a volume of
131
- a storage or distribution medium does not bring the other work under
132
- the scope of this License.
133
-
134
- 3. You may copy and distribute the Program (or a work based on it,
135
- under Section 2) in object code or executable form under the terms of
136
- Sections 1 and 2 above provided that you also do one of the following:
137
-
138
- a) Accompany it with the complete corresponding machine-readable
139
- source code, which must be distributed under the terms of Sections
140
- 1 and 2 above on a medium customarily used for software interchange; or,
141
-
142
- b) Accompany it with a written offer, valid for at least three
143
- years, to give any third party, for a charge no more than your
144
- cost of physically performing source distribution, a complete
145
- machine-readable copy of the corresponding source code, to be
146
- distributed under the terms of Sections 1 and 2 above on a medium
147
- customarily used for software interchange; or,
148
-
149
- c) Accompany it with the information you received as to the offer
150
- to distribute corresponding source code. (This alternative is
151
- allowed only for noncommercial distribution and only if you
152
- received the program in object code or executable form with such
153
- an offer, in accord with Subsection b above.)
154
-
155
- The source code for a work means the preferred form of the work for
156
- making modifications to it. For an executable work, complete source
157
- code means all the source code for all modules it contains, plus any
158
- associated interface definition files, plus the scripts used to
159
- control compilation and installation of the executable. However, as a
160
- special exception, the source code distributed need not include
161
- anything that is normally distributed (in either source or binary
162
- form) with the major components (compiler, kernel, and so on) of the
163
- operating system on which the executable runs, unless that component
164
- itself accompanies the executable.
165
-
166
- If distribution of executable or object code is made by offering
167
- access to copy from a designated place, then offering equivalent
168
- access to copy the source code from the same place counts as
169
- distribution of the source code, even though third parties are not
170
- compelled to copy the source along with the object code.
171
-
172
- 4. You may not copy, modify, sublicense, or distribute the Program
173
- except as expressly provided under this License. Any attempt
174
- otherwise to copy, modify, sublicense or distribute the Program is
175
- void, and will automatically terminate your rights under this License.
176
- However, parties who have received copies, or rights, from you under
177
- this License will not have their licenses terminated so long as such
178
- parties remain in full compliance.
179
-
180
- 5. You are not required to accept this License, since you have not
181
- signed it. However, nothing else grants you permission to modify or
182
- distribute the Program or its derivative works. These actions are
183
- prohibited by law if you do not accept this License. Therefore, by
184
- modifying or distributing the Program (or any work based on the
185
- Program), you indicate your acceptance of this License to do so, and
186
- all its terms and conditions for copying, distributing or modifying
187
- the Program or works based on it.
188
-
189
- 6. Each time you redistribute the Program (or any work based on the
190
- Program), the recipient automatically receives a license from the
191
- original licensor to copy, distribute or modify the Program subject to
192
- these terms and conditions. You may not impose any further
193
- restrictions on the recipients' exercise of the rights granted herein.
194
- You are not responsible for enforcing compliance by third parties to
195
- this License.
196
-
197
- 7. If, as a consequence of a court judgment or allegation of patent
198
- infringement or for any other reason (not limited to patent issues),
199
- conditions are imposed on you (whether by court order, agreement or
200
- otherwise) that contradict the conditions of this License, they do not
201
- excuse you from the conditions of this License. If you cannot
202
- distribute so as to satisfy simultaneously your obligations under this
203
- License and any other pertinent obligations, then as a consequence you
204
- may not distribute the Program at all. For example, if a patent
205
- license would not permit royalty-free redistribution of the Program by
206
- all those who receive copies directly or indirectly through you, then
207
- the only way you could satisfy both it and this License would be to
208
- refrain entirely from distribution of the Program.
209
-
210
- If any portion of this section is held invalid or unenforceable under
211
- any particular circumstance, the balance of the section is intended to
212
- apply and the section as a whole is intended to apply in other
213
- circumstances.
214
-
215
- It is not the purpose of this section to induce you to infringe any
216
- patents or other property right claims or to contest validity of any
217
- such claims; this section has the sole purpose of protecting the
218
- integrity of the free software distribution system, which is
219
- implemented by public license practices. Many people have made
220
- generous contributions to the wide range of software distributed
221
- through that system in reliance on consistent application of that
222
- system; it is up to the author/donor to decide if he or she is willing
223
- to distribute software through any other system and a licensee cannot
224
- impose that choice.
225
-
226
- This section is intended to make thoroughly clear what is believed to
227
- be a consequence of the rest of this License.
228
-
229
- 8. If the distribution and/or use of the Program is restricted in
230
- certain countries either by patents or by copyrighted interfaces, the
231
- original copyright holder who places the Program under this License
232
- may add an explicit geographical distribution limitation excluding
233
- those countries, so that distribution is permitted only in or among
234
- countries not thus excluded. In such case, this License incorporates
235
- the limitation as if written in the body of this License.
236
-
237
- 9. The Free Software Foundation may publish revised and/or new versions
238
- of the General Public License from time to time. Such new versions will
239
- be similar in spirit to the present version, but may differ in detail to
240
- address new problems or concerns.
241
-
242
- Each version is given a distinguishing version number. If the Program
243
- specifies a version number of this License which applies to it and "any
244
- later version", you have the option of following the terms and conditions
245
- either of that version or of any later version published by the Free
246
- Software Foundation. If the Program does not specify a version number of
247
- this License, you may choose any version ever published by the Free Software
248
- Foundation.
249
-
250
- 10. If you wish to incorporate parts of the Program into other free
251
- programs whose distribution conditions are different, write to the author
252
- to ask for permission. For software which is copyrighted by the Free
253
- Software Foundation, write to the Free Software Foundation; we sometimes
254
- make exceptions for this. Our decision will be guided by the two goals
255
- of preserving the free status of all derivatives of our free software and
256
- of promoting the sharing and reuse of software generally.
257
-
258
- NO WARRANTY
259
-
260
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261
- FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262
- OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263
- PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264
- OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266
- TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267
- PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268
- REPAIR OR CORRECTION.
269
-
270
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271
- WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272
- REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273
- INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274
- OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275
- TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276
- YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277
- PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278
- POSSIBILITY OF SUCH DAMAGES.
279
-
280
- END OF TERMS AND CONDITIONS
281
-
282
- How to Apply These Terms to Your New Programs
283
-
284
- If you develop a new program, and you want it to be of the greatest
285
- possible use to the public, the best way to achieve this is to make it
286
- free software which everyone can redistribute and change under these terms.
287
-
288
- To do so, attach the following notices to the program. It is safest
289
- to attach them to the start of each source file to most effectively
290
- convey the exclusion of warranty; and each file should have at least
291
- the "copyright" line and a pointer to where the full notice is found.
292
-
293
- <one line to give the program's name and a brief idea of what it does.>
294
- Copyright (C) <year> <name of author>
295
-
296
- This program is free software; you can redistribute it and/or modify
297
- it under the terms of the GNU General Public License as published by
298
- the Free Software Foundation; either version 2 of the License, or
299
- (at your option) any later version.
300
-
301
- This program is distributed in the hope that it will be useful,
302
- but WITHOUT ANY WARRANTY; without even the implied warranty of
303
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304
- GNU General Public License for more details.
305
-
306
- You should have received a copy of the GNU General Public License along
307
- with this program; if not, write to the Free Software Foundation, Inc.,
308
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
309
-
310
- Also add information on how to contact you by electronic and paper mail.
311
-
312
- If the program is interactive, make it output a short notice like this
313
- when it starts in an interactive mode:
314
-
315
- Gnomovision version 69, Copyright (C) year name of author
316
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317
- This is free software, and you are welcome to redistribute it
318
- under certain conditions; type `show c' for details.
319
-
320
- The hypothetical commands `show w' and `show c' should show the appropriate
321
- parts of the General Public License. Of course, the commands you use may
322
- be called something other than `show w' and `show c'; they could even be
323
- mouse-clicks or menu items--whatever suits your program.
324
-
325
- You should also get your employer (if you work as a programmer) or your
326
- school, if any, to sign a "copyright disclaimer" for the program, if
327
- necessary. Here is a sample; alter the names:
328
-
329
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
331
-
332
- <signature of Ty Coon>, 1 April 1989
333
- Ty Coon, President of Vice
334
-
335
- This General Public License does not permit incorporating your program into
336
- proprietary programs. If your program is a subroutine library, you may
337
- consider it more useful to permit linking proprietary applications with the
338
- library. If this is what you want to do, use the GNU Lesser General
339
- Public License instead of this License.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.html DELETED
@@ -1,118 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml">
3
- <head>
4
- <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
5
- <title>A guide to the Custom Login lite plugin</title>
6
-
7
- <style type="text/css" media="screen">
8
- /* Reset values */
9
- html,body,div,span,object,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;background:transparent;border:none;text-decoration:none}b,i,hr,u,center,menu,layer,s,strike,font,xmp{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;font-weight:normal;font-style:normal;background:transparent;border:none;text-decoration:none}font{color:#333}center{text-align:left}body{line-height:25px;font-family:Cambria,Georgia,Times,"Times New Roman",serif;color:#333;background:#fff}h1,h2,h3,h4,h5,h6{font-style:normal;font-weight:normal;margin:0 0 25px 0}h1{font-size:1.8em}h2{font-size:1.7em}h3{font-size:1.55em;}h4{font-size:1.4em}h5{font-size:1.25em}h6{font-size:1.1em}p{margin:0 0 25px 0}ol,ul{list-style:none}ul{list-style:disc;margin:0 0 25px 2.5em}ol{list-style-type:decimal;margin:0 0 25px 3em}ol ol{list-style:upper-roman}ol ol ol{list-style:lower-roman}ol ol ol ol{list-style:upper-alpha}ol ol ol ol ol{list-style:lower-alpha}ul ul,ol ol,ul ol,ol ul{margin-bottom:0}dl{margin:0 0 25px 5px}dl dt{font-weight:bold;margin:10px 0 0 0}dl dd{margin:5px 0 0 1.5em}strong{font-weight:bold}strong strong{font-weight:normal}em,cite{font-style:italic}em em,cite cite{font-style:normal}abbr{cursor:help}acronym{text-transform:uppercase;border-bottom:1px dashed #666;cursor:help}big{font-size:120%}small,sup,sub{font-size:80%}sup{vertical-align:baseline;position:relative;bottom:0.3em}sub{vertical-align:baseline;position:relative;top:0.3em}address{font-style:italic;margin:0 0 25px 0}li address,dd address{margin:0}blockquote{margin:0 25px;font-style:normal}blockquote em,blockquote cite{font-style:italic}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}a{cursor:pointer}a img{border:none}pre{overflow:auto;font:.9em Monaco,monospace,Courier,"Courier New";line-height:25px;margin-bottom:25px;padding:10px}code{font:.9em Monaco,monospace,Courier,"Courier New"}pre code{font-size:1em}ins,dfn{font-style:italic;text-decoration:none;border-bottom:1px solid #666}del{text-decoration:line-through}object{margin-bottom:25px}input,textarea{font-size:1em;font-family:Cambria,Georgia,Times,"Times New Roman",serif;padding:3px}:focus{outline:none}form label{cursor:pointer}option{padding:1px 2px}table{border-collapse:collapse;border-spacing:0;margin-bottom:25px}th,td{text-align:left}hr{margin-bottom:25px}img.wp-smiley{max-height:12px;margin:0;padding:0;border:none}.gallery{display:block;text-align:center;margin-bottom:25px !important}.alignleft,.left{float:left;margin-right:20px}.alignright,.right{float:right;margin-left:20px}.aligncenter,.center{display:block;margin:0 auto 25px auto}.alignnone,.block{clear:both;margin:0 0 25px 0}.clear{clear:both}img.alignleft,img.alignright{display:inline}
10
-
11
- body {
12
- width: 750px;
13
- margin: 36px auto 60px auto;
14
- font: 15px/21px Arial, 'Helvetica Neue', Helvetica, sans-serif;
15
- font: 16px/25px Georgia, Times, 'Times New Roman', serif;
16
- }
17
- /* Links */
18
- a:link, a:visited {
19
- color: #2f6eb9;
20
- text-decoration: none;
21
- }
22
- a:hover, a:active {
23
- text-decoration: underline;
24
- }
25
- /* Headers */
26
- h1, h2, h3, h4, h5, h6 {
27
- margin: 40px 0 30px 0;
28
- color: #000;
29
- font-weight: bold;
30
- font-family: Arial, sans-serif;
31
- }
32
- h1 {
33
- margin-top: 80px;
34
- font-size: 2.2em;
35
- }
36
- code {
37
- padding: 0 3px;
38
- background: #eee;
39
- }
40
- pre code {
41
- padding: 0;
42
- }
43
- pre {
44
- padding: 9px;
45
- background: #eee;
46
- border: 1px solid #ccc;
47
- }
48
- ul {
49
- list-style: square;
50
- }
51
- p.first {
52
- font-size: 21px;
53
- }
54
- p.second {
55
- font-size: 15px;
56
- }
57
- ul.space li {
58
- margin-bottom: 10px;
59
- }
60
- .section {
61
- overflow: hidden;
62
- }
63
-
64
- .columns-2 {
65
- float: left;
66
- width: 350px;
67
- margin: 0 0 21px 25px;
68
- }
69
- .columns-3 {
70
- float: left;
71
- width: 230px;
72
- margin: 0 0 21px 20px;
73
- }
74
- </style>
75
-
76
- </head>
77
- <body>
78
-
79
- <h1>A guide to Custom Login lite</h1>
80
-
81
- <p><em>Custom Login</em> was written to take care of the defualt WordPress login page.</p>
82
-
83
- <p>It's been overhauled in version 0.8. Now featuring cleaner code, Draggable and movable meta boxes, a color picker and an uploader built in.</p>
84
-
85
- <h2>How to install the plugin</h2>
86
-
87
- <ol>
88
- <li>Uzip the <code>custom-login.zip</code> folder.</li>
89
- <li>Upload the<code>custom-login</code> folder to your <code>/wp-content/plugins</code> directory.</li>
90
- <li>In your WordPress dashboard, head over to the <em>Plugins</em> section.</li>
91
- <li>Activate <em>Custom Login</em>.</li>
92
- </ol>
93
-
94
- <h2>How to use the plugin</h2>
95
-
96
- <p>Once you've activated the plugin, you'll have to activate the plugin in the setting page to allow for customizations of the CSS and HTML. By default, when activated via the plugins page it will use the default style sheet, which you may or may not like.</p>
97
- <h2>Settings</h2>
98
-
99
- <p>Once on the setting page, you can simply click each option. Color options show the awesome javascript color picker and for URL's, there is a new uploader. Make sure to click send to post to send you current upload to the input field.</p>
100
- <p>More to come soon..</p>
101
- <h2>Plugin support</h2>
102
-
103
- <p>As of right now, there is no support. But I freaquent the WordPress <a href="http://wordpress.org/support/plugin/custom-login">forums</a>. So please post any questions there.</p>
104
-
105
- <h2>Upgrades</h2>
106
-
107
- <p>I've got a Pro version of Custom Login which you can purchase over at <a href="http://extendd.com/plugin/custom-login-pro/">extendd.com</a>.</p>
108
-
109
- <h2>Copyright &amp; license</h2>
110
-
111
- <p><em>Custom Login</em> is licensed under the <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.html" title="GNU GPL">GNU General Public License</a>, version 2 (<acronym title="GNU General Public License">GPL</acronym>).</p>
112
-
113
- <p>This plugin is copyrighted to <a href="http://austinpassy.com" title="Austin Passy">Austin Passy</a> of <a href="http://frostywebdesigns.com" title="Austin Passy">Frosty Web Designs</a>.</p>
114
-
115
- <p>2008&thinsp;&ndash;&thinsp;2013 &copy; Austin Passy. All rights reserved.</p>
116
-
117
- </body>
118
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.md ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Custom Login #
2
+ **Contributors:** austyfrosty
3
+ **Donate link:** https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=7431290
4
+ **Tags:** admin, branding, customization, custom login, login, logo, error, login error, custom login pro
5
+ **Requires at least:** 3.5
6
+ **Tested up to:** 4.0
7
+ **Stable tag:** trunk
8
+ **License:** GPLv2 or later
9
+ **License URI:** http://www.gnu.org/licenses/gpl-2.0.html
10
+
11
+ **Use this plugin to customize your login screen, great for client sites!**
12
+
13
+ ## Description ##
14
+
15
+ **Version 2.0** is now 140% faster in the admin and uses a lot less resources! Minimum WordPress version 3.5.
16
+
17
+ Join in on the [conversation](http://austin.passy.co/wordpress-plugins/custom-login) on my personal blog.
18
+
19
+ You can find Custom Login [PRO](https://extendd.com/plugin/custom-login-pro/) on [Extendd.com](https://extendd.com): A plugin marketplace. New features include faster login loading (no database access), Custom Post Types (for multiple designs) and four default CSS designs. **Custom Login Pro is a completly different plugin than Custom Login**.
20
+
21
+ http://www.youtube.com/watch?v=XOZwaLwpjNo
22
+
23
+ ### Extensions ###
24
+
25
+ Custom Login 2.0 now has many extensions to make your login page better!
26
+
27
+ **Available Now**
28
+
29
+ * *In Custom Login > version 2.2 you can auto-install all extensions within the settings page with an active licence key.*
30
+ * <a href="https://extendd.com/plugin/custom-login-stealth-login?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=freemium" title="Custom Login Stealth Login">Stealth Login</a> - obscure your login URL.
31
+ * <a href="https://extendd.com/plugin/custom-login-page-template?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=freemium" title="Custom Login Page Template">Page Template</a> - add a login form to any WordPress page.
32
+ * **NEW** <a href="https://extendd.com/plugin/wordpress-login-redirects?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=freemium" title="Custom Login Redirects">Login Redirects</a> - Manage login redirects.
33
+
34
+ **In Development**
35
+
36
+ * User Hash Key logins (think generated guest logins with-out having to use the login form).
37
+ * Email Logins for usernames.
38
+ * 2-step Authentication.
39
+ * "Super User" only access for client sites.
40
+ * WordPress Login CSS style remover (for sites that see a quick flash of the default login page).
41
+ * Submit button styles!
42
+ * Custom Login templates.
43
+
44
+ ### More info ###
45
+
46
+ Activate the plugin and customize your WordPress login screen. Use the built-in and easy to use settings page to do the work for you. There's no need to understand CSS at all!
47
+ Now featureing a HTML, CSS &amp; jQuery box for advanced users to up the customization!
48
+
49
+ 1. Works great for client site installs.
50
+ 2. Read more about [Custom Login](http://wp.me/pzgsJ-HY) 2.0
51
+
52
+ **For those looking to showoff your login screen, check out the [Flickr group](http://flickr.com/groups/custom-login/)! Share you designs with the community!**
53
+
54
+ ### links ###
55
+
56
+ * Plugin Marketplace: [Extendd.com](https://extendd.com/ "WordPress plugin markeetplace")
57
+ * My Blog: [http:/austin.passy.co/](http://austin.passy.co/ "Austin Passy's blog")
58
+ * Follow me on Twitter: @[TheFrosty](https:/twitter.com/TheFrosty "Austin TheFrosty' Passy on Twitter")
59
+ * Follow Extendd Twitter: @[Extendd](https:/twitter.com/WPExtendd "Extendd on Twitter")
60
+ * **Contribute on [GitHub](https://github.com/thefrosty/custom-login)**
61
+
62
+ ### Hooks and Filters ###
63
+
64
+ You can build your own extensions.
65
+
66
+ ## Installation ##
67
+
68
+ Follow the steps below to install the plugin.
69
+
70
+ 1. Upload the `custom-login` directory to the /wp-content/plugins/ directory.
71
+ 2. Activate the plugin through the 'Plugins' menu in WordPress.
72
+ 3. Go to Settings/custom-login to edit your settings.
73
+ 4. Design away.
74
+
75
+ ## Frequently Asked Questions ##
76
+
77
+ ### What are extensions? ###
78
+ They are additional plugins that add functionality to the Custom Login plugin. Depending of what the extension does. You can find all Custom Login extensions on [extendd.com](https://extendd.com).
79
+
80
+ ### My new settings aren't showing up ###
81
+ This plugin caches all settings in a transient, try clicking the new 'Update stylesheet' button to delete and refresh the cache.
82
+
83
+ ### Is there a PRO version? ###
84
+ Why yes there is, you can purchase the [PRO](https://extendd.com/plugin/custom-login-pro/) version on [https://extendd.com](https://extendd.com). Note that since Custom Login 2.0, Custom Login PRO is a completely different plugin.
85
+
86
+ ### Why create this plugin? ###
87
+ I created this plugin to allow for custom login of any WordPress login screen. See working example on: [Extendd.com](https://extendd.com/wp-login.php?action=login).
88
+
89
+ ### Where can I upload and share my cool login screen? ###
90
+ Check out the newly created [Flickr group](http://flickr.com/groups/custom-login/)! Upload and add it to our pool!
91
+
92
+ ### I think i want to uninstall ###
93
+ Just de-active.
94
+
95
+ ## Screenshots ##
96
+
97
+ Screenshots of working example in our [Flickr group](http://flickr.com/groups/custom-login/)
98
+
99
+ ### 1. Custom Login Settings page (as of v 2.0). ###
100
+ ![Custom Login Settings page (as of v 2.0).
101
+ ](https://s.w.org/plugins/custom-login/screenshot-1.png)
102
+
103
+
104
+ ### 2. Example of a custom login page using the nyan.cat as a animated background! [see user generated designs](http://flickr.com/groups/custom-login/). ###
105
+ ![Example of a custom login page using the nyan.cat as a animated background! [see user generated designs](http://flickr.com/groups/custom-login/).
106
+ ](https://s.w.org/plugins/custom-login/screenshot-2.png)
107
+
108
+
109
+ ## Changelog ##
110
+
111
+ ### Version 2.3.8 (10/17/14) ###
112
+
113
+ * Updated admin.js bug.
114
+ * Update settings page.
115
+ * Working on extensions auto install fix...
116
+
117
+ ### Version 2.3.7 (7/7/14) ###
118
+
119
+ * Fixes CSS issue on lost password page. Issue [<a href="https://github.com/thefrosty/custom-login/issues/1#issue-37305001">#1</a>].
readme.txt CHANGED
@@ -1,440 +1,290 @@
1
- === Custom Login ===
2
- Contributors: austyfrosty
3
- Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=7431290
4
- Tags: admin, branding, customization, custom login, login, logo, error, login error, custom login pro
5
- Requires at least: 3.4
6
- Tested up to: 3.5
7
- Stable tag: trunk
8
-
9
- Use this plugin to customize your login screen, great for client sites!
10
-
11
- == Description ==
12
-
13
- Join in on the [conversation](http://austinpassy.com/wordpress-plugins/custom-login) on my personal blog. I've also just released a [PRO](http://extendd.com/plugin/custom-login-pro/) version on [Extendd.com](http://extendd.com): A plugin marketplace. New features include faster login loading (no database access), Custom Post Types (for multiple designs) and four default CSS designs.
14
-
15
- Activate this plugin and customize your WordPress login screen. Use the built-in and easy to use settings page to do the work for you. Theres no need to understand CSS at all!
16
- Now featureing a HTML &amp; CSS box for advanced users to up the customization!
17
-
18
- 1. Works great for client site installs.
19
- 2. Comes with a Photoshop template included in the library files (default theme).
20
- 3. Read more about the [Custom Login Plugin](http://austinpassy.com/wordpress-plugins/custom-login/) & [most recent blog post](http://austinpassy.com/2010/09/custom-login-version-0-8/).
21
-
22
- **For those looking to showoff your login screen, check out the [Flickr group](http://flickr.com/groups/custom-login/)! Share you designs with the community!**
23
-
24
- = links =
25
-
26
- * My portfolio: [http:/frostywebdesigns.com/](http://frostywebdesigns.com/)
27
- * My Blog: [http:/austinpassy.com/](http://austinpassy.com/)
28
- * Twitter: @[TheFrosty](https:/twitter.com/TheFrosty)
29
- * Twitter: @[Extendd](https:/twitter.com/WPExtendd)
30
- * **Contribute on [GitHub](https://github.com/thefrosty/custom-login)**
31
-
32
- == Installation ==
33
-
34
- Follow the steps below to install the plugin.
35
-
36
- 1. Upload the `custom-login` directory to the /wp-content/plugins/ directory.
37
- 2. Activate the plugin through the 'Plugins' menu in WordPress.
38
- 3. Go to Settings/custom-login to edit your settings.
39
- 4. **Be sure to *check* activate** on the settings page to remove the *default* login design.
40
- 5. Design away.
41
-
42
-
43
- == Frequently Asked Questions ==
44
-
45
- = Is there a PRO version? =
46
- Why yes there is, you can purchase the [PRO](http://extendd.com/plugin/custom-login-pro/) version on [http://extendd.com](http://extendd.com).
47
-
48
- = Why create this plugin? =
49
- I created this plugin to allow for custom login of any WordPress login screen. See working example on: [Extendd.com](http://extendd.com/wp-login.php?action=login).
50
-
51
- = Where can I upload and share my cool login screen? =
52
- Check out the newly created [Flickr group](http://flickr.com/groups/custom-login/)! Upload and add it to our pool!
53
-
54
- = I don't like the default login =
55
- Well you should check the first box "`Use your own CSS`" and customize **your** login screen!
56
-
57
- = I think i want to uninstall =
58
- Just de-active.
59
-
60
- == Screenshots ==
61
-
62
- Screenshots of working example in our [Flickr group](http://flickr.com/groups/custom-login/)
63
-
64
- 1. Custom Login Settings page (as of v 0.8).
65
-
66
- 2. Example of a custom login page, [see more](http://flickr.com/groups/custom-login/).
67
-
68
- == Changelog ==
69
-
70
- = Version 1.1.4 (1/12/13) =
71
-
72
- * Fixed fatal error `Fatal error: Call to undefined function wp_enqueue_styles() in /home/[site path]/plugins/custom-login/custom-login.php on line 168`. No trailing "s".
73
- * Updated Turkish translation.
74
-
75
-
76
- = Version 1.1.3 (1/10/13) =
77
-
78
- * Add option for no `background-size`.
79
- * Changed upgrade buttong style from primary to secondary.
80
-
81
- = Version 1.1.2 (1/10/13) =
82
-
83
- * Added login scripts to `login_enqueue_scripts`.
84
- * Added background size to form. Please update settings.
85
- * Added custom jQuery output.
86
- * Moved all jQuery calls to the footer.
87
-
88
- = Version 1.1.1 (1/9/13) =
89
-
90
- * Fixed: html background image css missing definition. [issue](http://wordpress.org/support/topic/error-with-version-110?replies=2)
91
- * Fixed: CSS images need not be escaped. Removed `esc_attr` from `trailingsemicolonit()`.
92
- * Fixed: CSS form background image.
93
-
94
- = Version 1.1.0 (1/8/13) =
95
-
96
- * Minimun required WordPress version is now *3.4*!
97
- * Updated: `jscolor.js` to version `1.4.0`.
98
- * Updated: Added new textarea autosize script. See [https://github.com/jackmoore/autosize](https://github.com/jackmoore/autosize)
99
- * Changed: HTML background repeat is now a dropdown
100
- * Added: Background size option. [request](http://wordpress.org/support/topic/plugin-custom-login-resize-background-image?replies=2), [request](http://wordpress.org/support/topic/plugin-custom-login-love-the-plugin-and-a-small-wish-list?replies=1)
101
- * Removed registered CSS and added inline style to remove WordPress double loading. Should increase speed by 2X.
102
- * Change: Modify user role from `edit_plugins` to `manage_options` to allow `define('DISALLOW_FILE_EDIT', true);` as per [issue](http://wordpress.org/support/topic/plugin-custom-login-disallow_file_edit-breaks-plugin?replies=3#post-3702957)
103
- * Removed: CHMOD issue. See [issue](http://wordpress.org/support/topic/errors-15?replies=2#post-3702984). Replaces with `site_transient`.
104
- * Removed upgrade to [Pro](http://extendd.com/plugin/custom-login-pro/) script and pages.
105
- * Fixed: possbile PHP > 5.4 object warning [issue](http://wordpress.org/support/topic/custom-login-and-php-54?replies=3), [issue](http://wordpress.org/support/topic/plugin-custom-login-problem-after-installation?replies=2#post-3702975). Let me know if you still get errors.
106
-
107
-
108
- = Version 1.0.4.1 (12/3/12) =
109
-
110
- * Updated links.
111
- * Updated dashboard.
112
-
113
-
114
- = Version 1.0.4 (09/10/12) =
115
-
116
- * Added presstrends.io
117
-
118
- = Version 1.0.3 (08/16/12) =
119
-
120
- * Updated the default CSS.
121
- * Updated admin feeds.
122
-
123
- = Version 1.0.2 (04/01/12) =
124
-
125
- * Updated `pot` file.
126
- * Updated Turkish launguage file.
127
- * If cache folder isn't writable chmod `666`.
128
-
129
- = Version 1.0.1 (04/01/12) =
130
-
131
- * Fixed error saving settings in some cases.
132
- * Moved upgrade script to a new page.
133
-
134
- = Version 1.0.0 (03/29/12) =
135
-
136
- * New default login page (if you've not *activated* the custom `CSS`).
137
- * Added update box to settings page. (If you've already purchased the [PRO](http://thefrosty.com/custom-login-pro) upgrade, login and retreive the download link)
138
- * Cleaned up the dashboard.
139
- * Escaping thefrosty_network_feed().
140
- * Updated Sprite.
141
- * Added Spanish translation. (props Alejandro Arcos)
142
-
143
- = Version 0.9.8.2 (03/04/12) =
144
-
145
- * Added Turkish translation.
146
-
147
- = Version 0.9.8.1 (02/17/12) =
148
-
149
- * readme.txt links updated.
150
-
151
- = Version 0.9.8 (02/02/12) =
152
-
153
- * readme.txt update.
154
- * Description text update.
155
- * Admin bug fix.
156
-
157
- = Version 0.9.7 (12/18/11) =
158
-
159
- * Updated save settings HTML.
160
-
161
- = Version 0.9.6.1 (12/14/11) =
162
-
163
- * forgot "()", sorry.
164
-
165
- = Version 0.9.6 (12/14/11) =
166
-
167
- * Updated minor CSS changes to WordPress 3.3.
168
- * Updated some spelling mistakes.
169
-
170
- = Version 0.9.5 (11/8/11) =
171
-
172
- * Feeds updated.
173
- * WordPress 3.3 check.
174
-
175
- = Version 0.9.3 (9/8/11) =
176
-
177
- * Small bug in dashboard.
178
- * jQuery not loading in login head on some rare occasions.
179
-
180
- = Version 0.9.3 (7/30/11) =
181
-
182
- * Updated `wp_enqueue_style` to `wp_register_style` for the custom CSS that causes issues in WordPress 3.3
183
-
184
- = Version 0.9.2 (7/6/11) =
185
-
186
- * Added `!important` to the `html` CSS attribute for background because of new CSS rule in WordPress 3.2.
187
-
188
- = Version 0.9.1 (6/23/11) =
189
-
190
- * Fixed admin jQuery and upload buttons (backwards compatible with jQuery < 1.6)
191
-
192
- = Version 0.9.0 (6/23/11) =
193
-
194
- * [BUG FIX] An error in the dashboard widget is casuing some large images. Sorry. Always escape.
195
-
196
- = Version 0.8.9.2 (5/18/11) =
197
-
198
- * Bug Fix: Missing $domain index.
199
-
200
- = Version 0.8.9.1 (5/9/11) =
201
-
202
- * Not disabling the gravatar feature if registration was disabled. Missing `!`.
203
-
204
- = Version 0.8.9 (5/8/11) =
205
-
206
- * Added checkbox to turn off dashboard.
207
- * Added `disabled` to gravatar to remove idex error.
208
- * Trying to localize as much of the admin text as possible for translation.
209
-
210
- = Version 0.8.8 (3/30/11) =
211
-
212
- * Updated out of order tabs.
213
- * Fixed missing index variables that may cause error when runner in debug mode.
214
- * Fixed header output error.
215
- * Updated dashboard widget.
216
-
217
- = Version 0.8.7 (2/24/11) =
218
-
219
- * Removed javascript that was causing hangups.
220
-
221
- = Version 0.8.6 (2/9/11) =
222
-
223
- * Updated the feed parser to comply with deprecated `rss.php` and use `class-simplepie.php`.
224
-
225
- = Version 0.8.5 =
226
-
227
- * array_slice error fixed.
228
-
229
- = Version 0.8.4.1 =
230
-
231
- * Moved priority on Setting page.
232
- * Updated `POT` file.
233
-
234
- = Version 0.8.4 =
235
-
236
- * Don't add `gravatar.js` if it's not needed.
237
- * fixed bug where multiple installs in a single server of different WP installs exist.
238
- * Set role for settings page from `6` to `edit_plugins` to comply with new Roles and Capabilities.
239
- *
240
-
241
- = Version 0.8.3 =
242
-
243
- * Added missing `gravatar.js` file.
244
-
245
- = Version 0.8.2 =
246
-
247
- * Fixed CSS code on the login page.
248
-
249
- = Version 0.8.1 =
250
-
251
- * Fixed CSS code that was converting single and double quotes to HTML entities.
252
-
253
- = Version 0.8 =
254
-
255
- * Important! Users will have to re-save their settings after updating to version 0.8.
256
- * Completely recoded the plugin from the ground up for a much needed code overhaul.
257
- * Removed unistall script.
258
- * Removed [wpads.net](http://wpads.net).
259
- * Cleaned up options.
260
- * Removed easing.js, farbtastic.js, dock.js
261
- * Removed unused images.
262
- * Added `license.txt`, `readme.html`.
263
-
264
- = Version 0.7.2 =
265
-
266
- * Fixed bug where plugin isn't allowed to be *deleted*(removed) when using WordPress 3.0+.
267
-
268
- = Version 0.7.1 =
269
-
270
- * Dashboard widget bug, upgrade mandatory.
271
-
272
- = Version 0.7 =
273
-
274
- * Updated `array_slice` error
275
- * Added `wp_wb_version` check for WordPress 3+
276
- * Added new option for WordPress 3+, *body background*.
277
- * Added check for version in animated error.
278
- ** WP3 now includes the jQuery error
279
- * Now 100% compatible with WordPress 3.x
280
-
281
- = Version 0.6.1 =
282
-
283
- * Turned off the animated Autoresizer for expanding textareas, as it was buggy.
284
-
285
- = Version 0.6 =
286
-
287
- * Addded custom javascript error animation *turned on by default*
288
- * Cleaned up settings page
289
-
290
- = Version 0.5.2 =
291
-
292
- * Added dashboard widget.
293
- * Moved preview link higher.
294
- * Bug fix.
295
-
296
- = Version 0.5.1 =
297
-
298
- * Changes a function name.
299
- * Max character fix in `border-top-color`.
300
-
301
- = Version 0.5 =
302
-
303
- * **NEW** Javascript color picker [jscolor](http://jscolor.com)
304
- * **NEW** New field allows for colorization of the *body* `border-top` color
305
- * More options added
306
- * Cleaned up code
307
- * Testing new inline ad feature from [wpAds](http://bit.ly/wpadsnet) *Please leave [feedback/comments](http://austinpassy.com/2010/02/custom-login-version-0-5/) on this feature*
308
-
309
- = Version 0.4.8 =
310
-
311
- * Thickbox preview link :) *Let me know if you like the placement of it [in these comments](http://austinpassy.com/2010/02/custom-login-version-0-4-8/)*
312
-
313
- = Version 0.4.7 =
314
-
315
- * Added ability to use RGB/A colors to all color selectors. Max characters is now `21` instead of `7`
316
- * Cleaned up options page.
317
- * Added expanding textarea's for better coding space.
318
- * Allow for expanding help section per item basses.
319
- * Added an uninstaller (remove options from the database) *use the uninstall.php script*
320
- * **NEW** default style.
321
-
322
- = Version 0.4.6.1 =
323
-
324
- * CSS Bug.
325
-
326
- = Version 0.4.6 =
327
-
328
- * Added custom html coded box. Will only be in use if the box is checked.
329
- * New html box used jQuery to write to the page.
330
-
331
- = Version 0.4.5 =
332
-
333
- * Removed: #dock scroller (position fixed)
334
- * Added collapsing/expanding boxes on left to allow for visibility of color wheel.
335
-
336
- = Version 0.4.4.1 =
337
-
338
- * Error: Missed a period, caused fatal error.
339
- * Noticed issue with color picker error, try to reload page while I troubleshoot.
340
- * Fixed missing `div` tag on settings page.
341
- * Added two screenshots, one of settings page, one example.
342
-
343
- = Version 0.4.4 =
344
-
345
- * Added custom field box to add in your own CSS
346
- * Added in new toggle (hide the color box when you click on the `h3` title so as not to interfere when it auto scrolls)
347
-
348
- = Version 0.4.3 =
349
-
350
- * Bug: When first installed, color fields need the `#` before the HEX numbers shows.
351
-
352
- = Version 0.4.2 =
353
-
354
- * Added an additional save button under the scrolling window dock when the window height is causing the window to jump.
355
-
356
- = Version 0.4.1.1 =
357
-
358
- * Bug fix: `Dock` is in the wrong div
359
-
360
- = Version 0.4.1 =
361
-
362
- * Added a `position:fixed` style to the color picker if the window scrolls below the view of the *Color picker*
363
-
364
- = Version 0.4 =
365
-
366
- * Added jQuery javascript color picker
367
- * Remeber to use the new color selections with **#** before the six `hex` keys!
368
-
369
- = Version 0.3.3 =
370
-
371
- * Added ability to have transparent background image for `html`
372
- * Added `html > background-repeat`
373
-
374
- = Version 0.3.2.1 =
375
-
376
- * Style: "Addded css style to `Delete/Reset` button"
377
-
378
- = Version 0.3.2 =
379
-
380
- * Bug: "if login form background color was empty, image wouldn't show"
381
-
382
- = Version 0.3.1 =
383
-
384
- * Bug: "login form backgound url" overwrote "login form backgound color"
385
- * Auto install into double directory
386
-
387
- = Version 0.3 =
388
-
389
- * Admin panel added
390
- * Additional CSS / user options
391
- * Custom login
392
- * WordPress 2.9 ready
393
-
394
- = Version 0.2 =
395
-
396
- * 2.7 CSS update.
397
- * readme.txt link updated.
398
-
399
- = Version 0.1 =
400
-
401
- * Initial release.
402
-
403
-
404
- == Upgrade Notice ==
405
-
406
- = 1.1.4 =
407
- Fixed Fatal error!
408
-
409
- = 1.1.2 =
410
- Added background-size to form, please visit and update settings page.
411
-
412
- = 1.1.0 =
413
- Fixes a lot of issues reported on the WP forums. Fixes issues with PHP 5.4 object error.
414
-
415
- = 1.0.1 =
416
- Fixed save settings and moved upgrade script to new page.
417
-
418
- = 1.0 =
419
- Added download script for Custom Login Pro users.
420
-
421
- = 0.9.6 =
422
- WordPress 3.3 style registration compatible. Some changes may effect your design, please update accordingly.
423
-
424
- = 0.9.3 =
425
- WordPress 3.3 style registration compatible.
426
-
427
- = 0.8.10 =
428
- Important! Unescaping characters in the dashboard widget/
429
-
430
- = 0.8.8 =
431
- Miscellaneous errors fixed, bugs squashed.
432
-
433
- = 0.8 =
434
- Complete rewrite, you will have to re-save your settings!
435
-
436
- = 0.7.2 =
437
- Uninstall script no longer valid for WordPress 3.0+
438
-
439
- = 0.7.1 =
440
- Compatiblity issue with my other plugin [@Anywhere](http://austinpassy.com/anywhere-plugin) fixed.
1
+ === Custom Login ===
2
+ Contributors: austyfrosty
3
+ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=7431290
4
+ Tags: admin, branding, customization, custom login, login, logo, error, login error, custom login pro
5
+ Requires at least: 3.5
6
+ Tested up to: 4.0
7
+ Stable tag: trunk
8
+ License: GPLv2 or later
9
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
+
11
+ Use this plugin to customize your login screen, great for client sites!
12
+
13
+ == Description ==
14
+
15
+ **Version 2.0** is now 140% faster in the admin and uses a lot less resources! Minimum WordPress version 3.5.
16
+
17
+ Join in on the [conversation](http://austin.passy.co/wordpress-plugins/custom-login) on my personal blog.
18
+
19
+ You can find Custom Login [PRO](https://extendd.com/plugin/custom-login-pro/) on [Extendd.com](https://extendd.com): A plugin marketplace. New features include faster login loading (no database access), Custom Post Types (for multiple designs) and four default CSS designs. **Custom Login Pro is a completly different plugin than Custom Login**.
20
+
21
+ http://www.youtube.com/watch?v=XOZwaLwpjNo
22
+
23
+ = Extensions =
24
+
25
+ Custom Login 2.0 now has many extensions to make your login page better!
26
+
27
+ **Available Now**
28
+
29
+ * *In Custom Login > version 2.2 you can auto-install all extensions within the settings page with an active licence key.*
30
+ * <a href="https://extendd.com/plugin/custom-login-stealth-login?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=freemium" title="Custom Login Stealth Login">Stealth Login</a> - obscure your login URL.
31
+ * <a href="https://extendd.com/plugin/custom-login-page-template?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=freemium" title="Custom Login Page Template">Page Template</a> - add a login form to any WordPress page.
32
+ * **NEW** <a href="https://extendd.com/plugin/wordpress-login-redirects?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=freemium" title="Custom Login Redirects">Login Redirects</a> - Manage login redirects.
33
+
34
+ **In Development**
35
+
36
+ * User Hash Key logins (think generated guest logins with-out having to use the login form).
37
+ * Email Logins for usernames.
38
+ * 2-step Authentication.
39
+ * "Super User" only access for client sites.
40
+ * WordPress Login CSS style remover (for sites that see a quick flash of the default login page).
41
+ * Submit button styles!
42
+ * Custom Login templates.
43
+
44
+ = More info =
45
+
46
+ Activate the plugin and customize your WordPress login screen. Use the built-in and easy to use settings page to do the work for you. There's no need to understand CSS at all!
47
+ Now featureing a HTML, CSS &amp; jQuery box for advanced users to up the customization!
48
+
49
+ 1. Works great for client site installs.
50
+ 2. Read more about [Custom Login](http://wp.me/pzgsJ-HY) 2.0
51
+
52
+ **For those looking to showoff your login screen, check out the [Flickr group](http://flickr.com/groups/custom-login/)! Share you designs with the community!**
53
+
54
+ = links =
55
+
56
+ * Plugin Marketplace: [Extendd.com](https://extendd.com/ "WordPress plugin markeetplace")
57
+ * My Blog: [http:/austin.passy.co/](http://austin.passy.co/ "Austin Passy's blog")
58
+ * Follow me on Twitter: @[TheFrosty](https:/twitter.com/TheFrosty "Austin TheFrosty' Passy on Twitter")
59
+ * Follow Extendd Twitter: @[Extendd](https:/twitter.com/WPExtendd "Extendd on Twitter")
60
+ * **Contribute on [GitHub](https://github.com/thefrosty/custom-login)**
61
+
62
+ = Hooks and Filters =
63
+
64
+ You can build your own extensions.
65
+
66
+ == Installation ==
67
+
68
+ Follow the steps below to install the plugin.
69
+
70
+ 1. Upload the `custom-login` directory to the /wp-content/plugins/ directory.
71
+ 2. Activate the plugin through the 'Plugins' menu in WordPress.
72
+ 3. Go to Settings/custom-login to edit your settings.
73
+ 4. Design away.
74
+
75
+ == Frequently Asked Questions ==
76
+
77
+ = What are extensions? =
78
+ They are additional plugins that add functionality to the Custom Login plugin. Depending of what the extension does. You can find all Custom Login extensions on [extendd.com](https://extendd.com).
79
+
80
+ = My new settings aren't showing up =
81
+ This plugin caches all settings in a transient, try clicking the new 'Update stylesheet' button to delete and refresh the cache.
82
+
83
+ = Is there a PRO version? =
84
+ Why yes there is, you can purchase the [PRO](https://extendd.com/plugin/custom-login-pro/) version on [https://extendd.com](https://extendd.com). Note that since Custom Login 2.0, Custom Login PRO is a completely different plugin.
85
+
86
+ = Why create this plugin? =
87
+ I created this plugin to allow for custom login of any WordPress login screen. See working example on: [Extendd.com](https://extendd.com/wp-login.php?action=login).
88
+
89
+ = Where can I upload and share my cool login screen? =
90
+ Check out the newly created [Flickr group](http://flickr.com/groups/custom-login/)! Upload and add it to our pool!
91
+
92
+ = I think i want to uninstall =
93
+ Just de-active.
94
+
95
+ == Screenshots ==
96
+
97
+ Screenshots of working example in our [Flickr group](http://flickr.com/groups/custom-login/)
98
+
99
+ 1. Custom Login Settings page (as of v 2.0).
100
+
101
+ 2. Example of a custom login page using the nyan.cat as a animated background! [see user generated designs](http://flickr.com/groups/custom-login/).
102
+
103
+ == Changelog ==
104
+
105
+ = Version 2.4.0 (11/03/14) =
106
+
107
+ * Updated Extendd_Plugin_Settings_API to 1.0.18 to allow [Custom Login Redirects](https://extendd.com/plugin/wordpress-login-redirects/) to redirect by each role see version > 1.1.
108
+
109
+ = Version 2.3.9 (10/27/14) =
110
+
111
+ * Fixed missing dash in ID for update API.
112
+ * Removed install button for Custom Login Extensions. Please manually login to [Your Account](http://extendd.com/my-account) to download.
113
+
114
+ = Version 2.3.8 (10/17/14) =
115
+
116
+ * Updated admin.js bug.
117
+ * Update settings page.
118
+ * Working on extensions auto install fix...
119
+
120
+ = Version 2.3.7 (7/7/14) =
121
+
122
+ * Fixes CSS issue on lost password page. Issue [<a href="https://github.com/thefrosty/custom-login/issues/1#issue-37305001">#1</a>].
123
+
124
+ = Version 2.3.6 (6/23/14) =
125
+
126
+ * Update Chosen.js to 1.1.0
127
+ * Update admin.css
128
+ * Fix opacity select options from being hidden when opacity is checked (on).
129
+
130
+ = Version 2.3.5 (6/18/14) =
131
+
132
+ * Update all extendd URLs to https.
133
+
134
+ = Version 2.3.4 (6/3/14) =
135
+
136
+ * Added `do_action( 'custom_login_admin_enqueue_scripts' )` for extenstions to hook into settings page `admin_enqueue_scripts`.
137
+
138
+ = Version 2.3.3 (5/14/14) =
139
+
140
+ * Attempt to fix `Fatal error: Call to a member function set_sections() on a non-object`.
141
+
142
+ = Version 2.3.2 (4/24/14) =
143
+
144
+ * Fixed Fatal Error. Sorry.
145
+
146
+ = Version 2.3.1 (4/24/14) =
147
+
148
+ * Added new extension to manage redirects.
149
+ * Upate the Welcome page.
150
+
151
+ = Version 2.3 (3/13/14) =
152
+
153
+ * Renamed helper functions to avoid function exists errors even though I've wrapped those functions in `function_exists`
154
+ * New: Class 'Custom_Login_Scripts_Styles'.
155
+
156
+ = Version 2.2.3 (1/28/14) =
157
+
158
+ * Added image previews after file fields.
159
+
160
+ = Version 2.2.2 (1/28/14) =
161
+
162
+ * Allowed variables to account for unicode in Custom CSS.
163
+ * - Use `%%BLASH%%` for a backslash.
164
+
165
+ = Version 2.2.1 (1/25/14) =
166
+
167
+ * $version variable not loading.
168
+ * Updated sanitization on Custom CSS & HTML textarea fields.
169
+ * CSS sanitized with `wp_filter_nohtml_kses`.
170
+ * HTML sanitized with `wp_kses_post`.
171
+ * Allow use of "Tab" key in the CSS textarea to format CSS.
172
+
173
+ = Version 2.2.0 (1/24/14) =
174
+
175
+ * Updated settings page and CSS (now responsive).
176
+ * Updated Genericons to v 3.0.3.
177
+ * Add Remote Install class to auto-install Custom Login Extensions from Extendd.com (license key needed for paid extensions).
178
+ * Update and cleanup code.
179
+
180
+ = Version 2.1.9 (1/8/14) =
181
+
182
+ * Fixed chosen() JS 1.0.0 class variables on opacity options.
183
+ * Be sure to only output one instace of the settings scripts.
184
+ * Added actual width and height options to logo to fix WP 3.8 CSS settings.
185
+
186
+ = Version 2.1.8 (12/17/13) =
187
+
188
+ * Logo CSS fix.
189
+ * Updated Chosen.js to `1.0.0`
190
+
191
+ = Version 2.1.7 (12/13/13) =
192
+
193
+ * WordPress 3.8.x compatability.
194
+ * Adds custom background-size capability to fix new `80px X 80px` background-size standard.
195
+
196
+ = Version 2.1.6 (11/21/13) =
197
+
198
+ * Updated for PHP 5.4 &amp; WordPress 3.8.x compatibility.
199
+
200
+ = Version 2.1.5 (5/20/13) =
201
+
202
+ * Fix for some users who still can't dismess the notice.
203
+
204
+ = Version 2.1.4 (5/17/13) =
205
+
206
+ * Fixed notification not clearing on 'dismiss notice'. Sorry about that.
207
+
208
+ = Version 2.1.3 (5/13/13) =
209
+
210
+ * Fixed `notice` in class.settings-api.php.
211
+
212
+ = Version 2.1.2 (4/22/13) =
213
+
214
+ * Changed wrong $hook prefix for scripts.
215
+
216
+ = Version 2.1.1 (4/22/13) =
217
+
218
+ * Fix untranslatable items in the settings page.
219
+ * Added clear transient cache to Custom Login sidebar (as well as above save settings).
220
+ * Changed HTML position from input field to dropdown.
221
+ * Added notification on transient cache deletion.
222
+ * Removed "test" echo.
223
+ * Added delete transient on settings save.
224
+
225
+ = Version 2.1.0 (4/18/13) =
226
+
227
+ * Updated notice URL.
228
+ * For reals fixed the "remove notice" button. :D
229
+ * Moved the CSS back into the login head instead of external CSS (fixes WordPress CSS flash).
230
+ * Changed custom textarea to sanitize on save and output so line breaks are kept in tact.
231
+ * More data sanitization on settings.
232
+
233
+ = Version 2.0.6 (4/18/13) =
234
+
235
+ * Fix notice not going away on dismiss.
236
+ * Updated translation files.
237
+
238
+ = Version 2.0.5 (4/17/13) =
239
+
240
+ * Fix double escaped custom HTML on first import with `wp_specialchars_decode`.
241
+ * Add `SHORTINIT` to the PHP stylesheet and script to limit WordPress loading.
242
+ * Change wp_cache to transients on PHP scripts and styles, a lot faster!
243
+ * Added a delete transient cache button atop the 'Save Changes' button.
244
+
245
+ = Version 2.0.4 (4/17/13) =
246
+
247
+ * Updated JSON file to extenal GitHub.
248
+
249
+ = Version 2.0.3 (4/17/13) =
250
+
251
+ * Deactivate if minimum WordPress version isn't met.
252
+ * Min WordPress version **3.5**
253
+ * Version bump to match readme.txt.
254
+ * Turkish translations re-added.
255
+ * Added `rgba2hex` function to fix updates where rgba was set.
256
+ * Make sure function_exists 'wp_enqueue_media'.
257
+
258
+ = Version 2.0.2 (4/16/13) =
259
+
260
+ * Updated templates functions into a class.
261
+ * Moved some files.
262
+ * Fixed known activation hook not fireing on upgrade.
263
+ * Removed post_type and install script.
264
+ * Hide WP_LOCAL_DEV queries.
265
+
266
+ = Version 2.0.1 (4/16/13) =
267
+
268
+ * Wrap any function that can be replicated in if exists to avoid possible issues.
269
+ * Prefix any other function with `ap_` as to make sure nothing is replicated in other plugins.
270
+ * Fixed broken logo CSS.
271
+ * Add hide WordPress logo to settings.
272
+
273
+ = Version 2.0.0 (4/15/13) =
274
+
275
+ * Complete rewrite of plugin
276
+ * Uses all new Settings API (extendable for custom extensions)
277
+ * Loads 120% faster.
278
+ * Quick cache of CSS and JS on login page.
279
+
280
+
281
+ == Upgrade Notice ==
282
+
283
+ = 2.2.0 =
284
+ Now you can auto-install Custom Login extensions with an active license key!
285
+
286
+ = 2.1.9 =
287
+ Happy New Year! Finally fixed the logo issue with WordPress 3.8! If you find this plugin useful please consider donating, I've spend countless hours making it better for you.
288
+
289
+ = 2.0.6 =
290
+ Updated translation files and fixed dismiss notice from not getting removed.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
screenshot-1.png CHANGED
Binary file
screenshot-2.png CHANGED
Binary file
templates/wp-login-script.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Exit if accessed directly
4
+ if ( ! defined( 'ABSPATH' ) ) exit;
5
+
6
+ if ( !defined( 'SHORTINIT' ) ) define( 'SHORTINIT', true );
7
+
8
+ /* Setup the plugin */
9
+ $login = CUSTOMLOGIN();
10
+
11
+ if ( !$login->is_active() )
12
+ return;
13
+
14
+ global $cl_js_atts;
15
+
16
+ extract( $cl_js_atts, EXTR_SKIP );
17
+
18
+ /* Cache ALL THE THINGS! */
19
+ if ( false === ( $js = get_transient( $login->id . '_script' ) ) ) :
20
+
21
+ $js = '';
22
+
23
+ if ( defined( 'WP_LOCAL_DEV' ) && WP_LOCAL_DEV ) $js .= "/**\n *\n" . print_r( $cl_js_atts, true ) . " */\n\n";
24
+
25
+ $js .= "
26
+ /**
27
+ * Custom Login by Austin Passy
28
+ *
29
+ * Plugin URI : http://austin.passy.co/wordpress-plugins/custom-login
30
+ * Version : $version
31
+ * Author URI : http://austin.passy.co
32
+ * Pro Version : https://extendd.com/plugin/custom-login-pro
33
+ */\n\n";
34
+
35
+ $js .= 'jQuery(document).ready(function($) {';
36
+
37
+ /* Custom user input */
38
+ if ( !empty( $custom_jquery ) ) {
39
+
40
+ $js .= "\n\t/* Custom JS */\n\t";
41
+ $js .= wp_specialchars_decode( stripslashes( $custom_jquery ), 1, 0, 1 );
42
+ $js .= "\n";
43
+
44
+ }
45
+
46
+ $js .= '});';
47
+
48
+ /* WP Magic */
49
+ set_transient( $login->id . '_script', $js, YEAR_IN_SECONDS ); // Cache for a year
50
+ endif;
51
+
52
+ /* Out of the frying pan, and into the fire! */
53
+ echo $js;
templates/wp-login-style.php ADDED
@@ -0,0 +1,327 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Exit if accessed directly
4
+ if ( !defined( 'ABSPATH' ) ) exit;
5
+
6
+ if ( !defined( 'SHORTINIT' ) ) define( 'SHORTINIT', true );
7
+
8
+ /* Setup the plugin */
9
+ $login = CUSTOMLOGIN();
10
+ $ss = CUSTOM_LOGIN_SCRIPT_STYLES();
11
+
12
+ if ( !$login->is_active() )
13
+ return;
14
+
15
+ global $cl_css_atts;
16
+
17
+ /* Extract */
18
+ extract( $cl_css_atts, EXTR_SKIP );
19
+
20
+ /* Cache ALL THE THINGS! */
21
+ if ( false === ( $css = get_transient( $login->id . '_style' ) ) ) :
22
+
23
+ $css = '';
24
+ $close_rule = "}\n";
25
+
26
+ if ( defined( 'WP_LOCAL_DEV' ) && WP_LOCAL_DEV ) {
27
+
28
+ $css .= "/**\n *\n" . print_r( $cl_css_atts, true ) . " */\n\n";
29
+ }
30
+
31
+ $css .= "
32
+ /**
33
+ * Custom Login by Austin Passy
34
+ *
35
+ * Plugin URI : http://austin.passy.co/wordpress-plugins/custom-login
36
+ * Version : $version
37
+ * Author URI : http://austin.passy.co
38
+ * Extensions : https://extendd.com/plugins/tag/custom-login-extension/
39
+ */\n\n";
40
+
41
+ /* Custom user input */
42
+ if ( !empty( $custom_css ) ) {
43
+ $custom_css = wp_specialchars_decode( stripslashes( $custom_css ), 1, 0, 1 );
44
+
45
+ $css .= "/* START Custom CSS */\n";
46
+ $css .= str_replace(
47
+ array( '%%BSLASH%%' ),
48
+ array( '\\' ),
49
+ $custom_css
50
+ );
51
+ $css .= "\n/* END Custom CSS */\n";
52
+ $css .= "\n\n";
53
+
54
+ }
55
+
56
+ /**
57
+ * Open html
58
+ *
59
+ * @rule html
60
+ */
61
+ $css .= $ss->cssrule( 'html' );
62
+
63
+ if ( !empty( $html_background_color ) && 'on' === $html_background_color_checkbox ) {
64
+
65
+ $color = $ss->hex2rgb( $html_background_color );
66
+ $css .= $ss->trailingsemicolonit( "background-color: rgba({$color['red']},{$color['green']},{$color['blue']},{$html_background_color_opacity})" );
67
+
68
+ } elseif( !empty( $html_background_color ) ) {
69
+
70
+ $css .= $ss->trailingsemicolonit( "background-color: {$html_background_color}" );
71
+
72
+ }
73
+
74
+ if ( !empty( $html_background_url ) ) {
75
+
76
+ $css .= $ss->trailingsemicolonit( "background-image: url('{$html_background_url}')" );
77
+ $css .= $ss->trailingsemicolonit( "background-position: {$html_background_position}" );
78
+ $css .= $ss->trailingsemicolonit( "background-repeat: {$html_background_repeat}" );
79
+
80
+ if ( !empty( $html_background_size ) && 'none' !== $html_background_size ) {
81
+
82
+ $html_background_size = ( 'flex' !== $html_background_size ) ? $html_background_size : '100% auto';
83
+ $css .= $ss->prefixit( 'background-size', $html_background_size );
84
+
85
+ }
86
+ }
87
+
88
+ /* CLOSE html */
89
+ $css .= $close_rule;
90
+
91
+ /**
92
+ * Open body.login
93
+ *
94
+ * @rule body.login
95
+ */
96
+ if ( !empty( $html_background_color ) || !empty( $html_background_url ) ) {
97
+
98
+ $css .= $ss->cssrule( 'body.login' );
99
+ $css .= $ss->trailingsemicolonit( "background: transparent" );
100
+
101
+ /* CLOSE body */
102
+ $css .= $close_rule;
103
+
104
+ }
105
+
106
+ /**
107
+ * Open login form
108
+ *
109
+ * @rule #login form
110
+ */
111
+ $css .= $ss->cssrule( '#login form' );
112
+
113
+ if ( !empty( $login_form_background_color ) && 'on' === $login_form_background_color_checkbox ) {
114
+
115
+ $color = $ss->hex2rgb( $login_form_background_color );
116
+ $css .= $ss->trailingsemicolonit( "background-color: rgba({$color['red']},{$color['green']},{$color['blue']},{$login_form_background_color_opacity})" );
117
+
118
+ } elseif( !empty( $login_form_background_color ) ) {
119
+
120
+ $css .= $ss->trailingsemicolonit( "background-color: {$login_form_background_color}" );
121
+
122
+ }
123
+ if ( !empty( $login_form_background_url ) ) {
124
+
125
+ $css .= $ss->trailingsemicolonit( "background-image: url('{$login_form_background_url}')" );
126
+ $css .= $ss->trailingsemicolonit( "background-position: {$login_form_background_position}" );
127
+ $css .= $ss->trailingsemicolonit( "background-repeat: {$login_form_background_repeat}" );
128
+
129
+ if ( !empty( $login_form_background_size ) && 'none' != $login_form_background_size ) {
130
+
131
+ $login_form_background_size = ( 'flex' != $login_form_background_size ) ? $login_form_background_size : '100% auto';
132
+ $css .= $ss->prefixit( 'background-size', $login_form_background_size );
133
+
134
+ }
135
+
136
+ }
137
+
138
+ if ( !empty( $login_form_border_size ) && !empty( $login_form_border_color ) ) {
139
+
140
+ $login_form_border_size = rtrim( $login_form_border_size, 'px' );
141
+ $css .= $ss->trailingsemicolonit( "border: {$login_form_border_size}px solid {$login_form_border_color}" );
142
+
143
+ }
144
+
145
+ if ( !empty( $login_form_border_radius ) ) {
146
+
147
+ $login_form_border_radius = rtrim( $login_form_border_radius, 'px' ) . 'px';
148
+ $css .= $ss->prefixit( 'border-radius', $login_form_border_radius );
149
+
150
+ }
151
+
152
+ if ( !empty( $login_form_box_shadow ) ) {
153
+
154
+ $box_shadow = $login_form_box_shadow . ' ' . $login_form_box_shadow_color;
155
+ $css .= $ss->prefixit( 'box-shadow', trim( $box_shadow ) );
156
+
157
+ }
158
+
159
+ /* CLOSE login form */
160
+ $css .= $close_rule;
161
+
162
+ /**
163
+ * Open login h1
164
+ *
165
+ * @rule #login h1
166
+ */
167
+ if ( ( !empty( $hide_wp_logo ) && 'on' === $hide_wp_logo ) && empty( $logo_background_url ) ) {
168
+
169
+ $css .= $ss->cssrule( '#login h1' );
170
+ $css .= $ss->trailingsemicolonit( 'display: none' );
171
+
172
+ /* CLOSE login h1 */
173
+ $css .= $close_rule;
174
+
175
+ }
176
+
177
+ /**
178
+ * Open login h1 a
179
+ *
180
+ * @rule #login h1 a
181
+ */
182
+ if ( !empty( $logo_background_url ) ) {
183
+
184
+ $css .= $ss->cssrule( '#login h1 a' );
185
+
186
+ if ( !empty( $logo_background_size_height ) && is_int( $logo_background_size_height ) )
187
+ $css .= $ss->trailingsemicolonit( "height: {$logo_background_size_height}px !important" );
188
+
189
+ if ( !empty( $logo_background_size_width ) && is_int( $logo_background_size_width ) )
190
+ $css .= $ss->trailingsemicolonit( "width: {$logo_background_size_width}px !important" );
191
+
192
+ $css .= $ss->trailingsemicolonit( "background-image: url('{$logo_background_url}')" );
193
+ $css .= $ss->trailingsemicolonit( "background-position: {$logo_background_position}" );
194
+ $css .= $ss->trailingsemicolonit( "background-repeat: {$logo_background_repeat}" );
195
+
196
+ if ( !empty( $logo_background_size ) && 'none' !== $logo_background_size ) {
197
+
198
+ $logo_background_size = ( 'flex' !== $logo_background_size ) ? $logo_background_size : '100% auto';
199
+ $css .= $ss->prefixit( 'background-size', $logo_background_size );
200
+
201
+ } elseif ( !empty( $logo_background_size_custom ) && 'custom' === $logo_background_size ) {
202
+
203
+ $css .= $ss->prefixit( 'background-size', $logo_background_size_custom );
204
+
205
+ } else {
206
+ $css .= $ss->prefixit( 'background-size', 'inherit' );
207
+ }
208
+
209
+ /* Get width & height from attachment image *
210
+ $attachment = get_attached_file_id_from_url( $logo_background_url );
211
+ $attachment_id = isset( $attachment[0] ) && !empty( $attachment[0] ) ? $attachment[0]->ID : $attachment;
212
+ $image_attributes = wp_get_attachment_image_src( $attachment_id ); // returns an array
213
+ $css .= !empty( $image_attributes[2] ) ? $ss->trailingsemicolonit( "height: {$image_attributes[2]}" ) : $ss->trailingsemicolonit( "height: inherit" );
214
+ $css .= !empty( $image_attributes[1] ) ? $ss->trailingsemicolonit( "width: {$image_attributes[1]}" ) : $ss->trailingsemicolonit( "width: inherit" );
215
+ *
216
+ $css .= !empty( $logo_background_height ) ? $ss->trailingsemicolonit( "height: {$logo_background_height}" ) : $ss->trailingsemicolonit( "height: inherit" );
217
+ $css .= !empty( $logo_background_width ) ? $ss->trailingsemicolonit( "width: {$logo_background_width}" ) : $ss->trailingsemicolonit( "width: inherit" );
218
+ */
219
+
220
+ /* CLOSE login h1 a */
221
+ $css .= $close_rule;
222
+
223
+ }
224
+
225
+ /**
226
+ * Open form label
227
+ *
228
+ * @rule .login label | #loginform label, #lostpasswordform label
229
+ */
230
+ if ( !empty( $label_color ) ) {
231
+
232
+ $css .= $ss->cssrule( '.login label' );
233
+
234
+ if ( 'on' === $label_color_checkbox ) {
235
+
236
+ $color = $ss->hex2rgb( $label_color );
237
+ $css .= $ss->trailingsemicolonit( "color: rgba({$color['red']},{$color['green']},{$color['blue']},{$label_color_opacity})" );
238
+
239
+ } else {
240
+
241
+ $css .= $ss->trailingsemicolonit( "color: {$label_color}" );
242
+
243
+ }
244
+
245
+ /* CLOSE login h1 a */
246
+ $css .= $close_rule;
247
+
248
+ }
249
+
250
+ /**
251
+ * Open below form links
252
+ *
253
+ * @rule .login #nav a, .login #backtoblog a
254
+ */
255
+ if ( !empty( $nav_color ) ) {
256
+
257
+ $css .= $ss->cssrule( '.login #nav a, .login #backtoblog a' );
258
+
259
+ if ( 'on' === $nav_color_checkbox ) {
260
+
261
+ $color = $ss->hex2rgb( $nav_color );
262
+ $css .= $ss->trailingsemicolonit( "color: rgba({$color['red']},{$color['green']},{$color['blue']},{$nav_color_opacity}) !important" );
263
+
264
+ } else {
265
+
266
+ $css .= $ss->trailingsemicolonit( "color: {$nav_color} !important" );
267
+
268
+ }
269
+
270
+ if ( !empty( $nav_text_shadow_color ) && 'on' === $nav_text_shadow_color_checkbox ) {
271
+
272
+ $color = $ss->hex2rgb( $nav_text_shadow_color );
273
+ $css .= $ss->trailingsemicolonit( "text-shadow: 0 1px 0 rgba({$color['red']},{$color['green']},{$color['blue']},{$nav_text_shadow_color_opacity})" );
274
+
275
+ } elseif( !empty( $nav_text_shadow_color ) ) {
276
+
277
+ $css .= $ss->trailingsemicolonit( "text-shadow: 0 1px 0 {$nav_text_shadow_color}" );
278
+
279
+ }
280
+
281
+ /* CLOSE login h1 a */
282
+ $css .= $close_rule;
283
+
284
+ }
285
+
286
+ /**
287
+ * Open below form links :hover
288
+ *
289
+ * @rule .login #nav a:hover, .login #backtoblog a:hover
290
+ */
291
+ if ( !empty( $nav_hover_color ) ) {
292
+
293
+ $css .= $ss->cssrule( '.login #nav a:hover, .login #backtoblog a:hover' );
294
+
295
+ if ( 'on' === $nav_hover_color_checkbox ) {
296
+
297
+ $color = $ss->hex2rgb( $nav_hover_color );
298
+ $css .= $ss->trailingsemicolonit( "color: rgba({$color['red']},{$color['green']},{$color['blue']},{$nav_hover_color_opacity}) !important" );
299
+
300
+ } else {
301
+
302
+ $css .= $ss->trailingsemicolonit( "color: {$nav_hover_color} !important" );
303
+
304
+ }
305
+
306
+ if ( !empty( $nav_text_shadow_hover_color ) && 'on' === $nav_text_shadow_hover_color_checkbox ) {
307
+
308
+ $color = $ss->hex2rgb( $nav_text_shadow_hover_color );
309
+ $css .= $ss->trailingsemicolonit( "text-shadow: 0 1px 0 rgba({$color['red']},{$color['green']},{$color['blue']},{$nav_text_shadow_hover_color_opacity})" );
310
+
311
+ } elseif( !empty( $nav_text_shadow_hover_color ) ) {
312
+
313
+ $css .= $ss->trailingsemicolonit( "text-shadow: 0 1px 0 {$nav_text_shadow_hover_color}" );
314
+
315
+ }
316
+
317
+ /* CLOSE login h1 a */
318
+ $css .= $close_rule;
319
+
320
+ }
321
+
322
+ /* WP Magic */
323
+ set_transient( $login->id . '_style', $css, YEAR_IN_SECONDS ); // Cache for a year
324
+ endif;
325
+
326
+ /* Out of the frying pan, and into the fire! */
327
+ echo $css;