Custom Login - Version 1.1.4

Version Description

Fixed Fatal error!

Download this release

Release Info

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

Version 1.1.4

custom-login.php ADDED
@@ -0,0 +1,272 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ ?>
languages/custom-login-es_ES.mo ADDED
Binary file
languages/custom-login-es_ES.po ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
Binary file
languages/custom-login-tr_TR.po ADDED
@@ -0,0 +1,490 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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.mo ADDED
Binary file
languages/custom-login.po ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+
languages/custom-login.pot ADDED
@@ -0,0 +1,404 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ""
library/admin/Sprite.jpg ADDED
Binary file
library/admin/admin.php ADDED
@@ -0,0 +1,925 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,171 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
Binary file
library/js/cross.gif ADDED
Binary file
library/js/custom-login.js ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
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 ADDED
Binary file
library/js/hv.png ADDED
Binary file
library/js/jquery.autosize.js ADDED
@@ -0,0 +1,171 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,953 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,339 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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.txt ADDED
@@ -0,0 +1,440 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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.
screenshot-1.png ADDED
Binary file
screenshot-2.png ADDED
Binary file