.*?().*%s';
+ $output = preg_replace( $regex, "$1", $output );
+ return $output;
+ }
+
+ function render_notices( $msg ) {
+ include ( CHLD_THM_CFG_DIR . '/includes/forms/notices.php' );
+ }
+
+ function get_theme_screenshot() {
+
+ foreach ( array_keys( $this->ctc()->imgmimes ) as $extreg ):
+ foreach ( explode( '|', $extreg ) as $ext ):
+ if ( $screenshot = $this->ctc()->css->is_file_ok( $this->ctc()->css->get_child_target( 'screenshot.' . $ext ) ) ):
+ $screenshot = trailingslashit( get_theme_root_uri() ) . $this->ctc()->theme_basename( '', $screenshot );
+ return $screenshot . '?' . time();
+ endif;
+ endforeach;
+ endforeach;
+ return FALSE;
+ }
+
+ function cmp_theme( $a, $b ) {
+ return strcmp( strtolower( $a[ 'Name' ] ), strtolower( $b[ 'Name' ] ) );
+ }
+
+ function enqueue_scripts() {
+ wp_enqueue_style( 'chld-thm-cfg-admin', CHLD_THM_CFG_URL . 'css/chldthmcfg.css', array(), CHLD_THM_CFG_VERSION );
+
+ // we need to use local jQuery UI Widget/Menu/Selectmenu 1.11.2 because selectmenu is not included in < 1.11.2
+ // this will be updated in a later release to use WP Core scripts when it is widely adopted
+
+ if ( !wp_script_is( 'jquery-ui-selectmenu', 'registered' ) ): // selectmenu.min.js
+ wp_enqueue_script( 'jquery-ui-selectmenu', CHLD_THM_CFG_URL . 'js/selectmenu.min.js',
+ array( 'jquery','jquery-ui-core','jquery-ui-position' ), CHLD_THM_CFG_VERSION, TRUE );
+ endif;
+
+ wp_enqueue_script( 'chld-thm-cfg-spectrum', CHLD_THM_CFG_URL . 'js/spectrum.min.js', array( 'jquery' ), CHLD_THM_CFG_VERSION, TRUE );
+ wp_enqueue_script( 'chld-thm-cfg-ctcgrad', CHLD_THM_CFG_URL . 'js/ctcgrad.min.js', array( 'jquery' ), CHLD_THM_CFG_VERSION, TRUE );
+ wp_enqueue_script( 'chld-thm-cfg-admin', CHLD_THM_CFG_URL . 'js/chldthmcfg' . ( SCRIPT_DEBUG ? '' : '.min' ) . '.js',
+ //wp_enqueue_script( 'chld-thm-cfg-admin', CHLD_THM_CFG_URL . 'js/chldthmcfg.js',
+ array(
+ 'jquery-ui-autocomplete',
+ 'jquery-ui-selectmenu',
+ 'chld-thm-cfg-spectrum',
+ 'chld-thm-cfg-ctcgrad'
+ ), CHLD_THM_CFG_VERSION, TRUE );
+
+ $localize_array = apply_filters( 'chld_thm_cfg_localize_script', array(
+ 'converted' => $this->css()->get_prop( 'converted' ),
+ 'ssl' => is_ssl(),
+ 'homeurl' => home_url( '/' ) . '?ModPagespeed=off&' . ( defined( 'WP_ROCKET_VERSION' ) ? '' : 'ao_noptimize=1&' ) . 'preview_ctc=1', // WP Rocket serves cached page when ao_nooptimize is present v2.3.0
+ 'ajaxurl' => admin_url( 'admin-ajax.php' ),
+ 'customizerurl' => admin_url( 'customize.php' ),
+ 'theme_uri' => get_theme_root_uri(),
+ 'theme_dir' => basename( get_theme_root_uri() ),
+ 'page' => CHLD_THM_CFG_MENU,
+ 'themes' => $this->ctc()->themes,
+ 'source' => apply_filters( 'chld_thm_cfg_source_uri', get_theme_root_uri() . '/'
+ . $this->css()->get_prop( 'parnt' ) . '/style.css', $this->css() ),
+ 'target' => apply_filters( 'chld_thm_cfg_target_uri', get_theme_root_uri() . '/'
+ . $this->css()->get_prop( 'child' ) . '/style.css', $this->css() ),
+ 'parnt' => $this->css()->get_prop( 'parnt' ),
+ 'child' => $this->css()->get_prop( 'child' ),
+ 'addl_css' => $this->css()->get_prop( 'addl_css' ),
+ 'forcedep' => $this->css()->get_prop( 'forcedep' ),
+ 'swappath' => $this->css()->get_prop( 'swappath' ),
+ 'imports' => $this->css()->get_prop( 'imports' ),
+ 'converted' => $this->css()->get_prop( 'converted' ),
+ 'copy_mods' => $this->ctc()->copy_mods,
+ 'is_debug' => $this->ctc()->is_debug,
+ '_background_url_txt' => __( 'URL/None', 'child-theme-configurator' ),
+ '_background_origin_txt' => __( 'Origin', 'child-theme-configurator' ),
+ '_background_color1_txt' => __( 'Color 1', 'child-theme-configurator' ),
+ '_background_color2_txt' => __( 'Color 2', 'child-theme-configurator' ),
+ '_border_width_txt' => __( 'Width/None', 'child-theme-configurator' ),
+ '_border_style_txt' => __( 'Style', 'child-theme-configurator' ),
+ '_border_color_txt' => __( 'Color', 'child-theme-configurator' ),
+ 'swatch_txt' => $this->swatch_txt,
+ 'load_txt' => __( 'Are you sure you wish to RESET? This will destroy any work you have done in the Configurator.', 'child-theme-configurator' ),
+ 'important_txt' => __( '
! ', 'child-theme-configurator' ),
+ 'selector_txt' => __( 'Selectors', 'child-theme-configurator' ),
+ 'close_txt' => __( 'Close', 'child-theme-configurator' ),
+ 'edit_txt' => __( 'Edit Selector', 'child-theme-configurator' ),
+ 'cancel_txt' => __( 'Cancel', 'child-theme-configurator' ),
+ 'rename_txt' => __( 'Rename', 'child-theme-configurator' ),
+ 'css_fail_txt' => __( 'The stylesheet cannot be displayed.', 'child-theme-configurator' ),
+ 'child_only_txt' => __( '(Child Only)', 'child-theme-configurator' ),
+ 'inval_theme_txt' => __( 'Please enter a valid Child Theme.', 'child-theme-configurator' ),
+ 'inval_name_txt' => __( 'Please enter a valid Child Theme name.', 'child-theme-configurator' ),
+ 'theme_exists_txt' => __( '
%s exists. Please enter a different Child Theme', 'child-theme-configurator' ),
+ 'js_txt' => __( 'The page could not be loaded correctly.', 'child-theme-configurator' ),
+ 'jquery_txt' => __( 'Conflicting or out-of-date jQuery libraries were loaded by another plugin:', 'child-theme-configurator' ),
+ 'plugin_txt' => __( 'Deactivating or replacing plugins may resolve this issue.', 'child-theme-configurator' ),
+ 'contact_txt' => sprintf( __( '%sWhy am I seeing this?%s', 'child-theme-configurator' ),
+ '
',
+ ' ' ),
+ 'nosels_txt' => __( 'No Styles Available. Check Parent/Child settings.', 'child-theme-configurator' ),
+ 'anlz1_txt' => __( 'Updating', 'child-theme-configurator' ),
+ 'anlz2_txt' => __( 'Checking', 'child-theme-configurator' ),
+ 'anlz3_txt' => __( 'The theme "%s" generated unexpected PHP debug output.', 'child-theme-configurator' ),
+ 'anlz4_txt' => __( 'The theme "%s" could not be analyzed because the preview did not render correctly.', 'child-theme-configurator' ),
+ 'anlz5_txt' => sprintf( __( '
First, verify you can preview your home page with the Customizer and try analyzing again.
If that does not work, try temporarily disabling plugins that minify CSS or that force redirects between HTTP and HTTPS .
', 'child-theme-configurator' ), admin_url( '/customize.php' ) ), // . '?page=' . CHLD_THM_CFG_MENU ),
+ 'anlz6_txt' => __( 'Click to show/hide PHP debug output', 'child-theme-configurator' ),
+ // php error description modified v2.3.0
+ 'anlz7_txt' => __( '
PLEASE NOTE:
The analyzer reveals errors that may otherwise go undetected. Unless this is a fatal error, WordPress may appear to work correctly; however, PHP will continue to log the error until it is resolved. Please contact the author of any theme or plugin mentioned above and cut/paste the error from the text area. Do not use a screen capture as it may cut off part of the error text. Additional information about the error may also be available in the CTC documentation .
', 'child-theme-configurator' ),
+ 'anlz8_txt' => __( 'Do Not Activate "%s"! A PHP FATAL ERROR has been detected.', 'child-theme-configurator' ),
+ 'anlz9_txt' => __( 'This theme loads stylesheets after the wp_styles queue.', 'child-theme-configurator' ),
+ 'anlz10_txt' => __( '
This makes it difficult for plugins to override these styles. You can try to resolve this using the "Repair header template" option (Step 6, "Additional handling options", below).
', 'child-theme-configurator' ),
+ 'anlz11_txt' => __( "This theme loads the parent theme's
style.css
file outside the wp_styles queue.", 'child-theme-configurator' ),
+ 'anlz12_txt' => __( '
This is common with older themes but requires the use of @import
, which is no longer recommended. You can try to resolve this using the "Repair header template" option (see step 6, "Additional handling options", below).
', 'child-theme-configurator' ),
+ 'anlz13_txt' => __( 'This child theme does not load a Configurator stylesheet.', 'child-theme-configurator' ),
+ 'anlz14_txt' => __( '
If you want to customize styles using this plugin, please click "Configure Child Theme" again to add this to the settings.
', 'child-theme-configurator' ),
+ 'anlz15_txt' => __( "This child theme uses the parent stylesheet but does not load the parent theme's
style.css
file.", 'child-theme-configurator' ),
+ 'anlz16_txt' => __( '
Please select a stylesheet handling method or check "Ignore parent theme stylesheets" (see step 6, below).
', 'child-theme-configurator' ),
+ 'anlz17_txt' => __( 'This child theme appears to be functioning correctly.', 'child-theme-configurator' ),
+ 'anlz18_txt' => __( 'This theme appears OK to use as a Child theme.', 'child-theme-configurator' ),
+ 'anlz19_txt' => __( 'This Child Theme has not been configured for this plugin.', 'child-theme-configurator' ),
+ 'anlz20_txt' => __( '
The Configurator makes significant modifications to the child theme, including stylesheet changes and additional php functions. Please consider using the DUPLICATE child theme option (see step 1, above) and keeping the original as a backup.
', 'child-theme-configurator' ),
+ 'anlz21_txt' => __( "This child theme uses
@import
to load the parent theme's
style.css
file.", 'child-theme-configurator' ),
+ 'anlz22_txt' => __( '
Please consider selecting "Use the WordPress style queue" for the parent stylesheet handling option (see step 6, below).
', 'child-theme-configurator' ),
+ 'anlz23_txt' => __( 'This theme loads additional stylesheets after the
style.css
file:', 'child-theme-configurator' ),
+ 'anlz24_txt' => __( '
Consider saving new custom styles to a "Separate stylesheet" (see step 5, below) so that you can customize these styles.
', 'child-theme-configurator' ),
+ 'anlz25_txt' => __( "The parent theme's
style.css
file is being loaded automatically.", 'child-theme-configurator' ),
+ 'anlz26_txt' => __( '
The Configurator selected "Do not add any parent stylesheet handling" for the "Parent stylesheet handling" option (see step 6, below).
', 'child-theme-configurator' ),
+ 'anlz27_txt' => __( "This theme does not require the parent theme's
style.css
file for its appearance.", 'child-theme-configurator' ),
+ 'anlz28_txt' => __( "This Child Theme was configured to accomodate a hard-coded stylesheet link.", 'child-theme-configurator' ),
+ 'anlz29_txt' => __( '
This workaround was used in earlier versions of CTC and can be eliminated by using the "Repair header template" option (see step 6, "Additional handling options", below).
', 'child-theme-configurator' ),
+ 'anlz30_txt' => __( 'Click to show/hide raw analysis data. Please include contents below with any support requests.', 'child-theme-configurator' ),
+ 'anlz31_txt' => __( 'This child theme was configured using the CTC Pro "Genesis stylesheet handling" method.', 'child-theme-configurator' ),
+ 'anlz32_txt' => __( '
This method has been replaced by the "Separate stylesheet" and "Ignore Parent Theme" options ( selected below ) for broader framework compatability.
', 'child-theme-configurator' ),
+ 'anlz33_txt' => __( '
%1Click Here%2 to view the theme as viewed by the Analyzer.
', 'child-theme-configurator' ),
+ 'anlzrtl_txt' => __( 'This theme uses a RTL (right-to-left) stylesheet that is not being loaded in the child theme.', 'child-theme-configurator' ), // added 2.3.0
+ 'anlzrtl2_txt' => __( 'Use the Web Fonts tab to add a link to the parent RTL stylesheet. See the documentation for more information.', 'child-theme-configurator' ), // added 2.3.0
+ 'anlzcache1_txt' => __( 'Both WP Rocket and Autoptimize plugins are enabled.', 'child-theme-configurator' ),
+ 'anlzcache2_txt' => __( 'The combination of these two plugins interferes with the Analysis results. Please temporarily deactivate one of them and Analyze again.', 'child-theme-configurator' ),
+ 'anlzconfig_txt' => __( '
The WordPress configuration file has been modified incorrectly. Please see this FAQ for more information.
', 'child-theme-configurator' ),
+ 'dismiss_txt' => __( 'Dismiss this notice.', 'child-theme-configurator' ),
+ ) );
+ wp_localize_script(
+ 'chld-thm-cfg-admin',
+ 'ctcAjax',
+ apply_filters( 'chld_thm_cfg_localize_array', $localize_array )
+ );
+ }
+
+ function filter_localize_array( $arr ) {
+ $arr[ 'pluginmode' ] = !$this->ctc()->is_theme();
+ return $arr;
+ }
+
+}
+?>
diff --git a/wp-content/plugins/child-theme-configurator/includes/classes/Upgrade.php b/wp-content/plugins/child-theme-configurator/includes/classes/Upgrade.php
new file mode 100644
index 0000000..bd815ca
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/classes/Upgrade.php
@@ -0,0 +1,293 @@
+';
+ if ( isset( $_GET[ 'invalidkey' ] ) ):?>
%s', LILAEAMEDIA_URL, __( 'contact us.', 'child-theme-configurator' ) ) ); ?>
';
+ endif;
+?>
+ self::$version,
+ 'key' => $key,
+ 'product' => dirname( self::$old ),
+ );
+
+ //Various options for the wp_remote_get() call. Plugins can filter these, too.
+ $options = array(
+ 'timeout' => 10, //seconds
+ 'headers' => array(
+ 'Accept' => 'application/json'
+ ),
+ );
+
+ //The plugin info should be at 'http://your-api.com/url/here/$slug/info.json'
+ $url = add_query_arg( $args, self::$lilaeaupdateurl );
+
+ $result = wp_remote_get(
+ $url,
+ $options
+ );
+
+ //Try to parse the response
+ $pluginInfo = NULL;
+ if ( !is_wp_error( $result )
+ && isset( $result[ 'response' ][ 'code' ] )
+ && ( $result[ 'response' ][ 'code' ] == 200 )
+ && !empty( $result['body'] ) ):
+
+ $pluginInfo = json_decode( $result['body'] );
+ if ( empty( $pluginInfo ) || version_compare( $pluginInfo->version, self::$version, '<' ) ):
+ $query = array( 'invalidkey' => 1 );
+ $url = add_query_arg( $query );
+ wp_redirect( $url );
+ die();
+ endif;
+ // create update object
+ $update = new StdClass;
+
+ $update->id = 0;
+ $update->slug = $pluginInfo->slug;
+ $update->new_version = $pluginInfo->version;
+ $update->url = $pluginInfo->homepage;
+ $update->package = $pluginInfo->download_url;
+ if ( !empty( $pluginInfo->upgrade_notice ) )
+ $update->upgrade_notice = $pluginInfo->upgrade_notice;
+ self::$update = $update;
+
+ // add update to cache
+ wp_update_plugins();
+ // run upgrader
+ $title = __( 'Update Plugin', 'child-theme-configurator' );
+ $plugin = self::$old;
+ //$nonce = 'ctc_pro_upgrade'; //'upgrade-plugin_' . $plugin;
+ $nonce = 'upgrade-plugin_' . self::$old;
+ $url = 'update.php?action=upgrade-plugin&plugin=' . urlencode( self::$old )
+ . '&ctc_pro_upgrade=1&ctcnonce=' . $_REQUEST[ 'ctcnonce' ];
+ wp_enqueue_script( 'updates' );
+ include_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' );
+ require_once( ABSPATH . 'wp-admin/admin-header.php' );
+
+ $upgrader = new Plugin_Upgrader( new Plugin_Upgrader_Skin( compact( 'title', 'nonce', 'url', 'plugin' ) ) );
+ //return;
+ $upgrader->upgrade( $plugin );
+ include(ABSPATH . 'wp-admin/admin-footer.php');
+ self::set_update_key( $key );
+
+ endif;
+ }
+
+ static function injectUpdate( $updates ){
+
+ if ( !empty( self::$update ) ):
+
+ if ( !is_object( $updates ) ):
+ $updates = new StdClass();
+ $updates->response = array();
+ endif;
+
+ $updates->response[ self::$old ] = self::$update;
+
+ elseif ( isset( $updates, $updates->response ) ):
+
+ unset( $updates->response[ self::$old ] );
+
+ endif;
+ return $updates;
+ }
+
+ static function clearCachedVersion( $args = NULL ){
+ self::$update = NULL;
+ return $args;
+ }
+
+ /**
+ * deletes old version of plugin without removing option settings
+ */
+ static function delete_old_version() {
+ if ( isset( $_REQUEST[ 'deleted' ] ) ) return;
+ $slug = dirname( self::$old );
+ // clean up hooks from < 2.2.0
+ wp_clear_scheduled_hook( 'check_plugin_updates-' . $slug );
+ delete_option( 'external_updates-' . $slug );
+ // remove old Pro version
+ if ( current_user_can( 'delete_plugins' ) ):
+ $redir = NULL;
+ if ( isset( $_GET[ 'action' ] ) ):
+ // unset action parameter if it is for old CTC Pro
+ if ( 'activate' == $_GET[ 'action' ]
+ && isset( $_GET[ 'plugin' ] )
+ && self::$old == $_GET[ 'plugin' ] ):
+ unset( $_GET[ 'action' ] );
+ // handle two-step FTP Authentication form
+ elseif ( 'delete-selected' == $_GET[ 'action' ]
+ && isset( $_GET[ 'verify-delete' ] )
+ && isset( $_GET[ 'checked' ] )
+ && self::$old == $_GET[ 'checked' ][ 0 ] ):
+
+ unset( $_GET[ 'action' ] );
+ unset( $_GET[ 'checked' ] );
+ unset( $_GET[ 'verify-delete' ] );
+ unset( $_REQUEST[ 'action' ] );
+ unset( $_REQUEST[ 'checked' ] );
+ unset( $_REQUEST[ 'verify-delete' ] );
+
+ $redir = self_admin_url( "plugins.php?activate=true" );
+ elseif ( 'activate' != $_GET[ 'action' ] ):
+ return;
+ endif;
+ endif;
+ // deactivate old Pro version
+ deactivate_plugins( self::$old, FALSE, is_network_admin() );
+ // remove uninstall hook so that options are preserved
+ $uninstallable_plugins = (array) get_option( 'uninstall_plugins' );
+ if ( isset( $uninstallable_plugins[ self::$old ] ) ):
+ unset( $uninstallable_plugins[ self::$old ] );
+ update_option( 'uninstall_plugins', $uninstallable_plugins );
+ endif;
+ unset( $uninstallable_plugins );
+ // remove old Pro version
+ $delete_result = delete_plugins( array( self::$old ) );
+ //Store the result in a cache rather than a URL param due to object type & length
+ global $user_ID;
+ set_transient( 'plugins_delete_result_' . $user_ID, $delete_result );
+ // force plugin cache to reload
+ wp_cache_delete( 'plugins', 'plugins' );
+
+ // if this is two-step FTP authentication, redirect back to activated
+ if ( $redir ):
+ if ( is_wp_error( $delete_result ) )
+ $redir = self_admin_url( "plugins.php?deleted=" . self::$old );
+ wp_redirect( $redir );
+ exit;
+ endif;
+ endif;
+ }
+}
diff --git a/wp-content/plugins/child-theme-configurator/includes/forms/addl_css.php b/wp-content/plugins/child-theme-configurator/includes/forms/addl_css.php
new file mode 100644
index 0000000..01e7a5e
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/forms/addl_css.php
@@ -0,0 +1,24 @@
+get_files( $this->get_current_parent(), 'stylesheet' );
+if ( count( $stylesheets ) ):?>
+
+
+
+
+
diff --git a/wp-content/plugins/child-theme-configurator/includes/forms/addl_panels.php b/wp-content/plugins/child-theme-configurator/includes/forms/addl_panels.php
new file mode 100644
index 0000000..eabb30a
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/forms/addl_panels.php
@@ -0,0 +1,46 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/wp-content/plugins/child-theme-configurator/includes/forms/backups.php b/wp-content/plugins/child-theme-configurator/includes/forms/backups.php
new file mode 100644
index 0000000..ff3f912
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/forms/backups.php
@@ -0,0 +1,12 @@
+
+get_files( $this->css()->get_prop( 'child' ), 'backup' ) as $backup => $label ): ?>
+
+
+
+
+ css()->get_prop( 'child_name' ) ): ?>
+
+
+
+
+
+ ctc()->is_debug, 1 ); ?> autocomplete="off" />
+
+
diff --git a/wp-content/plugins/child-theme-configurator/includes/forms/errorstrings.php b/wp-content/plugins/child-theme-configurator/includes/forms/errorstrings.php
new file mode 100644
index 0000000..35dd42b
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/forms/errorstrings.php
@@ -0,0 +1,45 @@
+ __( 'Zip file creation failed.', 'child-theme-configurator' ),
+ '2' => __( 'You do not have permission to configure child themes.', 'child-theme-configurator' ),
+ '3' => __( '%s does not exist. Please select a valid Parent Theme.', 'child-theme-configurator' ),
+ '4' => __( 'The Functions file is required and cannot be deleted.', 'child-theme-configurator' ),
+ '5' => __( 'Please select a valid Parent Theme.', 'child-theme-configurator' ),
+ '6' => __( 'Please select a valid Child Theme.', 'child-theme-configurator' ),
+ '7' => __( 'Please enter a valid Child Theme directory name.', 'child-theme-configurator' ),
+ '8' => __( '
%s exists. Please enter a different Child Theme template name.', 'child-theme-configurator' ),
+ '9' => __( 'Your theme directories are not writable.', 'child-theme-configurator' ), // add_action( 'chld_thm_cfg_admin_notices', array( $this, 'writable_notice' ) );
+
+ '10' => __( 'Could not upgrade child theme', 'child-theme-configurator' ),
+ '11' => __( 'Your stylesheet is not writable.', 'child-theme-configurator' ), // add_action( 'chld_thm_cfg_admin_notices', array( $this, 'writable_notice' ) );
+
+ '12' => __( 'A closing PHP tag was detected in Child theme functions file so "Parent Stylesheet Handling" option was not configured. Closing PHP at the end of the file is discouraged as it can cause premature HTTP headers. Please edit
functions.php
to remove the final
?>
tag and click "Generate/Rebuild Child Theme Files" again.', 'child-theme-configurator' ),
+ '13' => __( 'Could not copy file: %s', 'child-theme-configurator' ),
+ '14' => __( 'Could not delete %s file.', 'child-theme-configurator' ),
+ '15' => __( 'could not copy %s', 'child-theme-configurator' ), //unused
+ '16' => __( 'invalid dir: %s', 'child-theme-configurator' ), //unused
+ '17' => __( 'deleted: %s != %s files', 'child-theme-configurator' ), //unused
+ '18' => __( 'newfiles != files', 'child-theme-configurator' ), //unused
+ '19' => __( 'There were errors while resetting permissions.', 'child-theme-configurator' ), // add_action( 'chld_thm_cfg_admin_notices', array( $this, 'writable_notice' ) );
+
+ '20' => __( 'Could not upload file.', 'child-theme-configurator' ),
+ '21' => __( 'Invalid theme root directory.', 'child-theme-configurator' ),
+ '22' => __( 'No writable temp directory.', 'child-theme-configurator' ),
+ '23' => __( 'PclZip returned zero bytes.', 'child-theme-configurator' ),
+ '24' => __( 'Unpack failed -- %s', 'child-theme-configurator' ), // unused
+ '25' => __( 'Pack failed -- %s', 'child-theme-configurator' ), //unused
+ '26' => __( 'Maximum number of styles exceeded.', 'child-theme-configurator' ),
+ '27' => __( 'Error moving file: %s', 'child-theme-configurator' ),
+ '28' => __( 'Could not set write permissions.', 'child-theme-configurator' ), // add_action( 'chld_thm_cfg_admin_notices', array( $this, 'writable_notice' ) );
+
+);
+
+$writable_errors = array(
+ 9,
+ 11,
+ 19,
+ 28
+);
\ No newline at end of file
diff --git a/wp-content/plugins/child-theme-configurator/includes/forms/file-form-buttons.php b/wp-content/plugins/child-theme-configurator/includes/forms/file-form-buttons.php
new file mode 100644
index 0000000..befd390
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/forms/file-form-buttons.php
@@ -0,0 +1,13 @@
+ctc()->fs ): ?>
+
+
+
+
diff --git a/wp-content/plugins/child-theme-configurator/includes/forms/file.php b/wp-content/plugins/child-theme-configurator/includes/forms/file.php
new file mode 100644
index 0000000..21c7953
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/forms/file.php
@@ -0,0 +1,11 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wp-content/plugins/child-theme-configurator/includes/forms/fileform.php b/wp-content/plugins/child-theme-configurator/includes/forms/fileform.php
new file mode 100644
index 0000000..dd42fdd
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/forms/fileform.php
@@ -0,0 +1,43 @@
+
+
\ No newline at end of file
diff --git a/wp-content/plugins/child-theme-configurator/includes/forms/files.php b/wp-content/plugins/child-theme-configurator/includes/forms/files.php
new file mode 100644
index 0000000..4837bca
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/forms/files.php
@@ -0,0 +1,91 @@
+
+
+
+ render_file_form( 'parnt' ); ?>
+ render_file_form( 'child' ); ?>
+ render_image_form(); ?>
+
+ get_theme_screenshot() ): ?>
+
+
+
+
+ ctc()->fs_method ): ?>
+
+
+
+
+
+
diff --git a/wp-content/plugins/child-theme-configurator/includes/forms/image.php b/wp-content/plugins/child-theme-configurator/includes/forms/image.php
new file mode 100644
index 0000000..19d7ad1
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/forms/image.php
@@ -0,0 +1,12 @@
+
+
diff --git a/wp-content/plugins/child-theme-configurator/includes/forms/images.php b/wp-content/plugins/child-theme-configurator/includes/forms/images.php
new file mode 100644
index 0000000..221574e
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/forms/images.php
@@ -0,0 +1,24 @@
+
+
diff --git a/wp-content/plugins/child-theme-configurator/includes/forms/main.php b/wp-content/plugins/child-theme-configurator/includes/forms/main.php
new file mode 100644
index 0000000..04b379e
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/forms/main.php
@@ -0,0 +1,86 @@
+css();
+// main CTC Page
+?>
+
+
+
+
+ ctc()->is_post && !$this->ctc()->fs ):
+ //die( 'in fs prompt' );
+ echo $this->ctc()->fs_prompt;
+else:
+?>
+
+
+
+
+ render_settings_errors(); ?>
+
+ ctc()->skip_form ):
+ include ( CHLD_THM_CFG_DIR . '/includes/forms/tabs.php' );
+?>
+
+
+ enqueue_is_set() ):
+ include ( CHLD_THM_CFG_DIR . '/includes/forms/rule-value.php' );
+ include ( CHLD_THM_CFG_DIR . '/includes/forms/query-selector.php' );
+ if ( $this->ctc()->is_theme() )
+ include ( CHLD_THM_CFG_DIR . '/includes/forms/webfonts.php' ); ?>
+
+
+ ctc()->is_theme() )
+ include ( CHLD_THM_CFG_DIR . '/includes/forms/files.php' );
+ endif;
+ if ( $this->enqueue_is_set() || $this->supports_disable() ):
+ do_action( 'chld_thm_cfg_panels', $active_tab );
+ endif;
+ ?>
+
+
+
+
+
+ ctc()->is_debug ): ?>
+
+
+
+
diff --git a/wp-content/plugins/child-theme-configurator/includes/forms/notices.php b/wp-content/plugins/child-theme-configurator/includes/forms/notices.php
new file mode 100644
index 0000000..1826398
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/forms/notices.php
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+
+
+
+ Temporarily set write permissions by clicking the button below. When you are finished editing, revert to read-only by clicking "Make read-only" under the "Files" tab.', 'child-theme-configurator' );
+?>
+
+
Add your FTP/SSH credentials to the WordPress config file .', 'child-theme-configurator' );
+ if ( isset( $_SERVER[ 'SERVER_SOFTWARE' ] ) && preg_match( '%iis%i',$_SERVER[ 'SERVER_SOFTWARE' ] ) )
+ _e( '
Assign WordPress to an application pool that has write permissions (Windows IIS systems).', 'child-theme-configurator' );
+ _e( '
Set write permissions on the server manually (not recommended).', 'child-theme-configurator' );
+ if ( 'WIN' != substr( strtoupper( PHP_OS ), 0, 3 ) ):
+ _e( '
Run PHP under Apache with suEXEC (contact your web host). ', 'child-theme-configurator' );
+ endif; ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ However, some styles could not be parsed due to memory limits. Try deselecting "Additional Stylesheets" below and click "Generate/Rebuild Child Theme Files". %sWhy am I seeing this?%s', 'child-theme-configurator' ),
+ '
',
+ ' ' );
+ break;
+
+
+ case 'config': ?>
+
+
+
+
+
+
+
+ css()->get_prop( 'child' );
+ ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wp-content/plugins/child-theme-configurator/includes/forms/parent-child.php b/wp-content/plugins/child-theme-configurator/includes/forms/parent-child.php
new file mode 100644
index 0000000..ef96d6e
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/forms/parent-child.php
@@ -0,0 +1,474 @@
+
+
+
\ No newline at end of file
diff --git a/wp-content/plugins/child-theme-configurator/includes/forms/query-selector.php b/wp-content/plugins/child-theme-configurator/includes/forms/query-selector.php
new file mode 100644
index 0000000..00b4330
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/forms/query-selector.php
@@ -0,0 +1,99 @@
+
+
+
diff --git a/wp-content/plugins/child-theme-configurator/includes/forms/related.php b/wp-content/plugins/child-theme-configurator/includes/forms/related.php
new file mode 100644
index 0000000..e7ca893
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/forms/related.php
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+ ', '', '
', ' ' ); ?>
+
+
\ No newline at end of file
diff --git a/wp-content/plugins/child-theme-configurator/includes/forms/rule-value.php b/wp-content/plugins/child-theme-configurator/includes/forms/rule-value.php
new file mode 100644
index 0000000..fe0dd6d
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/forms/rule-value.php
@@ -0,0 +1,38 @@
+
+
+
diff --git a/wp-content/plugins/child-theme-configurator/includes/forms/settings-errors.php b/wp-content/plugins/child-theme-configurator/includes/forms/settings-errors.php
new file mode 100644
index 0000000..d1290c6
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/forms/settings-errors.php
@@ -0,0 +1,97 @@
+ctc()->errors ) ):
+ include_once( CHLD_THM_CFG_DIR . '/includes/forms/errorstrings.php' );
+ $errors = $this->ctc()->errors;
+
+ if ( isset( $_GET[ 'error' ] ) )
+ $errors = array_merge( $errors,
+ explode( ',', sanitize_text_field( $_GET[ 'error' ] ) )
+ );
+?>
+
+
+
+
+
+
+ ' . $err . '' . LF, array_shift( $errs ), array_shift( $errs ) );
+ endif;
+ endforeach;
+ ?>
+
+
+render_notices( 'writable' );
+ endif;
+elseif ( $msg = $this->ctc()->msg ):
+ $child_theme = wp_get_theme( $this->ctc()->get( 'child' ) );
+?>
+
+
+
+ %s has been reset. Please configure it using the settings below.', 'child-theme-configurator' ), $child_theme->Name ); ?>
+
+
+
+
+
+
+
+
+
+
+ %s has been generated successfully.', 'child-theme-configurator' ), $child_theme->Name ), $this->ctc() ); ?>
+ ctc()->is_theme() ): ?>
+
+
+ is_allowed() ):
+ printf( __( 'You must %sNetwork enable%s your child theme.', 'child-theme-configurator' ),
+ sprintf( '',
+ network_admin_url( '/themes.php' ),
+ __( 'Go to Themes', 'child-theme-configurator' ) ),
+ ' '
+ );
+ else :
+ printf( __( '%sPreview your child theme%s before activating.', 'child-theme-configurator' ),
+ sprintf( '',
+ admin_url( '/customize.php?theme=' . $this->ctc()->css->get_prop( 'child' ) ),
+ __( 'Live Preview', 'child-theme-configurator' ) ),
+ ' '
+ );
+ endif;
+ ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ctc()->is_theme() ):
+ ?>
+
+
+
+
+
+ ctc()->is_theme() ):
+ ?>
+
+ enqueue_is_set() || $this->supports_disable() ):
+ do_action( 'chld_thm_cfg_tabs', $active_tab );
+ endif;
+?>
+
+
\ No newline at end of file
diff --git a/wp-content/plugins/child-theme-configurator/includes/forms/theme-menu.php b/wp-content/plugins/child-theme-configurator/includes/forms/theme-menu.php
new file mode 100644
index 0000000..693724c
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/forms/theme-menu.php
@@ -0,0 +1,19 @@
+
+
+
ctc()->is_theme() ? '' : ' disabled '; ?> autocomplete="off" >
+ ctc()->themes[ $template ], array( $this, 'cmp_theme' ) );
+ foreach ( $this->ctc()->themes[ $template ] as $slug => $theme )
+ echo ''
+ . esc_attr( $theme[ 'Name' ] ) . ' ' . LF;
+ ?>
+
+
+ ctc()->themes[ $template ] as $slug => $theme )
+ include ( CHLD_THM_CFG_DIR . '/includes/forms/themepreview.php' ); ?>
+
diff --git a/wp-content/plugins/child-theme-configurator/includes/forms/themepreview.php b/wp-content/plugins/child-theme-configurator/includes/forms/themepreview.php
new file mode 100644
index 0000000..8a7ffb5
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/forms/themepreview.php
@@ -0,0 +1,23 @@
+
+
+
diff --git a/wp-content/plugins/child-theme-configurator/includes/forms/webfonts.php b/wp-content/plugins/child-theme-configurator/includes/forms/webfonts.php
new file mode 100644
index 0000000..23864bd
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/forms/webfonts.php
@@ -0,0 +1,37 @@
+
+
+
diff --git a/wp-content/plugins/child-theme-configurator/includes/forms/zipform.php b/wp-content/plugins/child-theme-configurator/includes/forms/zipform.php
new file mode 100644
index 0000000..ccbc976
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/forms/zipform.php
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/wp-content/plugins/child-theme-configurator/includes/help/de_DE.php b/wp-content/plugins/child-theme-configurator/includes/help/de_DE.php
new file mode 100644
index 0000000..36cf4ba
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/help/de_DE.php
@@ -0,0 +1,221 @@
+
+
+
Hier starten: Anleitungs-Videos
+
+
Wir betten aus Leistungsgründen keine Anleitungsvideos mehr ein. Hier klicken, um die Videos anzuschauen.
+
+
Eltern/Kind-Tab
+
Eine Aktion auswählen:
+ Neues Kind-Thema ERZEUGEN - Installiere ein neues anpassbares Kind-Thema mit einem installierten Thema als Eltern.
+ Bestehendes Kind-Thema ANPASSEN - Aufsetzen eines vorher installierten Kindthemas für den Konfigurator oder zum Ändern der aktuellen Einstellungen.
+ Bestehendes Kind-Thema DUPLIZIEREN - Eine vollständige Kopie eines Kindthemas in ein neues Verzeichnis erstellen, inkl. Menüs, Widgets und anderer Einstellungen. Die Option zum Kopieren der Eltern-Einstellungen (Schritt 8 unten) ist mit dieser Aktion deaktiviert.
+ Bestehendes Kind-Thema ZURÜCKSETZEN (dies wird all Ihre Arbeit im Konfigurator überschreiben) - Kind-Thema-Formatvorlage und Funktionsdateien auf ihren ursprünglichen Zustand setzen (vor der Initial-Konfiguration oder dem letzten Zurücksetzen).
+Eltern-Thema auswählen falls Sie ein neues Kind-Thema erstellen; ein Kind-Thema auswählen, falls Sie anpassen, duplizieren, oder zurücksetzen möchten.
+Analysiere Kind-Thema - "Analysieren" klicken, um Formatvorlage-Abhängigkeiten und andere mögliche Probleme zu erkennen.
+Neues Verzeichnis benennen beim Erstellen eines neuen Kindthemas; ansonsten prüft es, ob das Verzeichnis korrekt ist. - Dies ist NICHT der Name des Kindthemas. Sie können den Namen, die Beschreibung etc. in Schritt 7 unten anpassen.
+Speicherort der neuen Stile auswählen:
+ Primäre Formatvorlage (style.css) - Sichere neue angepasste Stile direkt in die primäre Formatvorlage des Kindthemas (ersetze vorhandene Werte). Die primäre Formatvorlage wird in der vom Thema definierten Reihenfolge geladen.
+ Separate Formatvorlage - Sichere neue angepasste Stile in separate Formatvorlage und verwende bestehende Kindthemen-Stile als Basis. Diese Option wählen, wenn Sie die Original-Kindthemen-Stile behalten wollen (statt zu überschreiben). Diese Option erlaubt es Ihnen, nach der primären Formatvorlage geladene Formatvorlagen anzupassen.
+Elternthema-Formatvorlage Behandlung auswählen:
+ Benutze die WordPress Stil-Warteschlange. - Den Konfigurator die richtigen Aktionen und Abhängigkeiten auswählen lassen und Funktionendateien automatisch aktualisieren.
+ Benutze @import in der Kind-Thema-Formatvorlage. - Diese Option nur benutzen, wenn die Eltern-Formatvorlage nicht mit der WordPress-Warteschlange geladen werden kann. Die Benutzung von @import
ist nicht länger empfohlen.
+ Keine zusätzliche Eltern-Formatvorlage-Behandlung hinzufügen. - Diese Option auswählen, wenn dieses Thema die Elternthema-Formatvorlage schon behandelt oder die Eltern-Thema style.css
-Datei für die Darstellung/Anzeige nicht benutzt wird.
+Kind-Thema-Name, Beschreibung, Autor, Version etc. anpassen
+Kopieren der Elternthema-Menüs, Widgets und anderer Einstellungen in das Kind-Thema. - HINWEIS: Dies überschreibt alle im Kind-Thema vorgenommenen Änderungen und Einstellungen.
+Klicken Sie auf die Schaltfläche um den Konfigurator zu starten.
+WICHTIG: Testen Sie Ihr Kind-Thema immer mit der Live-Vorschau (Themen-Konfigurator) vor der Aktivierung!
+
+
+
+
Abfrage/Selektor-Tab
+
Es gibt zwei Wege, Eltern-Stile (Basiswerte) zu identifizieren und zu übersteuern. Der Child Theme Configurator lässt Sie Stile suchen nach Selektor oder nach Eigenschaft . Wenn Sie einen bestimmten Selektor ändern wollen (z.Bsp. h1), benutzen Sie den "Abfrage/Selektor"-Tab. Wenn Sie einen Wert Webseiten-weit ändern wollen (z.Bsp. die Farbe des Typs), benutzen Sie den "Eigenschaften/Wert"-Tab.
+
Der Abfrage/Selektor-Tab lässt Sie bestimmte Selektoren finden und bearbeiten. Zuerst finden Sie die Abfrage, die den gesuchten Selektor enthält, indem Sie in die Abfrage Autoauswahl-Box schreiben. Wählen Sie durch Mausklick oder "Eingabe"- bzw. "Tabulator"-Tasten. Selektoren sind in der Basis Abfrage standardmäßig.
+
Dann finden Sie den mit der Eingabe in der Selektor Autoauswahl-Box. Wählen Sie aus mit Mausklick oder der "Eingabe"- bzw. den "Tabulator"-Tasten.
+
Dies lädt alle Eigenschaften für diesen Selektor mit den Eltern-Werten auf der linken und den Kind-Werten auf der rechten Seite. Alle bestehenden Kind-Werte werden automatisch abgefüllt. Es gibt auch eine Musteransicht, welches die Kombination der Eltern- und Kindwerte Übersteuerungen anzeigt. Beachten Sie, dass der Rahmen und Hintergrundbild speziell behandelt werden.
+
Wenn Sie zusätzliche Eigenschaften zu einem bestehenden Selektor hinzufügen wollen, laden Sie zuerst den Selektor mit dem Abfrage/Selektor-Tab. Dann finden Sie die zu übersteuernde Eigenschaft mit der Eingabe in die Neue Eigenschaft -Auswahlbox. Wählen Sie mit einem Mausklick oder der Eingabe der ENTER- oder TAB-Taste. Dies wird der Auswahl eine neue Eingabezeile hinzufügen.
+
Das "Reihenfolge"-Feld enthält die Original-Reihenfolge des Selektors der Eltern-Formatvorlage. Sie können die Selektor-Reihenfolge ändern, indem Sie eine tiefere/höhere Zahl im Reihenfolge-Feld eingeben. Sie können auch Stil-Übersteuerungen forcieren (sogenannter !important-Schalter), indem Sie das "!" Kästchen neben der Eingabe anwählen. Benutzen Sie es nicht zu oft.
+
Klicken Sie auf "Sichern" um die Kind-Formatvorlage zu aktualisieren und die Änderungen im Wordpress-Admin zu speichern.
+
+
+
Rohes CSS hinzufügen
+
Wenn Sie komplett neue Selektoren oder sogar @media-Queries hinzufügen wollen, können Sie formloses CSS im Textfeld "Rohes CSS" eingeben. Achten Sie auf eine korrekte Syntax (bspw. passende geschweifte Klammern etc.), damit der Parser die neuen Stile laden kann. Sie erkennen Fehler an einem roten "X", welches neben der Sichern-Schaltfläche erscheint.
+
Wenn Sie die Shorthand-Syntax für Eigenschaften und Werte bevorzugen (anstatt der Vorgaben durch den Kind-Thema-Konfigurator), können Sie diese hier auch eingeben. Der Parser wir diese Eingaben automatisch in normalisierten CSS-Code konvertieren.
+
Wenn Sie zusätzliche Eigenschaften zu einem bestehenden Selektor hinzufügen möchten, laden Sie zuerst den Selektor mit dem Abfrage/Selektor-Tab. Dann suchen Sie die Eigenschaft zum Übersteuern, indem Sie in die Neue Eigenschaft -Box schreiben. Wählen Sie mit einem Mausklick oder der Eingabe der ENTER- oder TAB-Taste. Dies wird der Auswahl eine neue Eingabezeile hinzufügen.
+
+
+
Eigenschaften/Wert-Tab
+
Es gibt zwei Wege, Eltern-Stile (Basiswerte) zu identifizieren und zu übersteuern. Der Child Theme Configurator lässt Sie Stile suchen nach Selektor oder nach Eigenschaft . Wenn Sie einen bestimmten Selektor ändern wollen (z.Bsp. h1), benutzen Sie den "Abfrage/Selektor"-Tab. Wenn Sie einen Wert Webseiten-weit ändern wollen (z.Bsp. die Farbe des Typs), benutzen Sie den "Eigenschaften/Wert"-Tab.
+
Der Eigenschaften/Wert-Tab lässt Sie bestimmte Werte für eine gewisse Eigenschaft finden und ermöglicht dann das Bearbeiten für individuelle Selektoren, welche diese Eigenschaft-/Wert-Kombination benutzen. Zuerst finden Sie die Eigenschaft, die Sie übersteuern möchten, indem Sie diese in der Eigenschaft Autoauswahl-Box eingeben. Wählen Sie durch Mausklick oder "Eingabe"- bzw. "Tabulator"-Tasten.
+
Dies lädt alle einzigartigen Werte dieser Eigenschaft in der Eltern-Formatvorlage mit einer Mustervorschau für diese Werte. Wenn Werte in der Kind-Formatvorlage existieren, die nicht in der Eltern-Formatvorlage enthalten sind, werden diese ebenfalls angezeigt.
+
Für jeden einzigartigen Wert, klicken Sie auf die "Selektoren"-Verknüpfung, um eine Liste der Selektoren mit dieser Eigenschaften-/Wert-Kombination anzuzeigen, nach Abfrage gruppiert mit einer Muster-Vorschau der Werte und Eingaben für die Kind-Werte. Alle bestehenden Kind-Werte werden automatisch abgefüllt.
+
Klicken Sie auf "Sichern" um die Kind-Formatvorlage zu aktualisieren und die Änderungen im Wordpress-Admin zu speichern.
+
+
+
Webschriftarten-Tab
+
Sie können zusätzliche Formatvorlagen und Webschriftarten verknüpfen, indem Sie @import Regeln in das Textfeld auf dem Webschriftarten-Tab eingeben.
+
Hinweis: Child Theme Configurator schreibt nicht mehr länger @import Regeln in die Formatvorlage. Stattdessen benutzt es das @import Schlüsselwort und stellt sie in die Warteschlange. WordPress wandelt sie dann um in <link> Tags im verarbeiteten HTML.
+
Wichtig: importieren Sie die Eltern-Formatvorlage nicht hier. Benutzen Sie die "Eltern-Formatvorlage-Behandlung"-Option auf dem Eltern/Kind-Tab.
+
Wenn Sie eine Formatvorlage unter "Zusätzliche Formatvorlegen einlesen" gewählt haben, als Sie das Kind-Thema erstellt haben, werden diese Stile für Übersteuerungen in der Kind-Formatvorlage zur Verfügung stehen.
+
WordPress lädt automatisch zusätzliche Formatvorlagen, wenn es das Eltern-Thema lädt, also müssen Sie @import rules dafür hier nicht hinzufügen.
+
Unten ist ein Beispiel, welche eine lokale angepasste Formatvorlage lädt (Sie müssen das "fonts"-Verzeichnis und die Formatvorlage hinzufügen), sowie die Schriftart "Open Sans" von Google Web Fonts:
+
@import url(fonts/Formatvorlage.css);
+@import url(http://fonts.googleapis.com/css?family=Open+Sans:400,400italic,700,700italic);
+
+
+
Dateien-Tab
+
Eltern-Vorlagen
+
Kopieren von PHP-Vorlagendateien des Eltern-Themes, indem Sie die Kästchen auswählen und "Auswahl zu gewählten Kind-Themen kopieren", und die Vorlage wird zum Kind-Themenverzeichnis hinzugefügt.
+
ACHTUNG: Wenn Ihr Kind-Thema aktiv ist, wird nach dem Kopiervorgang sofort die Kind-Thema-Version der Datei anstatt der Eltern-Datei benutzt.
+
Die functions.php
-Datei wird getrennt erstellt und kann nicht hierher kopiert werden.
+
Kind-Thema-Dateien
+
Vorlagen, die vom Eltern-Thema kopiert wurden, sowie alle Formatvorlagen-Sicherungen, sind hier aufgelistet. Vorlagen können mittels des Themen-Editors im Design-Menü bearbeitet werden.
+
Löschen Sie Kind-Thema-Dateien, indem Sie die Kästchen anwählen und auf "Auswahl löschen" klicken.
+
Kind-Thema-Bilder
+
Diese Bilder befinden sich unter dem Images
-Verzeichnis in Ihrem Kind-Thema-Verzeichnis und sind nur für Formatvorlagen vorgesehen. Benutzen Sie die Medienbibliothek für Inhaltsbilder.
+
Sie können neue Bilder mittels des "Bild hochladen"-Formulars hochladen. Löschen Sie Bilder durch die Auswahl der Kästchen und dem Klicken auf "Auswahl löschen".
+
Kind-Thema Screenshot
+
Sie können hier einen speziellen/angepassten Screenshot für das Kind-Thema hochladen.
+
Der Themen-Screenshot sollte ein 4:3-Verhältnis aufweisen (z.Bsp, 880px x 660px) JPG, PNG oder GIF. Es wird in screenshot
umbenannt.
+
Kind-Thema als ZIP-Archiv exportieren
+
Sie können Ihr Kind-Thema für den Gebrauch auf einer anderen Wordpress-Webseite herunterladen, indem Sie auf "Export" klicken.
+
+
+
Vorschau und Aktivierung
+
WICHTIG: Testen Sie Ihr Kind-Thema vor der Aktivierung! Einige Themen (hauptsächlich kommerzielle Themen) laden Eltern-Formatvorlagen nicht korrekt oder laden Kind-Formatvorlagen automatisch oder PHP-Dateien. Im schlimmsten Fall wird bei Aktivierung Ihre Webseite unbrauchbar.
+
+ Navigieren Sie zu Design > Themen im Wordpress-Admin. Sie werden nun die neuen Kind-Themen als eine der installierten Themen sehen.
+ Klicken Sie auf "Live-Vorschau" unterhalb des Kind-Themas, um es in Aktion zu sehen.
+ Wenn Sie das Kind-Thema nun live schalten wollen, klicken Sie auf "Aktivieren."
+
+
MULTISITE NUTZER: Sie müssen Ihr Thema Netzwerk-aktivieren, um es in der Live-Vorschau zu sehen. Gehen Sie zu 'Themen' in der Netzwerk-Administration.
+
+
+
Dateiberechtigungen
+
Wordpress wurde für verschiedene Serverkonfigurationen entwickelt. Child Theme Configurator benutzt die WordPress Filesystem API, um Webseiten das Bearbeiten von Dateien zu ermöglichen, die Nutzerberechtigungen benötigen.
+
Allerdings, weil die meiste Funktionalität mittels AJAX(Hintergrund)-Anfragen passiert, muss die Kind-Formatvorlage auf dem Server beschreibbar sein.
+
Das Plugin erkennt automatisch Ihre Konfiguration und liefert eine Anzahl von Optionen, um diese Anforderung zu lösen. Benutzen Sie die zur Verfügung gestellten Verknüpfungen, um mehr zu erfahren, beispielsweise:
+
+ Die Formatvorlage mithilfe des Plugins vorübergehend schreibbar machen.
+ Hinzufügen von FTP/SSH-Berechtigungen zur Wordpress-Konfigurationsdatei.
+ Auf einem Server die Schreibberechtigung manuell setzen.
+ Ihrem Webserver die Schreibberechtigung in gewissen Situationen erlauben.
+
+
+
+
FAQs
+<
HILFE! Ich habe eine Datei geändert und kann nun über nicht mehr über wp-admin einloggen, um es zu reparieren!
+
Um aus einem defekten Thema herauszukommen, müssen Sie das problematische Themen-Verzeichnis umbenennen (via FTP, SSH oder Ihrem Webhoster-Kontrollpanel bzw. Dateimanager), so dass Wordpress es nicht mehr finden kann. WordPress wird dann einen Fehler generieren und zum Standard-Thema zurückkehren (aktuell Twenty-Fourteen).
+
+
Das Kind-Thema ist normalerweise in Ihrem Themen-Verzeichnis
+
+
[path/to/wordpress]/wp-content/themes/[child-theme]
+
+
Um dies in der Zukunft zu vermeiden, testen Sie Ihr Kind-Thema immer in der Live-Vorschau, bevor Sie es aktivieren.
+
+
Kommentare sind nicht beliebig erlaubt. Eine hohe Flexibilität bei der Vorschau und zum Ändern von Stilen erfordert ein kompliziertes Parsen (Auslesen) und Datenstrukturen. Kommentare zu unterhalten, die an ein bestimmtes Element in der Formatvorlage gebunden sind, ist sehr aufwändig im Vergleich zum Nutzen. Obwohl wir dies in der Zukunft als Funktion bringen wollen, werden zurzeit noch alle Kommentare aus dem Code der Kind-Formatvorlage entfernt.
+...oder...
+...oder...
+
Wieso ändert sich mein angepasster Hintergrund zurück zum Standard, wenn ich das Kind-Thema aktiviere? ...oder...
+
Wieso verschwinden meine Themen-Optionen, wenn ich das Kind-Thema aktiviere?
+
Diese Optionen sind für jedes Thema spezifisch und werden getrennt in der Datenbank gespeichert. Beim Erstellen eines neuen Kind-Themas sind diese Optionen leer.
+
+
Viele dieser Optionen können in das Kind-Thema kopiert werden, indem man das Kästchen "Kopieren Eltern-Theme-Menüs, Widgets und andere Design-Optionen" anklickt, wenn Sie die Kind-Thema-Dateien auf dem Eltern/Kind-Tab erstellen.
+
+
Wenn Sie andere Optionen setzen wollen, können Sie diese nach dem Aktivieren des Kind-Themas aktivieren, oder mittels der Live-Vorschau unter Design > Themen.
+
+ Menüs: Gehen Sie zu Design > Menüs und klicken Sie den "Position"-Tab. Standardmäßig wird das Primärmenü die Verknüpfungen automatisch aus den bestehenden Seiten erstellen. Wählen Sie Ihr angepasstes Menü aus der Auswahlliste und klicken Sie "Neues Menü benutzen". Dies ersetzt das Standardmenü und Sie sehen die korrekten Verknüpfungen.
+
+ Header (Kopf): Gehen Sie zu Design > Header. Einige Themen zeigen standardmäßig den Titel und die Tagline Ihrer "Allgemeinen Einstellungen". Wählen Sie "Bild auswählen" und finden Sie einen "Kopf" aus der Medienbibliothek oder mittels Hochladen. Dies ersetzt den Standard mit dem angepassten Bild.
+
+ Hintergrund: Gehen Sie zu Design > Hintergrund und wählen Sie ein neues Hintergrundbild oder eine Farbe.
+
+ Optionen: Jedes Thema behandelt Optionen speziell/anders. Meistens erstellen Sie einen Satz Optionen und speichern ihn in der Wordpress-Datenbank. Einige Optionen sind spezifisch für das aktive Thema (oder Kind-Thema), und einige nur für das Eltern-Thema bestimmt (d.h. das Kind-Thema kann sie NICHT übersteuern). Sie müssen sich beim Themen-Autor erkundigen, welche auf welche Art funktionieren.
+
+
+
Wie verschiebe ich bereits gemachte Änderungen an meinem Thema in mein Kind-Thema?
+
Folgen Sie diesen Schritten .
+
Wie füge ich Webschriftarten hinzu?
+
Die einfachste Methode ist das Einfügen des @import code, geliefert von Google , Font Squirrel oder jeder anderen Schriftartenseite auf dem Schriftarten-Tab. Die Schriftarten werden dann zum Gebrauch als Wert der font-family Eigenschaft zur Verfügung stehen. Stellen Sie sicher, dass Sie die Lizenz zum Gebrauch der Webschriftarten verstehen.
+
Sie können auch eine sekundäre Formatvorlage erstellen, welche die @font-face Regeln enthält, und diese auf dem Webschriftarten-Tab importieren.
+
Funktionert das mit Plugins?
+
Wir bieten eine Premium-Erweiterung an, die Sie Stile für jedes auf der Webseite installierte Plugin einfach verändern lässt. Der Child Theme Configurator Plugin Extension scannt Ihre Plugins und erlaubt die Erstellung von angepassten Formatvorlagen in Ihrem Kind-Thema. Mehr erfahren
+
Wieso funktioniert das in meinem (Hersteller des Themas hier einfügen) Thema nicht?
+
Einige Themen (hauptsächlich kommerzielle Themen) laden die Eltern-Vorlagen-Dateien nicht korrekt oder laden Kind-Thema-Formatvorlagen oder PHP-Dateien automatisch.
Das ist unglücklich, weil es im besten Fall den Webmaster daran hindert, Anpassungen vorzunehmen (abgesehen von solchen durch die Themen-Optionen), die einen Upgrade überleben. Im schlimmsten Fall jedoch wird Ihre Webseite unbrauchbar, wenn Sie das Kind-Thema aktivieren.
+
Kontaktieren Sie direkt den Hersteller, um diese Kern-Funktionalität zu verlangen. Unserer Meinung nach sollten ALLE Themen (vor allem kommerzielle) die von Wordpress.org beschriebenen Themen-Tests erfüllen.
+
Wieso hat das Eltern-Thema keine Stile, wenn ich auf "Eltern-CSS anzeigen" gehe?
+
Ihr Eltern-Thema benutzt für die Formatvorlagen womöglich einen getrennten Ort. Wählen Sie individuelle Formatvorlagen aus dem "Zusätzliche Formatvorlagen auslesen"-Abschnitt des Eltern/Kind-Tabs und klicken Sie erneut auf "Neuaufbau Kind-Thema-Dateien".
+
+Sobald die Kind-Formatvorlage erstellt ist, fügt CTC im Frontend nur ein wenig Zusatzlast hinzu, da die ganze Funktionalität im Admin enthalten ist.
+
+Das Plugin lädt den Hauptteil des Codes im Admin nur, wenn Sie das Tool benutzen. Die größte Performance-Einbuße geschieht, wenn Sie die Kind-Themen-Dateien auf dem Eltern/Kind-Tab erstellen.
+
Wo sind die Stile? Der Konfigurator zeigt nichts an!
+
Alle Stile werden dynamisch geladen. Sie müssen in den Textfelder etwas eingeben, um die Stile zum Bearbeiten auszuwählen.
+
"Base" ist die Abfragegruppe, die mit keiner bestimmten at-Regel verbunden sind.
+
Beginnen Sie mit einem Klick auf den "Abfage/Selektor"-Tab und der Eingabe von "base" in der ersten Box. In der zweiten Box können Sie dann mit der Eingabe beginnen, um die Stil-Selektoren zum Bearbeiten zu holen.
+
Wieso zeigen die Vorschau-Tab "Formatvorlage kann nicht angezeigt werden"?
+
Sie müssen ein Kind-Thema auf dem Eltern/Kind-Tab für die Ansicht der Vorschau laden. Das kann auch passieren, wenn Ihre WP_CONTENT_URL sich von $bloginfo('site_url') unterscheidet. Ajax kann keine domänenübergreifenden Abfagen machen. Überprüfen Sie, ob der Einstellungen > Allgemein > "WordPress Adresse (URL)"-Wert korrekt ist. (Oft fehlt das "www"" in der Domäne.)
+
Kann ich das Kind-Thema manuell offline bearbeiten (oder mithilfe des Editors), oder muss ich unbedingt den Konfigurator benutzen?
+
Sie können jede gewünschte Änderung an der Formatvorlage vornehmen. Stellen Sie nur sicher, die geänderte Formatvorlage mittels des Eltern/Kind-Panels zu importieren, ansonsten wird der Konfigurator Ihre Änderungen beim nächsten Gebrauch überschreiben. Folgen Sie den üblichen Schritten, aber wählen Sie die Auswahloption "Bestehendes Kind-Thema benutzen" als Kind-Thema-Option. Der Konfigurator wird die internen Daten aus der neuen Formatvorlage automatisch aktualisieren.
+
Wenn das Eltern-Thema geändert wird (z.Bsp. Upgrade), muss ich das Kind-Thema aktualisieren?
+
Nein. Das ist der Zweck von Kind-Themen. Änderungen am Eltern-Thema werden vom Kind-Thema automatisch geerbt.
+
Ein Kind-Thema ist keine Kopie eines Eltern-Themas. Es ist eine besondere Funktion von WordPress, die Sie bestimmte Stile und Funktionen übersteuern lässt, während der Rest intakt bleibt. Das einzige Mal, dass Sie nach einem Upgrade Änderungen machen müssen ist, wenn das Eltern-Thema Stile oder Funktionsnamen ändert oder entfernt. Qualitäts-Themen sollten alle veralteten Funktionen oder Stile in den Upgrade-Hinweisen erwähnen, so dass Nutzer von Kind-Themen die entsprechenden Anpassungen vornehmen können.
+
Wo sind die .PHP-Dateien?
+
Der Konfigurator fügt dem Kind-Themenverzeichnis automatisch eine leere functions.php-Datei hinzu. Sie können Dateien des Eltern-Themas mittels des "Dateien"-Tabs kopieren. Wenn Sie neue Vorlagen und Verzeichnisse erstellen möchten, müssen Sie diese manuell via FTP oder SSH hochladen. Beachten Sie, dass ein Kind-Thema die Eltern-Vorlagen automatisch erbt, es sei denn, sie bestehen bereits im Kind-Thema-Verzeichnis. Kopieren Sie nur Vorlagen, die Sie auch wirklich anpassen möchten.
+
Wie ändere ich eine(n) bestimmte Farbe/Schriftarttyp/Hintergrund?
+
Sie können einen bestimmten Wert global mittels des Eigenschaften/Wert-Tabs übersteuern. Siehe Eigenschaften/Werte, oben.
+
Wie füge ich Stile hinzu, die nicht im Eltern-Thema enthalten sind?
+
Sie können Abfragen und Selektoren mittels des "Rohes CSS"-Textfelds auf dem Abfrage/Selektor-Tab hinzufügen. Siehe Abfrage/Selektor, oben.
+
Wie entferne ich Stile aus dem Eltern-Thema?
+
Sie sollten eigentlich Stile aus dem Eltern-Thema nicht entfernen. Sie können allerdings die Eigenschaft auf "Erben"," "Keine," oder Null setzen (abhängig von der Eigenschaft). Das wird den Eltern-Wert negieren. Ein wenig Probieren wird nötig sein.
+
Wie entferne ich einen Stil aus einem Kind-Thema?
+
Löschen Sie den Wert aus der Eingabe der Eigenschaft, die sie entfernen möchten. Der Child Theme Configurator fügt Übersteuerungen nur für Eigenschaften mit Werten hinzu.
+
Wie setze ich den !important-Schalter?
+
Wir empfehlen immer ein gutes, verschachteltes Design, anstatt auf globale Übersteuerungen zu vertrauen. Dazu haben Sie die Möglichkeit, die Lade-Reihenfolge von Kind-Formatvorlagen zu ändern, indem Sie einen Wert im "Reihenfolge"-Feld eingeben. Sie können Eigenschaften als wichtig setzen, indem Sie das Kästchen mit dem "!" neben jeder Eingabe setzen. Benutzen Sie es massvoll.
+
Wie erstelle ich browser-unabhängige Farbverläufe?
+
Der Child Theme Configurator benutzt eine standarisierte Syntax für Farbverläufe und unterstützt nur zweifarbige Verläufe ohne Zwischenstopps. Die Eingaben bestehen aus dem Startpunkt (z.Bsp. top, left, 135deg, etc.), der Startfarbe und der Endfarbe. Browser-spezifische Syntax wird automatisch erstellt, wenn Sie diese Werte speichern. Siehe Tricks/Fallen, unten, für weitere Informationen.
+
Wie mache ich das Thema responsive?
+
Die kurze Antwort ist, ein responsives Eltern-Thema zu benutzen. Einige übliche Methoden für responsives Design sind:
+
Vermeiden von festen Breiten und Höhen. Der Gebrauch von max- and min-height Werten und Prozenten sind Wege, das Design dem Browser des Benutzers anzupassen.
+Die Kombination von floats und clears mit inline und relative-Positionen erlaubt den Elementen, sich der umgebenden Behälterbreite fließend anzupassen.
+Anzeigen und Verbergen von Inhalt mittels JavaScript.
+
+
+
Glossar
+
+ Eltern-Thema Das Wordpress-Thema, welches Sie bearbeiten möchten. Wordpress lädt zuerst das Kind-Thema, dann das Eltern-Thema. Wenn ein Stil im Kind-Thema enthalten ist, übersteuert es das Eltern-Thema.
+ Kind-Thema Neues Thema, basierend auf einem Eltern-Thema. Sie können eine beliebige Anzahl von Kind-Themen von einem einzigen Eltern-Thema erstellen.
+ Klasse Ein Begriff, der zum Organisieren von Objekten benutzt wird. Zum Beispiel, ein <div> könnte die "blue-text"-Klasse zugewiesen sein. Die Formatvorlage weist dann Mitgliedern der "blue-text"-Klasse den Wert "color: blue;" zu. Somit würde <div> als blauer Text im Browser dargestellt. Klassen-Selektoren beginnen mit einem Punkt.
+ ID Eine einzigartige Zeichenkette, die ein bestimmtes Element bezeichnet. ID-Selektoren beginnen mit einem Hashtag (#).
+ Abfrage @media-Query-Anweisungen (siehe At-Regel unten).
+ Selektor Kombination eines oder mehrere Elemente, Klassen, IDs oder andere Begriffe zum Identifizieren von Objektgruppen.
+ Eigenschaft Einer von vielen standardisierten Begriffen, die dem Browser mitteilen, wie Objekte mit einem bestimmten Selektor anzuzeigen sind. Beispiele sind color , background-image und font-size .
+ Wert Daten, die mit einer Eigenschaft korrespondieren.
+ At-Regel Ein CSS-Browser-Befehl, um die Standard-Funktionalität zu erweitern. Der Child Theme Configurator unterstützt zwei At-Regeln:
+
+ @import Weist den Browser an, zusätzliche CSS-Informationen aus einer externen Quelle zu laden.
+ @media (Media Query) Identifiziert Stilblöcke, die nur benutzt werden, wenn gewisse Browser-Eigenschaften zutreffen. Beispiele sind max-width, screen und print.
+
+
+ Basis-Stil Ein Stil einer beliebigen Kind- oder Eltern-Vorlage, der durch die Formatvorlage des Kind-Themas übersteuert werden kann. Meistens stammen diese aus der Formatvorlage des Eltern-Themas.
+ Übersteuerung Wenn ein Selektor in Kind- und Eltern-Thema besteht, bekommt derjenige aus dem Kind-Thema Priorität. Das ist eines der besonderen Merkmale des Kind-Thema-Konfigurators: es hilft dabei, exakte Übersteuerungen von Selektoren des Eltern-Themas zu erstellen, und eliminiert viele Stunden des mühsamen Versuchens.
+ Themenvorlage Eine PHP-Datei eines Themas ohne Funktionen und Klassen. Andere PHP-Dateien können nicht ohne Weiteres sicher überschrieben werden.
+
+
+
+
Unsere Plugins werden Sie nicht mit Spendeneinblendungen nerven...
+
...aber wir LIEBEN Empfehlungen. Geben Sie uns 5 Sterne
+
Wir stellen CTC Pro vor
+
+
Von Wordpress-Entwicklern entworfen, die es jeden Tag benutzen. CTC Pro stellt Plugin-Formatvorlagen und andere Funktionen zur Verfügung, die Ihre Arbeit schneller und einfacher machen. Das ist ein kostenloses Upgrade für Nutzer, die die Plugin-Erweiterung erworben haben. Mehr erfahren
+
+
+
\ No newline at end of file
diff --git a/wp-content/plugins/child-theme-configurator/includes/help/en_US.php b/wp-content/plugins/child-theme-configurator/includes/help/en_US.php
new file mode 100644
index 0000000..d2a06d1
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/includes/help/en_US.php
@@ -0,0 +1,230 @@
+
+
+
Start Here: Tutorial Videos
+
+
+
+
+
Now with time and memory benchmarks!', 'child-theme-configurator' ); ?>
+
+
+
+
+
+
+
Parent/Child Tab
+
Select an action:
+ CREATE a new Child Theme - Install a new customizable child theme using an installed theme as a parent.
+ CONFIGURE an existing Child Theme - Set up a previously installed child theme for use with the Configurator or to modify current settings.
+ DUPLICATE an existing Child Theme - Make a complete copy of an existing Child Theme in a new directory, including any menus, widgets and other Customizer settings. The option to copy the Parent Theme settings (step 8, below) is disabled with this action.
+ RESET an existing Child Theme (this will destroy any work you have done in the Configurator) - Revert the Child theme stylesheet and functions files to their state before the initial configuration or last reset.
+Select a Parent Theme if creating a new Child Theme; select a Child Theme if configuring, duplicating or resetting.
+Analyze Child Theme - Click "Analyze" to determine stylesheet dependencies and other potential issues.
+Name the new theme directory if creating a new Child Theme; otherwise verify it the directory is correct. - This is NOT the name of the Child Theme. You can customize the name, description, etc. in step 7, below.
+Select where to save new styles:
+ Primary Stylesheet (style.css) - Save new custom styles directly to the Child Theme primary stylesheet, replacing the existing values. The primary stylesheet will load in the order set by the theme.
+ Separate Stylesheet - Save new custom styles to a separate stylesheet and use any existing child theme styles as a baseline. Select this option if you want to preserve the original child theme styles instead of overwriting them. This option also allows you to customize stylesheets that load after the primary stylesheet.
+Select Parent Theme stylesheet handling:
+ Use the WordPress style queue. - Let the Configurator determine the appropriate actions and dependencies and update the functions file automatically.
+ Use @import in the child theme stylesheet. - Only use this option if the parent stylesheet cannot be loaded using the WordPress style queue. Using @import is not recommended.
+ Do not add any parent stylesheet handling. - Select this option if this theme already handles the parent theme stylesheet or if the parent theme's style.css file is not used for its appearance.
+Customize the Child Theme Name, Description, Author, Version, etc.
+Copy Parent Theme Menus, Widgets and other Customizer Settings to Child Theme. - NOTE: This will overwrite any child theme options you may have already set.
+Click the button to run the Configurator.
+IMPORTANT: Always test your child theme with Live Preview (theme customizer) before activating!
+
+
+
+
Query/Selector Tab
+
There are two ways to identify and override baseline (parent) styles. The Child Theme Configurator lets you search styles by selector and by property . If you wish to change a specific selector (e.g., h1), use the "Query/Selector" tab. If you have a specific value you wish to change site-wide (e.g., the color of the type), use the "Property/Value" tab.
+
The Query/Selector tab lets you find specific selectors and edit them. First, find the query that contains the selector you wish to edit by typing in the Query autoselect box. Select by clicking with the mouse or by pressing the "Enter" or "Tab" keys. Selectors are in the base query by default.
+
Next, find the selector by typing in the Selector autoselect box. Select by clicking with the mouse or by pressing the "Enter" or "Tab" keys.
+
This will load all of the properties for that selector with the Original values on the left and the New values inputs on the right. Any existing new values will be automatically populated. There is also a Sample preview that displays the combination of Parent and Child overrides. Note that the border and background-image get special treatment.
+
If you wish to add additional properties to an existing selector, first load the selector using the Query/Selector tab. Then find the property you wish to override by typing in the New Property autoselect box. Select by clicking with the mouse or by pressing the "Enter" or "Tab" keys. This will add a new input row to the selector inputs.
+
The "Order" field contains the original sequence of the selector in the parent theme stylesheet. You can change the selector order sequence by entering a lower or higher number in the "Order" field. You can also force style overrides (so called "!important" flag) by checking the "!" box next to each input. Please use judiciously.
+
Click "Save" to update the child stylesheet and save your changes to the WordPress admin.
+
+
+
Adding Raw CSS
+
If you wish to add completely new selectors, or even new @media queries, you can enter free-form CSS in the "Raw CSS" textarea. Be aware that your syntax must be correct (i.e., balanced curly braces, etc.) for the parser to load the new styles. You will know it is invalid because a red "X" will appear next to the save button.
+
If you prefer to use shorthand syntax for properties and values instead of the inputs provided by the Child Theme Configurator, you can enter them here as well. The parser will convert your input into normalized CSS code automatically.
+
If you wish to add additional properties to an existing selector, first load the selector using the Query/Selector tab. Then find the property you wish to override by typing in the New Property autoselect box. Select by clicking with the mouse or by pressing the "Enter" or "Tab" keys. This will add a new input row to the selector inputs.
+
+
+
Property/Value Tab
+
There are two ways to identify and override baseline (parent) styles. The Child Theme Configurator lets you search styles by selector and by property . If you wish to change a specific selector (e.g., h1), use the "Query/Selector" tab. If you have a specific value you wish to change site-wide (e.g., the color of the type), use the "Property/Value" tab.
+
The Property/Value tab lets you find specific values for a given property and then edit that value for individual selectors that use that property/value combination. First, find the property you wish to override by typing in the Property autoselect box. Select by clicking with the mouse or by pressing the "Enter" or "Tab" keys.
+
This will load all of the unique values that exist for that property in the parent stylesheet with a Sample preview for that value. If there are values that exist in the child stylesheet that do not exist in the parent stylesheet, they will be displayed as well.
+
For each unique value, click the "Selectors" link to view a list of selectors that use that property/value combination, grouped by query with a Sample preview of the value and inputs for the new value. Any existing new values will be automatically populated.
+
Click "Save" to update the child stylesheet and save your changes to the WordPress admin.
+
+
+
Web Fonts Tab
+
You can link additional stylesheets and web fonts by typing @import rules into the textarea on the Web Fonts tab.
+
Note: Child Theme Configurator no longer writes @import rules to the stylesheet. Instead, it uses the @import keyword to identify and enqueue them in the script queue. WordPress then converts them to <link> tags in the rendered HTML.
+
Important: do not import the parent theme stylesheet here. Use the "Parent stylesheet handling" option from the Parent/Child tab.
+
If you selected any stylesheets under “Parse additional stylesheets” when you created your child theme, those styles will be available to create overrides in the Child Theme stylesheet.
+
WordPress will automatically load the additional stylesheets when it loads the parent theme, so you do not need to add @import rules for them here.
+
Below is an example that loads a local custom stylesheet (you would have to add the "fonts" directory and stylesheet) as well as the web font "Open Sans" from Google Web Fonts:
+
@import url(fonts/stylesheet.css);
+@import url(http://fonts.googleapis.com/css?family=Open+Sans:400,400italic,700,700italic);
+
+
+
Files Tab
+
Parent Templates
+
Copy PHP template files from the parent theme by checking the boxes and clicking "Copy Selected to Child Theme" and the templates will be added to the child theme directory.
+
CAUTION: If your child theme is active, the child theme version of the file will be used instead of the parent immediately after it is copied.
+
The functions.php
file is generated separately and cannot be copied here.
+
Child Theme Files
+
Templates copied from the parent and any stylesheet backups are listed here. Templates can be edited using the Theme Editor in the Appearance Menu.
+
Remove child theme files by checking the boxes and clicking "Delete Selected".
+
Child Theme Images
+
Theme images reside under the images
directory in your child theme and are meant for stylesheet use only. Use the media gallery for content images.
+
You can upload new images using the image upload form. Remove child theme images by checking the boxes and clicking "Delete Selected".
+
Child Theme Screenshot
+
You can upload a custom screenshot for the child theme here.
+
The theme screenshot should be a 4:3 ratio (eg., 880px x 660px) JPG, PNG or GIF. It will be renamed screenshot
.
+
Export Child Theme as Zip Archive
+
You can download your child theme for use on another WordPress site by clicking "Export".
+
+
+
Preview and Activate
+
IMPORTANT: Preview your child theme before activating! Some themes (particularly commercial themes) do not correctly load parent template files or automatically load child theme stylesheets or php files. In the worst cases they will break your website when you activate the child theme.
+
+ Navigate to Appearance > Themes in the WordPress Admin. You will now see the new Child Theme as one of the installed Themes.
+ Click "Live Preview" below the new Child Theme to see it in action.
+ When you are ready to take the Child Theme live, click "Activate."
+
+
MULTISITE USERS: You must Network Enable your child theme before you can use Live Preview. Go to 'Themes' in the Network Admin.
+
+
+
File Permissions
+
WordPress was designed to work on a number of server configurations. Child Theme Configurator uses the WordPress Filesystem API to allow changes to sites that require user permission to edit files.
+
However, because most of the functionality occurs via AJAX (background) requests, the child theme stylesheet must be writable by the web server.
+
The plugin will automatically detect your configuration and provide a number of options to resolve this requirement. Use the links provided to find out more about the options available, including:
+
+ Temporarily making the stylesheet writable through the plugin.
+ Adding your FTP/SSH credentials to the WordPress config file.
+ Setting the stylesheet write permissions on the server manually
+ Configuring your web server to allow write access in certain situations.
+
+
+
+
FAQs
+
How do I move changes I have already made to my theme into a Child Theme?
+
Follow these steps .
+
When I run the analyzer I get "Constants Already Defined" notice in PHP Debug Output
+
This is a misconfiguration created by the Bluehost auto-installer. How to fix.
+
HELP! I changed a file and now I am unable to access my website or login to wp-admin to fix it!
+
To back out of a broken theme you have to manually rename the offending theme directory name (via FTP, SSH or your web host control panel file manager) so that WordPress can't find it. WordPress will then throw an error and revert back to the default theme (currently twenty-fourteen).
+
+
The child theme is in your themes folder, usually
+
+
[path/to/wordpress]/wp-content/themes/[child-theme]
+
+
To prevent this in the future, always test your child themes with Live Preview before activating them.
+
+
Arbitrary comments are not supported. Providing a high level of flexibility for previewing and modifying styles requires sophisticated parsing and data structures. Maintaining comments that bound to any particular element in the stylesheet is prohibitively expensive compared to the value it would add. Although we are working to include this as an option in the future, currently all comments are stripped from the child theme stylesheet code.
+...or...
+...or...
+
Why does my custom background go back to the default when I activate the new child theme? ...or...
+
Why do my theme options disappear when I activate the new child theme?
+
These options are specific to each theme and are saved separately in the database. When you create a new child theme, its options are blank.
+
+
Many of these options can be copied over to the child theme by checking "Copy Parent Theme Menus, Widgets and other Options" when you generate the child theme files on the Parent/Child tab.
+
+
If you want to set different options you can either apply them after you activate the child theme, or by using the "Live Preview" under Appearance > Themes.
+
+ Menus: Go to Appearance > Menus and click the "Locations" tab. By default, the primary menu will generate the links automatically from the existing pages. Select your customized Menu from the dropdown and click "Use New Menu." This will replace the default menu and you will see the correct links.
+
+ Header: Go to Appearance > Header. Some themes will show the "Title" and "Tagline" from your "General Settings" by default. Click "Choose Image" and find the header from the Media Library or upload a new image. This will replace default with your custom image.
+
+ Background: Go to Appearance > Background and choose a new background color or image.
+
+ Options: Every theme handles options in its own way. Most often, they will create a set of options and store them in the WordPress database. Some options are specific to the active theme (or child theme), and some are specific to the parent theme only (meaning the child theme CANNOT override them). You will have to find out from the theme author which are which.
+
+
+
How do I add Web Fonts?
+
The easiest method is to paste the @import code provided by Google , Font Squirrel or any other Web Font site into the Web Fonts tab. The fonts will then be available to use as a value of the font-family property. Be sure you understand the license for any embedded fonts.
+
You can also create a secondary stylesheet that contains @font-face rules and import it using the Web Fonts tab.
+
Does it work with plugins?
+
We offer a premium extension to let you easily modify styles for any WordPress Plugin installed on your website. The Child Theme Configurator Plugin Extension scans your plugins and allows you to create custom stylesheets in your Child Theme. Learn more
+
Why doesn't this work with my (insert theme vendor here) theme?
+
Some themes (particularly commercial themes) do not correctly load parent template files or automatically load child theme stylesheets or php files.
This is unfortunate, because in the best case they effectively prohibit the webmaster from adding any customizations (other than those made through the admin theme options) that will survive past an upgrade. In the worst case they will break your website when you activate the child theme.
+
Contact the vendor directly to ask for this core functionality. It is our opinion that ALL themes (especially commercial ones) must pass the Theme Unit Tests outlined by WordPress.org.
+
Why doesn't the Parent Theme have any styles when I "View Parent CSS"?
+
Your Parent theme is probably using a separate location for the stylesheets. Select individual stylesheets from the "Parse Additional Stylesheets" section of the Parent/Child tab and click "Generate Child Theme Files" again.
+
+Once the child theme stylesheet is created, CTC adds very little overhead to the front-end since all of the functionality is in the admin.
+
+The plugin only loads the bulk of the code in the admin when you are using the tool. The biggest performance hit occurs when you generate the Child Theme files from the Parent/Child tab.
+
Where are the styles? The configurator doesn't show anything!
+
All of the styles are loaded dynamically. You must start typing in the text boxes to select styles to edit.
+
"Base" is the query group that contains styles that are not associated with any particular "At-rule."
+
Start by clicking the "Query/Selector" tab and typing "base" in the first box. You can then start typing in the second box to retrieve the style selectors to edit.
+
Why do the preview tabs return "Stylesheet could not be displayed"?
+
You have to load a child theme from the Parent/Child tab for the preview to display. This can also happen when your WP_CONTENT_URL is different than $bloginfo('site_url'). Ajax cannot make cross-domain requests by default. Check that your Settings > General > "WordPress Address (URL)" value is correct. (Often caused by missing "www" in the domain.)
+
Can I edit the Child Theme stylesheet manually offline or by using the Editor or do I have to use the Configurator?
+
You can make any manual changes you wish to the stylesheet. Just make sure you import the revised stylesheet using the Parent/Child panel or the Configurator will overwrite your changes the next time you use it. Just follow the steps as usual but select the "Use Existing Child Theme" radio button as the "Child Theme" option. The Configurator will automatically update its internal data from the new stylesheet.
+
If the parent theme changes (e.g., upgrade), do I have to update the child theme?
+
No. This is the point of using child themes. Changes to the parent theme are automatically inherited by the child theme.
+
A child theme is not a "copy" of the parent theme. It is a special feature of WordPress that let's you override specific styles and functions leaving the rest of the theme intact. The only time you need to make changes after an upgrade is if the parent removes or changes style or function names. Quality themes should identify any deprecated functions or styles in the upgrade notes so that child theme users can make adjustments accordingly.
+
Where are the .php files?
+
The configurator automatically adds a blank functions.php file to the child theme directory. You can copy parent theme template files using the Files tab. If you want to create new templates and directories you will have to create/upload them manually via FTP or SSH. Remember that a child theme will automatically inherit the parent theme's templates unless they also exist in the child theme directory. Only copy templates that you intend to customize.
+
How do I change a specific color/font style/background?
+
You can override a specific value globally using the Property/Value tab. See Property/Value, above.
+
How do I add styles that aren't in the Parent Theme?
+
You can add queries and selectors using the "Raw CSS" textarea on the Query/Selector tab. See Query/Selector, above.
+
How do I remove a style from the Parent Theme?
+
You shouldn't really "remove" a style from the Parent. You can, however, set the property to "inherit," "none," or zero (depending on the property). This will negate the Original value. Some experimentation may be necessary.
+
How do I remove a style from the Child Theme?
+
Delete the value from the input for the property you wish to remove. The Child Theme Configurator only adds overrides for properties that contain values.
+
How do I set the !important flag?
+
We always recommend relying on good cascading design over global overrides. To that end, you have ability to change the load order of child theme styles by entering a value in the "Order" field. You can set properties as important by checking the "!" box next to each input. Please use judiciously.
+
How do I create cross-browser gradients?
+
The Child Theme Configurator uses a standardized syntax for gradients and only supports two-color gradients without intermediate stops. The inputs consist of origin (e.g., top, left, 135deg, etc.), start color and end color. The browser-specific syntax is generated automatically when you save these values. See Caveats, below, for more information.
+
How do I make my Theme responsive?
+
The short answer is to use a responsive Parent Theme. Some common methods for responsive design are:
+
Avoiding fixed width and height values. Using max- and min-height values and percentages are ways to make your designs respond to the viewer's browser size.
+Combining floats and clears with inline and relative positions allow the elements to adjust gracefully to their container's width.
+Showing and hiding content with Javascript.
+
+
+
Glossary
+
+ Parent Theme The WordPress Theme you wish to edit. WordPress first loads the Child Theme, then loads the Parent Theme. If a style exists in the Child Theme, it overrides the Parent Theme.
+ Child Theme New Theme based on Parent Theme. You can create any number of Child Themes from a single Parent Theme.
+ Class A term used to organize objects. For example, a <div> might be assigned the "blue-text" class. The stylesheet might then assign "color: blue;" to members of the "blue-text" class. Thus, the <div> would display text as blue in the browser. Class selectors begin with a period (.).
+ ID A unique string used to identify a specific element. ID selectors begin with a hash (#).
+ Query @media query instruction (see At-rule, below).
+ Selector Combination of html tag names, ids and classes used to identify objects or groups of objects.
+ Property One of many standardized terms used to tell the browser how to display objects matching a given selector. Examples are color , background-image and font-size .
+ Value Data corresponding to a Property.
+ At-rule CSS browser instruction to extend default functionality. The Child Theme Configurator supports two At-rules:
+
+ @import Instructs the browser to load additional CSS information from an external source.
+ @media (Media Query) Identifies blocks of styles that are used only when certain browser characteristics are true. Examples are max-width, screen and print.
+
+
+ Baseline Style A style from any existing Parent Theme or Child Theme stylesheet that can be overridden by the Child Theme custom stylesheet. Most of the time these will come from the Parent Theme's stylesheets.
+ Override When a selector exists in both the Child Theme and the Parent Theme, the Child Theme takes priority over the Parent theme. This is where the Child Theme Configurator stands out: it helps you create exact overrides of selectors from the Parent Theme, eliminating hours of trial and error.
+ Theme Template A Theme PHP file having no PHP functions or classes. Other PHP files cannot be safely overridden by a child theme.
+
+
+
+
We LOVE referrals! Give Us 5 Stars
+
If you would like to support the production of useful tutorials and continued improvement of our software, please consider making a donation .
+
Upgrade to CTC Pro
+
+
Designed by WordPress developers who use it every day, CTC Pro adds plugin stylesheets and other features to make design work quicker and easier. This is a free upgrade for users that purchased the Plugins Extension. Learn more
+
+
+
\ No newline at end of file
diff --git a/wp-content/plugins/child-theme-configurator/js/chldthmcfg.js b/wp-content/plugins/child-theme-configurator/js/chldthmcfg.js
new file mode 100644
index 0000000..97f99e4
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/js/chldthmcfg.js
@@ -0,0 +1,2538 @@
+/*!
+ * Script: chldthmcfg.js
+ * Plugin URI: http://www.childthemeconfigurator.com/
+ * Description: Handles jQuery, AJAX and other UI
+ * Version: 2.3.4
+ * Author: Lilaea Media
+ * Author URI: http://www.lilaeamedia.com/
+ * License: GPLv2
+ * Copyright (C) 2014-2018 Lilaea Media
+ */
+
+// ** for multiple property values: **
+// make sure sequence is passed with rule/val updates
+// determine sequence based on sequence of value array
+// add sequence to input name
+
+( function( $ ) {
+ 'use strict';
+ $.chldthmcfg = {
+ escquo: function( str ) {
+ var self = this;
+ return self.is_empty( str ) ? str : str.toString().replace( /"/g, '"' );
+ },
+
+ getxt: function( key, merge ){
+ var text = window.ctcAjax[ key + '_txt' ];
+ if ( text ) {
+ if ( merge ) {
+ text = text.replace( /%s/, merge );
+ }
+ return text;
+ }
+ return '';
+ },
+
+ getname: function( themetype ){
+ var self = this,
+ stylesheet = ( 'child' === themetype ? $.chldthmcfg.currchild : $.chldthmcfg.currparnt );
+ // console.log( 'getname: ' + stylesheet );
+ // console.log( window.ctcAjax.themes );
+ if ( self.is_empty( window.ctcAjax.themes[ themetype ][ stylesheet ] ) ){
+ return '';
+ } else {
+ return window.ctcAjax.themes[ themetype ][ stylesheet ].Name;
+ }
+ },
+
+ frascii: function( str ) {
+ var ascii = parseInt( str ),
+ chr = String.fromCharCode( ascii );
+ return chr;
+ },
+
+ toascii: function( str ) {
+ var ascii = str.charCodeAt( 0 );
+ return ascii;
+ },
+
+ /**
+ * is_empty
+ * return true if value evaluates to false, null, null string,
+ * empty array, empty object or undefined
+ * but NOT 0 ( zero returns false ) unless zero flag is passed
+ */
+ is_empty: function( obj, zeros ) {
+ // first bail when definitely empty or undefined ( true ) NOTE: numeric zero returns false !
+ if ( 'undefined' === typeof obj || false === obj || null === obj || '' === obj ) {
+ // console.log( 'matched empty' );
+ return true;
+ }
+ // if zeros flag is set, return true for 0 or '0'
+ if ( 'undefined' !== typeof zeros && '0' === obj || 0 === obj ) {
+ // console.log( 'matched zero literal:' + obj );
+ return true;
+ }
+ // then, if this is bool, string or number it must not be empty ( false )
+ if ( true === obj || "string" === typeof obj || "number" === typeof obj ) {
+ return false;
+ }
+ // check for object type to be safe
+ if ( "object" === typeof obj ) {
+ // Use a standard for in loop
+ for ( var x in obj ) {
+ // for in will iterate over members on the prototype
+ // chain as well, but Object.getOwnPropertyNames returns
+ // only those directly on the object, so use hasOwnProperty.
+ if ( obj.hasOwnProperty( x ) ) {
+ // any value means not empty ( false )
+ return false;
+ }
+ }
+ // no properties, so return empty ( true )
+ return true;
+ }
+ // this must be an unsupported datatype, so return not empty
+ return false;
+ },
+
+ /**
+ * theme_exists
+ * returns true if theme is already present for type
+ */
+ theme_exists: function( testslug, testtype ) {
+ var exists = false;
+ $.each( window.ctcAjax.themes, function( type, theme ) {
+ $.each( theme, function( slug, data ) {
+ data = null;
+ if ( slug.toLowerCase() === testslug.toLowerCase() && ( 'parnt' === type || 'new' === testtype ) ) {
+ exists = true; // no need to continue testing
+ return false; // in this context "return false" means "break"
+ }
+ } );
+ if ( exists ) { // no need to continue testing
+ return false; // in this context "return false" means "break"
+ }
+ } );
+ return exists;
+ },
+
+ validate: function() {
+ var self = this,
+ regex = /[^\w\-]/g,
+ newslug = $( '#ctc_child_template' ).length ? $( '#ctc_child_template' )
+ .val().toString().replace( regex ) : '',
+ slug = $( '#ctc_theme_child' ).length && !self.is_empty( $( '#ctc_theme_child' ).val() ) ? $( '#ctc_theme_child' )
+ .val().toString().replace( regex ) : newslug,
+ type = $( 'input[name=ctc_child_type]:checked' ).val(),
+ errors = [];
+ if ( 'new' === type ) {
+ slug = newslug;
+ }
+ if ( self.theme_exists( slug, type ) ) {
+ errors.push( self.getxt( 'theme_exists' ).toString().replace( /%s/, slug ) );
+ }
+ if ( self.is_empty( slug ) ) {
+ errors.push( self.getxt( 'inval_theme' ) );
+ }
+ //if ( self.is_empty( $( '#ctc_child_name' ).val() ) ) {
+ // errors.push( self.getxt( 'inval_name' ) );
+ //}
+ if ( errors.length ) {
+ self.set_notice( { 'error': errors } );
+ return false;
+ }
+ if ( 'reset' === type ) {
+ if ( confirm( self.getxt( 'load' ) ) ) {
+ return true;
+ }
+ return false;
+ }
+ return true;
+ },
+
+ autogen_slugs: function() {
+ if ( $( '#ctc_theme_parnt' ).length ) {
+ var self = this,
+ parent = $( '#ctc_theme_parnt' ).val(),
+ child = $( '#ctc_theme_child' ).length ? $( '#ctc_theme_child' ).val() : '',
+ slugbase= ( '' !== child && $( '#ctc_child_type_duplicate' ).is( ':checked' ) ) ? child : parent + '-child',
+ slug = slugbase,
+ name = ( '' !== child && $( '#ctc_child_type_duplicate' ).is( ':checked' ) ) ? $.chldthmcfg.getname( 'child' ) : $.chldthmcfg.getname( 'parnt' ) + ' Child',
+ suffix = '',
+ padded = '',
+ pad = '00';
+ while ( self.theme_exists( slug, 'new' ) ) {
+ suffix = ( self.is_empty( suffix ) ? 2 : suffix + 1 );
+ padded = pad.substring( 0, pad.length - suffix.toString().length ) + suffix.toString();
+ slug = slugbase + padded;
+ }
+ self.testslug = slug;
+ self.testname = name + ( padded.length ? ' ' + padded : '' );
+ // console.log( 'autogen_slugs: parent: ' + parent + ' slug: ' + slug );
+ }
+ },
+
+ focus_panel: function( id ) {
+ var panelid = id + '_panel';
+ $( '.nav-tab' ).removeClass( 'nav-tab-active' );
+ $( '.ctc-option-panel' ).removeClass( 'ctc-option-panel-active' );
+ //$( '.ctc-selector-container' ).hide();
+ $( id ).addClass( 'nav-tab-active' );
+ $( '.ctc-option-panel-container' ).scrollTop( 0 );
+ $( panelid ).addClass( 'ctc-option-panel-active' );
+ },
+
+ /**
+ * show or hide rewrite toggle on certain conditions
+ * added v2.3.0
+ */
+ maybe_show_rewrite: function(){
+ var self = this,
+ inputtype,
+ value;
+ $( '.ctc-rewrite-toggle' ).each( function( ndx, el ){
+ inputtype = $( el ).hasClass( 'rewrite-query' ) ? 'query' : 'selector';
+ value = $( '#ctc_sel_ovrd_' + inputtype + '_selected' ).text();
+ // console.log( 'maybe_show_rewrite inputtype: ' + inputtype + ' value: ' + value );
+ if ( value.match( /^[\s\u00A0]*$/ ) ){
+ $( el ).hide();
+ } else {
+ $( el ).text( self.getxt( 'rename' ) );
+ $( el ).show();
+ }
+ } );
+ },
+
+ /**
+ * toggle query/selector rename input
+ * modified v2.3.0
+ */
+ selector_input_toggle: function( obj ) {
+ // console.log( 'selector_input_toggle: ' + $( obj ).attr( 'id' ) );
+ var self = this,
+ origval,
+ inputtype = $( obj ).hasClass( 'rewrite-query' ) ? 'query' : 'selector',
+ input = 'ctc_rewrite_' + inputtype,
+ orig = 'ctc_sel_ovrd_' + inputtype + '_selected';
+ if ( $( '#' + input ).length ) {
+ origval = $( '#' + input + '_orig' ).val();
+ $( '#' + orig ).empty().text( origval );
+ $( obj ).text( self.getxt( 'rename' ) );
+ } else {
+ origval = $( '#' + orig ).text();
+ $( '#' + orig ).html(
+ '
' +
+ '
' );
+ $( '#' + input ).val( origval );
+ $( obj ).text( self.getxt( 'cancel' ) );
+ }
+ },
+
+ coalesce_inputs: function( obj ) {
+ //**// console.log( 'coalesce_inputs ' + $( obj ).attr( 'id' ) );
+ var self = this,
+ id = $( obj ).attr( 'id' ),
+ regex = /^(ctc_(ovrd|\d+)_(parent|child)_([0-9a-z\-]+)_(\d+?)(_(\d+))?)(_\w+)?$/,
+ container = $( obj ).parents( '.ctc-selector-row, .ctc-parent-row' ).first(),
+ swatch = container.find( '.ctc-swatch' ).first(),
+ cssrules = { 'parent': {}, 'child': {} },
+ gradient = {
+ 'parent': {
+ 'origin': '',
+ 'start': '',
+ 'end': ''
+ },
+ 'child': {
+ 'origin': '',
+ 'start': '',
+ 'end': ''
+ }
+ },
+ has_gradient = { 'child': false, 'parent': false },
+ postdata = {};
+ // set up objects for all neighboring inputs
+ container.find( '.ctc-parent-value, .ctc-child-value' ).each( function() {
+ var inputid = $( this ).attr( 'id' ),
+ inputparts = inputid.toString().match( regex ),
+ inputseq = inputparts[ 2 ],
+ inputtheme = inputparts[ 3 ],
+ inputrule = ( 'undefined' === typeof inputparts[ 4 ] ? '' : inputparts[ 4 ] ),
+ rulevalid = inputparts[ 7 ],
+ qsid = inputparts[ 5 ],
+ rulepart = ( 'undefined' === typeof inputparts[ 7 ] ? '' : inputparts[ 8 ] ),
+ value = ( 'parent' === inputtheme ? $( this ).text().replace( /!$/, '' ) :
+ ( 'seq' !== inputrule && 'ctc_delete_query_selector' === id ? '' :
+ $( this ).val() ) ), // clear values if delete was clicked
+ important = ( 'seq' === inputrule ? false : 'ctc_' + inputseq + '_child_' + inputrule + '_i_' + qsid + '_' + rulevalid ),
+ parts, subparts;
+ //**// console.log( inputparts );
+ //**// console.log( 'value: ' + value );
+ if ( 'child' === inputtheme ) {
+ if ( !self.is_empty( $( this ).data( 'color' ) ) ) {
+ value = self.color_text( $( this ).data( 'color' ) );
+ $( this ).data( 'color', null );
+ }
+ postdata[ inputid ] = value;
+ if ( important ) {
+ postdata[ important ] = ( $( '#' + important ).is( ':checked' ) ) ? 1 : 0;
+ }
+ }
+ if ( '' !== value ) {
+ // handle specific inputs
+ if ( !self.is_empty( rulepart ) ) {
+ switch( rulepart ) {
+ case '_border_width':
+ cssrules[ inputtheme ][ inputrule + '-width' ] = ( 'none' === value ? 0 : value );
+ break;
+ case '_border_style':
+ cssrules[ inputtheme ][ inputrule + '-style' ] = value;
+ break;
+ case '_border_color':
+ cssrules[ inputtheme ][ inputrule + '-color' ] = value;
+ break;
+ case '_background_url':
+ cssrules[ inputtheme ][ 'background-image' ] = self.image_url( inputtheme, value );
+ break;
+ case '_background_color':
+ cssrules[ inputtheme ][ 'background-color' ] = value; // was obj.value ???
+ break;
+ case '_background_color1':
+ gradient[ inputtheme ].start = value;
+ has_gradient[ inputtheme ] = true;
+ break;
+ case '_background_color2':
+ gradient[ inputtheme ].end = value;
+ has_gradient[ inputtheme ] = true;
+ break;
+ case '_background_origin':
+ gradient[ inputtheme ].origin = value;
+ has_gradient[ inputtheme ] = true;
+ break;
+ }
+ } else {
+ // handle borders
+ if ( ( parts = inputrule.toString().match( /^border(\-(top|right|bottom|left))?$/ ) && !value.match( /none/ ) ) ) {
+ var borderregx = new RegExp( self.border_regx + self.color_regx, 'i' );
+ subparts = value.toString().match( borderregx );
+ //**// console.log( 'border after regex: ');
+ //**// console.log( value );
+ //**// console.log( borderregx );
+ //**// console.log( subparts );
+ if ( !self.is_empty( subparts ) ) {
+ subparts.shift();
+ cssrules[ inputtheme ][ inputrule + '-width' ] = subparts.shift() || '';
+ subparts.shift();
+ cssrules[ inputtheme ][ inputrule + '-style' ] = subparts.shift() || '';
+ cssrules[ inputtheme ][ inputrule + '-color' ] = subparts.shift() || '';
+ }
+ // handle background images
+ } else if ( 'background-image' === inputrule && !value.match( /none/ ) ) {
+ if ( value.toString().match( /url\(/ ) ) {
+ cssrules[ inputtheme ][ 'background-image' ] = self.image_url( inputtheme, value );
+ } else {
+ var gradregex = new RegExp( self.grad_regx + self.color_regx + self.color_regx, 'i' );
+ subparts = value.toString().match( gradregex );
+ //**// console.log( 'background-image after regex: ');
+ //**// console.log( value );
+ //**// console.log( gradregex );
+ //**// console.log( subparts );
+ if ( !self.is_empty( subparts ) && subparts.length > 2 ) {
+ subparts.shift();
+ gradient[ inputtheme ].origin = subparts.shift() || 'top';
+ gradient[ inputtheme ].start = subparts.shift() || 'transparent';
+ gradient[ inputtheme ].end = subparts.shift() || 'transparent';
+ has_gradient[ inputtheme ] = true;
+ } else {
+ cssrules[ inputtheme ][ 'background-image' ] = value;
+ }
+ }
+ } else if ( 'seq' !== inputrule ) {
+ cssrules[ inputtheme ][ inputrule ] = value;
+ }
+ }
+ }
+ } );
+ // update swatch
+ if ( 'undefined' !== typeof swatch && !self.is_empty( swatch.attr( 'id' ) ) ) {
+ swatch.removeAttr( 'style' );
+ if ( has_gradient.parent ) {
+ swatch.ctcgrad( gradient.parent.origin, [ gradient.parent.start, gradient.parent.end ] );
+ }
+ //**// console.log( 'combined css rules' );
+ //**// console.log( cssrules );
+ swatch.css( cssrules.parent );
+ if ( !( swatch.attr( 'id' ).toString().match( /parent/ ) ) ) {
+ if ( has_gradient.child ) {
+ swatch.ctcgrad( gradient.child.origin, [ gradient.child.start, gradient.child.end ] );
+ }
+ // console.log( cssrules.child );
+ swatch.css( cssrules.child );
+ }
+ swatch.css( {'z-index':-1} );
+ }
+ return postdata;
+ },
+
+ decode_value: function( rule, value ) {
+ //**// console.log( 'in decode_value ( ' + rule + ' ...' );
+ value = ( 'undefined' === typeof value ? '' : value );
+ var self = this,
+ obj = {
+ 'orig': value,
+ 'names': [ '' ],
+ 'values': [ value ]
+ },
+ params;
+ if ( rule.toString().match( /^border(\-(top|right|bottom|left))?$/ ) ) {
+ var regex = new RegExp( self.border_regx + '(' + self.color_regx + ')?', 'i' ),
+ orig;
+ params = value.toString().match( regex );
+ if ( self.is_empty( params ) ) {
+ params = [];
+ }
+ obj.names = [
+ '_border_width',
+ '_border_style',
+ '_border_color',
+ ];
+ orig = params.shift();
+ //**// console.log( value );
+ //**// console.log( regex );
+ //**// console.log( params );
+ obj.values[ 0 ] = params.shift() || '';
+ params.shift();
+ obj.values[ 1 ] = params.shift() || '';
+ params.shift();
+ obj.values[ 2 ] = params.shift() || '';
+ } else if ( rule.toString().match( /^background\-image/ ) ) {
+ obj.names = [
+ '_background_url',
+ '_background_origin',
+ '_background_color1',
+ '_background_color2'
+ ];
+ obj.values = [ '', '', '', '' ];
+ if ( !self.is_empty( value ) && !( value.toString().match( /(url|none)/ ) ) ) {
+ var stop1, stop2;
+ params = value.toString().split( /:/ );
+ //**// console.log( value );
+ //**// console.log( params );
+ obj.values[ 1 ] = params.shift() || '';
+ obj.values[ 2 ] = params.shift() || '';
+ stop1 = params.shift() || '';
+ obj.values[ 3 ] = params.shift() || '';
+ stop2 = params.shift() || '';
+ obj.orig = [
+ obj.values[ 1 ],
+ obj.values[ 2 ],
+ obj.values[ 3 ]
+ ].join( ' ' );
+ } else {
+ obj.values[ 0 ] = value;
+ }
+ }
+ //**// console.log( obj );
+ return obj;
+ },
+
+ image_url: function( theme, value ) {
+ var self = this,
+ parts = value.toString().match( /url\(['" ]*(.+?)['" ]*\)/ ),
+ path = self.is_empty( parts ) ? null : parts[ 1 ],
+ url = window.ctcAjax.theme_uri + '/' + ( 'parent' === theme ? window.ctcAjax.parnt : window.ctcAjax.child ) + '/',
+ image_url;
+ if ( !path ) {
+ return false;
+ } else if ( path.toString().match( /^(data:|https?:|\/)/ ) ) {
+ image_url = value;
+ } else {
+ image_url = 'url(' + url + path + ')';
+ }
+ return image_url;
+ },
+
+ setup_menus: function() {
+ var self = this;
+ // console.log( 'setup_menus' );
+ self.setup_query_menu();
+ self.setup_selector_menu();
+ self.setup_rule_menu();
+ self.setup_new_rule_menu();
+ self.load_queries();
+ self.load_rules();
+ // selectors will be loaded after query selected
+ self.set_query( self.currquery );
+ },
+
+ load_queries: function() {
+ var self = this;
+ // console.log( 'load_queries' );
+ // retrieve unique media queries
+ self.query_css( 'queries', null );
+ },
+
+ load_selectors: function() {
+ var self = this;
+ // console.log( 'load_selectors' );
+ // retrieve unique selectors from query value
+ self.query_css( 'selectors', self.currquery );
+ },
+
+ load_rules: function() {
+ var self = this;
+ // console.log( 'load_rules' );
+ // retrieve all unique rules
+ self.query_css( 'rules', null );
+ },
+
+ load_selector_values: function() {
+ var self = this;
+ // console.log( 'load_selector_values: ' + self.currqsid );
+ // retrieve individual values from qsid
+ self.query_css( 'qsid', self.currqsid );
+ },
+
+ get_queries: function( request, response ) {
+ // console.log( 'get_queries' );
+ // console.log( this );
+ var //self = this,
+ arr = [],
+ matcher = new RegExp( $.ui.autocomplete.escapeRegex( request.term ), "i" );
+ if ( $.chldthmcfg.is_empty( this.element.data( 'menu' ) ) ) {
+ arr.push( { 'label': window.ctcAjax.nosels_txt, 'value': null } );
+ } else {
+ // note: key = ndx, value = query name
+ $.each( this.element.data( 'menu' ), function( key, val ) {
+ if ( matcher.test( val ) ) {
+ arr.push( { 'label': val, 'value': val } );
+ }
+ } );
+ }
+ response( arr );
+ },
+
+ get_selectors: function( request, response ) {
+ // console.log( 'get_selectors' );
+ var //self = this,
+ arr = [],
+ matcher = new RegExp( $.ui.autocomplete.escapeRegex( request.term ), "i" );
+ if ( $.chldthmcfg.is_empty( this.element.data( 'menu' ) ) ) {
+ arr.push( { 'label': window.ctcAjax.nosels_txt, 'value': null } );
+ } else {
+ // note: key = selector name, value = qsid
+ $.each( this.element.data( 'menu' ), function( key, val ) {
+ if ( matcher.test( key ) ) {
+ arr.push( { 'label': key, 'value': val } );
+ }
+ } );
+ }
+ response( arr );
+ },
+
+ get_rules: function( request, response ) {
+ // console.log( 'get_rules' );
+ var //self = this,
+ arr = [],
+ matcher = new RegExp( $.ui.autocomplete.escapeRegex( request.term ), "i" );
+ if ( $.chldthmcfg.is_empty( this.element.data( 'menu' ) ) ) {
+ arr.push( { 'label': window.ctcAjax.nosels_txt, 'value': null } );
+ } else {
+ // note: key = ruleid, value = rule name
+ $.each( this.element.data( 'menu' ), function( key, val ) {
+ if ( matcher.test( key ) ) {
+ arr.push( { 'label': key, 'value': val } );
+ }
+ } );
+ }
+ response( arr );
+ },
+
+ get_filtered_rules: function( request, response ) {
+ // console.log( 'get_filtered_rules' );
+ var arr = [],
+ matcher = new RegExp( $.ui.autocomplete.escapeRegex( request.term ), "i" ); //,
+ $.each( $( '#ctc_rule_menu' ).data( 'menu' ), function( key, val ) {
+ //multiple versions of rule ok
+ if ( matcher.test( key ) ) {
+ arr.push( { 'label': key, 'value': val } );
+ }
+ } );
+ response( arr );
+ },
+
+ /**
+ * parent and new values are stored in separate arrays
+ * this function puts them into parent/child columns by rulevalid
+ */
+ merge_ruleval_arrays: function( rule, value, isnew ) {
+ //**// console.log( 'merge_ruleval_arrays' );
+ var self = this,
+ valarr = {},
+ nextval = isnew ? value.child.pop() : null; // if new rule, pop off the top before counting
+ //**// console.log( value );
+ $.each( [ 'parnt', 'child' ], function( ndx, themetype ) {
+ // iterate through parent and child val arrays and populate new assoc array with parent/child for each rulevalid
+ if ( !self.is_empty( value[ themetype ] ) ) {
+ $.each( value[ themetype ], function( ndx2, val ) {
+ if ( isnew ) {
+ // if new rule, increment new rulevalid but do not add to parent/child assoc array
+ if ( parseInt( val[ 2 ] ) >= parseInt( nextval[ 2 ] ) ) {
+ nextval[ 2 ] = parseInt( val[ 2 ] ) + 1;
+ }
+ } else {
+ // add to parent/child assoc array with rulevalid as key
+ if ( self.is_empty( valarr[ val[ 2 ] ] ) ) {
+ valarr[ val[ 2 ] ] = {};
+ }
+ valarr[ val[ 2 ] ][ themetype ] = val;
+ }
+ } );
+ }
+ } );
+ // if new rule, create new parent child assoc array element with new rulevalid as key
+ if ( isnew ) {
+ valarr[ nextval[ 2 ] ] = {
+ parnt: [],
+ child: nextval
+ };
+ }
+ return valarr;
+ },
+
+ /**
+ * input_row
+ * render individual row of inputs for a given selector/rule combination
+ * qsid query/selector id
+ * rule css property
+ * seq panel id from rule/value tab
+ * data contains all rules/values for selector
+ * isnew is passed true when new rule is selected from menu
+ */
+ input_row: function( qsid, rule, seq, data, isnew ) {
+ // console.log( 'in input_row' );
+ var self = this,
+ html = '';
+ if ( !self.is_empty( data ) && !self.is_empty( data.value ) && !self.is_empty( data.value[ rule ] ) ) {
+ var value = data.value[ rule ],
+ valarr = self.merge_ruleval_arrays( rule, value, isnew );
+ $.each( valarr, function( ndx, val ) {
+ var pval = self.decode_value( rule, self.is_empty( val.parnt ) ? '' : val.parnt[ 0 ] ),
+ pimp = self.is_empty( val.parnt ) || self.is_empty( val.parnt[ 1 ], 1 ) ? 0 : 1,
+ cval = self.decode_value( rule, self.is_empty( val.child ) ? '' : val.child[ 0 ] ),
+ cimp = self.is_empty( val.child ) || self.is_empty( val.child[ 1 ], 1 ) ? 0 : 1;
+ html += '
' + "\n";
+ } );
+ }
+ return html;
+ },
+
+ scrolltop: function() {
+ $('html, body, .ctc-option-panel-container').animate( { scrollTop: 0 } );
+ },
+
+ css_preview: function( theme ) {
+ var self = this;
+ // console.log( 'css_preview: ' + theme );
+ if ( !( theme = theme.match( /(child|parnt)/ )[ 1 ] ) ) {
+ theme = 'child';
+ }
+ // console.log( 'css_preview: ' + theme );
+ // retrieve raw stylesheet ( parent or child )
+ self.query_css( 'preview', theme );
+ },
+
+ /**
+ * The "setup" functions initialize jQuery UI widgets
+ */
+ setup_iris: function( obj ) {
+ // deprecated: using spectrum for alpha support
+ var self = this;
+ self.setup_spectrum( obj );
+ },
+
+ setup_spectrum: function( obj ) {
+ var self = this,
+ //colortxt = $( obj ).attr( 'id' ) + '_colortxt',
+ palette = !self.is_empty( window.ctcAjax.palette );
+ try {
+ $( obj ).spectrum( {
+ showInput: true,
+ allowEmpty: true,
+ showAlpha: true,
+ showInitial: true,
+ preferredFormat: "hex", // 'name', //
+ clickoutFiresChange: true,
+ move: function( color ) {
+ $( obj ).data( 'color', color );
+ self.coalesce_inputs( obj );
+ },
+ showPalette: palette ? true : false,
+ showSelectionPalette: palette ? true : false,
+ palette: [ ],
+ maxSelectionSize: 36,
+ localStorageKey: "ctc-palette." + window.ctcAjax.child,
+ hideAfterPaletteSelect: true,
+ } ).on( 'change', function( ){
+ //var color = $( this ).spectrum( 'get' );
+ // console.log( 'color change: ' + color );
+ self.coalesce_inputs( this );
+ } ).on( 'keyup', function( ) {
+ // update spectrum ui to match text input after half-second delay
+ var $this = this,
+ $val = self.addhash( $( this ).val() );
+ $( $this ).val( $val );
+ clearTimeout( $( this ).data( 'spectrumTimer' ) );
+ $( this ).data( 'spectrumTimer', setTimeout(
+ function() {
+ self.coalesce_inputs( $this );
+ $( $this ).spectrum( 'set', $val );
+ },
+ 500
+ ) );
+ } );
+
+ } catch ( exn ) {
+ self.jquery_exception( exn, 'Spectrum Color Picker' );
+ }
+ },
+ addhash: function( color ) {
+ return color.replace( /^#?([a-f0-9]{3,6}.*)/, "#$1" );
+ },
+ color_text: function( color ) {
+ var self = this;
+ if ( self.is_empty( color ) ) {
+ return '';
+ } else if ( color.getAlpha() < 1 ) {
+ return color.toRgbString();
+ } else {
+ return color.toHexString();
+ }
+ },
+
+ setup_query_menu: function() {
+ var self = this;
+ // console.log( 'setup_query_menu' );
+ try {
+ $( '#ctc_sel_ovrd_query' ).autocomplete( {
+ source: self.get_queries,
+ minLength: 0,
+ selectFirst: true,
+ autoFocus: true,
+ select: function( e, ui ) {
+ if ( $( '#ctc_rewrite_query' ).length ){
+ // copy selected to rewrite input if active
+ $( '#ctc_rewrite_query' ).val( ui.item.value );
+ $( '#ctc_sel_ovrd_query' ).val( '' );
+ } else {
+ // otherwise set query
+ self.set_query( ui.item.value );
+ self.reset_qsid();
+ }
+ return false;
+ },
+ focus: function( e ) {
+ e.preventDefault();
+ }
+ } ).data( 'menu' , {} );
+ } catch ( exn ) {
+ self.jquery_exception( exn, 'Query Menu' );
+ }
+ },
+
+ setup_selector_menu: function() {
+ var self = this;
+ // console.log( 'setup_selector_menu' );
+ try {
+ $( '#ctc_sel_ovrd_selector' ).autocomplete( {
+ source: self.get_selectors,
+ selectFirst: true,
+ autoFocus: true,
+ select: function( e, ui ) {
+ if ( $( '#ctc_rewrite_selector' ).length ){
+ // copy selected to rewrite input if active
+ $( '#ctc_rewrite_selector' ).val( ui.item.label );
+ $( '#ctc_sel_ovrd_selector' ).val( '' );
+ } else {
+ // otherwise set selector
+ self.set_selector( ui.item.value, ui.item.label );
+ }
+ return false;
+ },
+ focus: function( e ) {
+ e.preventDefault();
+ }
+ } ).data( 'menu' , {} );
+ } catch ( exn ) {
+ self.jquery_exception( exn, 'Selector Menu' );
+ }
+ },
+
+ setup_rule_menu: function() {
+ var self = this;
+ // console.log( 'setup_rule_menu' );
+ try {
+ $( '#ctc_rule_menu' ).autocomplete( {
+ source: self.get_rules,
+ //minLength: 0,
+ selectFirst: true,
+ autoFocus: true,
+ select: function( e, ui ) {
+ self.set_rule( ui.item.value, ui.item.label );
+ return false;
+ },
+ focus: function( e ) {
+ e.preventDefault();
+ }
+ } ).data( 'menu' , {} );
+ } catch ( exn ) {
+ self.jquery_exception( exn, 'Property Menu' );
+ }
+ },
+
+ setup_new_rule_menu: function() {
+ var self = this;
+ try {
+ $( '#ctc_new_rule_menu' ).autocomplete( {
+ source: self.get_filtered_rules,
+ //minLength: 0,
+ selectFirst: true,
+ autoFocus: true,
+ select: function( e, ui ) {
+ // console.log( 'new rule selected' );
+ e.preventDefault();
+ var newrule = ui.item.label.replace( /[^\w\-]/g, self.toascii ),
+ row,
+ first;
+ // console.log( 'current qsdata before:' );
+ // console.log( self.currdata );
+ if ( self.is_empty( self.currdata.value ) ) {
+ self.currdata.value = {};
+ }
+ if ( self.is_empty( self.currdata.value[ ui.item.label ] ) ) {
+ self.currdata.value[ ui.item.label ] = {};
+ }
+ if ( self.is_empty( self.currdata.value[ ui.item.label ].child ) ) {
+ self.currdata.value[ ui.item.label ].child = [];
+ }
+ // console.log( 'current qsdata after:' );
+ // console.log( self.currdata );
+ // seed current qsdata with new blank value with id 1
+ // this will be modified during input_row function to be next id in order
+ self.currdata.value[ ui.item.label ].child.push( [ '', 0, 1, 1 ] );
+ row = $( self.input_row( self.currqsid, newrule, 'ovrd', self.currdata, true ) );
+ $( '#ctc_sel_ovrd_rule_inputs' ).append( row );
+ $( '#ctc_new_rule_menu' ).val( '' );
+
+ row.find( 'input[type="text"]' ).each( function( ndx, el ) {
+ if (! first) {
+ first = el;
+ }
+ if ( $( el ).hasClass( 'color-picker' ) ){
+ self.setup_spectrum( el );
+ }
+ } );
+ if ( first ){
+ $( first ).focus();
+ }
+// if ( self.jqueryerr.length ) {
+// self.jquery_notice( 'setup_new_rule_menu' );
+// }
+ return false;
+ },
+ focus: function( e ) {
+ e.preventDefault();
+ }
+ } ).data( 'menu' , {} );
+ } catch ( exn ) {
+ self.jquery_exception( exn, 'New Property Menu' );
+ }
+ },
+ set_theme_params: function( themetype, themedir ) {
+ $( '#ctc_child_author' ).val( window.ctcAjax.themes[ themetype ][ themedir ].Author );
+ $( '#ctc_child_version' ).val( window.ctcAjax.themes[ themetype ][ themedir ].Version );
+ $( '#ctc_child_authoruri' ).val( window.ctcAjax.themes[ themetype ][ themedir ].AuthorURI );
+ $( '#ctc_child_themeuri' ).val( window.ctcAjax.themes[ themetype ][ themedir ].ThemeURI );
+ $( '#ctc_child_descr' ).val( window.ctcAjax.themes[ themetype ][ themedir ].Descr );
+ $( '#ctc_child_tags' ).val( window.ctcAjax.themes[ themetype ][ themedir ].Tags );
+ },
+ update_form: function() {
+ var self = this,
+ themedir;
+ $( '#input_row_stylesheet_handling_container,#input_row_parent_handling_container,#ctc_additional_css_files_container,#input_row_new_theme_slug,#input_row_duplicate_theme_slug,#ctc_copy_theme_mods,#ctc_child_header_parameters,#ctc_configure_submit,#input_row_theme_slug' ).slideUp( 'fast' );
+ $( '#ctc_configure_submit .ctc-step' ).text( '9' );
+ if ( $( '#ctc_theme_child' ).length && !$( '#ctc_child_type_new' ).is( ':checked' ) ) {
+ themedir = $( '#ctc_theme_child' ).val();
+ // console.log( 'update_form (existing) ... ' + themedir );
+ self.existing = 1;
+ self.currparnt = window.ctcAjax.themes.child[ themedir ].Template;
+ self.autogen_slugs();
+ $( '#ctc_theme_parnt' ).val( self.currparnt );
+ $( '#ctc_theme_parnt-button .ui-selectmenu-text' ).text( self.getname( 'parnt' ) );
+ self.set_theme_params( 'child', themedir );
+ //self.set_child_menu( document.getElementById( 'ctc_theme_child' ) );
+ if ( $( '#ctc_child_type_duplicate' ).is( ':checked' ) ) {
+ $( '#ctc_child_template' ).val( self.testslug );
+ $( '#ctc_child_name' ).val( self.testname );
+ $( '.ctc-analyze-theme, .ctc-analyze-howto' ).show();
+ $( '#ctc_load_styles' ).val( 'Duplicate Child Theme' );
+ } else if ( $( '#ctc_child_type_reset' ).is( ':checked' ) ) {
+ $( '#ctc_configure_submit .ctc-step' ).text( '3' );
+ $( '#ctc_configure_submit' ).slideDown( 'fast' );
+ $( '#theme_slug_container' ).text( themedir );
+ $( '.ctc-analyze-theme, .ctc-analyze-howto' ).hide();
+ //$( '#input_row_theme_slug' ).slideDown( 'fast' );
+ $( '#ctc_enqueue_none' ).prop( 'checked', true );
+ $( '#ctc_load_styles' ).val( 'Reset Child Theme to Previous State' );
+ } else {
+ $( '#ctc_child_template' ).val( '' );
+ $( '#theme_slug_container' ).text( themedir );
+ $( '.ctc-analyze-theme, .ctc-analyze-howto' ).show();
+ $( '#ctc_child_name' ).val( self.getname( 'child' ) );
+ $( '#ctc_load_styles' ).val( 'Configure Child Theme' );
+ }
+ $( '#input_row_existing_theme_option' ).slideDown( 'fast' );
+ $( '#input_row_new_theme_option' ).slideUp( 'fast' );
+ } else {
+ self.existing = 0;
+ self.autogen_slugs();
+ //themedir = $( '#ctc_theme_parnt' ).val();
+ $( '#ctc_theme_parnt' ).val( self.currparnt );
+ $( '#ctc_theme_parnt-button .ui-selectmenu-text' ).text( $.chldthmcfg.getname( 'parnt' ) );
+ // console.log( 'update_form (new) ... ' + self.currparnt );
+ //self.set_parent_menu( document.getElementById( 'ctc_theme_parnt' ) );
+ // console.log( 'setting to new...' + $( '#ctc_theme_parnt' ).val() );
+ self.set_theme_params( 'parnt', self.currparnt );
+ $( '#input_row_existing_theme_option,#input_row_duplicate_theme_container,#input_row_theme_slug' ).slideUp( 'fast' );
+ $( '#input_row_new_theme_option' ).slideDown( 'fast' );
+ $( '#ctc_child_name' ).val( self.testname );
+ $( '#ctc_child_template' ).val( self.testslug );
+ $( '.ctc-analyze-theme, .ctc-analyze-howto' ).show();
+ $( '#ctc_load_styles' ).val( 'Create New Child Theme' );
+ }
+ },
+ set_notice: function( noticearr ) {
+ var self = this,
+ errorHtml = '',
+ out;
+ if ( !self.is_empty( noticearr ) ) {
+ $.each( noticearr, function( type, list ) {
+ errorHtml += '
' + "\n";
+ $( list ).each( function( ndx, el ) {
+ errorHtml += '' + el.toString() + ' ' + "\n";
+ } );
+ errorHtml += ' ';
+ } );
+ }
+ out = $( errorHtml );
+ $( '#ctc_error_notice' ).html( out );
+ self.bind_dismiss( out );
+ $( 'html, body' ).animate( { scrollTop: 0 }, 'slow' );
+ },
+
+ set_parent_menu: function( obj ) {
+ // refresh page with current parent theme
+ var self = this;
+ self.currparnt = obj.value;
+ self.update_form();
+ //self.show_loading();
+ //document.location = '?page=' + window.ctcAjax.page + '&ctc_parent=' + obj.value;
+ },
+
+ set_child_menu: function( obj ) {
+ var self = this;
+ self.currchild = obj.value;
+ self.update_form();
+ },
+
+ set_query: function( value ) {
+ var self = this;
+ if ( self.is_empty( value ) ) {
+ return false;
+ }
+ // console.log( 'set_query: ' + value );
+ self.currquery = value;
+ $( '#ctc_sel_ovrd_query' ).val( '' );
+ $( '#ctc_sel_ovrd_query_selected' ).text( value );
+ $( '#ctc_sel_ovrd_selector' ).val( '' );
+ $( '#ctc_sel_ovrd_selector_selected' ).html( ' ' );
+ self.load_selectors();
+ self.scrolltop();
+ },
+
+ /**
+ * reset all qsid inputs
+ * added v2.3.0
+ */
+ reset_qsid: function(){
+ // console.log( 'resetting all qsid inputs...' );
+ self.currqsid = null;
+ $( '#ctc_sel_ovrd_rule_inputs' ).empty();
+ $( '#ctc_sel_ovrd_new_rule,#input_row_load_order,#ctc_sel_ovrd_rule_inputs_container' ).hide().find( '.ctc-child-value' ).remove();
+ $( '.ctc-rewrite-toggle' ).hide();
+ },
+
+ set_selector: function( value, label ) {
+ var self = this;
+ label = null;
+ if ( self.is_empty( value ) ) {
+ return false;
+ }
+ // console.log( 'set_selector: ' + value + ' label: ' + label );
+ $( '#ctc_sel_ovrd_selector' ).val( '' );
+ self.currqsid = value;
+ self.reload = false;
+ self.load_selector_values();
+ self.scrolltop();
+ },
+
+ set_rule: function( value, label ) {
+ // console.log( 'set_rule: ' + value + ' label: ' + label );
+ var self = this;
+ if ( self.is_empty( value ) ) {
+ return false;
+ }
+ $( '#ctc_rule_menu' ).val( '' );
+ $( '#ctc_rule_menu_selected' ).text( label );
+ $( '.ctc-rewrite-toggle' ).text( self.getxt( 'rename' ) );
+ $( '#ctc_rule_value_inputs, #ctc_input_row_rule_header' ).show();
+ // retrieve unique values by rule
+ self.query_css( 'rule_val', value );
+ self.scrolltop();
+ },
+
+ set_qsid: function( obj ) {
+ var self = this;
+ // console.log( 'set_qsid: ' + $( obj ).attr( 'id' ) );
+ self.currqsid = $( obj ).attr( 'id' ).match( /_(\d+)$/ )[ 1 ];
+ self.focus_panel( '#query_selector_options' );
+ self.reload = true;
+ self.load_selector_values();
+ },
+
+ /**
+ * Retrieve data from server and execute callback on completion
+ */
+ query_css: function( obj, key, params ) {
+ // console.log( 'query_css: ' + obj + ' key: ' + key );
+ var self = this,
+ postdata = { 'ctc_query_obj' : obj, 'ctc_query_key': key },
+ status_sel = '#ctc_status_' + obj + ( 'val_qry' === obj ? '_' + key : '' );
+
+ if ( 'object' === typeof params ) {
+ $.each( params, function( key, val ) {
+ postdata[ 'ctc_query_' + key ] = val;
+ } );
+ }
+ $( '.query-icon,.ctc-status-icon' ).remove();
+ // console.log( status_sel + ' ' + $( status_sel ).length );
+ $( status_sel + ' .ctc-status-icon' ).remove();
+ $( status_sel ).append( '
' );
+ // add wp ajax action to array
+ // console.log( $( '#ctc_action' ).val() );
+ postdata.action = ( !self.is_empty( $( '#ctc_action' ).val() ) &&
+ 'plugin' === $( '#ctc_action' ).val() ) ?
+ 'ctc_plgqry' : 'ctc_query';
+ postdata._wpnonce = $( '#_wpnonce' ).val();
+ // ajax post input data
+ // console.log( 'query_css postdata:' );
+ // console.log( postdata );
+ self.ajax_post( obj, postdata );
+ },
+ /**
+ * Post data to server for saving and execute callback on completion
+ */
+ save: function( obj ) {
+ // console.log( 'save: ' + $( obj ).attr( 'id' ) );
+ var self = this,
+ postdata = {},
+ $selector,
+ $query,
+ $imports,
+ id = $( obj ).attr( 'id' ),
+ newsel,
+ origsel;
+
+ // disable the button until ajax returns
+ $( obj ).prop( 'disabled', true );
+ // clear previous success/fail icons
+ $( '.ctc-query-icon,.ctc-status-icon' ).remove();
+ // show spinner
+ $( obj ).parent( '.ctc-textarea-button-cell, .ctc-button-cell' )
+ .append( '
' );
+ if ( id.match( /ctc_configtype/ ) ) {
+ $( obj ).parents( '.ctc-input-row' ).first()
+ .append( '
' );
+ postdata.ctc_configtype = $( obj ).val();
+ } else if ( ( $selector = $( '#ctc_new_selectors' ) ) &&
+ 'ctc_save_new_selectors' === $( obj ).attr( 'id' ) ) {
+ postdata.ctc_new_selectors = $selector.val();
+ if ( ( $query = $( '#ctc_sel_ovrd_query_selected' ) ) ) {
+ postdata.ctc_sel_ovrd_query = $query.text();
+ }
+ self.reload = true;
+ } else if ( ( $imports = $( '#ctc_child_imports' ) ) &&
+ 'ctc_save_imports' === id ) {
+ postdata.ctc_child_imports = $imports.val();
+ } else if ( 'ctc_is_debug' === id ) {
+ postdata.ctc_is_debug = $( '#ctc_is_debug' ).is( ':checked' ) ? 1 : 0;
+ } else {
+ // coalesce inputs
+ postdata = self.coalesce_inputs( obj );
+ }
+ $( '.save-icon' ).addClass( 'is-active' );
+ // add rename selector value if it exists
+ $.each( [ 'query', 'selector' ], function( ndx, el ){
+ if ( $( '#ctc_rewrite_' + el ).length ){
+
+ newsel = $( '#ctc_rewrite_' + el ).val();
+ origsel = $( '#ctc_rewrite_' + el + '_orig' ).val();
+ if ( self.is_empty( newsel ) || !newsel.toString().match( /\w/ ) ) {
+ newsel = origsel;
+ } else {
+ postdata[ 'ctc_rewrite_' + el ] = newsel;
+ self.reload = true;
+ }
+ $( '#ctc_sel_ovrd_' + el + '_selected' ).html( newsel );
+ }
+ $( '.ctc-rewrite-toggle' ).text( self.getxt( 'rename' ) );
+ } );
+ // add wp ajax action to array
+ // console.log( $( '#ctc_action' ).val() );
+ postdata.action = ( !self.is_empty( $( '#ctc_action' ).val() ) &&
+ 'plugin' === $( '#ctc_action' ).val() ) ?
+ 'ctc_plugin' : 'ctc_update';
+ postdata._wpnonce = $( '#_wpnonce' ).val();
+ // console.log( postdata );
+ // ajax post input data
+ self.ajax_post( 'qsid', postdata );
+ },
+
+ ajax_post: function( obj, data, datatype ) {
+ var self = this;
+ // console.log( 'ajax_post: ' + obj );
+ // console.log( data );
+ // console.log( window.ctcAjax.ajaxurl );
+ // get ajax url from localized object
+ $.ajax( {
+ url: window.ctcAjax.ajaxurl,
+ data: data,
+ dataType:
+ //'ctc_update' === data.action && 'qsid' === obj ? 'text' :
+ //'ctc_update' == data.action && //
+ //'rule_val' === obj ? 'text' : // 'qsid' == obj ? 'text' :
+ ( self.is_empty( datatype ) ? 'json' : datatype ),
+ type: 'POST'
+ } ).done( function( response ) {
+ // console.log( response );
+ self.handle_success( obj, response );
+ } ).fail( function() { // jxr, status, err ) {
+ // console.log( status );
+ // console.log( err );
+ self.handle_failure( obj );
+ } ).always( function() {
+ if ( self.jqueryerr.length ) {
+ self.jquery_notice();
+ }
+ } );
+ },
+
+ handle_failure: function( obj ) {
+ var self = this;
+ // console.log( 'handle_failure: ' + obj );
+ $( '.query-icon, .save-icon' ).removeClass( 'spinner' ).addClass( 'failure' );
+ $( 'input[type=submit], input[type=button], input[type=checkbox],.ctc-delete-input' ).prop( 'disabled', false );
+ $( '.ajax-pending' ).removeClass( 'ajax-pending' );
+ //FIXME: return fail text in ajax response
+ if ( 'preview' === obj ) {
+ $( '#view_parnt_options_panel,#view_child_options_panel' )
+ .text( self.getxt( 'css_fail' ) );
+ }
+ },
+
+ handle_success: function( obj, response ) {
+ var self = this;
+ // query response
+ // console.log( 'handle_success: ' + obj );
+ // console.log( response );
+ // hide spinner
+ $( '.query-icon, .save-icon' ).removeClass( 'spinner' );
+ $( '.ajax-pending' ).removeClass( 'ajax-pending' );
+ // hide spinner
+ if ( self.is_empty( response ) ) {
+ self.handle_failure( obj );
+ } else {
+ $( '#ctc_new_selectors' ).val( '' );
+ // update data objects
+ // show check mark
+ // FIXME: distinction between save and query, update specific status icon
+ $( '.query-icon, .save-icon' ).addClass( 'success' );
+ $( 'input[type=submit], input[type=button], input[type=checkbox],.ctc-delete-input' ).prop( 'disabled', false );
+ // update ui from each response object
+ $( response ).each( function() {
+ if ( 'function' === typeof self.update[ this.obj ] ) {
+ // console.log( 'executing method update.' + this.obj );
+ self.update[ this.obj ].call( self, this );
+ } else {
+ // console.log( 'Fail: no method update.' + this.obj );
+ }
+ } );
+ }
+ },
+
+ jquery_exception: function( exn, type ) {
+ var self = this,
+ ln = self.is_empty( exn.lineNumber ) ? '' : ' line: ' + exn.lineNumber,
+ fn = self.is_empty( exn.fileName ) ? '' : ' ' + exn.fileName.split( /\?/ )[ 0 ];
+ self.jqueryerr.push( '
' + type + ': ' + exn.message + fn + ln + '
' );
+ // console.log( 'jquery error detected' );
+ },
+
+ jquery_notice: function( fn ) {
+ // console.log( fn );
+ fn = null;
+ var self = this,
+ culprits = [],
+ errors = [];
+ if ( self.jqueryerr.length ){
+ // disable form submits
+ $( 'input[type=submit], input[type=button]' ).prop( 'disabled', true );
+ $( 'script' ).each( function(){
+ var url = $( this ).prop( 'src' );
+ if ( !self.is_empty( url ) && url.match( /jquery(\.min|\.js|\-?ui)/i ) &&
+ ! url.match( /load\-scripts.php/ ) ) {
+ culprits.push( '
' + url.split( /\?/ )[ 0 ] + '
' );
+ }
+ } );
+ errors.push( '
' + self.getxt( 'js' ) + ' ' + self.getxt( 'contact' ) );
+ //if ( 1 == window.ctcAjax.is_debug ) {
+ errors.push( self.jqueryerr.join( '
' ) );
+ //}
+ if ( culprits.length ) {
+ errors.push( self.getxt( 'jquery' ) + '
' + culprits.join( '
' ) );
+ }
+ errors.push( self.getxt( 'plugin' ) );
+ }
+ //return errors;
+ self.set_notice( { 'error': errors } );
+ },
+ /*
+ // test for jquery issues
+
+ $.each( jqueryerr, function( index, err ) {
+ notice.hasnotice = 1;
+ notice.style = 'error';
+ notice.jquery += err;
+ } );
+ */
+
+
+ update: {
+ // render individual selector inputs on Query/Selector tab
+ qsid: function( res ) {
+ var self = this,
+ id, html, val, empty;
+ self.currqsid = res.key;
+ self.currdata = res.data;
+ // console.log( 'update: ' + self.reload );
+ // console.log( 'update.qsid: ' + self.currqsid );
+ $( '#ctc_sel_ovrd_qsid' ).val( self.currqsid );
+ if ( self.is_empty( self.currdata.seq ) ) {
+ $( '#ctc_child_load_order_container' ).empty();
+ } else {
+ id = 'ctc_ovrd_child_seq_' + self.currqsid;
+ val = parseInt( self.currdata.seq );
+ html = '
';
+ $( '#ctc_child_load_order_container' ).html( html );
+ }
+ if ( self.is_empty( self.currdata.value ) ) {
+ // console.log( 'qsdata is empty' );
+ empty = true;
+ $( '#ctc_sel_ovrd_rule_inputs' ).empty();
+ // prune empty selectors after clearing data to prune
+ self.load_selectors();
+ } else {
+ // console.log( 'qsdata NOT empty' );
+ empty = false;
+ html = '';
+ $.each( self.currdata.value, function( rule, value ) {
+ value = null;
+ html += self.input_row( self.currqsid, rule, 'ovrd', self.currdata );
+ } );
+ $( '#ctc_sel_ovrd_rule_inputs' ).html( html ).find( '.color-picker' ).each( function() {
+ self.setup_spectrum( this );
+ } );
+ self.coalesce_inputs( '#ctc_child_all_0_swatch' );
+ }
+// if ( self.jqueryerr.length ) {
+// self.jquery_notice( 'update.qsid' );
+// } else {
+ // console.log( 'reload menus: ' + ( self.reload ? 'true' : 'false' ) );
+ if ( self.reload ) {
+ self.load_queries();
+ self.load_selectors();
+ self.set_query( self.currdata.query );
+ self.load_rules();
+ }
+ $( '#ctc_sel_ovrd_selector_selected' ).text( self.currdata.selector );
+
+ self.maybe_show_rewrite();
+ if ( empty ){
+ self.reset_qsid();
+ } else {
+ $(
+ '#ctc_sel_ovrd_rule_header,' +
+ '#ctc_sel_ovrd_new_rule,' +
+ '#ctc_sel_ovrd_rule_inputs_container,' +
+ '#ctc_sel_ovrd_rule_inputs,' +
+ '#input_row_load_order'
+ ).fadeIn();
+ }
+ //self.scrolltop();
+// }
+ },
+ // render list of unique values for given rule on Property/Value tab
+ rule_val: function( res ) {
+ // console.log( 'update.rule_val: ' + res.key );
+ // console.log( res.data );
+ var self = this,
+ rule = $( '#ctc_rule_menu_selected' ).text(),
+ html = '
' + "\n";
+ }
+ $( '#ctc_rule_value_inputs' ).html( html ).find( '.ctc-swatch' ).each( function() {
+ self.coalesce_inputs( this );
+ } );
+ },
+ // render list of selectors grouped by query for given value on Property/Value Tab
+ val_qry: function( res ) {
+ // console.log( 'in val_qry' );
+ // console.log( res );
+ var self = this,
+ html = '',
+ page_rule,
+ selector;
+ if ( !self.is_empty( res.data ) ) {
+ $.each( res.data, function( rule, queries ) {
+ page_rule = rule;
+ $.each( queries, function( query, selectors ) {
+ html += '
' + query + ' ' + "\n";
+ if ( !self.is_empty( selectors ) ) {
+ $.each( selectors, function( qsid, qsdata ) {
+ html += self.input_row( qsid, rule, res.key, qsdata );
+ } );
+ }
+ } );
+ } );
+ }
+ selector = '#ctc_selector_' + page_rule + '_' + res.key + '_rows';
+ // console.log( selector );
+
+ $( selector ).html( html ).find( '.color-picker' ).each( function() {
+ self.setup_spectrum( this );
+ } );
+ $( selector ).find( '.ctc-swatch' ).each( function() {
+ self.coalesce_inputs( this );
+ } );
+// if ( self.jqueryerr.length ) {
+// self.jquery_notice( 'val_qry' );
+// }
+ },
+ // populate list of queries and attach to query input element
+ queries: function( res ) {
+ $( '#ctc_sel_ovrd_query' ).data( 'menu', res.data );
+ },
+ // populate list of selectors and attach to selector input element
+ selectors: function( res ) {
+ $( '#ctc_sel_ovrd_selector' ).data( 'menu', res.data );
+ },
+ // populate list of rules and attach to rule input element
+ rules: function( res ) {
+ $( '#ctc_rule_menu' ).data( 'menu', res.data );
+ },
+ // render debug output
+ debug: function( res ) {
+ $( '#ctc_debug_box' ).val( $( '#ctc_debug_box' ).val() + res.data );
+ // console.log( 'debug:' );
+ // console.log( res.data );
+ },
+ // render stylesheet preview on child or parent css tab
+ preview: function( res ) {
+ $( '#view_' + res.key + '_options_panel' ).text( res.data );
+ },
+ dismiss: function() { // res ) {
+ // console.log( 'dismiss came home!' );
+ // console.log( res );
+ //var self = this;
+ //self.dismiss_notice();
+ }
+
+ },
+ // applies core dismiss behavior to injected elements
+ bind_dismiss: function( el ) {
+ // console.log( 'bind_dismiss' );
+ var self = this,
+ $this = $( el ),
+ $button = $( '
' );
+
+ // Ensure plain text
+ $button.find( '.screen-reader-text' ).text( $.chldthmcfg.getxt( 'dismiss' ) );
+
+ $this.append( $button );
+
+ $button.on( 'click.wp-dismiss-notice', function( event ) {
+ event.preventDefault();
+ self.dismiss_notice( el );
+ });
+ },
+ dismiss_notice: function( el ) {
+ $( el ).fadeTo( 100 , 0, function() {
+ $( this ).slideUp( 100, function() {
+ $( this ).remove();
+ });
+ });
+ },
+ reset_handling: function() {
+ // console.log( '----> resetting form...' );
+ $( '#parnt_analysis_notice .notice, #child_analysis_notice .notice' ).slideUp();
+ $( '#ctc_enqueue_enqueue' ).prop( 'checked', true );
+ $( '#ctc_handling_primary' ).prop( 'checked', true );
+ $( '#ctc_ignoreparnt' ).prop( 'checked', false );
+ $( '#ctc_repairheader' ).prop( 'checked', false );
+ },
+ // initialize object vars, bind event listeners to elements, load menus and start plugin
+ init: function() {
+ // console.log( 'initializing...' )
+ var self = this;
+ //self.jquery_exception( { 'message':'testing' }, 'Testing' );
+ // try to initialize theme menus
+ if ( !$( '#ctc_theme_parnt' ).is( 'input' ) ) {
+
+ // console.log( 'initializing theme select menus...' );
+ try {
+ $.widget( 'ctc.themeMenu', $.ui.selectmenu, {
+ _renderItem: function( ul, item ) {
+ var li = $( "
" ),
+ sel = item.value.replace( /[^\w\-]/g, '' );
+ $( '#ctc_theme_option_' + sel )
+ .detach().appendTo( li );
+ return li.appendTo( ul );
+ }
+ } );
+ } catch( exn ) {
+ self.jquery_exception( exn, 'Theme Menu' );
+ }
+ try {
+ $( '#ctc_theme_parnt' ).themeMenu( {
+ select: function( event, ui ) {
+ self.reset_handling();
+ self.set_parent_menu( ui.item );
+ }
+ } );
+ } catch( exn ) {
+ if ( 'function' === typeof themeMenu ) {
+ $( '#ctc_theme_parnt' ).themeMenu( 'destroy' );
+ } else {
+ $( '#ctc_theme_parnt-button' ).remove();
+ }
+ self.jquery_exception( exn, 'Parent Theme Menu' );
+ }
+ if ( self.is_empty( window.ctcAjax.themes.child ) ) {
+ if ( $( '#ctc_child_name' ).length ) {
+ $( '#ctc_child_name' ).val( self.testname );
+ $( '#ctc_child_template' ).val( self.testslug );
+ }
+ } else {
+ try {
+ $( '#ctc_theme_child' ).themeMenu( {
+ select: function( event, ui ) {
+ self.reset_handling();
+ self.set_child_menu( ui.item );
+ }
+ } );
+ } catch( exn ) {
+ if ( 'function' === typeof themeMenu ) {
+ $( '#ctc_theme_child' ).themeMenu( 'destroy' );
+ } else {
+ $( '#ctc_theme_child-button' ).remove();
+ }
+ self.jquery_exception( exn, 'Child Theme Menu' );
+ }
+ }
+ }
+
+ // auto populate parent/child tab values
+ self.currparnt = $( '#ctc_theme_parnt' ).val();
+ self.currchild = $( '#ctc_theme_child' ).length ? $( '#ctc_theme_child' ).val() : '';
+ $( '#ctc_main' ).on( 'click', '.ctc-section-toggle', function( e ) {
+ e.preventDefault();
+ $( this ).parents( '.ctc-input-row, .notice-warning, .updated, .error' ).first().find( '.ctc-section-toggle' )
+ .each( function() {
+ $( this ).toggleClass( 'open' );
+ } );
+ var id = $( this ).attr( 'id' ).replace(/\d$/, '') + '_content';
+ $( '#' + id ).stop().slideToggle( 'fast' );
+ return false;
+ } );
+
+ $( '#ctc_main' ).on( 'click', '.ctc-upgrade-notice .notice-dismiss', function() { // e ) {
+ // console.log( 'dismiss upgrade clicked!' );
+ //e.preventDefault();
+ var postdata = {
+ 'action': 'ctc_dismiss',
+ '_wpnonce': $( '#_wpnonce' ).val()
+ };
+ self.ajax_post( 'dismiss', postdata );
+ } );
+
+ if ( self.is_empty( self.jqueryerr ) ){
+ // console.log( 'delegating event bindings...' )
+ $( '#ctc_main' ).on( 'click', '.ctc-selector-handle', function( e ) {
+ //'.ctc-option-panel-container'
+ e.preventDefault();
+ if ( $( this ).hasClass( 'ajax-pending' ) ) {
+ return false;
+ }
+ $( this ).addClass( 'ajax-pending' );
+ //set_notice( '' );
+ var id = $( this ).attr( 'id' ).toString().replace( '_close', '' ),
+ parts = id.toString().match( /_([^_]+)_(\d+)$/ ),
+ rule,
+ valid;
+ if ( $( '#' + id + '_container' ).is( ':hidden' ) ) {
+ if ( !self.is_empty( parts[ 1 ] ) && !self.is_empty( parts[ 2 ] ) ) {
+ rule = parts[ 1 ];
+ valid = parts[ 2 ];
+ // retrieve selectors / values for individual value
+ self.query_css( 'val_qry', valid, { 'rule': rule } );
+ }
+ }
+ $( '#' + id + '_container' ).fadeToggle( 'fast' );
+ $( '.ctc-selector-container' ).not( '#' + id + '_container' ).fadeOut( 'fast' );
+ } );
+
+ $( '#ctc_main' ).on( 'click', '.ctc-save-input[type=button], .ctc-delete-input', function( e ) {
+ e.preventDefault();
+ if ( $( this ).hasClass( 'ajax-pending' ) ) {
+ return false;
+ }
+ $( this ).addClass( 'ajax-pending' );
+ self.save( this ); // refresh menus after updating data
+ return false;
+ } );
+
+ $( '#ctc_main' ).on( 'keydown', '.ctc-selector-container .ctc-child-value[type=text]', function( e ) {
+ if ( 13 === e.which ) {
+ // console.log( 'return key pressed' );
+ var $obj = $( this ).parents( '.ctc-selector-row' ).find( '.ctc-save-input[type=button]' ).first();
+ if ( $obj.length ) {
+ e.preventDefault();
+ // console.log( $obj.attr( 'id' ) );
+ if ( $obj.hasClass( 'ajax-pending' ) ) {
+ return false;
+ }
+ $obj.addClass( 'ajax-pending' );
+ self.save( $obj );
+ return false;
+ }
+ }
+ } );
+
+ $( '#ctc_main' ).on( 'click', '.ctc-selector-edit', function( e ) {
+ e.preventDefault();
+ if ( $( this ).hasClass( 'ajax-pending' ) ) {
+ return false;
+ }
+ $( this ).addClass( 'ajax-pending' );
+ self.set_qsid( this );
+ } );
+
+ $( '#ctc_main' ).on( 'click', '.ctc-rewrite-toggle', function( e ) {
+ e.preventDefault();
+ self.selector_input_toggle( this );
+ } );
+
+ $( '#ctc_main' ).on( 'click', '#ctc_copy_selector', function( ) {
+ var txt = $( '#ctc_sel_ovrd_selector_selected' ).text().trim();
+ if ( !self.is_empty( txt ) ){
+ $( '#ctc_new_selectors' ).val( $( '#ctc_new_selectors' ).val() + "\n" + txt + " {\n\n}" );
+ }
+ } );
+ // save theme as zip
+ $( '#ctc_main' ).on( 'click', '.ctc-backup-theme', function( e ) {
+ e.preventDefault();
+ // copy selected theme to zip export form
+ if ( self.existing ){
+ $( '#ctc_export_theme' ).val( self.currchild );
+ } else {
+ $( '#ctc_export_theme' ).val( self.currparnt );
+ }
+ // console.log( 'backup clicked - theme: ' + $( '#ctc_export_theme' ).val() );
+ // submit form
+ $( '#ctc_export_theme_form' ).submit();
+ // submit form
+ } );
+ $( '#ctc_configtype' ).on( 'change', function( ) {
+ var val = $( this ).val();
+ if ( self.is_empty( val ) || 'theme' === val ) {
+ $( '.ctc-theme-only, .ctc-themeonly-container' ).removeClass( 'ctc-disabled' );
+ $( '.ctc-theme-only, .ctc-themeonly-container input' ).prop( 'disabled', false );
+ try {
+ $( '#ctc_theme_parnt, #ctc_theme_child' ).themeMenu( 'enable' );
+ } catch ( exn ) {
+ self.jquery_exception( exn, 'Theme Menu' );
+ }
+ } else {
+ $( '.ctc-theme-only, .ctc-themeonly-container' ).addClass( 'ctc-disabled' );
+ $( '.ctc-theme-only, .ctc-themeonly-container input' ).prop( 'disabled', true );
+ try {
+ $( '#ctc_theme_parnt, #ctc_theme_child' ).themeMenu( 'disable' );
+ } catch ( exn ) {
+ self.jquery_exception( exn, 'Theme Menu' );
+ }
+ }
+ } );
+
+ // these elements are not replaced so use direct selector events
+ $( '.nav-tab' ).on( 'click', function( e ) {
+ e.preventDefault();
+ if ( $( e.target ).hasClass( 'ctc-disabled' ) ) {
+ return false;
+ }
+ // clear the notice box
+ //set_notice( '' );
+ $( '.ctc-query-icon,.ctc-status-icon' ).remove();
+ var id = '#' + $( this ).attr( 'id' );
+ self.focus_panel( id );
+ } );
+
+ $( '#view_child_options, #view_parnt_options' ).on( 'click', function( e ){
+ if ( $( e.target ).hasClass( 'ajax-pending' ) || $( e.target ).hasClass( 'ctc-disabled' ) ) {
+ return false;
+ }
+ $( e.target ).addClass( 'ajax-pending' );
+ self.css_preview( $( this ).attr( 'id' ) );
+ } );
+
+ $( '#ctc_load_form' ).on( 'submit', function() {
+ return ( self.validate() );
+ } );
+
+ $( '#ctc_query_selector_form' ).on( 'submit', function( e ) {
+ e.preventDefault();
+ var $this = $( '#ctc_save_query_selector' );
+ if ( $this.hasClass( 'ajax-pending' ) ) {
+ return false;
+ }
+ $this.addClass( 'ajax-pending' );
+ self.save( $this ); // refresh menus after updating data
+ return false;
+ } );
+
+ $( '#ctc_rule_value_form' ).on( 'submit', function( e ) {
+ // console.log( 'rule value empty submit' );
+ e.preventDefault();
+ return false;
+ } );
+
+ // update interface for existing child theme
+ $( '#ctc_child_type_new,#ctc_child_type_existing,#ctc_child_type_duplicate,#ctc_child_type_reset' )
+ .on( 'focus click', function() {
+ // console.log( 'child type clicked!' );
+ self.reset_handling();
+ self.update_form();
+ } );
+
+ $( '#ctc_is_debug' ).on( 'change', function( ) {
+ if ( $( this ).is( ':checked' ) ){
+ if ( !$( '#ctc_debug_box' ).length ){
+ $( '#ctc_debug_container' ).html( ' ' );
+ }
+ } else {
+ $( '#ctc_debug_box' ).remove();
+ }
+ self.save( this );
+ } );
+
+ $( '.ctc-live-preview' ).on( 'click', function( e ) {
+ e.stopImmediatePropagation();
+ e.preventDefault();
+ document.location = $( this ).prop( 'href' );
+ return false;
+ } );
+ // console.log( 'loading autoselect menus...' )
+ // initialize autoselect menus
+ self.setup_menus();
+
+ // turn on submit buttons (disabled until everything is loaded to prevent errors)
+ // console.log( 'releasing submit buttons...' )
+ $( 'input[type=submit], input[type=button]' ).prop( 'disabled', false );
+ self.scrolltop();
+ self.update_form();
+ // console.log( 'Ready.' );
+ }
+ if ( self.jqueryerr.length ) {
+ self.jquery_notice();
+ }
+ },
+ // object properties
+ testslug: '',
+ testname: '',
+ reload: false,
+ currquery: 'base',
+ currqsid: null,
+ currdata: {},
+ currparnt: '',
+ currchild: '',
+ existing: false,
+ jqueryerr: [], // stores jquery exceptions thrown during init
+ color_regx: '\\s+(\\#[a-f0-9]{3,6}|rgba?\\([\\d., ]+?\\)|hsla?\\([\\d%., ]+?\\)|[a-z]+)',
+ border_regx: '(\\w+)(\\s+(\\w+))?',
+ grad_regx: '(\\w+)'
+
+ };
+ $.chldthmanalyze = {
+ escrgx: function( str ) {
+ return str.replace(/([.*+?^${}()|\[\]\/\\])/g, "\\$1");
+ },
+
+ trmcss: function( str ) {
+ // console.log( 'trmcss: ' + str );
+ return 'undefined' === typeof str ? '' : str.replace( /\-css$/, '' );
+ },
+ show_loading: function( resubmit, text ) {
+ var themetype = $.chldthmcfg.existing ? 'child' : 'parnt',
+ name = text ? text : $.chldthmcfg.getname( themetype ),
+ notice = ' ' +
+ $.chldthmcfg.getxt( resubmit ? 'anlz1' : 'anlz2' ) + ' ' + name + '... ';
+ self.noticediv = ( 'child' === themetype ? '' : '' );
+ $( '#' + themetype + '_analysis_notice' ).html( notice );
+ //$( 'html, body' ).animate( { scrollTop: 0 }, 'slow' );
+ },
+ hide_loading: function() {
+ $( '.ctc_analyze_loading' ).fadeTo( 200, 0, function(){ $( this ).slideUp( 200, function() { $( this ).remove(); } ); } );
+ },
+ setssl: function( url ){
+ return url.replace( /^https?/, window.ctcAjax.ssl ? 'https' : 'http' );
+ },
+ /**
+ * Fetch website home page and parse for linked stylesheets
+ * Use this to store dependencies and to mark them to be parsed as "default" stylesheets
+ * Detects other signals for configuration heuristics during child theme setup.
+ * If the initial ajax get requst fails, attempt request via a WordPress ajax call,
+ * which executes an http request on the server side. If both methods fail, notify user.
+ */
+ analyze_theme: function( themetype ) {
+ // console.log( 'analyze_theme' );
+ var self = this,
+ now = Math.floor( $.now() / 1000 ),
+ stylesheet = ( 'child' === themetype ? $.chldthmcfg.currchild : $.chldthmcfg.currparnt ),
+ testparams = '&template=' + encodeURIComponent( $.chldthmcfg.currparnt ) + '&stylesheet=' + encodeURIComponent( stylesheet ) + '&now=' + now,
+ homeurl = self.setssl( window.ctcAjax.homeurl ), // window.ctcAjax.homeurl, //
+ url = homeurl + testparams;
+
+ self.analysis[ themetype ].url = url;
+
+ /**
+ * First, try to fetch home page using ajax get
+ */
+ // console.log( 'Fetching home page: ' + url );
+ $.get( url, function( data ) {
+ // console.log( data );
+ self.parse_page( themetype, data );
+ $( document ).trigger( 'analysisdone' );
+ } ).fail( function( xhr, status, err ){
+ // console.log( status );
+ // console.log( err );
+ // console.log( xhr );
+ /**
+ * if this fails due to cross domain or other issue,
+ * try fetching using ajax call that requests page on server side.
+ */
+ self.analysis[ themetype ].signals.xhrgeterr = err;
+ $.ajax( {
+ url: window.ctcAjax.ajaxurl,
+ data: {
+ action: 'ctc_analyze',
+ stylesheet: stylesheet,
+ template: $.chldthmcfg.currparnt,
+ _wpnonce: $( '#_wpnonce' ).val(),
+ },
+ dataType: 'json',
+ type: 'POST'
+ } ).done( function( data ) {
+ if ( data.signals.httperr ) {
+ /**
+ * if both methods fail, there is a problem.
+ */
+ self.analysis[ themetype ].signals.failure = 1;
+ self.analysis[ themetype ].signals.httperr = data.signals.httperr;
+ } else {
+ self.parse_page( themetype, data.body );
+ }
+ $( document ).trigger( 'analysisdone' );
+ } ).fail( function( xhr, status, err ){
+ /**
+ * if xhr fails both times there is a bigger problem.
+ */
+ // console.log( xhr );
+ self.analysis[ themetype ].signals.failure = 1;
+ self.analysis[ themetype ].signals.xhrajaxerr = err;
+ $( document ).trigger( 'analysisdone' );
+ } );
+ } );
+ },
+ parse_page: function( themetype, body ){
+ var self = this,
+ themepath = window.ctcAjax.theme_dir,
+ //themepath = window.ctcAjax.theme_uri.replace( /^https?:\/\//, '' ),
+ stylesheet = ( 'child' === themetype ? $.chldthmcfg.currchild : $.chldthmcfg.currparnt ),
+ escaped = self.escrgx( $.chldthmcfg.currparnt ) + ( 'child' === themetype ? '|' + self.escrgx( stylesheet ) : '' ),
+ regex_link = new RegExp( " ]+?" +
+ self.escrgx( themepath ) + '/(' + escaped + ')/([^"\']+\\.css)(\\?[^"\']+)?["\'][^>]+>', 'gi' ),
+ regex_err = / \n[^\n]+?(fatal|strict|notice|warning|error)[\s\S]+? /gi,
+ themeloaded = 0, // flag when style.css link is detected
+ testloaded = 0, // flag when test link is detected
+ msg,
+ queue,
+ csslink;
+
+ // console.log( 'parsing page: ' + themetype );
+ if ( 'child' === themetype ) {
+ var parts = body.match( /^[\s\S]*?([\s\S]*?)<\/head>/ );
+ if ( parts ){
+ // console.log( parts[ 1 ] );
+ }
+ }
+ // retrieve enqueued stylesheet ids
+ if ( ( queue = body.match( /BEGIN WP REGISTERED\n([\s\S]*?)\nEND WP REGISTERED/ ) ) ) {
+ self.analysis[ themetype ].queue = queue[ 1 ].split(/\n/);
+ // console.log( 'QUEUE:' );
+ // console.log( self.analysis[ themetype ].queue );
+ } else {
+ self.analysis[ themetype ].queue = [];
+ self.analysis[ themetype ].signals.thm_noqueue = 1;
+ //self.analysis[ themetype ].signals.failure = 1;
+ // console.log( 'NO QUEUE' );
+ }
+ if ( ( queue = body.match( /BEGIN CTC IRREGULAR\n([\s\S]*?)\nEND CTC IRREGULAR/ ) ) ) {
+ self.analysis[ themetype ].irreg = queue[ 1 ].split(/\n/);
+ } else {
+ self.analysis[ themetype ].irreg = [];
+ }
+ if ( body.match( /CHLD_THM_CFG_IGNORE_PARENT/ ) ) {
+ self.analysis[ themetype ].signals.thm_ignoreparnt = 1;
+ // console.log( 'signal: thm_ignoreparnt' );
+ }
+ if ( body.match( /IS_CTC_THEME/ ) ) {
+ self.analysis[ themetype ].signals.thm_is_ctc = 1;
+ // console.log( 'signal: thm_is_ctc' );
+ }
+
+ if ( body.match( /NO_CTC_STYLES/ ) ) {
+ self.analysis[ themetype ].signals.thm_no_styles = 1;
+ // console.log( 'signal: thm_no_styles' );
+ }
+ if ( body.match( /HAS_CTC_IMPORT/ ) ) {
+ self.analysis[ themetype ].signals.thm_has_import = 1;
+ // console.log( 'signal: thm_has_import' );
+ }
+
+ if ( body.match( /HAS_WP_CACHE/ ) ) {
+ self.analysis[ themetype ].signals.thm_has_cache = 1;
+ // console.log( 'signal: thm_has_cache' );
+ }
+
+ if ( body.match( /HAS_WP_ROCKET/ ) ) {
+ self.analysis[ themetype ].signals.thm_has_wprocket = 1;
+ // console.log( 'signal: thm_has_wprocket' );
+ }
+
+ if ( body.match( /HAS_AUTOPTIMIZE/ ) ) {
+ self.analysis[ themetype ].signals.thm_has_autoptimize = 1;
+ // console.log( 'signal: thm_has_autoptimize' );
+ }
+
+ // remove comments to avoid flagging conditional stylesheets ( IE compatability, etc. )
+ body = body.replace( //g, '' );
+ // console.log( 'PARSE: ' + regex_link );
+ while ( ( msg = regex_err.exec( body ) ) ) {
+ var errstr = msg[ 0 ].replace( /<.*?>/g, '' );
+ self.phperr[ themetype ].push( errstr );
+ self.analysis[ themetype ].signals.err_php = 1;
+ if ( errstr.match( /Fatal error/i ) ) {
+ self.analysis[ themetype ].signals.err_fatal = 1;
+ // console.log( 'signal: err_fatal' );
+ }
+ //else if ( errstr.match( /(FileNotFoundException|Failed opening|failed to open stream)/i ) ) {
+ //analysis.signals.err_fnf = 1;
+ //}
+ }
+ while ( ( csslink = regex_link.exec( body ) ) ) {
+ var stylesheetid = self.trmcss( csslink[ 2 ] ),
+ stylesheettheme = csslink[ 3 ],
+ stylesheetpath = csslink[ 4 ],
+ linktheme = $.chldthmcfg.currparnt === stylesheettheme ? 'parnt' : 'child',
+ noid = 0;
+ // console.log( 'stylesheetid: ' + stylesheetid + ' stylesheetpath: ' + stylesheetpath );
+ // flag stylesheet links that have no id or are not in wp_styles
+ if ( '' === stylesheetid || -1 === self.analysis[ themetype ].queue.indexOf( stylesheetid ) ) {
+ noid = 1;
+ // console.log( 'no id for ' + stylesheetpath + ' in ' + themetype + '!' );
+ } else if ( 0 === stylesheetid.indexOf( 'chld_thm_cfg' ) ) { // handle ctc-generated links
+ // console.log( 'ctc link detected: ' + stylesheetid + ' in ' + themetype );
+ if ( stylesheetpath.match( /^ctc\-style.*?\.css$/ ) ) {
+ // console.log( 'separate stylesheet detected' );
+ themeloaded = 1;
+ self.analysis[ themetype ].signals.ctc_sep_loaded = 1; // flag that separate stylesheet has been detected
+ } else if ( stylesheetpath.match( /^ctc\-genesis([\-\.]min)?\.css$/ ) ) {
+ // console.log( 'genesis stylesheet detected' );
+ themeloaded = 1;
+ self.analysis[ themetype ].signals.ctc_gen_loaded = 1; // flag that genesis "parent" has been detected
+ } else if ( stylesheetid.match( /^chld_thm_cfg_ext/ ) ) {
+ // console.log( 'external stylesheet detected' );
+ // rtl test added v2.3.0
+ if ( stylesheetpath.match( /rtl.*?\.css$/ ) ) {
+ // console.log( 'flagging as RTL' );
+ self.analysis[ themetype ].signals.thm_rtl = 1;
+ // do not set dependency because all users may not use rtl
+ } else {
+ // console.log( 'adding external stylesheet dependency' );
+ self.analysis[ themetype ].signals.ctc_ext_loaded = 1; // flag that external stylesheet link detected
+ self.analysis[ themetype ].deps[ themeloaded ].push( [ stylesheetid, stylesheetpath, linktheme ] );
+ }
+ } else if ( 'chld_thm_cfg_child' === stylesheetid ) {
+ self.analysis[ themetype ].signals.ctc_child_loaded = 1; // flag that ctc child stylesheet link detected
+ self.analysis[ themetype ].deps[ themeloaded ].push( [ stylesheetid, stylesheetpath, linktheme ] );
+ // console.log( 'signal: ctc_child_loaded' );
+ } else if ( 'chld_thm_cfg_parent' === stylesheetid ) {
+ self.analysis[ themetype ].signals.ctc_parnt_loaded = 1; // flag that ctc parent stylesheet link detected
+ self.analysis[ themetype ].deps[ themeloaded ].push( [ stylesheetid, stylesheetpath, linktheme ] );
+ // console.log( 'signal: ctc_parnt_loaded' );
+ if ( themeloaded ){
+ // console.log( 'parent link out of sequence' );
+ self.analysis[ themetype ].signals.ctc_parnt_reorder = 1; // flag that ctc parent stylesheet link out of order
+ }
+ }
+ continue;
+ }
+ // flag main theme stylesheet link
+ if ( stylesheetpath.match( /^style.*?\.css$/ ) ) {
+ // console.log( linktheme + ' theme stylesheet detected: ' + stylesheettheme + '/' + stylesheetpath );
+ themeloaded = 1; // flag that main theme stylesheet has been detected
+ // if main theme stylesheet link has no id then it is unregistered ( hard-wired )
+ if ( 'parnt' === linktheme ) {
+ if ( noid ) {
+ self.analysis[ themetype ].signals.thm_parnt_loaded = 'thm_unregistered';
+ // console.log( 'signal: thm_parnt_loaded: thm_unregistered' );
+ } else {
+ self.analysis[ themetype ].signals.thm_parnt_loaded = stylesheetid;
+ // console.log( 'signal: thm_parnt_loaded: ' + stylesheetid );
+ // check that parent stylesheet is loaded before child stylesheet
+ if ( 'child' === themetype && self.analysis[ themetype ].signals.thm_child_loaded ) {
+ self.analysis[ themetype ].signals.ctc_parnt_reorder = 1;
+ // console.log( 'signal: ctc_parnt_reorder' );
+ }
+ }
+ } else {
+ self.analysis[ themetype ].signals.thm_child_loaded = noid ? 'thm_unregistered' : stylesheetid;
+ // console.log( 'signal: thm_child_loaded: ' + self.analysis[ themetype ].signals.thm_child_loaded );
+ }
+ if ( noid ) {
+ if ( testloaded ) {
+ self.analysis[ themetype ].signals.thm_past_wphead = 1;
+ self.analysis[ themetype ].deps[ themeloaded ].push( [ 'thm_past_wphead', stylesheetpath, linktheme ] );
+ // console.log( 'signal: thm_past_wphead (Unreachable theme stylesheet detected ' + stylesheetpath );
+ } else {
+ self.analysis[ themetype ].signals.thm_unregistered = 1;
+ self.analysis[ themetype ].deps[ themeloaded ].push( [ 'thm_unregistered', stylesheetpath, linktheme ] );
+ // console.log( 'signal: thm_unregistered (Unregistered theme stylesheet detected) ' + stylesheetpath );
+ }
+ } else {
+ self.analysis[ themetype ].deps[ themeloaded ].push( [ stylesheetid, stylesheetpath, linktheme ] );
+ // console.log( 'Theme stylesheet OK! ' + stylesheetid + ' ' + stylesheetpath );
+ }
+ // test for rtl because it may occur past test.css boundary and flag false positive
+ } else if ( stylesheetpath.match( /rtl.*?\.css$/ ) ) {
+ self.analysis[ themetype ].signals.thm_rtl = 1;
+ } else if ( stylesheetpath.match( /ctc\-test.*?\.css$/ ) ) { // flag test stylesheet link
+ // console.log( 'end of queue reached' );
+ testloaded = 1; // flag that test queue has been detected ( end of wp_head )
+ } else {
+ var err = null;
+ // if stylesheet link has id and loads before main theme stylesheet, add it as a dependency
+ // otherwise add it as a parse option
+ if ( noid ) {
+ err = 'dep_unregistered';
+ }
+ if ( testloaded ) {
+ if ( themeloaded ) {
+ // console.log( 'Unreachable stylesheet detected!' + stylesheetpath );
+ err = 'css_past_wphead';
+ } else {
+ err = 'dep_past_wphead';
+ }
+ }
+ // Flag stylesheet links that have no id and are loaded after main theme stylesheet.
+ // This indicates loading outside of wp_head()
+ if ( err ) {
+ self.analysis[ themetype ].signals[ err ] = 1;
+ stylesheetid = err;
+ } else {
+ self.dependencies[ stylesheetid ] = stylesheetpath;
+ }
+ self.analysis[ themetype ].deps[ themeloaded ].push( [ stylesheetid, stylesheetpath, linktheme ] );
+ }
+ }
+ if ( ! themeloaded ){
+ self.analysis[ themetype ].signals.thm_notheme = 1; // flag that no theme stylesheet has been detected
+ }
+ // console.log( 'analysis of ' + themetype + ':' );
+ // console.log( self.analysis[ themetype ] );
+ },
+
+ /**
+ * Uses analysis data to auto configure form, pass parameters
+ * for child theme setup and display results to user.
+ */
+ css_notice: function() {
+ // console.log( 'in css_notice' );
+ var self = this,
+ themetype = $.chldthmcfg.existing ? 'child' : 'parnt',
+ name = $.chldthmcfg.getname( themetype ),
+ hidden = '',
+ notice = {
+ notices: [],
+ },
+ errnotice = {
+ style: 'notice-warning',
+ headline: $.chldthmcfg.getxt( 'anlz3', name ),
+ errlist: '',
+ msg: $.chldthmcfg.getxt( 'anlz7' )
+ },
+ resubmitdata= {},
+ anlz,
+ debugtxt = '',
+ dep_inputs,
+ errflags = {};
+ // test if CTC is unable to load theme page at all
+ if ( self.analysis[ themetype ].signals.failure ||
+ ( self.analysis[ themetype ].signals.thm_noqueue && !self.phperr[ themetype ].length ) ) {
+ debugtxt = $.chldthmcfg.getxt( 'anlz33' ).replace(/%1/, '' ).replace( /%2/, ' ' );
+ notice.notices.push( {
+ headline: $.chldthmcfg.getxt( 'anlz4', name ),
+ msg: $.chldthmcfg.getxt( 'anlz5' ) + debugtxt,
+ style: 'notice-warning'
+ } );
+ } else {
+ // test for PHP errors in loaded theme page
+ if ( self.phperr[ themetype ].length ) {
+ $.each( self.phperr[ themetype ], function( index, err ) {
+ if ( err.match( /Fatal error/i ) ) {
+ errflags.fatal = 1;
+ }
+ if ( err.match( /Constant \w+ already defined in .+?wp-config.php/i ) ){
+ errflags.config = 1;
+ }
+ /*
+ if ( $.chldthmcfg.existing && err.match( /(FileNotFoundException|Failed opening|failed to open stream)/i ) ) {
+ // console.log( 'Probably using get_stylesheet_directory()' );
+ notice.subhead = 'A file cannot be found in the Child Theme\'s directory.';
+ }
+ */
+ errnotice.errlist += err + "\n";
+ } );
+ // highlight fatal errors in red
+ if ( errflags.fatal ){
+ errnotice.style = 'error';
+ errnotice.headline = $.chldthmcfg.getxt( 'anlz8', name );
+ }
+ // otherwise display errors as warnings
+ if ( errflags.config ){
+ errnotice.msg = $.chldthmcfg.getxt( 'anlzconfig', name ) + errnotice.msg;
+ }
+ errnotice.msg = '' +
+ '
' +
+ $.chldthmcfg.getxt( 'anlz6' ) + '
' +
+ '
' +
+ errnotice.errlist + '
' +
+ errnotice.msg;
+ notice.notices.push( errnotice );
+ }
+ // check for wp rocket + autoptimize combo & skip other analysis
+ if ( self.analysis[ themetype ].signals.thm_has_wprocket && self.analysis[ themetype ].signals.thm_has_autoptimize ){
+ notice.notices.push( {
+ headline: $.chldthmcfg.getxt( 'anlzcache1' ),
+ style: 'notice-warning',
+ msg: $.chldthmcfg.getxt( 'anlzcache2' )
+ } );
+ } else if ( !self.analysis[ themetype ].signals.thm_noqueue ) { // !errflags.fatal &&
+ // test for stylesheet links past wp head and set repair flag input if necessary
+ if ( self.analysis[ themetype ].signals.thm_past_wphead || self.analysis[ themetype ].signals.dep_past_wphead ) {
+ // || self.analysis[ themetype ].signals.css_past_wphead ){
+ notice.notices.push( {
+ headline: $.chldthmcfg.getxt( 'anlz9' ),
+ style: 'notice-warning',
+ msg: $.chldthmcfg.getxt( 'anlz10' )
+ } );
+ $( '#ctc_repairheader' ).prop( 'checked', true );
+ $( '#ctc_repairheader_container' ).show();
+ }
+ // test for unregistered stylesheet links
+ if ( self.analysis[ themetype ].signals.thm_unregistered ) {
+ if (
+ !self.analysis[ themetype ].signals.ctc_child_loaded &&
+ !self.analysis[ themetype ].signals.ctc_sep_loaded ){
+ // test for stylesheet enqueue issues
+ notice.notices.push( {
+ headline: $.chldthmcfg.getxt( 'anlz11' ),
+ style: 'notice-warning',
+ msg: $.chldthmcfg.getxt( 'anlz12' )
+ } );
+ $( '#ctc_repairheader_container' ).show();
+ $( '#ctc_repairheader' ).prop( 'checked', true );
+ }
+ }
+ if ( 'child' === themetype ) {
+ // test if theme mods should be copied
+ if ( window.ctcAjax.copy_mods && window.ctcAjax.copy_mods.length > 1 ){
+ //console.log( 'copy theme mods', window.ctcAjax.copy_mods );
+ resubmitdata.ctc_copy_mods = 1;
+ resubmitdata.ctc_copy_from = window.ctcAjax.copy_mods[ 0 ];
+ resubmitdata.ctc_copy_to = window.ctcAjax.copy_mods[ 1 ];
+ }
+ // test for reorder flag
+ if ( self.analysis.child.signals.ctc_parnt_reorder ) {
+ // console.log( 'reorder flag detected, resubmitting.' );
+ }
+ // test for presence of a child theme stylesheet
+ if ( !self.analysis.child.signals.ctc_child_loaded &&
+ !self.analysis.child.signals.ctc_sep_loaded &&
+ !self.analysis.child.signals.thm_child_loaded ){
+ notice.notices.push( {
+ headline: $.chldthmcfg.getxt( 'anlz13' ),
+ style: 'notice-warning',
+ msg: $.chldthmcfg.getxt( 'anlz14' )
+ } );
+ }
+ // test for deprecated Genesis methods
+ if ( self.analysis[ themetype ].signals.ctc_gen_loaded ) {
+ notice.notices.push( {
+ headline: $.chldthmcfg.getxt( 'anlz31' ),
+ msg: $.chldthmcfg.getxt( 'anlz32' ),
+ style: 'notice-warning'
+ } );
+ }
+ // test for presence of parent stylesheet or ignore parent flag
+ if ( !self.analysis.parnt.signals.thm_no_styles &&
+ !self.analysis.child.signals.ctc_gen_loaded &&
+ !self.analysis.child.signals.thm_parnt_loaded &&
+ !self.analysis.child.signals.ctc_parnt_loaded &&
+ !self.analysis.child.signals.thm_ignoreparnt &&
+ !self.analysis.child.signals.thm_has_import ){
+ notice.notices.push( {
+ headline: $.chldthmcfg.getxt( 'anlz15' ),
+ style: 'notice-warning',
+ msg: $.chldthmcfg.getxt( 'anlz16' )
+ } );
+ }
+ // test for redundant stylesheet link (old CTC version)
+ if ( self.analysis.child.signals.thm_unregistered &&
+ self.analysis.child.signals.thm_child_loaded &&
+ 'thm_unregistered' === self.analysis.child.signals.thm_child_loaded &&
+ self.analysis.child.signals.ctc_child_loaded &&
+ self.analysis.child.signals.ctc_parnt_loaded ) {
+ notice.notices.push( {
+ headline: $.chldthmcfg.getxt( 'anlz28' ),
+ style: 'notice-warning',
+ msg: $.chldthmcfg.getxt( 'anlz29' )
+ } );
+ $( '#ctc_repairheader_container' ).show();
+ $( '#ctc_repairheader' ).prop( 'checked', true );
+ }
+ // test for unconfigured non-CTC child theme
+ if ( !self.analysis.child.signals.thm_is_ctc &&
+ !$( '#ctc_child_type_duplicate' ).is( ':checked' ) ) {
+ notice.notices.push( {
+ headline: $.chldthmcfg.getxt( 'anlz19' ),
+ msg: $.chldthmcfg.getxt( 'anlz20' ),
+ style: 'notice-warning'
+ } );
+ }
+ }
+
+ // test for additional stylesheets that switched from parent to child
+ if ( 'object' !== typeof window.ctcAjax.swappath ){
+ window.ctcAjax.swappath = {};
+ }
+ $.each( self.analysis.parnt.deps[ 0 ], function( ndx, el ) {
+ $.each( self.analysis.child.deps[ 0 ], function( ndx2, el2 ) {
+ if ( el2[ 0 ] === el[ 0 ] && el2[ 2 ] !== el[ 2 ] ){
+ // this one changed
+ //console.log( 'link path changed', el, el2 );
+ self.analysis.parnt.swaps.push( el2 );
+ window.ctcAjax.swappath[ el2[ 0 ] ] = el2[ 1 ];
+ }
+ } );
+ } );
+
+
+ // set stylesheet handling method input
+ if ( self.analysis[ themetype ].signals.ctc_sep_loaded || self.analysis[ themetype ].signals.ctc_gen_loaded ){
+ // console.log( 'Separate stylesheet detected' );
+ $( '#ctc_handling_separate' ).prop( 'checked', true );
+ }
+ // if no notices, display OK message
+ if ( !notice.notices.length ) {
+ notice.notices.push( {
+ headline: '' + ( 'child' === themetype ? $.chldthmcfg.getxt( 'anlz17' ) : $.chldthmcfg.getxt( 'anlz18' ) ) + '',
+ style: 'updated',
+ msg: ''
+ } );
+ }
+ // if using @import, display warning
+ if ( 'child' === themetype && self.analysis.child.signals.thm_has_import ) {
+ notice.notices.push( {
+ headline: $.chldthmcfg.getxt( 'anlz21' ),
+ msg: $.chldthmcfg.getxt( 'anlz22' ),
+ style: 'notice-warning'
+ } );
+ // console.log( 'Import parent detected' );
+ $( '#ctc_enqueue_import' ).prop( 'checked', true );
+ }
+ // set ignore parent input
+ if ( self.analysis[ themetype ].signals.thm_ignoreparnt || self.analysis[ themetype ].signals.ctc_gen_loaded ){
+ // console.log( 'Ignore parent detected' );
+ $( '#ctc_ignoreparnt' ).prop( 'checked', true );
+ // resubmit if this requires a change
+ if ( !$( '#ctc_enqueue_none' ).is( ':checked' ) ) {
+ $( '#ctc_enqueue_none' ).prop( 'checked', true );
+ resubmitdata.ctc_enqueue = 'none';
+ }
+ } else {
+ $( '#ctc_ignoreparnt' ).prop( 'checked', false );
+ }
+ // test for additional stylesheets after main theme stylesheet
+ if ( !self.analysis[ themetype ].signals.ctc_sep_loaded &&
+ !self.analysis[ themetype ].signals.ctc_gen_loaded &&
+ !self.analysis[ themetype ].signals.ctc_child_loaded &&
+ !self.analysis[ themetype ].signals.thm_unregistered &&
+ !self.analysis[ themetype ].signals.thm_past_wphead &&
+ self.analysis[ themetype ].deps[ 1 ].length ) {
+ var sheets = '';
+ $.each( self.analysis[ themetype ].deps[ 1 ], function( ndx, el ) {
+ if ( el[ 1 ].match( /^style.*?\.css$/ ) ) { return; }
+ sheets += ' ' + el[ 1 ] + " \n";
+ } );
+ if ( '' !== sheets ) {
+ sheets = "
\n";
+ notice.notices.push( {
+ headline: $.chldthmcfg.getxt( 'anlz23' ),
+ msg: sheets + $.chldthmcfg.getxt( 'anlz24' ),
+ style: 'updated'
+ } );
+ }
+ }
+ // test if theme is already loading parent stylesheet from child theme and resubmit
+ if ( 'child' === themetype && self.analysis[ themetype ].signals.thm_parnt_loaded ) {
+ notice.notices.push( {
+ headline: $.chldthmcfg.getxt( 'anlz25' ),
+ msg: $.chldthmcfg.getxt( 'anlz26' ),
+ style: 'updated'
+ } );
+ $( '#ctc_enqueue_none' ).prop( 'checked', true );
+ resubmitdata.ctc_enqueue = 'none';
+ }
+ // test if no parent styles, no need to enqueue and resubmit
+ if ( self.analysis.parnt.signals.thm_no_styles ) {
+ //if ( !$( '#ctc_enqueue_none' ).is( ':checked' ) ) {
+ notice.notices.push( {
+ headline: $.chldthmcfg.getxt( 'anlz27' ),
+ msg: $.chldthmcfg.getxt( 'anlz26' ),
+ style: 'updated'
+ } );
+ //}
+ $( '#ctc_enqueue_none' ).prop( 'checked', true );
+ resubmitdata.ctc_enqueue = 'none';
+ }
+ }
+ }
+
+ /**
+ * Auto-configure parameters
+ * After initial configuration, the parent and child themes are analyzed again
+ * and resubmitted to save any changes that occur in the child theme.
+ */
+ hidden = encodeURIComponent( JSON.stringify( self.analysis ) );
+
+ $( 'input[name="ctc_analysis"]' ).val( hidden );
+
+ if ( self.is_success()
+ && !self.resubmitting ){
+ resubmitdata.ctc_analysis = hidden;
+ self.resubmitting = 1;
+ self.resubmit( resubmitdata );
+ return;
+ } else {
+
+ self.resubmitting = 0;
+ self.hide_loading();
+ $.each( notice.notices, function( ndx, notice ){
+ // console.log( notice );
+ var $out = $( '
' +
+ '
' + notice.headline + ' ' +
+ notice.msg +
+ '' );
+ $.chldthmcfg.bind_dismiss( $out );
+ $out.hide().appendTo( '#' + themetype + '_analysis_notice' ).slideDown();
+ } );
+
+ //if ( $( '#ctc_is_debug' ).is( ':checked' ) ) {
+ anlz = '
' +
+ '
' +
+ $.chldthmcfg.getxt( 'anlz30' ) +
+ '
' +
+ '
' +
+ '' +
+ JSON.stringify( self.analysis, null, 2 ) +
+ '
';
+
+ $( anlz ).appendTo( '#' + themetype + '_analysis_notice' );
+
+ //}
+
+ // v2.1.3 remove stylesheet dependencies
+ dep_inputs = '';
+ // console.log( self.dependencies );
+ $.each( self.dependencies, function( ndx, el ){
+ // console.log( 'setting dependecy: ' + ndx + ' ' + el );
+ if ( el ) {
+ dep_inputs += '
' + ndx + "\n";
+ }
+ });
+ // console.log( 'dep_inputs: ' + dep_inputs.length );
+ if ( dep_inputs.length ){
+ $( '#ctc_dependencies' ).html( dep_inputs );
+ $( '#ctc_dependencies_container' ).show();
+ } else {
+ $( '#ctc_dependencies' ).empty();
+ $( '#ctc_dependencies_container' ).hide();
+ }
+
+
+ if ( !$( '#ctc_child_type_reset' ).is( ':checked' ) ) {
+ $( '#input_row_stylesheet_handling_container,#input_row_parent_handling_container,#ctc_child_header_parameters,#ctc_configure_submit' ).slideDown( 'fast' );
+ if ( $( '#ctc_child_type_duplicate' ).is( ':checked' ) ) {
+ $( '#ctc_configure_submit .ctc-step' ).text( '8' );
+ $( '#ctc_copy_theme_mods' ).find( 'input' ).prop( 'checked', false );
+ } else {
+ $( '#ctc_configure_submit .ctc-step' ).text( '9' );
+ $( '#ctc_copy_theme_mods' ).slideDown( 'fast' );
+ }
+ if ( $( '#ctc_child_type_duplicate' ).is( ':checked' ) || $( '#ctc_child_type_new' ).is( ':checked' ) ) {
+ $( '#input_row_theme_slug' ).hide();
+ $( '#input_row_new_theme_slug' ).slideDown( 'fast' );
+ } else {
+ $( '#input_row_new_theme_slug' ).hide();
+ $( '#input_row_theme_slug' ).slideDown( 'fast' );
+ }
+ }
+ // console.log( 'end css_notice' );
+ }
+ },
+ resubmit: function( data ) {
+ var self = this;
+ self.hide_loading();
+ self.show_loading( true );
+ data.action = 'ctc_update';
+ data._wpnonce = $( '#_wpnonce' ).val();
+ //console.log( '=====>>> RESUBMIT CALLED! <<<=====' );
+ //console.log( data );
+ //console.log( self.analysis );
+ $.ajax( {
+ url: window.ctcAjax.ajaxurl,
+ data: data,
+ dataType: 'json',
+ type: 'POST'
+ } ).done( function( res ) { // response ) {
+ // console.log( 'resubmit done:' );
+ //console.log( res )
+ if ( res.length > 1 ) {
+ $( '#ctc_debug_box' ).val( $( '#ctc_debug_box' ).val() + res[ 1 ].data );
+ }
+ self.hide_loading();
+ self.do_analysis();
+ } ).fail( function() { // xhr, status, err ) {
+ //self.do_analysis();
+ self.hide_loading();
+ // console.log( status + ' ' + err );
+ // FIXME: handle failure
+ } );//.always( self.update.debug );
+ },
+ do_analysis: function() {
+ var self = this;
+ self.analysis = {
+ parnt: {
+ deps: [[],[]],
+ signals: {
+ failure: 0
+ },
+ queue: [],
+ irreg: [],
+ swaps: []
+ },
+ child: {
+ deps: [[],[]],
+ signals: {
+ failure: 0
+ },
+ queue: [],
+ irreg: [],
+ swaps: []
+ }
+ };
+ self.phperr = { parnt: [], child: [] };
+ self.dependencies = {};
+ self.done = 0;
+ self.show_loading( false );
+ self.analyze_theme( 'parnt' );
+ if ( $.chldthmcfg.existing ) {
+ // run customizer to initialize new theme
+ if ( self.resubmitting ){
+ self.analyze_theme( 'child' );
+ } else {
+ // console.log( 'calling ' + window.ctcAjax.customizerurl + '?theme=' + $.chldthmcfg.currchild + ' ...' );
+ $.get( window.ctcAjax.customizerurl + '?theme=' + $.chldthmcfg.currchild, function(){ //data ){
+ self.analyze_theme( 'child' );
+ //console.log( data );
+ } );//.done().fail();
+ }
+ }
+ //$( '#ctc_enqueue_enqueue' ).prop( 'checked', true );
+ //$( '#ctc_handling_primary' ).prop( 'checked', true );
+ //$( '#ctc_ignoreparent' ).prop( 'checked', false );
+ },
+ // initialize object vars, bind event listeners to elements, load menus and start plugin
+ init: function() {
+ // console.log( 'initializing...' )
+ var self = this;
+ // ajax request done
+ $( document ).on( 'analysisdone', function(){
+ self.done++;
+ // console.log( 'analysis came home ' + self.done );
+ // console.log( 'existing: ' + $.chldthmcfg.existing );
+ // console.log( 'parent: ' + $( '#ctc_theme_parnt' ).val() );
+ // all ajax requests done
+ if ( self.done > $.chldthmcfg.existing ){
+ // console.log( 'analysis complete!' );
+ self.done = 0;
+ self.css_notice();
+ }
+ } );
+ // run analyzer on demand
+ $( '#ctc_main' ).on( 'click', '.ctc-analyze-theme', function() {
+ if ( self.is_success() ) {
+ $.chldthmcfg.dismiss_notice( $( '.ctc-success-response' ).parent( '.notice' ) );
+ }
+ self.do_analysis();
+ } );
+ // if page is success response run the analyzer on load
+ if ( self.is_success() && !window.ctcAjax.pluginmode ) {
+ self.do_analysis();
+ }
+ },
+ analysis: {}, // analysis signals object
+ done: 0, // analysis semphore
+ resubmitting: 0, // resubmit semaphore
+ dependencies: {}, // addl stylesheets that may require dependencies
+ is_success: function(){
+ return $( '.ctc-success-response' ).length;
+ }
+ };
+ // don't initialize if this is FTP request
+ if (!$( '#request-filesystem-credentials-form' ).length ){
+ $.chldthmcfg.init();
+ $.chldthmanalyze.init();
+ }
+} ( jQuery ) );
+
diff --git a/wp-content/plugins/child-theme-configurator/js/chldthmcfg.min.js b/wp-content/plugins/child-theme-configurator/js/chldthmcfg.min.js
new file mode 100644
index 0000000..5bb5224
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/js/chldthmcfg.min.js
@@ -0,0 +1,2 @@
+!function(e){"use strict";e.chldthmcfg={escquo:function(e){var t=this;return t.is_empty(e)?e:e.toString().replace(/"/g,""")},getxt:function(e,t){var c=window.ctcAjax[e+"_txt"];return c?(t&&(c=c.replace(/%s/,t)),c):""},getname:function(t){var c=this,n="child"===t?e.chldthmcfg.currchild:e.chldthmcfg.currparnt;return c.is_empty(window.ctcAjax.themes[t][n])?"":window.ctcAjax.themes[t][n].Name},frascii:function(e){var t=parseInt(e),c=String.fromCharCode(t);return c},toascii:function(e){var t=e.charCodeAt(0);return t},is_empty:function(e,t){if("undefined"==typeof e||!1===e||null===e||""===e)return!0;if("undefined"!=typeof t&&"0"===e||0===e)return!0;if(!0===e||"string"==typeof e||"number"==typeof e)return!1;if("object"==typeof e){for(var c in e)if(e.hasOwnProperty(c))return!1;return!0}return!1},theme_exists:function(t,c){var n=!1;return e.each(window.ctcAjax.themes,function(a,s){return e.each(s,function(e,s){return s=null,e.toLowerCase()!==t.toLowerCase()||"parnt"!==a&&"new"!==c?void 0:(n=!0,!1)}),n?!1:void 0}),n},validate:function(){var t=this,c=/[^\w\-]/g,n=e("#ctc_child_template").length?e("#ctc_child_template").val().toString().replace(c):"",a=e("#ctc_theme_child").length&&!t.is_empty(e("#ctc_theme_child").val())?e("#ctc_theme_child").val().toString().replace(c):n,s=e("input[name=ctc_child_type]:checked").val(),i=[];return"new"===s&&(a=n),t.theme_exists(a,s)&&i.push(t.getxt("theme_exists").toString().replace(/%s/,a)),t.is_empty(a)&&i.push(t.getxt("inval_theme")),i.length?(t.set_notice({error:i}),!1):"reset"===s?!!confirm(t.getxt("load")):!0},autogen_slugs:function(){if(e("#ctc_theme_parnt").length){for(var t=this,c=e("#ctc_theme_parnt").val(),n=e("#ctc_theme_child").length?e("#ctc_theme_child").val():"",a=""!==n&&e("#ctc_child_type_duplicate").is(":checked")?n:c+"-child",s=a,i=""!==n&&e("#ctc_child_type_duplicate").is(":checked")?e.chldthmcfg.getname("child"):e.chldthmcfg.getname("parnt")+" Child",l="",r="",o="00";t.theme_exists(s,"new");)l=t.is_empty(l)?2:l+1,r=o.substring(0,o.length-l.toString().length)+l.toString(),s=a+r;t.testslug=s,t.testname=i+(r.length?" "+r:"")}},focus_panel:function(t){var c=t+"_panel";e(".nav-tab").removeClass("nav-tab-active"),e(".ctc-option-panel").removeClass("ctc-option-panel-active"),e(t).addClass("nav-tab-active"),e(".ctc-option-panel-container").scrollTop(0),e(c).addClass("ctc-option-panel-active")},maybe_show_rewrite:function(){var t,c,n=this;e(".ctc-rewrite-toggle").each(function(a,s){t=e(s).hasClass("rewrite-query")?"query":"selector",c=e("#ctc_sel_ovrd_"+t+"_selected").text(),c.match(/^[\s\u00A0]*$/)?e(s).hide():(e(s).text(n.getxt("rename")),e(s).show())})},selector_input_toggle:function(t){var c,n=this,a=e(t).hasClass("rewrite-query")?"query":"selector",s="ctc_rewrite_"+a,i="ctc_sel_ovrd_"+a+"_selected";e("#"+s).length?(c=e("#"+s+"_orig").val(),e("#"+i).empty().text(c),e(t).text(n.getxt("rename"))):(c=e("#"+i).text(),e("#"+i).html('
'),e("#"+s).val(c),e(t).text(n.getxt("cancel")))},coalesce_inputs:function(t){var c=this,n=e(t).attr("id"),a=/^(ctc_(ovrd|\d+)_(parent|child)_([0-9a-z\-]+)_(\d+?)(_(\d+))?)(_\w+)?$/,s=e(t).parents(".ctc-selector-row, .ctc-parent-row").first(),i=s.find(".ctc-swatch").first(),l={parent:{},child:{}},r={parent:{origin:"",start:"",end:""},child:{origin:"",start:"",end:""}},o={child:!1,parent:!1},_={};return s.find(".ctc-parent-value, .ctc-child-value").each(function(){var t,s,i=e(this).attr("id"),d=i.toString().match(a),u=d[2],h=d[3],p="undefined"==typeof d[4]?"":d[4],m=d[7],g=d[5],f="undefined"==typeof d[7]?"":d[8],y="parent"===h?e(this).text().replace(/!$/,""):"seq"!==p&&"ctc_delete_query_selector"===n?"":e(this).val(),v="seq"===p?!1:"ctc_"+u+"_child_"+p+"_i_"+g+"_"+m;if("child"===h&&(c.is_empty(e(this).data("color"))||(y=c.color_text(e(this).data("color")),e(this).data("color",null)),_[i]=y,v&&(_[v]=e("#"+v).is(":checked")?1:0)),""!==y)if(c.is_empty(f))if(t=p.toString().match(/^border(\-(top|right|bottom|left))?$/)&&!y.match(/none/)){var w=new RegExp(c.border_regx+c.color_regx,"i");s=y.toString().match(w),c.is_empty(s)||(s.shift(),l[h][p+"-width"]=s.shift()||"",s.shift(),l[h][p+"-style"]=s.shift()||"",l[h][p+"-color"]=s.shift()||"")}else if("background-image"!==p||y.match(/none/))"seq"!==p&&(l[h][p]=y);else if(y.toString().match(/url\(/))l[h]["background-image"]=c.image_url(h,y);else{var x=new RegExp(c.grad_regx+c.color_regx+c.color_regx,"i");s=y.toString().match(x),!c.is_empty(s)&&s.length>2?(s.shift(),r[h].origin=s.shift()||"top",r[h].start=s.shift()||"transparent",r[h].end=s.shift()||"transparent",o[h]=!0):l[h]["background-image"]=y}else switch(f){case"_border_width":l[h][p+"-width"]="none"===y?0:y;break;case"_border_style":l[h][p+"-style"]=y;break;case"_border_color":l[h][p+"-color"]=y;break;case"_background_url":l[h]["background-image"]=c.image_url(h,y);break;case"_background_color":l[h]["background-color"]=y;break;case"_background_color1":r[h].start=y,o[h]=!0;break;case"_background_color2":r[h].end=y,o[h]=!0;break;case"_background_origin":r[h].origin=y,o[h]=!0}}),"undefined"==typeof i||c.is_empty(i.attr("id"))||(i.removeAttr("style"),o.parent&&i.ctcgrad(r.parent.origin,[r.parent.start,r.parent.end]),i.css(l.parent),i.attr("id").toString().match(/parent/)||(o.child&&i.ctcgrad(r.child.origin,[r.child.start,r.child.end]),i.css(l.child)),i.css({"z-index":-1})),_},decode_value:function(e,t){t="undefined"==typeof t?"":t;var c,n=this,a={orig:t,names:[""],values:[t]};if(e.toString().match(/^border(\-(top|right|bottom|left))?$/)){var s,i=new RegExp(n.border_regx+"("+n.color_regx+")?","i");c=t.toString().match(i),n.is_empty(c)&&(c=[]),a.names=["_border_width","_border_style","_border_color"],s=c.shift(),a.values[0]=c.shift()||"",c.shift(),a.values[1]=c.shift()||"",c.shift(),a.values[2]=c.shift()||""}else if(e.toString().match(/^background\-image/))if(a.names=["_background_url","_background_origin","_background_color1","_background_color2"],a.values=["","","",""],n.is_empty(t)||t.toString().match(/(url|none)/))a.values[0]=t;else{var l,r;c=t.toString().split(/:/),a.values[1]=c.shift()||"",a.values[2]=c.shift()||"",l=c.shift()||"",a.values[3]=c.shift()||"",r=c.shift()||"",a.orig=[a.values[1],a.values[2],a.values[3]].join(" ")}return a},image_url:function(e,t){var c,n=this,a=t.toString().match(/url\(['" ]*(.+?)['" ]*\)/),s=n.is_empty(a)?null:a[1],i=window.ctcAjax.theme_uri+"/"+("parent"===e?window.ctcAjax.parnt:window.ctcAjax.child)+"/";return s?c=s.toString().match(/^(data:|https?:|\/)/)?t:"url("+i+s+")":!1},setup_menus:function(){var e=this;e.setup_query_menu(),e.setup_selector_menu(),e.setup_rule_menu(),e.setup_new_rule_menu(),e.load_queries(),e.load_rules(),e.set_query(e.currquery)},load_queries:function(){var e=this;e.query_css("queries",null)},load_selectors:function(){var e=this;e.query_css("selectors",e.currquery)},load_rules:function(){var e=this;e.query_css("rules",null)},load_selector_values:function(){var e=this;e.query_css("qsid",e.currqsid)},get_queries:function(t,c){var n=[],a=new RegExp(e.ui.autocomplete.escapeRegex(t.term),"i");e.chldthmcfg.is_empty(this.element.data("menu"))?n.push({label:window.ctcAjax.nosels_txt,value:null}):e.each(this.element.data("menu"),function(e,t){a.test(t)&&n.push({label:t,value:t})}),c(n)},get_selectors:function(t,c){var n=[],a=new RegExp(e.ui.autocomplete.escapeRegex(t.term),"i");e.chldthmcfg.is_empty(this.element.data("menu"))?n.push({label:window.ctcAjax.nosels_txt,value:null}):e.each(this.element.data("menu"),function(e,t){a.test(e)&&n.push({label:e,value:t})}),c(n)},get_rules:function(t,c){var n=[],a=new RegExp(e.ui.autocomplete.escapeRegex(t.term),"i");e.chldthmcfg.is_empty(this.element.data("menu"))?n.push({label:window.ctcAjax.nosels_txt,value:null}):e.each(this.element.data("menu"),function(e,t){a.test(e)&&n.push({label:e,value:t})}),c(n)},get_filtered_rules:function(t,c){var n=[],a=new RegExp(e.ui.autocomplete.escapeRegex(t.term),"i");e.each(e("#ctc_rule_menu").data("menu"),function(e,t){a.test(e)&&n.push({label:e,value:t})}),c(n)},merge_ruleval_arrays:function(t,c,n){var a=this,s={},i=n?c.child.pop():null;return e.each(["parnt","child"],function(t,l){a.is_empty(c[l])||e.each(c[l],function(e,t){n?parseInt(t[2])>=parseInt(i[2])&&(i[2]=parseInt(t[2])+1):(a.is_empty(s[t[2]])&&(s[t[2]]={}),s[t[2]][l]=t)})}),n&&(s[i[2]]={parnt:[],child:i}),s},input_row:function(t,c,n,a,s){var i=this,l="";if(!i.is_empty(a)&&!i.is_empty(a.value)&&!i.is_empty(a.value[c])){var r=a.value[c],o=i.merge_ruleval_arrays(c,r,s);e.each(o,function(s,r){var o=i.decode_value(c,i.is_empty(r.parnt)?"":r.parnt[0]),_=i.is_empty(r.parnt)||i.is_empty(r.parnt[1],1)?0:1,d=i.decode_value(c,i.is_empty(r.child)?"":r.child[0]),u=i.is_empty(r.child)||i.is_empty(r.child[1],1)?0:1;if(l+='
'+(i.is_empty(o.orig)?"[no value]":o.orig+(_?i.getxt("important"):""))+'
","ovrd"!==n&&(l+='
'+i.getxt("swatch")+'
'),l+="
\n"})}return l},scrolltop:function(){e("html, body, .ctc-option-panel-container").animate({scrollTop:0})},css_preview:function(e){var t=this;(e=e.match(/(child|parnt)/)[1])||(e="child"),t.query_css("preview",e)},setup_iris:function(e){var t=this;t.setup_spectrum(e)},setup_spectrum:function(t){var c=this,n=!c.is_empty(window.ctcAjax.palette);try{e(t).spectrum({showInput:!0,allowEmpty:!0,showAlpha:!0,showInitial:!0,preferredFormat:"hex",clickoutFiresChange:!0,move:function(n){e(t).data("color",n),c.coalesce_inputs(t)},showPalette:!!n,showSelectionPalette:!!n,palette:[],maxSelectionSize:36,localStorageKey:"ctc-palette."+window.ctcAjax.child,hideAfterPaletteSelect:!0}).on("change",function(){c.coalesce_inputs(this)}).on("keyup",function(){var t=this,n=c.addhash(e(this).val());e(t).val(n),clearTimeout(e(this).data("spectrumTimer")),e(this).data("spectrumTimer",setTimeout(function(){c.coalesce_inputs(t),e(t).spectrum("set",n)},500))})}catch(a){c.jquery_exception(a,"Spectrum Color Picker")}},addhash:function(e){return e.replace(/^#?([a-f0-9]{3,6}.*)/,"#$1")},color_text:function(e){var t=this;return t.is_empty(e)?"":e.getAlpha()<1?e.toRgbString():e.toHexString()},setup_query_menu:function(){var t=this;try{e("#ctc_sel_ovrd_query").autocomplete({source:t.get_queries,minLength:0,selectFirst:!0,autoFocus:!0,select:function(c,n){return e("#ctc_rewrite_query").length?(e("#ctc_rewrite_query").val(n.item.value),e("#ctc_sel_ovrd_query").val("")):(t.set_query(n.item.value),t.reset_qsid()),!1},focus:function(e){e.preventDefault()}}).data("menu",{})}catch(c){t.jquery_exception(c,"Query Menu")}},setup_selector_menu:function(){var t=this;try{e("#ctc_sel_ovrd_selector").autocomplete({source:t.get_selectors,selectFirst:!0,autoFocus:!0,select:function(c,n){return e("#ctc_rewrite_selector").length?(e("#ctc_rewrite_selector").val(n.item.label),e("#ctc_sel_ovrd_selector").val("")):t.set_selector(n.item.value,n.item.label),!1},focus:function(e){e.preventDefault()}}).data("menu",{})}catch(c){t.jquery_exception(c,"Selector Menu")}},setup_rule_menu:function(){var t=this;try{e("#ctc_rule_menu").autocomplete({source:t.get_rules,selectFirst:!0,autoFocus:!0,select:function(e,c){return t.set_rule(c.item.value,c.item.label),!1},focus:function(e){e.preventDefault()}}).data("menu",{})}catch(c){t.jquery_exception(c,"Property Menu")}},setup_new_rule_menu:function(){var t=this;try{e("#ctc_new_rule_menu").autocomplete({source:t.get_filtered_rules,selectFirst:!0,autoFocus:!0,select:function(c,n){c.preventDefault();var a,s,i=n.item.label.replace(/[^\w\-]/g,t.toascii);return t.is_empty(t.currdata.value)&&(t.currdata.value={}),t.is_empty(t.currdata.value[n.item.label])&&(t.currdata.value[n.item.label]={}),t.is_empty(t.currdata.value[n.item.label].child)&&(t.currdata.value[n.item.label].child=[]),t.currdata.value[n.item.label].child.push(["",0,1,1]),a=e(t.input_row(t.currqsid,i,"ovrd",t.currdata,!0)),e("#ctc_sel_ovrd_rule_inputs").append(a),e("#ctc_new_rule_menu").val(""),a.find('input[type="text"]').each(function(c,n){s||(s=n),e(n).hasClass("color-picker")&&t.setup_spectrum(n)}),s&&e(s).focus(),!1},focus:function(e){e.preventDefault()}}).data("menu",{})}catch(c){t.jquery_exception(c,"New Property Menu")}},set_theme_params:function(t,c){e("#ctc_child_author").val(window.ctcAjax.themes[t][c].Author),e("#ctc_child_version").val(window.ctcAjax.themes[t][c].Version),e("#ctc_child_authoruri").val(window.ctcAjax.themes[t][c].AuthorURI),e("#ctc_child_themeuri").val(window.ctcAjax.themes[t][c].ThemeURI),e("#ctc_child_descr").val(window.ctcAjax.themes[t][c].Descr),e("#ctc_child_tags").val(window.ctcAjax.themes[t][c].Tags)},update_form:function(){var t,c=this;e("#input_row_stylesheet_handling_container,#input_row_parent_handling_container,#ctc_additional_css_files_container,#input_row_new_theme_slug,#input_row_duplicate_theme_slug,#ctc_copy_theme_mods,#ctc_child_header_parameters,#ctc_configure_submit,#input_row_theme_slug").slideUp("fast"),e("#ctc_configure_submit .ctc-step").text("9"),e("#ctc_theme_child").length&&!e("#ctc_child_type_new").is(":checked")?(t=e("#ctc_theme_child").val(),c.existing=1,c.currparnt=window.ctcAjax.themes.child[t].Template,c.autogen_slugs(),e("#ctc_theme_parnt").val(c.currparnt),e("#ctc_theme_parnt-button .ui-selectmenu-text").text(c.getname("parnt")),c.set_theme_params("child",t),e("#ctc_child_type_duplicate").is(":checked")?(e("#ctc_child_template").val(c.testslug),e("#ctc_child_name").val(c.testname),e(".ctc-analyze-theme, .ctc-analyze-howto").show(),e("#ctc_load_styles").val("Duplicate Child Theme")):e("#ctc_child_type_reset").is(":checked")?(e("#ctc_configure_submit .ctc-step").text("3"),e("#ctc_configure_submit").slideDown("fast"),e("#theme_slug_container").text(t),e(".ctc-analyze-theme, .ctc-analyze-howto").hide(),e("#ctc_enqueue_none").prop("checked",!0),e("#ctc_load_styles").val("Reset Child Theme to Previous State")):(e("#ctc_child_template").val(""),e("#theme_slug_container").text(t),e(".ctc-analyze-theme, .ctc-analyze-howto").show(),e("#ctc_child_name").val(c.getname("child")),e("#ctc_load_styles").val("Configure Child Theme")),e("#input_row_existing_theme_option").slideDown("fast"),e("#input_row_new_theme_option").slideUp("fast")):(c.existing=0,c.autogen_slugs(),e("#ctc_theme_parnt").val(c.currparnt),e("#ctc_theme_parnt-button .ui-selectmenu-text").text(e.chldthmcfg.getname("parnt")),c.set_theme_params("parnt",c.currparnt),e("#input_row_existing_theme_option,#input_row_duplicate_theme_container,#input_row_theme_slug").slideUp("fast"),e("#input_row_new_theme_option").slideDown("fast"),e("#ctc_child_name").val(c.testname),e("#ctc_child_template").val(c.testslug),e(".ctc-analyze-theme, .ctc-analyze-howto").show(),e("#ctc_load_styles").val("Create New Child Theme"))},set_notice:function(t){var c,n=this,a="";n.is_empty(t)||e.each(t,function(t,c){a+='
\n',e(c).each(function(e,t){a+=""+t.toString()+" \n"}),a+=" "}),c=e(a),e("#ctc_error_notice").html(c),n.bind_dismiss(c),e("html, body").animate({scrollTop:0},"slow")},set_parent_menu:function(e){var t=this;t.currparnt=e.value,t.update_form()},set_child_menu:function(e){var t=this;t.currchild=e.value,t.update_form()},set_query:function(t){var c=this;return c.is_empty(t)?!1:(c.currquery=t,e("#ctc_sel_ovrd_query").val(""),e("#ctc_sel_ovrd_query_selected").text(t),e("#ctc_sel_ovrd_selector").val(""),e("#ctc_sel_ovrd_selector_selected").html(" "),c.load_selectors(),void c.scrolltop())},reset_qsid:function(){self.currqsid=null,e("#ctc_sel_ovrd_rule_inputs").empty(),e("#ctc_sel_ovrd_new_rule,#input_row_load_order,#ctc_sel_ovrd_rule_inputs_container").hide().find(".ctc-child-value").remove(),e(".ctc-rewrite-toggle").hide()},set_selector:function(t,c){var n=this;return c=null,n.is_empty(t)?!1:(e("#ctc_sel_ovrd_selector").val(""),n.currqsid=t,n.reload=!1,n.load_selector_values(),void n.scrolltop())},set_rule:function(t,c){var n=this;return n.is_empty(t)?!1:(e("#ctc_rule_menu").val(""),e("#ctc_rule_menu_selected").text(c),e(".ctc-rewrite-toggle").text(n.getxt("rename")),e("#ctc_rule_value_inputs, #ctc_input_row_rule_header").show(),n.query_css("rule_val",t),void n.scrolltop())},set_qsid:function(t){var c=this;c.currqsid=e(t).attr("id").match(/_(\d+)$/)[1],c.focus_panel("#query_selector_options"),c.reload=!0,c.load_selector_values()},query_css:function(t,c,n){var a=this,s={ctc_query_obj:t,ctc_query_key:c},i="#ctc_status_"+t+("val_qry"===t?"_"+c:"");"object"==typeof n&&e.each(n,function(e,t){s["ctc_query_"+e]=t}),e(".query-icon,.ctc-status-icon").remove(),e(i+" .ctc-status-icon").remove(),e(i).append('
'),s.action=a.is_empty(e("#ctc_action").val())||"plugin"!==e("#ctc_action").val()?"ctc_query":"ctc_plgqry",s._wpnonce=e("#_wpnonce").val(),a.ajax_post(t,s)},save:function(t){var c,n,a,s,i,l=this,r={},o=e(t).attr("id");e(t).prop("disabled",!0),e(".ctc-query-icon,.ctc-status-icon").remove(),e(t).parent(".ctc-textarea-button-cell, .ctc-button-cell").append('
'),o.match(/ctc_configtype/)?(e(t).parents(".ctc-input-row").first().append('
'),r.ctc_configtype=e(t).val()):(c=e("#ctc_new_selectors"))&&"ctc_save_new_selectors"===e(t).attr("id")?(r.ctc_new_selectors=c.val(),(n=e("#ctc_sel_ovrd_query_selected"))&&(r.ctc_sel_ovrd_query=n.text()),l.reload=!0):(a=e("#ctc_child_imports"))&&"ctc_save_imports"===o?r.ctc_child_imports=a.val():"ctc_is_debug"===o?r.ctc_is_debug=e("#ctc_is_debug").is(":checked")?1:0:r=l.coalesce_inputs(t),e(".save-icon").addClass("is-active"),e.each(["query","selector"],function(t,c){e("#ctc_rewrite_"+c).length&&(s=e("#ctc_rewrite_"+c).val(),i=e("#ctc_rewrite_"+c+"_orig").val(),l.is_empty(s)||!s.toString().match(/\w/)?s=i:(r["ctc_rewrite_"+c]=s,l.reload=!0),e("#ctc_sel_ovrd_"+c+"_selected").html(s)),e(".ctc-rewrite-toggle").text(l.getxt("rename"))}),r.action=l.is_empty(e("#ctc_action").val())||"plugin"!==e("#ctc_action").val()?"ctc_update":"ctc_plugin",r._wpnonce=e("#_wpnonce").val(),l.ajax_post("qsid",r)},ajax_post:function(t,c,n){var a=this;e.ajax({url:window.ctcAjax.ajaxurl,data:c,dataType:a.is_empty(n)?"json":n,type:"POST"}).done(function(e){a.handle_success(t,e)}).fail(function(){a.handle_failure(t)}).always(function(){a.jqueryerr.length&&a.jquery_notice()})},handle_failure:function(t){var c=this;e(".query-icon, .save-icon").removeClass("spinner").addClass("failure"),e("input[type=submit], input[type=button], input[type=checkbox],.ctc-delete-input").prop("disabled",!1),e(".ajax-pending").removeClass("ajax-pending"),"preview"===t&&e("#view_parnt_options_panel,#view_child_options_panel").text(c.getxt("css_fail"))},handle_success:function(t,c){var n=this;e(".query-icon, .save-icon").removeClass("spinner"),e(".ajax-pending").removeClass("ajax-pending"),n.is_empty(c)?n.handle_failure(t):(e("#ctc_new_selectors").val(""),e(".query-icon, .save-icon").addClass("success"),e("input[type=submit], input[type=button], input[type=checkbox],.ctc-delete-input").prop("disabled",!1),e(c).each(function(){"function"==typeof n.update[this.obj]&&n.update[this.obj].call(n,this)}))},jquery_exception:function(e,t){var c=this,n=c.is_empty(e.lineNumber)?"":" line: "+e.lineNumber,a=c.is_empty(e.fileName)?"":" "+e.fileName.split(/\?/)[0];c.jqueryerr.push("
"+t+": "+e.message+a+n+"
")},jquery_notice:function(t){t=null;var c=this,n=[],a=[];c.jqueryerr.length&&(e("input[type=submit], input[type=button]").prop("disabled",!0),e("script").each(function(){var t=e(this).prop("src");c.is_empty(t)||!t.match(/jquery(\.min|\.js|\-?ui)/i)||t.match(/load\-scripts.php/)||n.push("
"+t.split(/\?/)[0]+"
")}),a.push("
"+c.getxt("js")+" "+c.getxt("contact")),a.push(c.jqueryerr.join("
")),n.length&&a.push(c.getxt("jquery")+"
"+n.join("
")),a.push(c.getxt("plugin"))),c.set_notice({error:a})},update:{qsid:function(t){var c,n,a,s,i=this;i.currqsid=t.key,i.currdata=t.data,e("#ctc_sel_ovrd_qsid").val(i.currqsid),i.is_empty(i.currdata.seq)?e("#ctc_child_load_order_container").empty():(c="ctc_ovrd_child_seq_"+i.currqsid,a=parseInt(i.currdata.seq),n='
',e("#ctc_child_load_order_container").html(n)),i.is_empty(i.currdata.value)?(s=!0,e("#ctc_sel_ovrd_rule_inputs").empty(),i.load_selectors()):(s=!1,n="",e.each(i.currdata.value,function(e,t){t=null,n+=i.input_row(i.currqsid,e,"ovrd",i.currdata)}),e("#ctc_sel_ovrd_rule_inputs").html(n).find(".color-picker").each(function(){i.setup_spectrum(this)}),i.coalesce_inputs("#ctc_child_all_0_swatch")),i.reload&&(i.load_queries(),i.load_selectors(),i.set_query(i.currdata.query),i.load_rules()),e("#ctc_sel_ovrd_selector_selected").text(i.currdata.selector),i.maybe_show_rewrite(),s?i.reset_qsid():e("#ctc_sel_ovrd_rule_header,#ctc_sel_ovrd_new_rule,#ctc_sel_ovrd_rule_inputs_container,#ctc_sel_ovrd_rule_inputs,#input_row_load_order").fadeIn()},rule_val:function(t){var c=this,n=e("#ctc_rule_menu_selected").text(),a='
\n"),e("#ctc_rule_value_inputs").html(a).find(".ctc-swatch").each(function(){c.coalesce_inputs(this)})},val_qry:function(t){var c,n,a=this,s="";a.is_empty(t.data)||e.each(t.data,function(n,i){c=n,e.each(i,function(c,i){s+='
'+c+" \n",a.is_empty(i)||e.each(i,function(e,c){s+=a.input_row(e,n,t.key,c)})})}),n="#ctc_selector_"+c+"_"+t.key+"_rows",e(n).html(s).find(".color-picker").each(function(){a.setup_spectrum(this)}),e(n).find(".ctc-swatch").each(function(){a.coalesce_inputs(this)})},queries:function(t){e("#ctc_sel_ovrd_query").data("menu",t.data)},selectors:function(t){e("#ctc_sel_ovrd_selector").data("menu",t.data)},rules:function(t){e("#ctc_rule_menu").data("menu",t.data)},debug:function(t){e("#ctc_debug_box").val(e("#ctc_debug_box").val()+t.data)},preview:function(t){e("#view_"+t.key+"_options_panel").text(t.data)},dismiss:function(){}},bind_dismiss:function(t){var c=this,n=e(t),a=e('
');a.find(".screen-reader-text").text(e.chldthmcfg.getxt("dismiss")),n.append(a),a.on("click.wp-dismiss-notice",function(e){e.preventDefault(),c.dismiss_notice(t)})},dismiss_notice:function(t){e(t).fadeTo(100,0,function(){e(this).slideUp(100,function(){e(this).remove()})})},reset_handling:function(){e("#parnt_analysis_notice .notice, #child_analysis_notice .notice").slideUp(),e("#ctc_enqueue_enqueue").prop("checked",!0),e("#ctc_handling_primary").prop("checked",!0),e("#ctc_ignoreparnt").prop("checked",!1),e("#ctc_repairheader").prop("checked",!1)},init:function(){var t=this;if(!e("#ctc_theme_parnt").is("input")){try{e.widget("ctc.themeMenu",e.ui.selectmenu,{_renderItem:function(t,c){var n=e("
"),a=c.value.replace(/[^\w\-]/g,"");return e("#ctc_theme_option_"+a).detach().appendTo(n),n.appendTo(t)}})}catch(c){t.jquery_exception(c,"Theme Menu")}try{e("#ctc_theme_parnt").themeMenu({select:function(e,c){t.reset_handling(),t.set_parent_menu(c.item)}})}catch(c){"function"==typeof themeMenu?e("#ctc_theme_parnt").themeMenu("destroy"):e("#ctc_theme_parnt-button").remove(),t.jquery_exception(c,"Parent Theme Menu")}if(t.is_empty(window.ctcAjax.themes.child))e("#ctc_child_name").length&&(e("#ctc_child_name").val(t.testname),e("#ctc_child_template").val(t.testslug));else try{e("#ctc_theme_child").themeMenu({select:function(e,c){t.reset_handling(),t.set_child_menu(c.item)}})}catch(c){"function"==typeof themeMenu?e("#ctc_theme_child").themeMenu("destroy"):e("#ctc_theme_child-button").remove(),t.jquery_exception(c,"Child Theme Menu")}}t.currparnt=e("#ctc_theme_parnt").val(),t.currchild=e("#ctc_theme_child").length?e("#ctc_theme_child").val():"",e("#ctc_main").on("click",".ctc-section-toggle",function(t){t.preventDefault(),e(this).parents(".ctc-input-row, .notice-warning, .updated, .error").first().find(".ctc-section-toggle").each(function(){e(this).toggleClass("open")});var c=e(this).attr("id").replace(/\d$/,"")+"_content";return e("#"+c).stop().slideToggle("fast"),!1}),e("#ctc_main").on("click",".ctc-upgrade-notice .notice-dismiss",function(){var c={action:"ctc_dismiss",_wpnonce:e("#_wpnonce").val()};t.ajax_post("dismiss",c)}),t.is_empty(t.jqueryerr)&&(e("#ctc_main").on("click",".ctc-selector-handle",function(c){if(c.preventDefault(),e(this).hasClass("ajax-pending"))return!1;e(this).addClass("ajax-pending");var n,a,s=e(this).attr("id").toString().replace("_close",""),i=s.toString().match(/_([^_]+)_(\d+)$/);e("#"+s+"_container").is(":hidden")&&(t.is_empty(i[1])||t.is_empty(i[2])||(n=i[1],a=i[2],t.query_css("val_qry",a,{rule:n}))),e("#"+s+"_container").fadeToggle("fast"),e(".ctc-selector-container").not("#"+s+"_container").fadeOut("fast")}),e("#ctc_main").on("click",".ctc-save-input[type=button], .ctc-delete-input",function(c){return c.preventDefault(),e(this).hasClass("ajax-pending")?!1:(e(this).addClass("ajax-pending"),t.save(this),!1)}),e("#ctc_main").on("keydown",".ctc-selector-container .ctc-child-value[type=text]",function(c){if(13===c.which){var n=e(this).parents(".ctc-selector-row").find(".ctc-save-input[type=button]").first();if(n.length)return c.preventDefault(),n.hasClass("ajax-pending")?!1:(n.addClass("ajax-pending"),t.save(n),!1)}}),e("#ctc_main").on("click",".ctc-selector-edit",function(c){return c.preventDefault(),e(this).hasClass("ajax-pending")?!1:(e(this).addClass("ajax-pending"),void t.set_qsid(this))}),e("#ctc_main").on("click",".ctc-rewrite-toggle",function(e){e.preventDefault(),t.selector_input_toggle(this)}),e("#ctc_main").on("click","#ctc_copy_selector",function(){var c=e("#ctc_sel_ovrd_selector_selected").text().trim();t.is_empty(c)||e("#ctc_new_selectors").val(e("#ctc_new_selectors").val()+"\n"+c+" {\n\n}")}),e("#ctc_main").on("click",".ctc-backup-theme",function(c){c.preventDefault(),t.existing?e("#ctc_export_theme").val(t.currchild):e("#ctc_export_theme").val(t.currparnt),e("#ctc_export_theme_form").submit()}),e("#ctc_configtype").on("change",function(){var c=e(this).val();if(t.is_empty(c)||"theme"===c){e(".ctc-theme-only, .ctc-themeonly-container").removeClass("ctc-disabled"),e(".ctc-theme-only, .ctc-themeonly-container input").prop("disabled",!1);try{e("#ctc_theme_parnt, #ctc_theme_child").themeMenu("enable")}catch(n){t.jquery_exception(n,"Theme Menu")}}else{e(".ctc-theme-only, .ctc-themeonly-container").addClass("ctc-disabled"),e(".ctc-theme-only, .ctc-themeonly-container input").prop("disabled",!0);try{e("#ctc_theme_parnt, #ctc_theme_child").themeMenu("disable")}catch(n){t.jquery_exception(n,"Theme Menu")}}}),e(".nav-tab").on("click",function(c){if(c.preventDefault(),e(c.target).hasClass("ctc-disabled"))return!1;e(".ctc-query-icon,.ctc-status-icon").remove();var n="#"+e(this).attr("id");t.focus_panel(n)}),e("#view_child_options, #view_parnt_options").on("click",function(c){return e(c.target).hasClass("ajax-pending")||e(c.target).hasClass("ctc-disabled")?!1:(e(c.target).addClass("ajax-pending"),void t.css_preview(e(this).attr("id")))}),e("#ctc_load_form").on("submit",function(){return t.validate()}),e("#ctc_query_selector_form").on("submit",function(c){c.preventDefault();var n=e("#ctc_save_query_selector");return n.hasClass("ajax-pending")?!1:(n.addClass("ajax-pending"),t.save(n),!1)}),e("#ctc_rule_value_form").on("submit",function(e){return e.preventDefault(),!1}),e("#ctc_child_type_new,#ctc_child_type_existing,#ctc_child_type_duplicate,#ctc_child_type_reset").on("focus click",function(){t.reset_handling(),t.update_form()}),e("#ctc_is_debug").on("change",function(){e(this).is(":checked")?e("#ctc_debug_box").length||e("#ctc_debug_container").html(' '):e("#ctc_debug_box").remove(),t.save(this)}),e(".ctc-live-preview").on("click",function(t){return t.stopImmediatePropagation(),t.preventDefault(),document.location=e(this).prop("href"),!1}),t.setup_menus(),e("input[type=submit], input[type=button]").prop("disabled",!1),t.scrolltop(),t.update_form()),t.jqueryerr.length&&t.jquery_notice()},testslug:"",testname:"",reload:!1,currquery:"base",currqsid:null,currdata:{},currparnt:"",currchild:"",existing:!1,jqueryerr:[],color_regx:"\\s+(\\#[a-f0-9]{3,6}|rgba?\\([\\d., ]+?\\)|hsla?\\([\\d%., ]+?\\)|[a-z]+)",border_regx:"(\\w+)(\\s+(\\w+))?",grad_regx:"(\\w+)"},e.chldthmanalyze={escrgx:function(e){return e.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1")},trmcss:function(e){return"undefined"==typeof e?"":e.replace(/\-css$/,"")},show_loading:function(t,c){var n=e.chldthmcfg.existing?"child":"parnt",a=c?c:e.chldthmcfg.getname(n),s=' '+e.chldthmcfg.getxt(t?"anlz1":"anlz2")+" "+a+"... ";self.noticediv="",e("#"+n+"_analysis_notice").html(s)},hide_loading:function(){e(".ctc_analyze_loading").fadeTo(200,0,function(){e(this).slideUp(200,function(){e(this).remove()})})},setssl:function(e){return e.replace(/^https?/,window.ctcAjax.ssl?"https":"http")},analyze_theme:function(t){var c=this,n=Math.floor(e.now()/1e3),a="child"===t?e.chldthmcfg.currchild:e.chldthmcfg.currparnt,s="&template="+encodeURIComponent(e.chldthmcfg.currparnt)+"&stylesheet="+encodeURIComponent(a)+"&now="+n,i=c.setssl(window.ctcAjax.homeurl),l=i+s;c.analysis[t].url=l,e.get(l,function(n){c.parse_page(t,n),e(document).trigger("analysisdone")}).fail(function(n,s,i){c.analysis[t].signals.xhrgeterr=i,e.ajax({url:window.ctcAjax.ajaxurl,data:{action:"ctc_analyze",stylesheet:a,template:e.chldthmcfg.currparnt,
+_wpnonce:e("#_wpnonce").val()},dataType:"json",type:"POST"}).done(function(n){n.signals.httperr?(c.analysis[t].signals.failure=1,c.analysis[t].signals.httperr=n.signals.httperr):c.parse_page(t,n.body),e(document).trigger("analysisdone")}).fail(function(n,a,s){c.analysis[t].signals.failure=1,c.analysis[t].signals.xhrajaxerr=s,e(document).trigger("analysisdone")})})},parse_page:function(t,c){var n,a,s,i=this,l=window.ctcAjax.theme_dir,r="child"===t?e.chldthmcfg.currchild:e.chldthmcfg.currparnt,o=i.escrgx(e.chldthmcfg.currparnt)+("child"===t?"|"+i.escrgx(r):""),_=new RegExp(" ]+?"+i.escrgx(l)+"/("+o+")/([^\"']+\\.css)(\\?[^\"']+)?[\"'][^>]+>","gi"),d=/ \n[^\n]+?(fatal|strict|notice|warning|error)[\s\S]+? /gi,u=0,h=0;if("child"===t){c.match(/^[\s\S]*?([\s\S]*?)<\/head>/)}for((a=c.match(/BEGIN WP REGISTERED\n([\s\S]*?)\nEND WP REGISTERED/))?i.analysis[t].queue=a[1].split(/\n/):(i.analysis[t].queue=[],i.analysis[t].signals.thm_noqueue=1),(a=c.match(/BEGIN CTC IRREGULAR\n([\s\S]*?)\nEND CTC IRREGULAR/))?i.analysis[t].irreg=a[1].split(/\n/):i.analysis[t].irreg=[],c.match(/CHLD_THM_CFG_IGNORE_PARENT/)&&(i.analysis[t].signals.thm_ignoreparnt=1),c.match(/IS_CTC_THEME/)&&(i.analysis[t].signals.thm_is_ctc=1),c.match(/NO_CTC_STYLES/)&&(i.analysis[t].signals.thm_no_styles=1),c.match(/HAS_CTC_IMPORT/)&&(i.analysis[t].signals.thm_has_import=1),c.match(/HAS_WP_CACHE/)&&(i.analysis[t].signals.thm_has_cache=1),c.match(/HAS_WP_ROCKET/)&&(i.analysis[t].signals.thm_has_wprocket=1),c.match(/HAS_AUTOPTIMIZE/)&&(i.analysis[t].signals.thm_has_autoptimize=1),c=c.replace(//g,"");n=d.exec(c);){var p=n[0].replace(/<.*?>/g,"");i.phperr[t].push(p),i.analysis[t].signals.err_php=1,p.match(/Fatal error/i)&&(i.analysis[t].signals.err_fatal=1)}for(;s=_.exec(c);){var m=i.trmcss(s[2]),g=s[3],f=s[4],y=e.chldthmcfg.currparnt===g?"parnt":"child",v=0;if(""===m||-1===i.analysis[t].queue.indexOf(m))v=1;else if(0===m.indexOf("chld_thm_cfg")){f.match(/^ctc\-style.*?\.css$/)?(u=1,i.analysis[t].signals.ctc_sep_loaded=1):f.match(/^ctc\-genesis([\-\.]min)?\.css$/)?(u=1,i.analysis[t].signals.ctc_gen_loaded=1):m.match(/^chld_thm_cfg_ext/)?f.match(/rtl.*?\.css$/)?i.analysis[t].signals.thm_rtl=1:(i.analysis[t].signals.ctc_ext_loaded=1,i.analysis[t].deps[u].push([m,f,y])):"chld_thm_cfg_child"===m?(i.analysis[t].signals.ctc_child_loaded=1,i.analysis[t].deps[u].push([m,f,y])):"chld_thm_cfg_parent"===m&&(i.analysis[t].signals.ctc_parnt_loaded=1,i.analysis[t].deps[u].push([m,f,y]),u&&(i.analysis[t].signals.ctc_parnt_reorder=1));continue}if(f.match(/^style.*?\.css$/))u=1,"parnt"===y?v?i.analysis[t].signals.thm_parnt_loaded="thm_unregistered":(i.analysis[t].signals.thm_parnt_loaded=m,"child"===t&&i.analysis[t].signals.thm_child_loaded&&(i.analysis[t].signals.ctc_parnt_reorder=1)):i.analysis[t].signals.thm_child_loaded=v?"thm_unregistered":m,v?h?(i.analysis[t].signals.thm_past_wphead=1,i.analysis[t].deps[u].push(["thm_past_wphead",f,y])):(i.analysis[t].signals.thm_unregistered=1,i.analysis[t].deps[u].push(["thm_unregistered",f,y])):i.analysis[t].deps[u].push([m,f,y]);else if(f.match(/rtl.*?\.css$/))i.analysis[t].signals.thm_rtl=1;else if(f.match(/ctc\-test.*?\.css$/))h=1;else{var w=null;v&&(w="dep_unregistered"),h&&(w=u?"css_past_wphead":"dep_past_wphead"),w?(i.analysis[t].signals[w]=1,m=w):i.dependencies[m]=f,i.analysis[t].deps[u].push([m,f,y])}}u||(i.analysis[t].signals.thm_notheme=1)},css_notice:function(){var t,c,n=this,a=e.chldthmcfg.existing?"child":"parnt",s=e.chldthmcfg.getname(a),i="",l={notices:[]},r={style:"notice-warning",headline:e.chldthmcfg.getxt("anlz3",s),errlist:"",msg:e.chldthmcfg.getxt("anlz7")},o={},_="",d={};if(n.analysis[a].signals.failure||n.analysis[a].signals.thm_noqueue&&!n.phperr[a].length)_=e.chldthmcfg.getxt("anlz33").replace(/%1/,'').replace(/%2/," "),l.notices.push({headline:e.chldthmcfg.getxt("anlz4",s),msg:e.chldthmcfg.getxt("anlz5")+_,style:"notice-warning"});else if(n.phperr[a].length&&(e.each(n.phperr[a],function(e,t){t.match(/Fatal error/i)&&(d.fatal=1),t.match(/Constant \w+ already defined in .+?wp-config.php/i)&&(d.config=1),r.errlist+=t+"\n"}),d.fatal&&(r.style="error",r.headline=e.chldthmcfg.getxt("anlz8",s)),d.config&&(r.msg=e.chldthmcfg.getxt("anlzconfig",s)+r.msg),r.msg=''+e.chldthmcfg.getxt("anlz6")+'
'+r.errlist+"
"+r.msg,l.notices.push(r)),n.analysis[a].signals.thm_has_wprocket&&n.analysis[a].signals.thm_has_autoptimize)l.notices.push({headline:e.chldthmcfg.getxt("anlzcache1"),style:"notice-warning",msg:e.chldthmcfg.getxt("anlzcache2")});else if(!n.analysis[a].signals.thm_noqueue){if((n.analysis[a].signals.thm_past_wphead||n.analysis[a].signals.dep_past_wphead)&&(l.notices.push({headline:e.chldthmcfg.getxt("anlz9"),style:"notice-warning",msg:e.chldthmcfg.getxt("anlz10")}),e("#ctc_repairheader").prop("checked",!0),e("#ctc_repairheader_container").show()),n.analysis[a].signals.thm_unregistered&&(n.analysis[a].signals.ctc_child_loaded||n.analysis[a].signals.ctc_sep_loaded||(l.notices.push({headline:e.chldthmcfg.getxt("anlz11"),style:"notice-warning",msg:e.chldthmcfg.getxt("anlz12")}),e("#ctc_repairheader_container").show(),e("#ctc_repairheader").prop("checked",!0))),"child"===a&&(window.ctcAjax.copy_mods&&window.ctcAjax.copy_mods.length>1&&(o.ctc_copy_mods=1,o.ctc_copy_from=window.ctcAjax.copy_mods[0],o.ctc_copy_to=window.ctcAjax.copy_mods[1]),n.analysis.child.signals.ctc_parnt_reorder,n.analysis.child.signals.ctc_child_loaded||n.analysis.child.signals.ctc_sep_loaded||n.analysis.child.signals.thm_child_loaded||l.notices.push({headline:e.chldthmcfg.getxt("anlz13"),style:"notice-warning",msg:e.chldthmcfg.getxt("anlz14")}),n.analysis[a].signals.ctc_gen_loaded&&l.notices.push({headline:e.chldthmcfg.getxt("anlz31"),msg:e.chldthmcfg.getxt("anlz32"),style:"notice-warning"}),n.analysis.parnt.signals.thm_no_styles||n.analysis.child.signals.ctc_gen_loaded||n.analysis.child.signals.thm_parnt_loaded||n.analysis.child.signals.ctc_parnt_loaded||n.analysis.child.signals.thm_ignoreparnt||n.analysis.child.signals.thm_has_import||l.notices.push({headline:e.chldthmcfg.getxt("anlz15"),style:"notice-warning",msg:e.chldthmcfg.getxt("anlz16")}),n.analysis.child.signals.thm_unregistered&&n.analysis.child.signals.thm_child_loaded&&"thm_unregistered"===n.analysis.child.signals.thm_child_loaded&&n.analysis.child.signals.ctc_child_loaded&&n.analysis.child.signals.ctc_parnt_loaded&&(l.notices.push({headline:e.chldthmcfg.getxt("anlz28"),style:"notice-warning",msg:e.chldthmcfg.getxt("anlz29")}),e("#ctc_repairheader_container").show(),e("#ctc_repairheader").prop("checked",!0)),n.analysis.child.signals.thm_is_ctc||e("#ctc_child_type_duplicate").is(":checked")||l.notices.push({headline:e.chldthmcfg.getxt("anlz19"),msg:e.chldthmcfg.getxt("anlz20"),style:"notice-warning"})),"object"!=typeof window.ctcAjax.swappath&&(window.ctcAjax.swappath={}),e.each(n.analysis.parnt.deps[0],function(t,c){e.each(n.analysis.child.deps[0],function(e,t){t[0]===c[0]&&t[2]!==c[2]&&(n.analysis.parnt.swaps.push(t),window.ctcAjax.swappath[t[0]]=t[1])})}),(n.analysis[a].signals.ctc_sep_loaded||n.analysis[a].signals.ctc_gen_loaded)&&e("#ctc_handling_separate").prop("checked",!0),l.notices.length||l.notices.push({headline:""+("child"===a?e.chldthmcfg.getxt("anlz17"):e.chldthmcfg.getxt("anlz18")),style:"updated",msg:""}),"child"===a&&n.analysis.child.signals.thm_has_import&&(l.notices.push({headline:e.chldthmcfg.getxt("anlz21"),msg:e.chldthmcfg.getxt("anlz22"),style:"notice-warning"}),e("#ctc_enqueue_import").prop("checked",!0)),n.analysis[a].signals.thm_ignoreparnt||n.analysis[a].signals.ctc_gen_loaded?(e("#ctc_ignoreparnt").prop("checked",!0),e("#ctc_enqueue_none").is(":checked")||(e("#ctc_enqueue_none").prop("checked",!0),o.ctc_enqueue="none")):e("#ctc_ignoreparnt").prop("checked",!1),!n.analysis[a].signals.ctc_sep_loaded&&!n.analysis[a].signals.ctc_gen_loaded&&!n.analysis[a].signals.ctc_child_loaded&&!n.analysis[a].signals.thm_unregistered&&!n.analysis[a].signals.thm_past_wphead&&n.analysis[a].deps[1].length){var u="";e.each(n.analysis[a].deps[1],function(e,t){t[1].match(/^style.*?\.css$/)||(u+=' '+t[1]+" \n")}),""!==u&&(u="
\n",l.notices.push({headline:e.chldthmcfg.getxt("anlz23"),msg:u+e.chldthmcfg.getxt("anlz24"),style:"updated"}))}"child"===a&&n.analysis[a].signals.thm_parnt_loaded&&(l.notices.push({headline:e.chldthmcfg.getxt("anlz25"),msg:e.chldthmcfg.getxt("anlz26"),style:"updated"}),e("#ctc_enqueue_none").prop("checked",!0),o.ctc_enqueue="none"),n.analysis.parnt.signals.thm_no_styles&&(l.notices.push({headline:e.chldthmcfg.getxt("anlz27"),msg:e.chldthmcfg.getxt("anlz26"),style:"updated"}),e("#ctc_enqueue_none").prop("checked",!0),o.ctc_enqueue="none")}return i=encodeURIComponent(JSON.stringify(n.analysis)),e('input[name="ctc_analysis"]').val(i),n.is_success()&&!n.resubmitting?(o.ctc_analysis=i,n.resubmitting=1,void n.resubmit(o)):(n.resubmitting=0,n.hide_loading(),e.each(l.notices,function(t,c){var n=e('
'+c.headline+" "+c.msg+"");e.chldthmcfg.bind_dismiss(n),n.hide().appendTo("#"+a+"_analysis_notice").slideDown()}),t='
'+e.chldthmcfg.getxt("anlz30")+'
'+JSON.stringify(n.analysis,null,2)+"
",e(t).appendTo("#"+a+"_analysis_notice"),c="",e.each(n.dependencies,function(e,t){t&&(c+='
"+e+"\n")}),c.length?(e("#ctc_dependencies").html(c),e("#ctc_dependencies_container").show()):(e("#ctc_dependencies").empty(),e("#ctc_dependencies_container").hide()),e("#ctc_child_type_reset").is(":checked")||(e("#input_row_stylesheet_handling_container,#input_row_parent_handling_container,#ctc_child_header_parameters,#ctc_configure_submit").slideDown("fast"),e("#ctc_child_type_duplicate").is(":checked")?(e("#ctc_configure_submit .ctc-step").text("8"),e("#ctc_copy_theme_mods").find("input").prop("checked",!1)):(e("#ctc_configure_submit .ctc-step").text("9"),e("#ctc_copy_theme_mods").slideDown("fast")),e("#ctc_child_type_duplicate").is(":checked")||e("#ctc_child_type_new").is(":checked")?(e("#input_row_theme_slug").hide(),e("#input_row_new_theme_slug").slideDown("fast")):(e("#input_row_new_theme_slug").hide(),e("#input_row_theme_slug").slideDown("fast"))),void 0)},resubmit:function(t){var c=this;c.hide_loading(),c.show_loading(!0),t.action="ctc_update",t._wpnonce=e("#_wpnonce").val(),e.ajax({url:window.ctcAjax.ajaxurl,data:t,dataType:"json",type:"POST"}).done(function(t){t.length>1&&e("#ctc_debug_box").val(e("#ctc_debug_box").val()+t[1].data),c.hide_loading(),c.do_analysis()}).fail(function(){c.hide_loading()})},do_analysis:function(){var t=this;t.analysis={parnt:{deps:[[],[]],signals:{failure:0},queue:[],irreg:[],swaps:[]},child:{deps:[[],[]],signals:{failure:0},queue:[],irreg:[],swaps:[]}},t.phperr={parnt:[],child:[]},t.dependencies={},t.done=0,t.show_loading(!1),t.analyze_theme("parnt"),e.chldthmcfg.existing&&(t.resubmitting?t.analyze_theme("child"):e.get(window.ctcAjax.customizerurl+"?theme="+e.chldthmcfg.currchild,function(){t.analyze_theme("child")}))},init:function(){var t=this;e(document).on("analysisdone",function(){t.done++,t.done>e.chldthmcfg.existing&&(t.done=0,t.css_notice())}),e("#ctc_main").on("click",".ctc-analyze-theme",function(){t.is_success()&&e.chldthmcfg.dismiss_notice(e(".ctc-success-response").parent(".notice")),t.do_analysis()}),t.is_success()&&!window.ctcAjax.pluginmode&&t.do_analysis()},analysis:{},done:0,resubmitting:0,dependencies:{},is_success:function(){return e(".ctc-success-response").length}},e("#request-filesystem-credentials-form").length||(e.chldthmcfg.init(),e.chldthmanalyze.init())}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/child-theme-configurator/js/ctcgrad.js b/wp-content/plugins/child-theme-configurator/js/ctcgrad.js
new file mode 100644
index 0000000..62541d0
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/js/ctcgrad.js
@@ -0,0 +1,203 @@
+/*!
+ * CTC Gradient Functions
+ * Adapted from Iris
+ * Copyright (c) 2012–2014 Automattic.
+ * Licensed under the GPLv2 license.
+ */
+(function( $, undef ){
+ var _html, nonGradientIE, gradientType, vendorPrefixes, _css, Iris, UA, isIE, IEVersion;
+ UA = navigator.userAgent.toLowerCase();
+ isIE = navigator.appName === 'Microsoft Internet Explorer';
+ IEVersion = isIE ? parseFloat( UA.match( /msie ([0-9]{1,}[\.0-9]{0,})/ )[1] ) : 0;
+ nonGradientIE = ( isIE && IEVersion < 10 );
+ // we don't bother with an unprefixed version, as it has a different syntax
+ vendorPrefixes = ['-moz-', '-webkit-', '-o-', '-ms-' ];
+ testGradientType();
+
+ // Bail for IE <= 7
+ if ( nonGradientIE && IEVersion <= 7 ) {
+ $.fn.ctcgrad = $.noop;
+ $.support.ctcgrad = false;
+ return;
+ }
+
+ $.support.ctcgrad = true;
+
+ function testGradientType() {
+ var el, base;
+ if ( nonGradientIE ) {
+ gradientType = 'filter';
+ }
+ else {
+ el = $('
');
+ base = "linear-gradient(top,#fff,#000)";
+ $.each( vendorPrefixes, function( i, val ){
+ el.css( 'backgroundImage', val + base );
+ if ( el.css( 'backgroundImage').match('gradient') ) {
+ gradientType = i;
+ return false;
+ }
+ });
+ // check for legacy webkit gradient syntax
+ if ( gradientType === false ) {
+ el.css( 'background', '-webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#000))' );
+ if ( el.css( 'backgroundImage').match('gradient') )
+ gradientType = 'webkit';
+ }
+ el.remove();
+ }
+
+ }
+
+ /**
+ * Only for CSS3 gradients. oldIE will use a separate function.
+ *
+ * Accepts as many color stops as necessary from 2nd arg on, or 2nd
+ * arg can be an array of color stops
+ *
+ * @param {string} origin Gradient origin - top bottom left right (n)deg
+ * @return {string} Appropriate CSS3 gradient string for use in
+ */
+ function createGradient( origin, stops ) {
+ origin = ( origin.match(/(\d+deg|top|left|bottom|right)( (top|left|bottom|right))?/) ? origin : 'top');
+ stops = $.isArray( stops ) ? stops : Array.prototype.slice.call(arguments, 1);
+ if ( gradientType === 'webkit' )
+ return legacyWebkitGradient( origin, stops );
+ else
+ return vendorPrefixes[gradientType] + 'linear-gradient(' + origin + ', ' + stops.join(', ') + ')';
+ }
+
+ /**
+ * Stupid gradients for a stupid browser.
+ */
+ function stupidIEGradient( origin, stops ) {
+ var type, self, lastIndex, filter, startPosProp, endPosProp, dimensionProp, template, html, filterVal;
+
+ origin = ( origin === 'left' ) ? 'left' : 'top';
+ stops = $.isArray( stops ) ? stops : Array.prototype.slice.call(arguments, 1);
+ // 8 hex: AARRGGBB
+ // GradientType: 0 vertical, 1 horizontal
+ type = ( origin === 'top' ) ? 0 : 1;
+ self = $( this );
+ lastIndex = stops.length - 1;
+ filter = 'filter';
+ startPosProp = ( type === 1 ) ? 'left' : 'top';
+ endPosProp = ( type === 1 ) ? 'right' : 'bottom';
+ dimensionProp = ( type === 1 ) ? 'height' : 'width';
+ // need a positioning context
+ if ( self.css('position') === 'static' )
+ self.css( {position: 'relative' } );
+
+ stops = fillColorStops( stops );
+ $.each(stops, function( i, startColor ) {
+ var endColor, endStop;
+
+ // we want two at a time. if we're on the last pair, bail.
+ if ( i === lastIndex )
+ return false;
+
+ endColor = stops[ i + 1 ];
+ //if our pairs are at the same color stop, moving along.
+ if ( startColor.stop === endColor.stop )
+ return;
+
+ endStop = 100 - parseFloat( endColor.stop ) + '%';
+ startColor.octoHex = new Color( startColor.color ).toIEOctoHex();
+ endColor.octoHex = new Color( endColor.color ).toIEOctoHex();
+
+ filterVal = "progid:DXImageTransform.Microsoft.Gradient(GradientType=" + type + ", StartColorStr='" + startColor.octoHex + "', EndColorStr='" + endColor.octoHex + "')";
+ });
+ return filterVal;
+ }
+
+ function legacyWebkitGradient( origin, colorList ) {
+ var stops = [];
+ origin = ( origin === 'top' ) ? '0% 0%,0% 100%,' : '0% 100%,100% 100%,';
+ colorList = fillColorStops( colorList );
+ $.each( colorList, function( i, val ){
+ stops.push( 'color-stop(' + ( parseFloat( val.stop ) / 100 ) + ', ' + val.color + ')' );
+ });
+ return '-webkit-gradient(linear,' + origin + stops.join(',') + ')';
+ }
+
+ function fillColorStops( colorList ) {
+ var colors = [],
+ percs = [],
+ newColorList = [],
+ lastIndex = colorList.length - 1;
+
+ $.each( colorList, function( index, val ) {
+ var color = val,
+ perc = false,
+ match = val.match(/1?[0-9]{1,2}%$/);
+
+ if ( match ) {
+ color = val.replace(/\s?1?[0-9]{1,2}%$/, '');
+ perc = match.shift();
+ }
+ colors.push( color );
+ percs.push( perc );
+ });
+
+ // back fill first and last
+ if ( percs[0] === false )
+ percs[0] = '0%';
+
+ if ( percs[lastIndex] === false )
+ percs[lastIndex] = '100%';
+
+ percs = backFillColorStops( percs );
+
+ $.each( percs, function( i ){
+ newColorList[i] = { color: colors[i], stop: percs[i] };
+ });
+ return newColorList;
+ }
+
+ function backFillColorStops( stops ) {
+ var first = 0,
+ last = stops.length - 1,
+ i = 0,
+ foundFirst = false,
+ incr,
+ steps,
+ step,
+ firstVal;
+
+ if ( stops.length <= 2 || $.inArray( false, stops ) < 0 ) {
+ return stops;
+ }
+ while ( i < stops.length - 1 ) {
+ if ( ! foundFirst && stops[i] === false ) {
+ first = i - 1;
+ foundFirst = true;
+ } else if ( foundFirst && stops[i] !== false ) {
+ last = i;
+ i = stops.length;
+ }
+ i++;
+ }
+ steps = last - first;
+ firstVal = parseInt( stops[first].replace('%'), 10 );
+ incr = ( parseFloat( stops[last].replace('%') ) - firstVal ) / steps;
+ i = first + 1;
+ step = 1;
+ while ( i < last ) {
+ stops[i] = ( firstVal + ( step * incr ) ) + '%';
+ step++;
+ i++;
+ }
+ return backFillColorStops( stops );
+ }
+
+ $.fn.ctcgrad = function( origin ) {
+ var args = arguments;
+ // this'll be oldishIE
+ if ( nonGradientIE )
+ $(this).css('filter',
+ stupidIEGradient.apply( this, args ));
+ else // new hotness
+ $( this ).css( 'backgroundImage', createGradient.apply( this, args ) );
+ };
+
+}( jQuery ));
\ No newline at end of file
diff --git a/wp-content/plugins/child-theme-configurator/js/ctcgrad.min.js b/wp-content/plugins/child-theme-configurator/js/ctcgrad.min.js
new file mode 100644
index 0000000..69f4f16
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/js/ctcgrad.min.js
@@ -0,0 +1,7 @@
+/*!
+ * CTC Gradient Functions
+ * Adapted from Iris
+ * Copyright (c) 2012–2014 Automattic.
+ * Licensed under the GPLv2 license.
+ */
+(function(i,f){var d,q,b,a,o,e,l,c,h;l=navigator.userAgent.toLowerCase();c=navigator.appName==="Microsoft Internet Explorer";h=c?parseFloat(l.match(/msie ([0-9]{1,}[\.0-9]{0,})/)[1]):0;q=(c&&h<10);a=["-moz-","-webkit-","-o-","-ms-"];p();if(q&&h<=7){i.fn.ctcgrad=i.noop;i.support.ctcgrad=false;return}i.support.ctcgrad=true;function p(){var r,s;if(q){b="filter"}else{r=i('
');s="linear-gradient(top,#fff,#000)";i.each(a,function(t,u){r.css("backgroundImage",u+s);if(r.css("backgroundImage").match("gradient")){b=t;return false}});if(b===false){r.css("background","-webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#000))");if(r.css("backgroundImage").match("gradient")){b="webkit"}}r.remove()}}function n(r,s){r=(r.match(/(\d+deg|top|left|bottom|right)( (top|left|bottom|right))?/)?r:"top");s=i.isArray(s)?s:Array.prototype.slice.call(arguments,1);if(b==="webkit"){return m(r,s)}else{return a[b]+"linear-gradient("+r+", "+s.join(", ")+")"}}function g(x,A){var w,C,u,r,v,B,z,y,t,s;x=(x==="left")?"left":"top";A=i.isArray(A)?A:Array.prototype.slice.call(arguments,1);w=(x==="top")?0:1;C=i(this);u=A.length-1;r="filter";v=(w===1)?"left":"top";B=(w===1)?"right":"bottom";z=(w===1)?"height":"width";if(C.css("position")==="static"){C.css({position:"relative"})}A=j(A);i.each(A,function(D,F){var E,G;if(D===u){return false}E=A[D+1];if(F.stop===E.stop){return}G=100-parseFloat(E.stop)+"%";F.octoHex=new Color(F.color).toIEOctoHex();E.octoHex=new Color(E.color).toIEOctoHex();s="progid:DXImageTransform.Microsoft.Gradient(GradientType="+w+", StartColorStr='"+F.octoHex+"', EndColorStr='"+E.octoHex+"')"});return s}function m(r,s){var t=[];r=(r==="top")?"0% 0%,0% 100%,":"0% 100%,100% 100%,";s=j(s);i.each(s,function(u,v){t.push("color-stop("+(parseFloat(v.stop)/100)+", "+v.color+")")});return"-webkit-gradient(linear,"+r+t.join(",")+")"}function j(t){var s=[],u=[],r=[],v=t.length-1;i.each(t,function(y,A){var w=A,z=false,x=A.match(/1?[0-9]{1,2}%$/);if(x){w=A.replace(/\s?1?[0-9]{1,2}%$/,"");z=x.shift()}s.push(w);u.push(z)});if(u[0]===false){u[0]="0%"}if(u[v]===false){u[v]="100%"}u=k(u);i.each(u,function(w){r[w]={color:s[w],stop:u[w]}});return r}function k(z){var u=0,y=z.length-1,t=0,w=false,r,x,s,v;if(z.length<=2||i.inArray(false,z)<0){return z}while(t
",
+ options: {
+ disabled: false,
+
+ // callbacks
+ create: null
+ },
+ _createWidget: function( options, element ) {
+ element = $( element || this.defaultElement || this )[ 0 ];
+ this.element = $( element );
+ this.uuid = widget_uuid++;
+ this.eventNamespace = "." + this.widgetName + this.uuid;
+
+ this.bindings = $();
+ this.hoverable = $();
+ this.focusable = $();
+
+ if ( element !== this ) {
+ $.data( element, this.widgetFullName, this );
+ this._on( true, this.element, {
+ remove: function( event ) {
+ if ( event.target === element ) {
+ this.destroy();
+ }
+ }
+ });
+ this.document = $( element.style ?
+ // element within the document
+ element.ownerDocument :
+ // element is window or document
+ element.document || element );
+ this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
+ }
+
+ this.options = $.widget.extend( {},
+ this.options,
+ this._getCreateOptions(),
+ options );
+
+ this._create();
+ this._trigger( "create", null, this._getCreateEventData() );
+ this._init();
+ },
+ _getCreateOptions: $.noop,
+ _getCreateEventData: $.noop,
+ _create: $.noop,
+ _init: $.noop,
+
+ destroy: function() {
+ this._destroy();
+ // we can probably remove the unbind calls in 2.0
+ // all event bindings should go through this._on()
+ this.element
+ .unbind( this.eventNamespace )
+ .removeData( this.widgetFullName )
+ // support: jquery <1.6.4
+ // http://bugs.jquery.com/ticket/9413
+ .removeData( $.camelCase( this.widgetFullName ) );
+ this.widget()
+ .unbind( this.eventNamespace )
+ .removeAttr( "aria-disabled" )
+ .removeClass(
+ this.widgetFullName + "-disabled " +
+ "ui-state-disabled" );
+
+ // clean up events and states
+ this.bindings.unbind( this.eventNamespace );
+ this.hoverable.removeClass( "ui-state-hover" );
+ this.focusable.removeClass( "ui-state-focus" );
+ },
+ _destroy: $.noop,
+
+ widget: function() {
+ return this.element;
+ },
+
+ option: function( key, value ) {
+ var options = key,
+ parts,
+ curOption,
+ i;
+
+ if ( arguments.length === 0 ) {
+ // don't return a reference to the internal hash
+ return $.widget.extend( {}, this.options );
+ }
+
+ if ( typeof key === "string" ) {
+ // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
+ options = {};
+ parts = key.split( "." );
+ key = parts.shift();
+ if ( parts.length ) {
+ curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
+ for ( i = 0; i < parts.length - 1; i++ ) {
+ curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
+ curOption = curOption[ parts[ i ] ];
+ }
+ key = parts.pop();
+ if ( arguments.length === 1 ) {
+ return curOption[ key ] === undefined ? null : curOption[ key ];
+ }
+ curOption[ key ] = value;
+ } else {
+ if ( arguments.length === 1 ) {
+ return this.options[ key ] === undefined ? null : this.options[ key ];
+ }
+ options[ key ] = value;
+ }
+ }
+
+ this._setOptions( options );
+
+ return this;
+ },
+ _setOptions: function( options ) {
+ var key;
+
+ for ( key in options ) {
+ this._setOption( key, options[ key ] );
+ }
+
+ return this;
+ },
+ _setOption: function( key, value ) {
+ this.options[ key ] = value;
+
+ if ( key === "disabled" ) {
+ this.widget()
+ .toggleClass( this.widgetFullName + "-disabled", !!value );
+
+ // If the widget is becoming disabled, then nothing is interactive
+ if ( value ) {
+ this.hoverable.removeClass( "ui-state-hover" );
+ this.focusable.removeClass( "ui-state-focus" );
+ }
+ }
+
+ return this;
+ },
+
+ enable: function() {
+ return this._setOptions({ disabled: false });
+ },
+ disable: function() {
+ return this._setOptions({ disabled: true });
+ },
+
+ _on: function( suppressDisabledCheck, element, handlers ) {
+ var delegateElement,
+ instance = this;
+
+ // no suppressDisabledCheck flag, shuffle arguments
+ if ( typeof suppressDisabledCheck !== "boolean" ) {
+ handlers = element;
+ element = suppressDisabledCheck;
+ suppressDisabledCheck = false;
+ }
+
+ // no element argument, shuffle and use this.element
+ if ( !handlers ) {
+ handlers = element;
+ element = this.element;
+ delegateElement = this.widget();
+ } else {
+ element = delegateElement = $( element );
+ this.bindings = this.bindings.add( element );
+ }
+
+ $.each( handlers, function( event, handler ) {
+ function handlerProxy() {
+ // allow widgets to customize the disabled handling
+ // - disabled as an array instead of boolean
+ // - disabled class as method for disabling individual parts
+ if ( !suppressDisabledCheck &&
+ ( instance.options.disabled === true ||
+ $( this ).hasClass( "ui-state-disabled" ) ) ) {
+ return;
+ }
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
+ .apply( instance, arguments );
+ }
+
+ // copy the guid so direct unbinding works
+ if ( typeof handler !== "string" ) {
+ handlerProxy.guid = handler.guid =
+ handler.guid || handlerProxy.guid || $.guid++;
+ }
+
+ var match = event.match( /^([\w:-]*)\s*(.*)$/ ),
+ eventName = match[1] + instance.eventNamespace,
+ selector = match[2];
+ if ( selector ) {
+ delegateElement.delegate( selector, eventName, handlerProxy );
+ } else {
+ element.bind( eventName, handlerProxy );
+ }
+ });
+ },
+
+ _off: function( element, eventName ) {
+ eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) +
+ this.eventNamespace;
+ element.unbind( eventName ).undelegate( eventName );
+
+ // Clear the stack to avoid memory leaks (#10056)
+ this.bindings = $( this.bindings.not( element ).get() );
+ this.focusable = $( this.focusable.not( element ).get() );
+ this.hoverable = $( this.hoverable.not( element ).get() );
+ },
+
+ _delay: function( handler, delay ) {
+ function handlerProxy() {
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
+ .apply( instance, arguments );
+ }
+ var instance = this;
+ return setTimeout( handlerProxy, delay || 0 );
+ },
+
+ _hoverable: function( element ) {
+ this.hoverable = this.hoverable.add( element );
+ this._on( element, {
+ mouseenter: function( event ) {
+ $( event.currentTarget ).addClass( "ui-state-hover" );
+ },
+ mouseleave: function( event ) {
+ $( event.currentTarget ).removeClass( "ui-state-hover" );
+ }
+ });
+ },
+
+ _focusable: function( element ) {
+ this.focusable = this.focusable.add( element );
+ this._on( element, {
+ focusin: function( event ) {
+ $( event.currentTarget ).addClass( "ui-state-focus" );
+ },
+ focusout: function( event ) {
+ $( event.currentTarget ).removeClass( "ui-state-focus" );
+ }
+ });
+ },
+
+ _trigger: function( type, event, data ) {
+ var prop, orig,
+ callback = this.options[ type ];
+
+ data = data || {};
+ event = $.Event( event );
+ event.type = ( type === this.widgetEventPrefix ?
+ type :
+ this.widgetEventPrefix + type ).toLowerCase();
+ // the original event may come from any element
+ // so we need to reset the target on the new event
+ event.target = this.element[ 0 ];
+
+ // copy original event properties over to the new event
+ orig = event.originalEvent;
+ if ( orig ) {
+ for ( prop in orig ) {
+ if ( !( prop in event ) ) {
+ event[ prop ] = orig[ prop ];
+ }
+ }
+ }
+
+ this.element.trigger( event, data );
+ return !( $.isFunction( callback ) &&
+ callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
+ event.isDefaultPrevented() );
+ }
+};
+
+$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
+ $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
+ if ( typeof options === "string" ) {
+ options = { effect: options };
+ }
+ var hasOptions,
+ effectName = !options ?
+ method :
+ options === true || typeof options === "number" ?
+ defaultEffect :
+ options.effect || defaultEffect;
+ options = options || {};
+ if ( typeof options === "number" ) {
+ options = { duration: options };
+ }
+ hasOptions = !$.isEmptyObject( options );
+ options.complete = callback;
+ if ( options.delay ) {
+ element.delay( options.delay );
+ }
+ if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
+ element[ method ]( options );
+ } else if ( effectName !== method && element[ effectName ] ) {
+ element[ effectName ]( options.duration, options.easing, callback );
+ } else {
+ element.queue(function( next ) {
+ $( this )[ method ]();
+ if ( callback ) {
+ callback.call( element[ 0 ] );
+ }
+ next();
+ });
+ }
+ };
+});
+
+var widget = $.widget;
+
+
+
+
+/*!
+ * jQuery UI Menu 1.11.2
+ * http://jqueryui.com
+ *
+ * Copyright 2014 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/menu/
+ */
+
+
+var menu = $.widget( "ui.menu", {
+ version: "1.11.2",
+ defaultElement: "",
+ delay: 300,
+ options: {
+ icons: {
+ submenu: "ui-icon-carat-1-e"
+ },
+ items: "> *",
+ menus: "ul",
+ position: {
+ my: "left-1 top",
+ at: "right top"
+ },
+ role: "menu",
+
+ // callbacks
+ blur: null,
+ focus: null,
+ select: null
+ },
+
+ _create: function() {
+ this.activeMenu = this.element;
+
+ // Flag used to prevent firing of the click handler
+ // as the event bubbles up through nested menus
+ this.mouseHandled = false;
+ this.element
+ .uniqueId()
+ .addClass( "ui-menu ui-widget ui-widget-content" )
+ .toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
+ .attr({
+ role: this.options.role,
+ tabIndex: 0
+ });
+
+ if ( this.options.disabled ) {
+ this.element
+ .addClass( "ui-state-disabled" )
+ .attr( "aria-disabled", "true" );
+ }
+
+ this._on({
+ // Prevent focus from sticking to links inside menu after clicking
+ // them (focus should always stay on UL during navigation).
+ "mousedown .ui-menu-item": function( event ) {
+ event.preventDefault();
+ },
+ "click .ui-menu-item": function( event ) {
+ var target = $( event.target );
+ if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
+ this.select( event );
+
+ // Only set the mouseHandled flag if the event will bubble, see #9469.
+ if ( !event.isPropagationStopped() ) {
+ this.mouseHandled = true;
+ }
+
+ // Open submenu on click
+ if ( target.has( ".ui-menu" ).length ) {
+ this.expand( event );
+ } else if ( !this.element.is( ":focus" ) && $( this.document[ 0 ].activeElement ).closest( ".ui-menu" ).length ) {
+
+ // Redirect focus to the menu
+ this.element.trigger( "focus", [ true ] );
+
+ // If the active item is on the top level, let it stay active.
+ // Otherwise, blur the active item since it is no longer visible.
+ if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
+ clearTimeout( this.timer );
+ }
+ }
+ }
+ },
+ "mouseenter .ui-menu-item": function( event ) {
+ // Ignore mouse events while typeahead is active, see #10458.
+ // Prevents focusing the wrong item when typeahead causes a scroll while the mouse
+ // is over an item in the menu
+ if ( this.previousFilter ) {
+ return;
+ }
+ var target = $( event.currentTarget );
+ // Remove ui-state-active class from siblings of the newly focused menu item
+ // to avoid a jump caused by adjacent elements both having a class with a border
+ target.siblings( ".ui-state-active" ).removeClass( "ui-state-active" );
+ this.focus( event, target );
+ },
+ mouseleave: "collapseAll",
+ "mouseleave .ui-menu": "collapseAll",
+ focus: function( event, keepActiveItem ) {
+ // If there's already an active item, keep it active
+ // If not, activate the first item
+ var item = this.active || this.element.find( this.options.items ).eq( 0 );
+
+ if ( !keepActiveItem ) {
+ this.focus( event, item );
+ }
+ },
+ blur: function( event ) {
+ this._delay(function() {
+ if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
+ this.collapseAll( event );
+ }
+ });
+ },
+ keydown: "_keydown"
+ });
+
+ this.refresh();
+
+ // Clicks outside of a menu collapse any open menus
+ this._on( this.document, {
+ click: function( event ) {
+ if ( this._closeOnDocumentClick( event ) ) {
+ this.collapseAll( event );
+ }
+
+ // Reset the mouseHandled flag
+ this.mouseHandled = false;
+ }
+ });
+ },
+
+ _destroy: function() {
+ // Destroy (sub)menus
+ this.element
+ .removeAttr( "aria-activedescendant" )
+ .find( ".ui-menu" ).addBack()
+ .removeClass( "ui-menu ui-widget ui-widget-content ui-menu-icons ui-front" )
+ .removeAttr( "role" )
+ .removeAttr( "tabIndex" )
+ .removeAttr( "aria-labelledby" )
+ .removeAttr( "aria-expanded" )
+ .removeAttr( "aria-hidden" )
+ .removeAttr( "aria-disabled" )
+ .removeUniqueId()
+ .show();
+
+ // Destroy menu items
+ this.element.find( ".ui-menu-item" )
+ .removeClass( "ui-menu-item" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-disabled" )
+ .removeUniqueId()
+ .removeClass( "ui-state-hover" )
+ .removeAttr( "tabIndex" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-haspopup" )
+ .children().each( function() {
+ var elem = $( this );
+ if ( elem.data( "ui-menu-submenu-carat" ) ) {
+ elem.remove();
+ }
+ });
+
+ // Destroy menu dividers
+ this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
+ },
+
+ _keydown: function( event ) {
+ var match, prev, character, skip,
+ preventDefault = true;
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.PAGE_UP:
+ this.previousPage( event );
+ break;
+ case $.ui.keyCode.PAGE_DOWN:
+ this.nextPage( event );
+ break;
+ case $.ui.keyCode.HOME:
+ this._move( "first", "first", event );
+ break;
+ case $.ui.keyCode.END:
+ this._move( "last", "last", event );
+ break;
+ case $.ui.keyCode.UP:
+ this.previous( event );
+ break;
+ case $.ui.keyCode.DOWN:
+ this.next( event );
+ break;
+ case $.ui.keyCode.LEFT:
+ this.collapse( event );
+ break;
+ case $.ui.keyCode.RIGHT:
+ if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
+ this.expand( event );
+ }
+ break;
+ case $.ui.keyCode.ENTER:
+ case $.ui.keyCode.SPACE:
+ this._activate( event );
+ break;
+ case $.ui.keyCode.ESCAPE:
+ this.collapse( event );
+ break;
+ default:
+ preventDefault = false;
+ prev = this.previousFilter || "";
+ character = String.fromCharCode( event.keyCode );
+ skip = false;
+
+ clearTimeout( this.filterTimer );
+
+ if ( character === prev ) {
+ skip = true;
+ } else {
+ character = prev + character;
+ }
+
+ match = this._filterMenuItems( character );
+ match = skip && match.index( this.active.next() ) !== -1 ?
+ this.active.nextAll( ".ui-menu-item" ) :
+ match;
+
+ // If no matches on the current filter, reset to the last character pressed
+ // to move down the menu to the first item that starts with that character
+ if ( !match.length ) {
+ character = String.fromCharCode( event.keyCode );
+ match = this._filterMenuItems( character );
+ }
+
+ if ( match.length ) {
+ this.focus( event, match );
+ this.previousFilter = character;
+ this.filterTimer = this._delay(function() {
+ delete this.previousFilter;
+ }, 1000 );
+ } else {
+ delete this.previousFilter;
+ }
+ }
+
+ if ( preventDefault ) {
+ event.preventDefault();
+ }
+ },
+
+ _activate: function( event ) {
+ if ( !this.active.is( ".ui-state-disabled" ) ) {
+ if ( this.active.is( "[aria-haspopup='true']" ) ) {
+ this.expand( event );
+ } else {
+ this.select( event );
+ }
+ }
+ },
+
+ refresh: function() {
+ var menus, items,
+ that = this,
+ icon = this.options.icons.submenu,
+ submenus = this.element.find( this.options.menus );
+
+ this.element.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length );
+
+ // Initialize nested menus
+ submenus.filter( ":not(.ui-menu)" )
+ .addClass( "ui-menu ui-widget ui-widget-content ui-front" )
+ .hide()
+ .attr({
+ role: this.options.role,
+ "aria-hidden": "true",
+ "aria-expanded": "false"
+ })
+ .each(function() {
+ var menu = $( this ),
+ item = menu.parent(),
+ submenuCarat = $( "" )
+ .addClass( "ui-menu-icon ui-icon " + icon )
+ .data( "ui-menu-submenu-carat", true );
+
+ item
+ .attr( "aria-haspopup", "true" )
+ .prepend( submenuCarat );
+ menu.attr( "aria-labelledby", item.attr( "id" ) );
+ });
+
+ menus = submenus.add( this.element );
+ items = menus.find( this.options.items );
+
+ // Initialize menu-items containing spaces and/or dashes only as dividers
+ items.not( ".ui-menu-item" ).each(function() {
+ var item = $( this );
+ if ( that._isDivider( item ) ) {
+ item.addClass( "ui-widget-content ui-menu-divider" );
+ }
+ });
+
+ // Don't refresh list items that are already adapted
+ items.not( ".ui-menu-item, .ui-menu-divider" )
+ .addClass( "ui-menu-item" )
+ .uniqueId()
+ .attr({
+ tabIndex: -1,
+ role: this._itemRole()
+ });
+
+ // Add aria-disabled attribute to any disabled menu item
+ items.filter( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
+
+ // If the active item has been removed, blur the menu
+ if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+ this.blur();
+ }
+ },
+
+ _itemRole: function() {
+ return {
+ menu: "menuitem",
+ listbox: "option"
+ }[ this.options.role ];
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "icons" ) {
+ this.element.find( ".ui-menu-icon" )
+ .removeClass( this.options.icons.submenu )
+ .addClass( value.submenu );
+ }
+ if ( key === "disabled" ) {
+ this.element
+ .toggleClass( "ui-state-disabled", !!value )
+ .attr( "aria-disabled", value );
+ }
+ this._super( key, value );
+ },
+
+ focus: function( event, item ) {
+ var nested, focused;
+ this.blur( event, event && event.type === "focus" );
+
+ this._scrollIntoView( item );
+
+ this.active = item.first();
+ focused = this.active.addClass( "ui-state-focus" ).removeClass( "ui-state-active" );
+ // Only update aria-activedescendant if there's a role
+ // otherwise we assume focus is managed elsewhere
+ if ( this.options.role ) {
+ this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
+ }
+
+ // Highlight active parent menu item, if any
+ this.active
+ .parent()
+ .closest( ".ui-menu-item" )
+ .addClass( "ui-state-active" );
+
+ if ( event && event.type === "keydown" ) {
+ this._close();
+ } else {
+ this.timer = this._delay(function() {
+ this._close();
+ }, this.delay );
+ }
+
+ nested = item.children( ".ui-menu" );
+ if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {
+ this._startOpening(nested);
+ }
+ this.activeMenu = item.parent();
+
+ this._trigger( "focus", event, { item: item } );
+ },
+
+ _scrollIntoView: function( item ) {
+ var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
+ if ( this._hasScroll() ) {
+ borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
+ paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
+ offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
+ scroll = this.activeMenu.scrollTop();
+ elementHeight = this.activeMenu.height();
+ itemHeight = item.outerHeight();
+
+ if ( offset < 0 ) {
+ this.activeMenu.scrollTop( scroll + offset );
+ } else if ( offset + itemHeight > elementHeight ) {
+ this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
+ }
+ }
+ },
+
+ blur: function( event, fromFocus ) {
+ if ( !fromFocus ) {
+ clearTimeout( this.timer );
+ }
+
+ if ( !this.active ) {
+ return;
+ }
+
+ this.active.removeClass( "ui-state-focus" );
+ this.active = null;
+
+ this._trigger( "blur", event, { item: this.active } );
+ },
+
+ _startOpening: function( submenu ) {
+ clearTimeout( this.timer );
+
+ // Don't open if already open fixes a Firefox bug that caused a .5 pixel
+ // shift in the submenu position when mousing over the carat icon
+ if ( submenu.attr( "aria-hidden" ) !== "true" ) {
+ return;
+ }
+
+ this.timer = this._delay(function() {
+ this._close();
+ this._open( submenu );
+ }, this.delay );
+ },
+
+ _open: function( submenu ) {
+ var position = $.extend({
+ of: this.active
+ }, this.options.position );
+
+ clearTimeout( this.timer );
+ this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
+ .hide()
+ .attr( "aria-hidden", "true" );
+
+ submenu
+ .show()
+ .removeAttr( "aria-hidden" )
+ .attr( "aria-expanded", "true" )
+ .position( position );
+ },
+
+ collapseAll: function( event, all ) {
+ clearTimeout( this.timer );
+ this.timer = this._delay(function() {
+ // If we were passed an event, look for the submenu that contains the event
+ var currentMenu = all ? this.element :
+ $( event && event.target ).closest( this.element.find( ".ui-menu" ) );
+
+ // If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
+ if ( !currentMenu.length ) {
+ currentMenu = this.element;
+ }
+
+ this._close( currentMenu );
+
+ this.blur( event );
+ this.activeMenu = currentMenu;
+ }, this.delay );
+ },
+
+ // With no arguments, closes the currently active menu - if nothing is active
+ // it closes all menus. If passed an argument, it will search for menus BELOW
+ _close: function( startMenu ) {
+ if ( !startMenu ) {
+ startMenu = this.active ? this.active.parent() : this.element;
+ }
+
+ startMenu
+ .find( ".ui-menu" )
+ .hide()
+ .attr( "aria-hidden", "true" )
+ .attr( "aria-expanded", "false" )
+ .end()
+ .find( ".ui-state-active" ).not( ".ui-state-focus" )
+ .removeClass( "ui-state-active" );
+ },
+
+ _closeOnDocumentClick: function( event ) {
+ return !$( event.target ).closest( ".ui-menu" ).length;
+ },
+
+ _isDivider: function( item ) {
+
+ // Match hyphen, em dash, en dash
+ return !/[^\-\u2014\u2013\s]/.test( item.text() );
+ },
+
+ collapse: function( event ) {
+ var newItem = this.active &&
+ this.active.parent().closest( ".ui-menu-item", this.element );
+ if ( newItem && newItem.length ) {
+ this._close();
+ this.focus( event, newItem );
+ }
+ },
+
+ expand: function( event ) {
+ var newItem = this.active &&
+ this.active
+ .children( ".ui-menu " )
+ .find( this.options.items )
+ .first();
+
+ if ( newItem && newItem.length ) {
+ this._open( newItem.parent() );
+
+ // Delay so Firefox will not hide activedescendant change in expanding submenu from AT
+ this._delay(function() {
+ this.focus( event, newItem );
+ });
+ }
+ },
+
+ next: function( event ) {
+ this._move( "next", "first", event );
+ },
+
+ previous: function( event ) {
+ this._move( "prev", "last", event );
+ },
+
+ isFirstItem: function() {
+ return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
+ },
+
+ isLastItem: function() {
+ return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
+ },
+
+ _move: function( direction, filter, event ) {
+ var next;
+ if ( this.active ) {
+ if ( direction === "first" || direction === "last" ) {
+ next = this.active
+ [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
+ .eq( -1 );
+ } else {
+ next = this.active
+ [ direction + "All" ]( ".ui-menu-item" )
+ .eq( 0 );
+ }
+ }
+ if ( !next || !next.length || !this.active ) {
+ next = this.activeMenu.find( this.options.items )[ filter ]();
+ }
+
+ this.focus( event, next );
+ },
+
+ nextPage: function( event ) {
+ var item, base, height;
+
+ if ( !this.active ) {
+ this.next( event );
+ return;
+ }
+ if ( this.isLastItem() ) {
+ return;
+ }
+ if ( this._hasScroll() ) {
+ base = this.active.offset().top;
+ height = this.element.height();
+ this.active.nextAll( ".ui-menu-item" ).each(function() {
+ item = $( this );
+ return item.offset().top - base - height < 0;
+ });
+
+ this.focus( event, item );
+ } else {
+ this.focus( event, this.activeMenu.find( this.options.items )
+ [ !this.active ? "first" : "last" ]() );
+ }
+ },
+
+ previousPage: function( event ) {
+ var item, base, height;
+ if ( !this.active ) {
+ this.next( event );
+ return;
+ }
+ if ( this.isFirstItem() ) {
+ return;
+ }
+ if ( this._hasScroll() ) {
+ base = this.active.offset().top;
+ height = this.element.height();
+ this.active.prevAll( ".ui-menu-item" ).each(function() {
+ item = $( this );
+ return item.offset().top - base + height > 0;
+ });
+
+ this.focus( event, item );
+ } else {
+ this.focus( event, this.activeMenu.find( this.options.items ).first() );
+ }
+ },
+
+ _hasScroll: function() {
+ return this.element.outerHeight() < this.element.prop( "scrollHeight" );
+ },
+
+ select: function( event ) {
+ // TODO: It should never be possible to not have an active item at this
+ // point, but the tests don't trigger mouseenter before click.
+ this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
+ var ui = { item: this.active };
+ if ( !this.active.has( ".ui-menu" ).length ) {
+ this.collapseAll( event, true );
+ }
+ this._trigger( "select", event, ui );
+ },
+
+ _filterMenuItems: function(character) {
+ var escapedCharacter = character.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ),
+ regex = new RegExp( "^" + escapedCharacter, "i" );
+
+ return this.activeMenu
+ .find( this.options.items )
+
+ // Only match on items, not dividers or other content (#10571)
+ .filter( ".ui-menu-item" )
+ .filter(function() {
+ return regex.test( $.trim( $( this ).text() ) );
+ });
+ }
+});
+
+
+/*!
+ * jQuery UI Selectmenu 1.11.2
+ * http://jqueryui.com
+ *
+ * Copyright 2014 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/selectmenu
+ */
+
+
+var selectmenu = $.widget( "ui.selectmenu", {
+ version: "1.11.2",
+ defaultElement: "",
+ options: {
+ appendTo: null,
+ disabled: null,
+ icons: {
+ button: "ui-icon-triangle-1-s"
+ },
+ position: {
+ my: "left top",
+ at: "left bottom",
+ collision: "none"
+ },
+ width: null,
+
+ // callbacks
+ change: null,
+ close: null,
+ focus: null,
+ open: null,
+ select: null
+ },
+
+ _create: function() {
+ var selectmenuId = this.element.uniqueId().attr( "id" );
+ this.ids = {
+ element: selectmenuId,
+ button: selectmenuId + "-button",
+ menu: selectmenuId + "-menu"
+ };
+
+ this._drawButton();
+ this._drawMenu();
+
+ if ( this.options.disabled ) {
+ this.disable();
+ }
+ },
+
+ _drawButton: function() {
+ var that = this,
+ tabindex = this.element.attr( "tabindex" );
+
+ // Associate existing label with the new button
+ this.label = $( "label[for='" + this.ids.element + "']" ).attr( "for", this.ids.button );
+ this._on( this.label, {
+ click: function( event ) {
+ this.button.focus();
+ event.preventDefault();
+ }
+ });
+
+ // Hide original select element
+ this.element.hide();
+
+ // Create button
+ this.button = $( "", {
+ "class": "ui-selectmenu-button ui-widget ui-state-default ui-corner-all",
+ tabindex: tabindex || this.options.disabled ? -1 : 0,
+ id: this.ids.button,
+ role: "combobox",
+ "aria-expanded": "false",
+ "aria-autocomplete": "list",
+ "aria-owns": this.ids.menu,
+ "aria-haspopup": "true"
+ })
+ .insertAfter( this.element );
+
+ $( "", {
+ "class": "ui-icon " + this.options.icons.button
+ })
+ .prependTo( this.button );
+
+ this.buttonText = $( "", {
+ "class": "ui-selectmenu-text"
+ })
+ .appendTo( this.button );
+
+ this._setText( this.buttonText, this.element.find( "option:selected" ).text() );
+ this._resizeButton();
+
+ this._on( this.button, this._buttonEvents );
+ this.button.one( "focusin", function() {
+
+ // Delay rendering the menu items until the button receives focus.
+ // The menu may have already been rendered via a programmatic open.
+ if ( !that.menuItems ) {
+ that._refreshMenu();
+ }
+ });
+ this._hoverable( this.button );
+ this._focusable( this.button );
+ },
+
+ _drawMenu: function() {
+ var that = this;
+
+ // Create menu
+ this.menu = $( "", {
+ "aria-hidden": "true",
+ "aria-labelledby": this.ids.button,
+ id: this.ids.menu
+ });
+
+ // Wrap menu
+ this.menuWrap = $( "", {
+ "class": "ui-selectmenu-menu ui-front"
+ })
+ .append( this.menu )
+ .appendTo( this._appendTo() );
+
+ // Initialize menu widget
+ this.menuInstance = this.menu
+ .menu({
+ role: "listbox",
+ select: function( event, ui ) {
+ event.preventDefault();
+
+ // support: IE8
+ // If the item was selected via a click, the text selection
+ // will be destroyed in IE
+ that._setSelection();
+
+ that._select( ui.item.data( "ui-selectmenu-item" ), event );
+ },
+ focus: function( event, ui ) {
+ var item = ui.item.data( "ui-selectmenu-item" );
+
+ // Prevent inital focus from firing and check if its a newly focused item
+ if ( that.focusIndex != null && item.index !== that.focusIndex ) {
+ that._trigger( "focus", event, { item: item } );
+ if ( !that.isOpen ) {
+ that._select( item, event );
+ }
+ }
+ that.focusIndex = item.index;
+
+ that.button.attr( "aria-activedescendant",
+ that.menuItems.eq( item.index ).attr( "id" ) );
+ }
+ })
+ .menu( "instance" );
+
+ // Adjust menu styles to dropdown
+ this.menu
+ .addClass( "ui-corner-bottom" )
+ .removeClass( "ui-corner-all" );
+
+ // Don't close the menu on mouseleave
+ this.menuInstance._off( this.menu, "mouseleave" );
+
+ // Cancel the menu's collapseAll on document click
+ this.menuInstance._closeOnDocumentClick = function() {
+ return false;
+ };
+
+ // Selects often contain empty items, but never contain dividers
+ this.menuInstance._isDivider = function() {
+ return false;
+ };
+ },
+
+ refresh: function() {
+ this._refreshMenu();
+ this._setText( this.buttonText, this._getSelectedItem().text() );
+ if ( !this.options.width ) {
+ this._resizeButton();
+ }
+ },
+
+ _refreshMenu: function() {
+ this.menu.empty();
+
+ var item,
+ options = this.element.find( "option" );
+
+ if ( !options.length ) {
+ return;
+ }
+
+ this._parseOptions( options );
+ this._renderMenu( this.menu, this.items );
+
+ this.menuInstance.refresh();
+ this.menuItems = this.menu.find( "li" ).not( ".ui-selectmenu-optgroup" );
+
+ item = this._getSelectedItem();
+
+ // Update the menu to have the correct item focused
+ this.menuInstance.focus( null, item );
+ this._setAria( item.data( "ui-selectmenu-item" ) );
+
+ // Set disabled state
+ this._setOption( "disabled", this.element.prop( "disabled" ) );
+ },
+
+ open: function( event ) {
+ if ( this.options.disabled ) {
+ return;
+ }
+
+ // If this is the first time the menu is being opened, render the items
+ if ( !this.menuItems ) {
+ this._refreshMenu();
+ } else {
+
+ // Menu clears focus on close, reset focus to selected item
+ this.menu.find( ".ui-state-focus" ).removeClass( "ui-state-focus" );
+ this.menuInstance.focus( null, this._getSelectedItem() );
+ }
+
+ this.isOpen = true;
+ this._toggleAttr();
+ this._resizeMenu();
+ this._position();
+
+ this._on( this.document, this._documentClick );
+
+ this._trigger( "open", event );
+ },
+
+ _position: function() {
+ this.menuWrap.position( $.extend( { of: this.button }, this.options.position ) );
+ },
+
+ close: function( event ) {
+ if ( !this.isOpen ) {
+ return;
+ }
+
+ this.isOpen = false;
+ this._toggleAttr();
+
+ this.range = null;
+ this._off( this.document );
+
+ this._trigger( "close", event );
+ },
+
+ widget: function() {
+ return this.button;
+ },
+
+ menuWidget: function() {
+ return this.menu;
+ },
+
+ _renderMenu: function( ul, items ) {
+ var that = this,
+ currentOptgroup = "";
+
+ $.each( items, function( index, item ) {
+ if ( item.optgroup !== currentOptgroup ) {
+ $( "
", {
+ "class": "ui-selectmenu-optgroup ui-menu-divider" +
+ ( item.element.parent( "optgroup" ).prop( "disabled" ) ?
+ " ui-state-disabled" :
+ "" ),
+ text: item.optgroup
+ })
+ .appendTo( ul );
+
+ currentOptgroup = item.optgroup;
+ }
+
+ that._renderItemData( ul, item );
+ });
+ },
+
+ _renderItemData: function( ul, item ) {
+ return this._renderItem( ul, item ).data( "ui-selectmenu-item", item );
+ },
+
+ _renderItem: function( ul, item ) {
+ var li = $( " " );
+
+ if ( item.disabled ) {
+ li.addClass( "ui-state-disabled" );
+ }
+ this._setText( li, item.label );
+
+ return li.appendTo( ul );
+ },
+
+ _setText: function( element, value ) {
+ if ( value ) {
+ element.text( value );
+ } else {
+ element.html( " " );
+ }
+ },
+
+ _move: function( direction, event ) {
+ var item, next,
+ filter = ".ui-menu-item";
+
+ if ( this.isOpen ) {
+ item = this.menuItems.eq( this.focusIndex );
+ } else {
+ item = this.menuItems.eq( this.element[ 0 ].selectedIndex );
+ filter += ":not(.ui-state-disabled)";
+ }
+
+ if ( direction === "first" || direction === "last" ) {
+ next = item[ direction === "first" ? "prevAll" : "nextAll" ]( filter ).eq( -1 );
+ } else {
+ next = item[ direction + "All" ]( filter ).eq( 0 );
+ }
+
+ if ( next.length ) {
+ this.menuInstance.focus( event, next );
+ }
+ },
+
+ _getSelectedItem: function() {
+ return this.menuItems.eq( this.element[ 0 ].selectedIndex );
+ },
+
+ _toggle: function( event ) {
+ this[ this.isOpen ? "close" : "open" ]( event );
+ },
+
+ _setSelection: function() {
+ var selection;
+
+ if ( !this.range ) {
+ return;
+ }
+
+ if ( window.getSelection ) {
+ selection = window.getSelection();
+ selection.removeAllRanges();
+ selection.addRange( this.range );
+
+ // support: IE8
+ } else {
+ this.range.select();
+ }
+
+ // support: IE
+ // Setting the text selection kills the button focus in IE, but
+ // restoring the focus doesn't kill the selection.
+ this.button.focus();
+ },
+
+ _documentClick: {
+ mousedown: function( event ) {
+ if ( !this.isOpen ) {
+ return;
+ }
+
+ if ( !$( event.target ).closest( ".ui-selectmenu-menu, #" + this.ids.button ).length ) {
+ this.close( event );
+ }
+ }
+ },
+
+ _buttonEvents: {
+
+ // Prevent text selection from being reset when interacting with the selectmenu (#10144)
+ mousedown: function() {
+ var selection;
+
+ if ( window.getSelection ) {
+ selection = window.getSelection();
+ if ( selection.rangeCount ) {
+ this.range = selection.getRangeAt( 0 );
+ }
+
+ // support: IE8
+ } else {
+ this.range = document.selection.createRange();
+ }
+ },
+
+ click: function( event ) {
+ this._setSelection();
+ this._toggle( event );
+ },
+
+ keydown: function( event ) {
+ var preventDefault = true;
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.TAB:
+ case $.ui.keyCode.ESCAPE:
+ this.close( event );
+ preventDefault = false;
+ break;
+ case $.ui.keyCode.ENTER:
+ if ( this.isOpen ) {
+ this._selectFocusedItem( event );
+ }
+ break;
+ case $.ui.keyCode.UP:
+ if ( event.altKey ) {
+ this._toggle( event );
+ } else {
+ this._move( "prev", event );
+ }
+ break;
+ case $.ui.keyCode.DOWN:
+ if ( event.altKey ) {
+ this._toggle( event );
+ } else {
+ this._move( "next", event );
+ }
+ break;
+ case $.ui.keyCode.SPACE:
+ if ( this.isOpen ) {
+ this._selectFocusedItem( event );
+ } else {
+ this._toggle( event );
+ }
+ break;
+ case $.ui.keyCode.LEFT:
+ this._move( "prev", event );
+ break;
+ case $.ui.keyCode.RIGHT:
+ this._move( "next", event );
+ break;
+ case $.ui.keyCode.HOME:
+ case $.ui.keyCode.PAGE_UP:
+ this._move( "first", event );
+ break;
+ case $.ui.keyCode.END:
+ case $.ui.keyCode.PAGE_DOWN:
+ this._move( "last", event );
+ break;
+ default:
+ this.menu.trigger( event );
+ preventDefault = false;
+ }
+
+ if ( preventDefault ) {
+ event.preventDefault();
+ }
+ }
+ },
+
+ _selectFocusedItem: function( event ) {
+ var item = this.menuItems.eq( this.focusIndex );
+ if ( !item.hasClass( "ui-state-disabled" ) ) {
+ this._select( item.data( "ui-selectmenu-item" ), event );
+ }
+ },
+
+ _select: function( item, event ) {
+ var oldIndex = this.element[ 0 ].selectedIndex;
+
+ // Change native select element
+ this.element[ 0 ].selectedIndex = item.index;
+ this._setText( this.buttonText, item.label );
+ this._setAria( item );
+ this._trigger( "select", event, { item: item } );
+
+ if ( item.index !== oldIndex ) {
+ this._trigger( "change", event, { item: item } );
+ }
+
+ this.close( event );
+ },
+
+ _setAria: function( item ) {
+ var id = this.menuItems.eq( item.index ).attr( "id" );
+
+ this.button.attr({
+ "aria-labelledby": id,
+ "aria-activedescendant": id
+ });
+ this.menu.attr( "aria-activedescendant", id );
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "icons" ) {
+ this.button.find( "span.ui-icon" )
+ .removeClass( this.options.icons.button )
+ .addClass( value.button );
+ }
+
+ this._super( key, value );
+
+ if ( key === "appendTo" ) {
+ this.menuWrap.appendTo( this._appendTo() );
+ }
+
+ if ( key === "disabled" ) {
+ this.menuInstance.option( "disabled", value );
+ this.button
+ .toggleClass( "ui-state-disabled", value )
+ .attr( "aria-disabled", value );
+
+ this.element.prop( "disabled", value );
+ if ( value ) {
+ this.button.attr( "tabindex", -1 );
+ this.close();
+ } else {
+ this.button.attr( "tabindex", 0 );
+ }
+ }
+
+ if ( key === "width" ) {
+ this._resizeButton();
+ }
+ },
+
+ _appendTo: function() {
+ var element = this.options.appendTo;
+
+ if ( element ) {
+ element = element.jquery || element.nodeType ?
+ $( element ) :
+ this.document.find( element ).eq( 0 );
+ }
+
+ if ( !element || !element[ 0 ] ) {
+ element = this.element.closest( ".ui-front" );
+ }
+
+ if ( !element.length ) {
+ element = this.document[ 0 ].body;
+ }
+
+ return element;
+ },
+
+ _toggleAttr: function() {
+ this.button
+ .toggleClass( "ui-corner-top", this.isOpen )
+ .toggleClass( "ui-corner-all", !this.isOpen )
+ .attr( "aria-expanded", this.isOpen );
+ this.menuWrap.toggleClass( "ui-selectmenu-open", this.isOpen );
+ this.menu.attr( "aria-hidden", !this.isOpen );
+ },
+
+ _resizeButton: function() {
+ var width = this.options.width;
+
+ if ( !width ) {
+ width = this.element.show().outerWidth();
+ this.element.hide();
+ }
+
+ this.button.outerWidth( width );
+ },
+
+ _resizeMenu: function() {
+ this.menu.outerWidth( Math.max(
+ this.button.outerWidth(),
+
+ // support: IE10
+ // IE10 wraps long text (possibly a rounding bug)
+ // so we add 1px to avoid the wrapping
+ this.menu.width( "" ).outerWidth() + 1
+ ) );
+ },
+
+ _getCreateOptions: function() {
+ return { disabled: this.element.prop( "disabled" ) };
+ },
+
+ _parseOptions: function( options ) {
+ var data = [];
+ options.each(function( index, item ) {
+ var option = $( item ),
+ optgroup = option.parent( "optgroup" );
+ data.push({
+ element: option,
+ index: index,
+ value: option.attr( "value" ),
+ label: option.text(),
+ optgroup: optgroup.attr( "label" ) || "",
+ disabled: optgroup.prop( "disabled" ) || option.prop( "disabled" )
+ });
+ });
+ this.items = data;
+ },
+
+ _destroy: function() {
+ this.menuWrap.remove();
+ this.button.remove();
+ this.element.show();
+ this.element.removeUniqueId();
+ this.label.attr( "for", this.ids.element );
+ }
+});
+
+
+
+})
+
+);
diff --git a/wp-content/plugins/child-theme-configurator/js/selectmenu.min.js b/wp-content/plugins/child-theme-configurator/js/selectmenu.min.js
new file mode 100644
index 0000000..d7fb8e0
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/js/selectmenu.min.js
@@ -0,0 +1 @@
+(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(c){var f=0,a=Array.prototype.slice;c.cleanData=(function(g){return function(h){var k,l,j;for(j=0;(l=h[j])!=null;j++){try{k=c._data(l,"events");if(k&&k.remove){c(l).triggerHandler("remove")}}catch(m){}}g(h)}})(c.cleanData);c.widget=function(g,h,o){var l,m,j,n,i={},k=g.split(".")[0];g=g.split(".")[1];l=k+"-"+g;if(!o){o=h;h=c.Widget}c.expr[":"][l.toLowerCase()]=function(p){return !!c.data(p,l)};c[k]=c[k]||{};m=c[k][g];j=c[k][g]=function(p,q){if(!this._createWidget){return new j(p,q)}if(arguments.length){this._createWidget(p,q)}};c.extend(j,m,{version:o.version,_proto:c.extend({},o),_childConstructors:[]});n=new h();n.options=c.widget.extend({},n.options);c.each(o,function(q,p){if(!c.isFunction(p)){i[q]=p;return}i[q]=(function(){var r=function(){return h.prototype[q].apply(this,arguments)},s=function(t){return h.prototype[q].apply(this,t)};return function(){var v=this._super,t=this._superApply,u;this._super=r;this._superApply=s;u=p.apply(this,arguments);this._super=v;this._superApply=t;return u}})()});j.prototype=c.widget.extend(n,{widgetEventPrefix:m?(n.widgetEventPrefix||g):g},i,{constructor:j,namespace:k,widgetName:g,widgetFullName:l});if(m){c.each(m._childConstructors,function(q,r){var p=r.prototype;c.widget(p.namespace+"."+p.widgetName,j,r._proto)});delete m._childConstructors}else{h._childConstructors.push(j)}c.widget.bridge(g,j);return j};c.widget.extend=function(l){var h=a.call(arguments,1),k=0,g=h.length,i,j;for(;k",options:{disabled:false,create:null},_createWidget:function(g,h){h=c(h||this.defaultElement||this)[0];this.element=c(h);this.uuid=f++;this.eventNamespace="."+this.widgetName+this.uuid;this.bindings=c();this.hoverable=c();this.focusable=c();if(h!==this){c.data(h,this.widgetFullName,this);this._on(true,this.element,{remove:function(i){if(i.target===h){this.destroy()}}});this.document=c(h.style?h.ownerDocument:h.document||h);this.window=c(this.document[0].defaultView||this.document[0].parentWindow)}this.options=c.widget.extend({},this.options,this._getCreateOptions(),g);this._create();this._trigger("create",null,this._getCreateEventData());this._init()},_getCreateOptions:c.noop,_getCreateEventData:c.noop,_create:c.noop,_init:c.noop,destroy:function(){this._destroy();this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(c.camelCase(this.widgetFullName));this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled ui-state-disabled");this.bindings.unbind(this.eventNamespace);this.hoverable.removeClass("ui-state-hover");this.focusable.removeClass("ui-state-focus")},_destroy:c.noop,widget:function(){return this.element},option:function(k,l){var g=k,m,j,h;if(arguments.length===0){return c.widget.extend({},this.options)}if(typeof k==="string"){g={};m=k.split(".");k=m.shift();if(m.length){j=g[k]=c.widget.extend({},this.options[k]);for(h=0;h",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},items:"> *",menus:"ul",position:{my:"left-1 top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element;this.mouseHandled=false;this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0});if(this.options.disabled){this.element.addClass("ui-state-disabled").attr("aria-disabled","true")}this._on({"mousedown .ui-menu-item":function(g){g.preventDefault()},"click .ui-menu-item":function(g){var h=c(g.target);if(!this.mouseHandled&&h.not(".ui-state-disabled").length){this.select(g);if(!g.isPropagationStopped()){this.mouseHandled=true}if(h.has(".ui-menu").length){this.expand(g)}else{if(!this.element.is(":focus")&&c(this.document[0].activeElement).closest(".ui-menu").length){this.element.trigger("focus",[true]);if(this.active&&this.active.parents(".ui-menu").length===1){clearTimeout(this.timer)}}}}},"mouseenter .ui-menu-item":function(g){if(this.previousFilter){return}var h=c(g.currentTarget);h.siblings(".ui-state-active").removeClass("ui-state-active");this.focus(g,h)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(i,g){var h=this.active||this.element.find(this.options.items).eq(0);if(!g){this.focus(i,h)}},blur:function(g){this._delay(function(){if(!c.contains(this.element[0],this.document[0].activeElement)){this.collapseAll(g)}})},keydown:"_keydown"});this.refresh();this._on(this.document,{click:function(g){if(this._closeOnDocumentClick(g)){this.collapseAll(g)}this.mouseHandled=false}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show();this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var g=c(this);if(g.data("ui-menu-submenu-carat")){g.remove()}});this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(k){var h,j,l,i,g=true;switch(k.keyCode){case c.ui.keyCode.PAGE_UP:this.previousPage(k);break;case c.ui.keyCode.PAGE_DOWN:this.nextPage(k);break;case c.ui.keyCode.HOME:this._move("first","first",k);break;case c.ui.keyCode.END:this._move("last","last",k);break;case c.ui.keyCode.UP:this.previous(k);break;case c.ui.keyCode.DOWN:this.next(k);break;case c.ui.keyCode.LEFT:this.collapse(k);break;case c.ui.keyCode.RIGHT:if(this.active&&!this.active.is(".ui-state-disabled")){this.expand(k)}break;case c.ui.keyCode.ENTER:case c.ui.keyCode.SPACE:this._activate(k);break;case c.ui.keyCode.ESCAPE:this.collapse(k);break;default:g=false;j=this.previousFilter||"";l=String.fromCharCode(k.keyCode);i=false;clearTimeout(this.filterTimer);if(l===j){i=true}else{l=j+l}h=this._filterMenuItems(l);h=i&&h.index(this.active.next())!==-1?this.active.nextAll(".ui-menu-item"):h;if(!h.length){l=String.fromCharCode(k.keyCode);h=this._filterMenuItems(l)}if(h.length){this.focus(k,h);this.previousFilter=l;this.filterTimer=this._delay(function(){delete this.previousFilter},1000)}else{delete this.previousFilter}}if(g){k.preventDefault()}},_activate:function(g){if(!this.active.is(".ui-state-disabled")){if(this.active.is("[aria-haspopup='true']")){this.expand(g)}else{this.select(g)}}},refresh:function(){var k,h,j=this,i=this.options.icons.submenu,g=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length);g.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var n=c(this),m=n.parent(),l=c("").addClass("ui-menu-icon ui-icon "+i).data("ui-menu-submenu-carat",true);m.attr("aria-haspopup","true").prepend(l);n.attr("aria-labelledby",m.attr("id"))});k=g.add(this.element);h=k.find(this.options.items);h.not(".ui-menu-item").each(function(){var l=c(this);if(j._isDivider(l)){l.addClass("ui-widget-content ui-menu-divider")}});h.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({tabIndex:-1,role:this._itemRole()});h.filter(".ui-state-disabled").attr("aria-disabled","true");if(this.active&&!c.contains(this.element[0],this.active[0])){this.blur()}},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(g,h){if(g==="icons"){this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(h.submenu)}if(g==="disabled"){this.element.toggleClass("ui-state-disabled",!!h).attr("aria-disabled",h)}this._super(g,h)},focus:function(h,g){var j,i;this.blur(h,h&&h.type==="focus");this._scrollIntoView(g);this.active=g.first();i=this.active.addClass("ui-state-focus").removeClass("ui-state-active");if(this.options.role){this.element.attr("aria-activedescendant",i.attr("id"))}this.active.parent().closest(".ui-menu-item").addClass("ui-state-active");if(h&&h.type==="keydown"){this._close()}else{this.timer=this._delay(function(){this._close()},this.delay)}j=g.children(".ui-menu");if(j.length&&h&&(/^mouse/.test(h.type))){this._startOpening(j)}this.activeMenu=g.parent();this._trigger("focus",h,{item:g})},_scrollIntoView:function(j){var m,i,k,g,h,l;if(this._hasScroll()){m=parseFloat(c.css(this.activeMenu[0],"borderTopWidth"))||0;i=parseFloat(c.css(this.activeMenu[0],"paddingTop"))||0;k=j.offset().top-this.activeMenu.offset().top-m-i;g=this.activeMenu.scrollTop();h=this.activeMenu.height();l=j.outerHeight();if(k<0){this.activeMenu.scrollTop(g+k)}else{if(k+l>h){this.activeMenu.scrollTop(g+k-h+l)}}}},blur:function(h,g){if(!g){clearTimeout(this.timer)}if(!this.active){return}this.active.removeClass("ui-state-focus");this.active=null;this._trigger("blur",h,{item:this.active})},_startOpening:function(g){clearTimeout(this.timer);if(g.attr("aria-hidden")!=="true"){return}this.timer=this._delay(function(){this._close();this._open(g)},this.delay)},_open:function(h){var g=c.extend({of:this.active},this.options.position);clearTimeout(this.timer);this.element.find(".ui-menu").not(h.parents(".ui-menu")).hide().attr("aria-hidden","true");h.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(g)},collapseAll:function(h,g){clearTimeout(this.timer);this.timer=this._delay(function(){var i=g?this.element:c(h&&h.target).closest(this.element.find(".ui-menu"));if(!i.length){i=this.element}this._close(i);this.blur(h);this.activeMenu=i},this.delay)},_close:function(g){if(!g){g=this.active?this.active.parent():this.element}g.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")},_closeOnDocumentClick:function(g){return !c(g.target).closest(".ui-menu").length},_isDivider:function(g){return !/[^\-\u2014\u2013\s]/.test(g.text())},collapse:function(h){var g=this.active&&this.active.parent().closest(".ui-menu-item",this.element);if(g&&g.length){this._close();this.focus(h,g)}},expand:function(h){var g=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();if(g&&g.length){this._open(g.parent());this._delay(function(){this.focus(h,g)})}},next:function(g){this._move("next","first",g)},previous:function(g){this._move("prev","last",g)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(j,h,i){var g;if(this.active){if(j==="first"||j==="last"){g=this.active[j==="first"?"prevAll":"nextAll"](".ui-menu-item").eq(-1)}else{g=this.active[j+"All"](".ui-menu-item").eq(0)}}if(!g||!g.length||!this.active){g=this.activeMenu.find(this.options.items)[h]()}this.focus(i,g)},nextPage:function(i){var h,j,g;if(!this.active){this.next(i);return}if(this.isLastItem()){return}if(this._hasScroll()){j=this.active.offset().top;g=this.element.height();this.active.nextAll(".ui-menu-item").each(function(){h=c(this);return h.offset().top-j-g<0});this.focus(i,h)}else{this.focus(i,this.activeMenu.find(this.options.items)[!this.active?"first":"last"]())}},previousPage:function(i){var h,j,g;if(!this.active){this.next(i);return}if(this.isFirstItem()){return}if(this._hasScroll()){j=this.active.offset().top;g=this.element.height();this.active.prevAll(".ui-menu-item").each(function(){h=c(this);return h.offset().top-j+g>0});this.focus(i,h)}else{this.focus(i,this.activeMenu.find(this.options.items).first())}},_hasScroll:function(){return this.element.outerHeight()",options:{appendTo:null,disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:null,change:null,close:null,focus:null,open:null,select:null},_create:function(){var g=this.element.uniqueId().attr("id");this.ids={element:g,button:g+"-button",menu:g+"-menu"};this._drawButton();this._drawMenu();if(this.options.disabled){this.disable()}},_drawButton:function(){var h=this,g=this.element.attr("tabindex");this.label=c("label[for='"+this.ids.element+"']").attr("for",this.ids.button);this._on(this.label,{click:function(i){this.button.focus();i.preventDefault()}});this.element.hide();this.button=c("",{"class":"ui-selectmenu-button ui-widget ui-state-default ui-corner-all",tabindex:g||this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true"}).insertAfter(this.element);c("",{"class":"ui-icon "+this.options.icons.button}).prependTo(this.button);this.buttonText=c("",{"class":"ui-selectmenu-text"}).appendTo(this.button);this._setText(this.buttonText,this.element.find("option:selected").text());this._resizeButton();this._on(this.button,this._buttonEvents);this.button.one("focusin",function(){if(!h.menuItems){h._refreshMenu()}});this._hoverable(this.button);this._focusable(this.button)},_drawMenu:function(){var g=this;this.menu=c("",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu});this.menuWrap=c("",{"class":"ui-selectmenu-menu ui-front"}).append(this.menu).appendTo(this._appendTo());this.menuInstance=this.menu.menu({role:"listbox",select:function(h,i){h.preventDefault();g._setSelection();g._select(i.item.data("ui-selectmenu-item"),h)},focus:function(i,j){var h=j.item.data("ui-selectmenu-item");if(g.focusIndex!=null&&h.index!==g.focusIndex){g._trigger("focus",i,{item:h});if(!g.isOpen){g._select(h,i)}}g.focusIndex=h.index;g.button.attr("aria-activedescendant",g.menuItems.eq(h.index).attr("id"))}}).menu("instance");this.menu.addClass("ui-corner-bottom").removeClass("ui-corner-all");this.menuInstance._off(this.menu,"mouseleave");this.menuInstance._closeOnDocumentClick=function(){return false};this.menuInstance._isDivider=function(){return false}},refresh:function(){this._refreshMenu();this._setText(this.buttonText,this._getSelectedItem().text());if(!this.options.width){this._resizeButton()}},_refreshMenu:function(){this.menu.empty();var h,g=this.element.find("option");if(!g.length){return}this._parseOptions(g);this._renderMenu(this.menu,this.items);this.menuInstance.refresh();this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup");h=this._getSelectedItem();this.menuInstance.focus(null,h);this._setAria(h.data("ui-selectmenu-item"));this._setOption("disabled",this.element.prop("disabled"))},open:function(g){if(this.options.disabled){return}if(!this.menuItems){this._refreshMenu()}else{this.menu.find(".ui-state-focus").removeClass("ui-state-focus");this.menuInstance.focus(null,this._getSelectedItem())}this.isOpen=true;this._toggleAttr();this._resizeMenu();this._position();this._on(this.document,this._documentClick);this._trigger("open",g)},_position:function(){this.menuWrap.position(c.extend({of:this.button},this.options.position))},close:function(g){if(!this.isOpen){return}this.isOpen=false;this._toggleAttr();this.range=null;this._off(this.document);this._trigger("close",g)},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderMenu:function(i,h){var j=this,g="";c.each(h,function(k,l){if(l.optgroup!==g){c("
",{"class":"ui-selectmenu-optgroup ui-menu-divider"+(l.element.parent("optgroup").prop("disabled")?" ui-state-disabled":""),text:l.optgroup}).appendTo(i);g=l.optgroup}j._renderItemData(i,l)})},_renderItemData:function(g,h){return this._renderItem(g,h).data("ui-selectmenu-item",h)},_renderItem:function(h,i){var g=c(" ");if(i.disabled){g.addClass("ui-state-disabled")}this._setText(g,i.label);return g.appendTo(h)},_setText:function(g,h){if(h){g.text(h)}else{g.html(" ")}},_move:function(k,j){var i,h,g=".ui-menu-item";if(this.isOpen){i=this.menuItems.eq(this.focusIndex)}else{i=this.menuItems.eq(this.element[0].selectedIndex);g+=":not(.ui-state-disabled)"}if(k==="first"||k==="last"){h=i[k==="first"?"prevAll":"nextAll"](g).eq(-1)}else{h=i[k+"All"](g).eq(0)}if(h.length){this.menuInstance.focus(j,h)}},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex)},_toggle:function(g){this[this.isOpen?"close":"open"](g)},_setSelection:function(){var g;if(!this.range){return}if(window.getSelection){g=window.getSelection();g.removeAllRanges();g.addRange(this.range)}else{this.range.select()}this.button.focus()},_documentClick:{mousedown:function(g){if(!this.isOpen){return}if(!c(g.target).closest(".ui-selectmenu-menu, #"+this.ids.button).length){this.close(g)}}},_buttonEvents:{mousedown:function(){var g;if(window.getSelection){g=window.getSelection();if(g.rangeCount){this.range=g.getRangeAt(0)}}else{this.range=document.selection.createRange()}},click:function(g){this._setSelection();this._toggle(g)},keydown:function(h){var g=true;switch(h.keyCode){case c.ui.keyCode.TAB:case c.ui.keyCode.ESCAPE:this.close(h);g=false;break;case c.ui.keyCode.ENTER:if(this.isOpen){this._selectFocusedItem(h)}break;case c.ui.keyCode.UP:if(h.altKey){this._toggle(h)}else{this._move("prev",h)}break;case c.ui.keyCode.DOWN:if(h.altKey){this._toggle(h)}else{this._move("next",h)}break;case c.ui.keyCode.SPACE:if(this.isOpen){this._selectFocusedItem(h)}else{this._toggle(h)}break;case c.ui.keyCode.LEFT:this._move("prev",h);break;case c.ui.keyCode.RIGHT:this._move("next",h);break;case c.ui.keyCode.HOME:case c.ui.keyCode.PAGE_UP:this._move("first",h);break;case c.ui.keyCode.END:case c.ui.keyCode.PAGE_DOWN:this._move("last",h);break;default:this.menu.trigger(h);g=false}if(g){h.preventDefault()}}},_selectFocusedItem:function(h){var g=this.menuItems.eq(this.focusIndex);if(!g.hasClass("ui-state-disabled")){this._select(g.data("ui-selectmenu-item"),h)}},_select:function(h,g){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=h.index;this._setText(this.buttonText,h.label);this._setAria(h);this._trigger("select",g,{item:h});if(h.index!==i){this._trigger("change",g,{item:h})}this.close(g)},_setAria:function(g){var h=this.menuItems.eq(g.index).attr("id");this.button.attr({"aria-labelledby":h,"aria-activedescendant":h});this.menu.attr("aria-activedescendant",h)},_setOption:function(g,h){if(g==="icons"){this.button.find("span.ui-icon").removeClass(this.options.icons.button).addClass(h.button)}this._super(g,h);if(g==="appendTo"){this.menuWrap.appendTo(this._appendTo())}if(g==="disabled"){this.menuInstance.option("disabled",h);this.button.toggleClass("ui-state-disabled",h).attr("aria-disabled",h);this.element.prop("disabled",h);if(h){this.button.attr("tabindex",-1);this.close()}else{this.button.attr("tabindex",0)}}if(g==="width"){this._resizeButton()}},_appendTo:function(){var g=this.options.appendTo;if(g){g=g.jquery||g.nodeType?c(g):this.document.find(g).eq(0)}if(!g||!g[0]){g=this.element.closest(".ui-front")}if(!g.length){g=this.document[0].body}return g},_toggleAttr:function(){this.button.toggleClass("ui-corner-top",this.isOpen).toggleClass("ui-corner-all",!this.isOpen).attr("aria-expanded",this.isOpen);this.menuWrap.toggleClass("ui-selectmenu-open",this.isOpen);this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var g=this.options.width;if(!g){g=this.element.show().outerWidth();this.element.hide()}this.button.outerWidth(g)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){return{disabled:this.element.prop("disabled")}},_parseOptions:function(g){var h=[];g.each(function(j,l){var k=c(l),i=k.parent("optgroup");h.push({element:k,index:j,value:k.attr("value"),label:k.text(),optgroup:i.attr("label")||"",disabled:i.prop("disabled")||k.prop("disabled")})});this.items=h},_destroy:function(){this.menuWrap.remove();this.button.remove();this.element.show();this.element.removeUniqueId();this.label.attr("for",this.ids.element)}})}));
\ No newline at end of file
diff --git a/wp-content/plugins/child-theme-configurator/js/spectrum.js b/wp-content/plugins/child-theme-configurator/js/spectrum.js
new file mode 100644
index 0000000..c787f4b
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/js/spectrum.js
@@ -0,0 +1,2368 @@
+// Spectrum Colorpicker v1.7.0
+// https://github.com/bgrins/spectrum
+// Author: Brian Grinstead
+// License: MIT
+// Modifications for CTC (c) 2018 Lilaea Media LLC
+
+(function (factory) {
+ "use strict";
+
+ if (typeof define === 'function' && define.amd) { // AMD
+ define(['jquery'], factory);
+ }
+ else if (typeof exports == "object" && typeof module == "object") { // CommonJS
+ module.exports = factory;
+ }
+ else { // Browser
+ factory(jQuery);
+ }
+})(function($, undefined) {
+ "use strict";
+
+ var defaultOpts = {
+
+ // Callbacks
+ beforeShow: noop,
+ move: noop,
+ change: noop,
+ show: noop,
+ hide: noop,
+
+ // Options
+ color: false,
+ flat: false,
+ showInput: false,
+ allowEmpty: false,
+ showButtons: true,
+ clickoutFiresChange: true,
+ showInitial: false,
+ showPalette: false,
+ showPaletteOnly: false,
+ hideAfterPaletteSelect: false,
+ togglePaletteOnly: false,
+ showSelectionPalette: true,
+ localStorageKey: false,
+ appendTo: "body",
+ maxSelectionSize: 7,
+ cancelText: "cancel",
+ chooseText: "choose",
+ togglePaletteMoreText: "more",
+ togglePaletteLessText: "less",
+ clearText: "Clear Color Selection",
+ noColorSelectedText: "No Color Selected",
+ preferredFormat: false,
+ className: "", // Deprecated - use containerClassName and replacerClassName instead.
+ containerClassName: "",
+ replacerClassName: "",
+ showAlpha: false,
+ theme: "sp-light",
+ palette: [["#ffffff", "#000000", "#ff0000", "#ff8000", "#ffff00", "#008000", "#0000ff", "#4b0082", "#9400d3"]],
+ selectionPalette: [],
+ disabled: false,
+ offset: null
+ },
+ spectrums = [],
+ IE = !!/msie/i.exec( window.navigator.userAgent ),
+ rgbaSupport = (function() {
+ function contains( str, substr ) {
+ return !!~('' + str).indexOf(substr);
+ }
+
+ var elem = document.createElement('div');
+ var style = elem.style;
+ style.cssText = 'background-color:rgba(0,0,0,.5)';
+ return contains(style.backgroundColor, 'rgba') || contains(style.backgroundColor, 'hsla');
+ })(),
+ replaceInput = [
+ ""
+ ].join(''),
+ markup = (function () {
+
+ // IE does not support gradients with multiple stops, so we need to simulate
+ // that for the rainbow slider with 8 divs that each have a single gradient
+ var gradientFix = "";
+ if (IE) {
+ for (var i = 1; i <= 6; i++) {
+ gradientFix += "
";
+ }
+ }
+
+ return [
+ "",
+ "
",
+ "
",
+ "
",
+ " ",
+ "
",
+ "
",
+ "
",
+ "
",
+ "
",
+ "
",
+ "
",
+ "
",
+ "
",
+ "
",
+ "
",
+ gradientFix,
+ "
",
+ "
",
+ "
",
+ "
",
+ "
",
+ " ",
+ "
",
+ "
",
+ "
",
+ "
",
+ "
"
+ ].join("");
+ })();
+
+ function paletteTemplate (p, color, className, opts) {
+ var html = [];
+ for (var i = 0; i < p.length; i++) {
+ var current = p[i];
+ if(current) {
+ var tiny = tinycolor(current);
+ var c = tiny.toHsl().l < 0.5 ? "sp-thumb-el sp-thumb-dark" : "sp-thumb-el sp-thumb-light";
+ c += (tinycolor.equals(color, current)) ? " sp-thumb-active" : "";
+ var formattedString = tiny.toString(opts.preferredFormat || "rgb");
+ var swatchStyle = rgbaSupport ? ("background-color:" + tiny.toRgbString()) : "filter:" + tiny.toFilter();
+ html.push(' ');
+ } else {
+ var cls = 'sp-clear-display';
+ html.push($('
')
+ .append($(' ')
+ .attr('title', opts.noColorSelectedText)
+ )
+ .html()
+ );
+ }
+ }
+ return "" + html.join('') + "
";
+ }
+
+ function hideAll() {
+ for (var i = 0; i < spectrums.length; i++) {
+ if (spectrums[i]) {
+ spectrums[i].hide();
+ }
+ }
+ }
+
+ function instanceOptions(o, callbackContext) {
+ var opts = $.extend({}, defaultOpts, o);
+ opts.callbacks = {
+ 'move': bind(opts.move, callbackContext),
+ 'change': bind(opts.change, callbackContext),
+ 'show': bind(opts.show, callbackContext),
+ 'hide': bind(opts.hide, callbackContext),
+ 'beforeShow': bind(opts.beforeShow, callbackContext)
+ };
+
+ return opts;
+ }
+
+ function spectrum(element, o) {
+
+ var opts = instanceOptions(o, element),
+ flat = opts.flat,
+ showSelectionPalette = opts.showSelectionPalette,
+ localStorageKey = opts.localStorageKey,
+ theme = opts.theme,
+ callbacks = opts.callbacks,
+ resize = throttle(reflow, 10),
+ visible = false,
+ isDragging = false,
+ dragWidth = 0,
+ dragHeight = 0,
+ dragHelperHeight = 0,
+ slideHeight = 0,
+ slideWidth = 0,
+ alphaWidth = 0,
+ alphaSlideHelperWidth = 0,
+ slideHelperHeight = 0,
+ currentHue = 0,
+ currentSaturation = 0,
+ currentValue = 0,
+ currentAlpha = 1,
+ palette = [],
+ paletteArray = [],
+ paletteLookup = {},
+ selectionPalette = opts.selectionPalette.slice(0),
+ maxSelectionSize = opts.maxSelectionSize,
+ draggingClass = "sp-dragging",
+ shiftMovementDirection = null;
+
+ var doc = element.ownerDocument,
+ body = doc.body,
+ boundElement = $(element),
+ disabled = false,
+ container = $(markup, doc).addClass(theme),
+ pickerContainer = container.find(".sp-picker-container"),
+ dragger = container.find(".sp-color"),
+ dragHelper = container.find(".sp-dragger"),
+ slider = container.find(".sp-hue"),
+ slideHelper = container.find(".sp-slider"),
+ alphaSliderInner = container.find(".sp-alpha-inner"),
+ alphaSlider = container.find(".sp-alpha"),
+ alphaSlideHelper = container.find(".sp-alpha-handle"),
+ textInput = container.find(".sp-input"),
+ paletteContainer = container.find(".sp-palette"),
+ initialColorContainer = container.find(".sp-initial"),
+ cancelButton = container.find(".sp-cancel"),
+ clearButton = container.find(".sp-clear"),
+ chooseButton = container.find(".sp-choose"),
+ toggleButton = container.find(".sp-palette-toggle"),
+ isInput = boundElement.is("input"),
+ isInputTypeColor = isInput && boundElement.attr("type") === "color" && inputTypeColorSupport(),
+ shouldReplace = isInput && !flat,
+ replacer = (shouldReplace) ? $(replaceInput).addClass(theme).addClass(opts.className).addClass(opts.replacerClassName) : $([]),
+ offsetElement = (shouldReplace) ? replacer : boundElement,
+ previewElement = replacer.find(".sp-preview-inner"),
+ initialColor = opts.color || (isInput && boundElement.val()),
+ colorOnShow = false,
+ preferredFormat = opts.preferredFormat,
+ currentPreferredFormat = preferredFormat,
+ clickoutFiresChange = !opts.showButtons || opts.clickoutFiresChange,
+ isEmpty = !initialColor,
+ allowEmpty = opts.allowEmpty && !isInputTypeColor;
+
+ function applyOptions() {
+
+ if (opts.showPaletteOnly) {
+ opts.showPalette = true;
+ }
+
+ toggleButton.text(opts.showPaletteOnly ? opts.togglePaletteMoreText : opts.togglePaletteLessText);
+
+ if (opts.palette) {
+ palette = opts.palette.slice(0);
+ paletteArray = $.isArray(palette[0]) ? palette : [palette];
+ paletteLookup = {};
+ for (var i = 0; i < paletteArray.length; i++) {
+ for (var j = 0; j < paletteArray[i].length; j++) {
+ var rgb = tinycolor(paletteArray[i][j]).toRgbString();
+ paletteLookup[rgb] = true;
+ }
+ }
+ }
+
+ container.toggleClass("sp-flat", flat);
+ container.toggleClass("sp-input-disabled", !opts.showInput);
+ container.toggleClass("sp-alpha-enabled", opts.showAlpha);
+ container.toggleClass("sp-clear-enabled", allowEmpty);
+ container.toggleClass("sp-buttons-disabled", !opts.showButtons);
+ container.toggleClass("sp-palette-buttons-disabled", !opts.togglePaletteOnly);
+ container.toggleClass("sp-palette-disabled", !opts.showPalette);
+ container.toggleClass("sp-palette-only", opts.showPaletteOnly);
+ container.toggleClass("sp-initial-disabled", !opts.showInitial);
+ container.addClass(opts.className).addClass(opts.containerClassName);
+
+ reflow();
+ }
+
+ function initialize() {
+
+ if (IE) {
+ container.find("*:not(input)").attr("unselectable", "on");
+ }
+
+ applyOptions();
+
+ if (shouldReplace) {
+ boundElement.after(replacer);//.hide();
+ }
+
+ if (!allowEmpty) {
+ clearButton.hide();
+ }
+
+ if (flat) {
+ boundElement.after(container).hide();
+ }
+ else {
+
+ var appendTo = opts.appendTo === "parent" ? boundElement.parent() : $(opts.appendTo);
+ if (appendTo.length !== 1) {
+ appendTo = $("body");
+ }
+
+ appendTo.append(container);
+ }
+
+ updateSelectionPaletteFromStorage();
+
+ offsetElement.on("click.spectrum touchstart.spectrum", function (e) {
+ if (!disabled) {
+ toggle();
+ }
+
+ e.stopPropagation();
+
+ if (!$(e.target).is("input")) {
+ e.preventDefault();
+ }
+ });
+
+ if(boundElement.is(":disabled") || (opts.disabled === true)) {
+ disable();
+ }
+
+ // Prevent clicks from bubbling up to document. This would cause it to be hidden.
+ container.click(stopPropagation);
+
+ // Handle user typed input
+ textInput.change(setFromTextInput);
+ textInput.bind("paste", function () {
+ //console.log( 'paste event' );
+ setTimeout(setFromTextInput, 1);
+ });
+ textInput.keydown(function (e) { if (e.keyCode == 13) {
+ //console.log( 'return event' );
+ setFromTextInput();
+ } });
+
+ cancelButton.text(opts.cancelText);
+ cancelButton.bind("click.spectrum", function (e) {
+ e.stopPropagation();
+ e.preventDefault();
+ revert();
+ hide();
+ });
+
+ clearButton.attr("title", opts.clearText);
+ clearButton.bind("click.spectrum", function (e) {
+ e.stopPropagation();
+ e.preventDefault();
+ isEmpty = true;
+ move();
+
+ if(flat) {
+ //for the flat style, this is a change event
+ updateOriginalInput(true);
+ }
+ });
+
+ chooseButton.text(opts.chooseText);
+ chooseButton.bind("click.spectrum", function (e) {
+ e.stopPropagation();
+ e.preventDefault();
+
+ if (IE && textInput.is(":focus")) {
+ textInput.trigger('change');
+ }
+
+ if (isValid()) {
+ updateOriginalInput(true);
+ hide();
+ }
+ });
+
+ toggleButton.text(opts.showPaletteOnly ? opts.togglePaletteMoreText : opts.togglePaletteLessText);
+ toggleButton.bind("click.spectrum", function (e) {
+ e.stopPropagation();
+ e.preventDefault();
+
+ opts.showPaletteOnly = !opts.showPaletteOnly;
+
+ // To make sure the Picker area is drawn on the right, next to the
+ // Palette area (and not below the palette), first move the Palette
+ // to the left to make space for the picker, plus 5px extra.
+ // The 'applyOptions' function puts the whole container back into place
+ // and takes care of the button-text and the sp-palette-only CSS class.
+ if (!opts.showPaletteOnly && !flat) {
+ container.css('left', '-=' + (pickerContainer.outerWidth(true) + 5));
+ }
+ applyOptions();
+ });
+
+ draggable(alphaSlider, function (dragX, dragY, e) {
+ currentAlpha = (dragX / alphaWidth);
+ isEmpty = false;
+ if (e.shiftKey) {
+ currentAlpha = Math.round(currentAlpha * 10) / 10;
+ }
+
+ move();
+ }, dragStart, dragStop);
+
+ draggable(slider, function (dragX, dragY) {
+ currentHue = parseFloat(dragY / slideHeight);
+ isEmpty = false;
+ if (!opts.showAlpha) {
+ currentAlpha = 1;
+ }
+ move();
+ }, dragStart, dragStop);
+
+ draggable(dragger, function (dragX, dragY, e) {
+
+ // shift+drag should snap the movement to either the x or y axis.
+ if (!e.shiftKey) {
+ shiftMovementDirection = null;
+ }
+ else if (!shiftMovementDirection) {
+ var oldDragX = currentSaturation * dragWidth;
+ var oldDragY = dragHeight - (currentValue * dragHeight);
+ var furtherFromX = Math.abs(dragX - oldDragX) > Math.abs(dragY - oldDragY);
+
+ shiftMovementDirection = furtherFromX ? "x" : "y";
+ }
+
+ var setSaturation = !shiftMovementDirection || shiftMovementDirection === "x";
+ var setValue = !shiftMovementDirection || shiftMovementDirection === "y";
+
+ if (setSaturation) {
+ currentSaturation = parseFloat(dragX / dragWidth);
+ }
+ if (setValue) {
+ currentValue = parseFloat((dragHeight - dragY) / dragHeight);
+ }
+
+ isEmpty = false;
+ if (!opts.showAlpha) {
+ currentAlpha = 1;
+ }
+
+ move();
+
+ }, dragStart, dragStop);
+
+ if (!!initialColor) {
+ //console.log( 'initialColor: ' + initialColor );
+ set(initialColor);
+ // In case color was black - update the preview UI and set the format
+ // since the set function will not run (default color is black).
+ //console.log( 'initialize: calling updateUI...' );
+ updateUI();
+ //currentPreferredFormat = preferredFormat || tinycolor(initialColor).format;
+
+ addColorToSelectionPalette(initialColor);
+ }
+ else {
+ updateUI();
+ }
+
+ if (flat) {
+ show();
+ }
+
+ function paletteElementClick(e) {
+ if (e.data && e.data.ignore) {
+ set($(e.target).closest(".sp-thumb-el").data("color"));
+ move();
+ }
+ else if ( e.altKey ) {
+ removeColorFromSelectionPalette( $(e.target).closest(".sp-thumb-el").data("color") );
+ drawPalette();
+ }
+ else {
+ set($(e.target).closest(".sp-thumb-el").data("color"));
+ move();
+ updateOriginalInput(true);
+ if (opts.hideAfterPaletteSelect) {
+ hide();
+ }
+ }
+
+ return false;
+ }
+
+ var paletteEvent = IE ? "mousedown.spectrum" : "click.spectrum touchstart.spectrum";
+ paletteContainer.delegate(".sp-thumb-el", paletteEvent, paletteElementClick);
+ initialColorContainer.delegate(".sp-thumb-el:nth-child(1)", paletteEvent, { ignore: true }, paletteElementClick);
+ }
+
+ function updateSelectionPaletteFromStorage() {
+
+ if (localStorageKey && window.localStorage) {
+
+ // Migrate old palettes over to new format. May want to remove this eventually.
+ try {
+ var oldPalette = window.localStorage[localStorageKey].split(",#");
+ if (oldPalette.length > 1) {
+ delete window.localStorage[localStorageKey];
+ $.each(oldPalette, function(i, c) {
+ addColorToSelectionPalette(c);
+ });
+ }
+ }
+ catch(e) { }
+
+ try {
+ selectionPalette = window.localStorage[localStorageKey].split(";");
+ }
+ catch (e) { }
+ }
+ }
+
+ function removeColorFromSelectionPalette( rgbString ) {
+ while (selectionPalette.indexOf( rgbString ) !== -1) {
+ selectionPalette.splice(selectionPalette.indexOf( rgbString ), 1 );
+ }
+ if (localStorageKey && window.localStorage) {
+ try {
+ window.localStorage[localStorageKey] = selectionPalette.join(";");
+ }
+ catch(e) { }
+ }
+ }
+
+ function addColorToSelectionPalette(color) {
+ if (showSelectionPalette) {
+ var rgb = tinycolor(color).toRgbString();
+ if (!paletteLookup[rgb] && $.inArray(rgb, selectionPalette) === -1) {
+ selectionPalette.push(rgb);
+ while(selectionPalette.length > maxSelectionSize) {
+ selectionPalette.shift();
+ }
+ }
+
+ if (localStorageKey && window.localStorage) {
+ try {
+ window.localStorage[localStorageKey] = selectionPalette.join(";");
+ }
+ catch(e) { }
+ }
+ }
+ }
+
+ function getUniqueSelectionPalette() {
+ var unique = [];
+ if (opts.showPalette) {
+ for (var i = 0; i < selectionPalette.length; i++) {
+ var rgb = tinycolor(selectionPalette[i]).toRgbString();
+
+ if (!paletteLookup[rgb]) {
+ unique.push(selectionPalette[i]);
+ }
+ }
+ }
+
+ return unique.reverse().slice(0, opts.maxSelectionSize);
+ }
+
+ function drawPalette() {
+
+ var currentColor = get();
+
+ var html = $.map(paletteArray, function (palette, i) {
+ return paletteTemplate(palette, currentColor, "sp-palette-row sp-palette-row-" + i, opts);
+ });
+
+ updateSelectionPaletteFromStorage();
+
+ if (selectionPalette) {
+ html.push(paletteTemplate(getUniqueSelectionPalette(), currentColor, "sp-palette-row sp-palette-row-selection", opts));
+ }
+
+ paletteContainer.html(html.join(""));
+ }
+
+ function drawInitial() {
+ if (opts.showInitial) {
+ var initial = colorOnShow;
+ var current = get();
+ initialColorContainer.html(paletteTemplate([initial, current], current, "sp-palette-row-initial", opts));
+ }
+ }
+
+ function dragStart() {
+ if (dragHeight <= 0 || dragWidth <= 0 || slideHeight <= 0) {
+ reflow();
+ }
+ isDragging = true;
+ container.addClass(draggingClass);
+ shiftMovementDirection = null;
+ boundElement.trigger('dragstart.spectrum', [ get() ]);
+ }
+
+ function dragStop() {
+ isDragging = false;
+ container.removeClass(draggingClass);
+ boundElement.trigger('dragstop.spectrum', [ get() ]);
+ }
+
+ function setFromTextInput( e ) {
+ //console.log( 'setFromTextInput' );
+ //console.log( e );
+ var value = textInput.val();
+ if ((value === null || value === "") && allowEmpty) {
+ set(null);
+ updateOriginalInput(true);
+ }
+ else {
+ var tiny = tinycolor(value);
+ //console.log( 'setFromTextInput: ' + tiny.getFormat() );
+ if (tiny.isValid()) {
+ preferredFormat = currentPreferredFormat = tiny.getFormat();
+ set(tiny);
+ updateOriginalInput(true);
+ }
+ else {
+ textInput.addClass("sp-validation-error");
+ }
+ }
+ //console.log( 'setFromTextInput: ' + value );
+ //console.log( 'setFromTextInput: ' + currentPreferredFormat );
+ }
+
+ function toggle() {
+ if (visible) {
+ hide();
+ }
+ else {
+ show();
+ }
+ }
+
+ function show() {
+ var event = $.Event('beforeShow.spectrum');
+
+ if (visible) {
+ reflow();
+ return;
+ }
+
+ boundElement.trigger(event, [ get() ]);
+
+ if (callbacks.beforeShow(get()) === false || event.isDefaultPrevented()) {
+ return;
+ }
+
+ hideAll();
+ visible = true;
+
+ $(doc).bind("keydown.spectrum", onkeydown);
+ $(doc).bind("click.spectrum", clickout);
+ $(window).bind("resize.spectrum", resize);
+ replacer.addClass("sp-active");
+ container.removeClass("sp-hidden");
+
+ reflow();
+ updateUI();
+
+ colorOnShow = get();
+
+ drawInitial();
+ callbacks.show(colorOnShow);
+ boundElement.trigger('show.spectrum', [ colorOnShow ]);
+ }
+
+ function onkeydown(e) {
+ // Close on ESC
+ if (e.keyCode === 27) {
+ hide();
+ }
+ }
+
+ function clickout(e) {
+ // Return on right click.
+ if (e.button == 2) { return; }
+
+ // If a drag event was happening during the mouseup, don't hide
+ // on click.
+ if (isDragging) { return; }
+
+ if (clickoutFiresChange) {
+ updateOriginalInput(true);
+ }
+ else {
+ revert();
+ }
+ hide();
+ }
+
+ function hide() {
+ // Return if hiding is unnecessary
+ if (!visible || flat) { return; }
+ visible = false;
+
+ $(doc).unbind("keydown.spectrum", onkeydown);
+ $(doc).unbind("click.spectrum", clickout);
+ $(window).unbind("resize.spectrum", resize);
+
+ replacer.removeClass("sp-active");
+ container.addClass("sp-hidden");
+
+ callbacks.hide(get());
+ boundElement.trigger('hide.spectrum', [ get() ]);
+ }
+
+ function revert() {
+ set(colorOnShow, true);
+ }
+
+ function set(color, ignoreFormatChange) {
+ if (tinycolor.equals(color, get())) {
+ // Update UI just in case a validation error needs
+ // to be cleared.
+ //console.log( 'set ( no change ): calling updateUI...' );
+ updateUI();
+ return;
+ }
+
+ var newColor, newHsv, newFormat;
+ if (!color && allowEmpty) {
+ isEmpty = true;
+ } else {
+ isEmpty = false;
+ newColor = tinycolor(color);
+ newHsv = newColor.toHsv();
+
+ currentHue = (newHsv.h % 360) / 360;
+ currentSaturation = newHsv.s;
+ currentValue = newHsv.v;
+ currentAlpha = newHsv.a;
+ }
+ //console.log( 'set ( newColor ): calling updateUI...' );
+ updateUI();
+
+ if (newColor && newColor.isValid() && !ignoreFormatChange) {
+ newFormat = newColor.getFormat();
+ if ( 'name' === newFormat ) {
+ preferredFormat = newFormat;
+ }
+ currentPreferredFormat = preferredFormat || newFormat;
+ }
+ }
+
+ function get(opts) {
+ opts = opts || { };
+
+ if (allowEmpty && isEmpty) {
+ return null;
+ }
+
+ return tinycolor.fromRatio({
+ h: currentHue,
+ s: currentSaturation,
+ v: currentValue,
+ a: Math.round(currentAlpha * 100) / 100
+ }, { format: opts.format || currentPreferredFormat });
+ }
+
+ function isValid() {
+ return !textInput.hasClass("sp-validation-error");
+ }
+
+ function move() {
+ updateUI();
+
+ callbacks.move(get());
+ boundElement.trigger('move.spectrum', [ get() ]);
+ }
+
+ function updateUI() {
+
+ textInput.removeClass("sp-validation-error");
+
+ updateHelperLocations();
+
+ // Update dragger background color (gradients take care of saturation and value).
+ var flatColor = tinycolor.fromRatio({ h: currentHue, s: 1, v: 1 });
+ dragger.css("background-color", flatColor.toHexString());
+
+ // Get a format that alpha will be included in (hex and names ignore alpha)
+ var format = currentPreferredFormat;
+ if (currentAlpha < 1 && !(currentAlpha === 0 && format === "name")) {
+ if (format === "hex" || format === "hex3" || format === "hex6" || format === "name") {
+ format = "rgb";
+ }
+ }
+ //console.log( 'updateUI: format: ' + format );
+ var realColor = get({ format: format }),
+ displayColor = '';
+
+ //reset background info for preview element
+ previewElement.removeClass("sp-clear-display");
+ previewElement.css('background-color', 'transparent');
+
+ if (!realColor && allowEmpty) {
+ // Update the replaced elements background with icon indicating no color selection
+ previewElement.addClass("sp-clear-display");
+ }
+ else {
+ var realHex = realColor.toHexString(),
+ realRgb = realColor.toRgbString();
+
+ // Update the replaced elements background color (with actual selected color)
+ if (rgbaSupport || realColor.alpha === 1) {
+ previewElement.css("background-color", realRgb);
+ }
+ else {
+ previewElement.css("background-color", "transparent");
+ previewElement.css("filter", realColor.toFilter());
+ }
+
+ if (opts.showAlpha) {
+ var rgb = realColor.toRgb();
+ rgb.a = 0;
+ var realAlpha = tinycolor(rgb).toRgbString();
+ var gradient = "linear-gradient(left, " + realAlpha + ", " + realHex + ")";
+
+ if (IE) {
+ alphaSliderInner.css("filter", tinycolor(realAlpha).toFilter({ gradientType: 1 }, realHex));
+ }
+ else {
+ alphaSliderInner.css("background", "-webkit-" + gradient);
+ alphaSliderInner.css("background", "-moz-" + gradient);
+ alphaSliderInner.css("background", "-ms-" + gradient);
+ // Use current syntax gradient on unprefixed property.
+ alphaSliderInner.css("background",
+ "linear-gradient(to right, " + realAlpha + ", " + realHex + ")");
+ }
+ }
+
+ displayColor = realColor.toString(format);
+ }
+
+ // Update the text entry input as it changes happen
+ if (opts.showInput) {
+ //console.log( 'updateUI: displayColor: ' + displayColor );
+ textInput.val(displayColor);
+ }
+
+ if (opts.showPalette) {
+ drawPalette();
+ }
+
+ drawInitial();
+ }
+
+ function updateHelperLocations() {
+ var s = currentSaturation;
+ var v = currentValue;
+
+ if(allowEmpty && isEmpty) {
+ //if selected color is empty, hide the helpers
+ alphaSlideHelper.hide();
+ slideHelper.hide();
+ dragHelper.hide();
+ }
+ else {
+ //make sure helpers are visible
+ alphaSlideHelper.show();
+ slideHelper.show();
+ dragHelper.show();
+
+ // Where to show the little circle in that displays your current selected color
+ var dragX = s * dragWidth;
+ var dragY = dragHeight - (v * dragHeight);
+ dragX = Math.max(
+ -dragHelperHeight,
+ Math.min(dragWidth - dragHelperHeight, dragX - dragHelperHeight)
+ );
+ dragY = Math.max(
+ -dragHelperHeight,
+ Math.min(dragHeight - dragHelperHeight, dragY - dragHelperHeight)
+ );
+ dragHelper.css({
+ "top": dragY + "px",
+ "left": dragX + "px"
+ });
+
+ var alphaX = currentAlpha * alphaWidth;
+ alphaSlideHelper.css({
+ "left": (alphaX - (alphaSlideHelperWidth / 2)) + "px"
+ });
+
+ // Where to show the bar that displays your current selected hue
+ var slideY = (currentHue) * slideHeight;
+ slideHelper.css({
+ "top": (slideY - slideHelperHeight) + "px"
+ });
+ }
+ }
+
+ function updateOriginalInput(fireCallback) {
+ var color = get(),
+ displayColor = '',
+ hasChanged = !tinycolor.equals(color, colorOnShow),
+ format = currentPreferredFormat;
+ if (color) {
+ /**
+ * This is pulled from UpdateUI
+ * Original input needs to follow same logic, right?
+ */
+ if (currentAlpha < 1 && !(currentAlpha === 0 && format === "name")) {
+ if (format === "hex" || format === "hex3" || format === "hex6" || format === "name") {
+ format = "rgb";
+ }
+ }
+ displayColor = color.toString(format);
+ //console.log( 'updateOriginalInput: ' + ' format: ' + format );
+ //console.log( 'currentPreferredFormat: ' + currentPreferredFormat);
+ //console.log( 'colorOnShow: ' + colorOnShow );
+ //console.log( 'displayColor: ' + displayColor );
+ //console.log( 'hasChanged: ' + hasChanged );
+ //console.log( 'isInput: ' + isInput );
+ //console.log( 'fireCallback: ' + fireCallback );
+ // Update the selection palette with the current color
+ addColorToSelectionPalette(color);
+ }
+
+ if (isInput) {
+ boundElement.val(displayColor);
+ }
+
+ if (fireCallback && hasChanged) {
+ callbacks.change(color);
+ boundElement.trigger('change', [ color ]);
+ }
+ }
+
+ function reflow() {
+ dragWidth = dragger.width();
+ dragHeight = dragger.height();
+ dragHelperHeight = dragHelper.height();
+ slideWidth = slider.width();
+ slideHeight = slider.height();
+ slideHelperHeight = slideHelper.height();
+ alphaWidth = alphaSlider.width();
+ alphaSlideHelperWidth = alphaSlideHelper.width();
+
+ if (!flat) {
+ container.css("position", "absolute");
+ if (opts.offset) {
+ container.offset(opts.offset);
+ } else {
+ container.offset(getOffset(container, offsetElement));
+ }
+ }
+
+ updateHelperLocations();
+
+ if (opts.showPalette) {
+ drawPalette();
+ }
+
+ boundElement.trigger('reflow.spectrum');
+ }
+
+ function destroy() {
+ boundElement.show();
+ offsetElement.unbind("click.spectrum touchstart.spectrum");
+ container.remove();
+ replacer.remove();
+ spectrums[spect.id] = null;
+ }
+
+ function option(optionName, optionValue) {
+ if (optionName === undefined) {
+ return $.extend({}, opts);
+ }
+ if (optionValue === undefined) {
+ return opts[optionName];
+ }
+
+ opts[optionName] = optionValue;
+ applyOptions();
+ }
+
+ function enable() {
+ disabled = false;
+ boundElement.attr("disabled", false);
+ offsetElement.removeClass("sp-disabled");
+ }
+
+ function disable() {
+ hide();
+ disabled = true;
+ boundElement.attr("disabled", true);
+ offsetElement.addClass("sp-disabled");
+ }
+
+ function setOffset(coord) {
+ opts.offset = coord;
+ reflow();
+ }
+
+ initialize();
+
+ var spect = {
+ show: show,
+ hide: hide,
+ toggle: toggle,
+ reflow: reflow,
+ option: option,
+ enable: enable,
+ disable: disable,
+ offset: setOffset,
+ set: function (c) {
+ set(c);
+ // for CTC, don't update original input
+ // because set is called from original input
+ //updateOriginalInput();
+ },
+ get: get,
+ destroy: destroy,
+ container: container
+ };
+
+ spect.id = spectrums.push(spect) - 1;
+
+ return spect;
+ }
+
+ /**
+ * checkOffset - get the offset below/above and left/right element depending on screen position
+ * Thanks https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.datepicker.js
+ */
+ function getOffset(picker, input) {
+ var extraY = 0;
+ var dpWidth = picker.outerWidth();
+ var dpHeight = picker.outerHeight();
+ var inputHeight = input.outerHeight();
+ var doc = picker[0].ownerDocument;
+ var docElem = doc.documentElement;
+ var viewWidth = docElem.clientWidth + $(doc).scrollLeft();
+ var viewHeight = docElem.clientHeight + $(doc).scrollTop();
+ var offset = input.offset();
+ offset.top += inputHeight;
+
+ offset.left -=
+ Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
+ Math.abs(offset.left + dpWidth - viewWidth) : 0);
+
+ offset.top -=
+ Math.min(offset.top, ((offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
+ Math.abs(dpHeight + inputHeight - extraY) : extraY));
+
+ return offset;
+ }
+
+ /**
+ * noop - do nothing
+ */
+ function noop() {
+
+ }
+
+ /**
+ * stopPropagation - makes the code only doing this a little easier to read in line
+ */
+ function stopPropagation(e) {
+ e.stopPropagation();
+ }
+
+ /**
+ * Create a function bound to a given object
+ * Thanks to underscore.js
+ */
+ function bind(func, obj) {
+ var slice = Array.prototype.slice;
+ var args = slice.call(arguments, 2);
+ return function () {
+ return func.apply(obj, args.concat(slice.call(arguments)));
+ };
+ }
+
+ /**
+ * Lightweight drag helper. Handles containment within the element, so that
+ * when dragging, the x is within [0,element.width] and y is within [0,element.height]
+ */
+ function draggable(element, onmove, onstart, onstop) {
+ onmove = onmove || function () { };
+ onstart = onstart || function () { };
+ onstop = onstop || function () { };
+ var doc = document;
+ var dragging = false;
+ var offset = {};
+ var maxHeight = 0;
+ var maxWidth = 0;
+ var hasTouch = ('ontouchstart' in window);
+
+ var duringDragEvents = {};
+ duringDragEvents["selectstart"] = prevent;
+ duringDragEvents["dragstart"] = prevent;
+ duringDragEvents["touchmove mousemove"] = move;
+ duringDragEvents["touchend mouseup"] = stop;
+
+ function prevent(e) {
+ if (e.stopPropagation) {
+ e.stopPropagation();
+ }
+ if (e.preventDefault) {
+ e.preventDefault();
+ }
+ e.returnValue = false;
+ }
+
+ function move(e) {
+ if (dragging) {
+ // Mouseup happened outside of window
+ if (IE && doc.documentMode < 9 && !e.button) {
+ return stop();
+ }
+
+ var t0 = e.originalEvent && e.originalEvent.touches && e.originalEvent.touches[0];
+ var pageX = t0 && t0.pageX || e.pageX;
+ var pageY = t0 && t0.pageY || e.pageY;
+
+ var dragX = Math.max(0, Math.min(pageX - offset.left, maxWidth));
+ var dragY = Math.max(0, Math.min(pageY - offset.top, maxHeight));
+
+ if (hasTouch) {
+ // Stop scrolling in iOS
+ prevent(e);
+ }
+
+ onmove.apply(element, [dragX, dragY, e]);
+ }
+ }
+
+ function start(e) {
+ var rightclick = (e.which) ? (e.which == 3) : (e.button == 2);
+
+ if (!rightclick && !dragging) {
+ if (onstart.apply(element, arguments) !== false) {
+ dragging = true;
+ maxHeight = $(element).height();
+ maxWidth = $(element).width();
+ offset = $(element).offset();
+
+ $(doc).bind(duringDragEvents);
+ $(doc.body).addClass("sp-dragging");
+
+ move(e);
+
+ prevent(e);
+ }
+ }
+ }
+
+ function stop() {
+ if (dragging) {
+ $(doc).unbind(duringDragEvents);
+ $(doc.body).removeClass("sp-dragging");
+
+ // Wait a tick before notifying observers to allow the click event
+ // to fire in Chrome.
+ setTimeout(function() {
+ onstop.apply(element, arguments);
+ }, 0);
+ }
+ dragging = false;
+ }
+
+ $(element).bind("touchstart mousedown", start);
+ }
+
+ function throttle(func, wait, debounce) {
+ var timeout;
+ return function () {
+ var context = this, args = arguments;
+ var throttler = function () {
+ timeout = null;
+ func.apply(context, args);
+ };
+ if (debounce) clearTimeout(timeout);
+ if (debounce || !timeout) timeout = setTimeout(throttler, wait);
+ };
+ }
+
+ function inputTypeColorSupport() {
+ return $.fn.spectrum.inputTypeColorSupport();
+ }
+
+ /**
+ * Define a jQuery plugin
+ */
+ var dataID = "spectrum.id";
+ $.fn.spectrum = function (opts, extra) {
+
+ if (typeof opts == "string") {
+
+ var returnValue = this;
+ var args = Array.prototype.slice.call( arguments, 1 );
+
+ this.each(function () {
+ var spect = spectrums[$(this).data(dataID)];
+ if (spect) {
+ var method = spect[opts];
+ if (!method) {
+ throw new Error( "Spectrum: no such method: '" + opts + "'" );
+ }
+
+ if (opts == "get") {
+ returnValue = spect.get();
+ }
+ else if (opts == "container") {
+ returnValue = spect.container;
+ }
+ else if (opts == "option") {
+ returnValue = spect.option.apply(spect, args);
+ }
+ else if (opts == "destroy") {
+ spect.destroy();
+ $(this).removeData(dataID);
+ }
+ else {
+ method.apply(spect, args);
+ }
+ }
+ });
+
+ return returnValue;
+ }
+
+ // Initializing a new instance of spectrum
+ return this.spectrum("destroy").each(function () {
+ var options = $.extend({}, opts, $(this).data());
+ var spect = spectrum(this, options);
+ $(this).data(dataID, spect.id);
+ });
+ };
+
+ $.fn.spectrum.load = true;
+ $.fn.spectrum.loadOpts = {};
+ $.fn.spectrum.draggable = draggable;
+ $.fn.spectrum.defaults = defaultOpts;
+ $.fn.spectrum.inputTypeColorSupport = function inputTypeColorSupport() {
+ if (typeof inputTypeColorSupport._cachedResult === "undefined") {
+ var colorInput = $(" ")[0];
+ inputTypeColorSupport._cachedResult = colorInput.type === "color" && colorInput.value !== "!";
+ }
+ return inputTypeColorSupport._cachedResult;
+ };
+
+ $.spectrum = { };
+ $.spectrum.localization = { };
+ $.spectrum.palettes = { };
+
+ $.fn.spectrum.processNativeColorInputs = function () {
+ var colorInputs = $("input[type=color]");
+ if (colorInputs.length && !inputTypeColorSupport()) {
+ colorInputs.spectrum({
+ preferredFormat: "hex6"
+ });
+ }
+ };
+
+ // TinyColor v1.1.2
+ // https://github.com/bgrins/TinyColor
+ // Brian Grinstead, MIT License
+
+ (function() {
+
+ var trimLeft = /^[\s,#]+/,
+ trimRight = /\s+$/,
+ tinyCounter = 0,
+ math = Math,
+ mathRound = math.round,
+ mathMin = math.min,
+ mathMax = math.max,
+ mathRandom = math.random;
+
+ var tinycolor = function(color, opts) {
+
+ color = (color) ? color : '';
+ opts = opts || { };
+
+ // If input is already a tinycolor, return itself
+ if (color instanceof tinycolor) {
+ return color;
+ }
+ // If we are called as a function, call using new instead
+ if (!(this instanceof tinycolor)) {
+ return new tinycolor(color, opts);
+ }
+
+ var rgb = inputToRGB(color);
+ this._originalInput = color,
+ this._r = rgb.r,
+ this._g = rgb.g,
+ this._b = rgb.b,
+ this._a = rgb.a,
+ this._roundA = mathRound(100*this._a) / 100,
+ this._format = opts.format || rgb.format;
+ this._gradientType = opts.gradientType;
+
+ // Don't let the range of [0,255] come back in [0,1].
+ // Potentially lose a little bit of precision here, but will fix issues where
+ // .5 gets interpreted as half of the total, instead of half of 1
+ // If it was supposed to be 128, this was already taken care of by `inputToRgb`
+ if (this._r < 1) { this._r = mathRound(this._r); }
+ if (this._g < 1) { this._g = mathRound(this._g); }
+ if (this._b < 1) { this._b = mathRound(this._b); }
+
+ this._ok = rgb.ok;
+ this._tc_id = tinyCounter++;
+ };
+
+ tinycolor.prototype = {
+ isDark: function() {
+ return this.getBrightness() < 128;
+ },
+ isLight: function() {
+ return !this.isDark();
+ },
+ isValid: function() {
+ return this._ok;
+ },
+ getOriginalInput: function() {
+ return this._originalInput;
+ },
+ getFormat: function() {
+ return this._format;
+ },
+ getAlpha: function() {
+ return this._a;
+ },
+ getBrightness: function() {
+ var rgb = this.toRgb();
+ return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;
+ },
+ setAlpha: function(value) {
+ this._a = boundAlpha(value);
+ this._roundA = mathRound(100*this._a) / 100;
+ return this;
+ },
+ toHsv: function() {
+ var hsv = rgbToHsv(this._r, this._g, this._b);
+ return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };
+ },
+ toHsvString: function() {
+ var hsv = rgbToHsv(this._r, this._g, this._b);
+ var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);
+ return (this._a == 1) ?
+ "hsv(" + h + ", " + s + "%, " + v + "%)" :
+ "hsva(" + h + ", " + s + "%, " + v + "%, "+ this._roundA + ")";
+ },
+ toHsl: function() {
+ var hsl = rgbToHsl(this._r, this._g, this._b);
+ return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };
+ },
+ toHslString: function() {
+ var hsl = rgbToHsl(this._r, this._g, this._b);
+ var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);
+ return (this._a == 1) ?
+ "hsl(" + h + ", " + s + "%, " + l + "%)" :
+ "hsla(" + h + ", " + s + "%, " + l + "%, "+ this._roundA + ")";
+ },
+ toHex: function(allow3Char) {
+ return rgbToHex(this._r, this._g, this._b, allow3Char);
+ },
+ toHexString: function(allow3Char) {
+ return '#' + this.toHex(allow3Char);
+ },
+ toHex8: function() {
+ return rgbaToHex(this._r, this._g, this._b, this._a);
+ },
+ toHex8String: function() {
+ return '#' + this.toHex8();
+ },
+ toRgb: function() {
+ return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };
+ },
+ toRgbString: function() {
+ return (this._a == 1) ?
+ "rgb(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ")" :
+ "rgba(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ", " + this._roundA + ")";
+ },
+ toPercentageRgb: function() {
+ return { r: mathRound(bound01(this._r, 255) * 100) + "%", g: mathRound(bound01(this._g, 255) * 100) + "%", b: mathRound(bound01(this._b, 255) * 100) + "%", a: this._a };
+ },
+ toPercentageRgbString: function() {
+ return (this._a == 1) ?
+ "rgb(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%)" :
+ "rgba(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%, " + this._roundA + ")";
+ },
+ toName: function() {
+ if (this._a === 0) {
+ return "transparent";
+ }
+
+ if (this._a < 1) {
+ return false;
+ }
+
+ return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;
+ },
+ toFilter: function(secondColor) {
+ var hex8String = '#' + rgbaToHex(this._r, this._g, this._b, this._a);
+ var secondHex8String = hex8String;
+ var gradientType = this._gradientType ? "GradientType = 1, " : "";
+
+ if (secondColor) {
+ var s = tinycolor(secondColor);
+ secondHex8String = s.toHex8String();
+ }
+
+ return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")";
+ },
+ toString: function(format) {
+ var formatSet = !!format;
+ format = format || this._format;
+
+ var formattedString = false;
+ var hasAlpha = this._a < 1 && this._a >= 0;
+ var needsAlphaFormat = !formatSet && hasAlpha && (format === "hex" || format === "hex6" || format === "hex3" || format === "name");
+
+ if (needsAlphaFormat) {
+ // Special case for "transparent", all other non-alpha formats
+ // will return rgba when there is transparency.
+ if (format === "name" && this._a === 0) {
+ return this.toName();
+ }
+ return this.toRgbString();
+ }
+ if (format === "rgb") {
+ formattedString = this.toRgbString();
+ }
+ if (format === "prgb") {
+ formattedString = this.toPercentageRgbString();
+ }
+ if (format === "hex" || format === "hex6") {
+ formattedString = this.toHexString();
+ }
+ if (format === "hex3") {
+ formattedString = this.toHexString(true);
+ }
+ if (format === "hex8") {
+ formattedString = this.toHex8String();
+ }
+ if (format === "name") {
+ formattedString = this.toName();
+ }
+ if (format === "hsl") {
+ formattedString = this.toHslString();
+ }
+ if (format === "hsv") {
+ formattedString = this.toHsvString();
+ }
+
+ return formattedString || this.toHexString();
+ },
+
+ _applyModification: function(fn, args) {
+ var color = fn.apply(null, [this].concat([].slice.call(args)));
+ this._r = color._r;
+ this._g = color._g;
+ this._b = color._b;
+ this.setAlpha(color._a);
+ return this;
+ },
+ lighten: function() {
+ return this._applyModification(lighten, arguments);
+ },
+ brighten: function() {
+ return this._applyModification(brighten, arguments);
+ },
+ darken: function() {
+ return this._applyModification(darken, arguments);
+ },
+ desaturate: function() {
+ return this._applyModification(desaturate, arguments);
+ },
+ saturate: function() {
+ return this._applyModification(saturate, arguments);
+ },
+ greyscale: function() {
+ return this._applyModification(greyscale, arguments);
+ },
+ spin: function() {
+ return this._applyModification(spin, arguments);
+ },
+
+ _applyCombination: function(fn, args) {
+ return fn.apply(null, [this].concat([].slice.call(args)));
+ },
+ analogous: function() {
+ return this._applyCombination(analogous, arguments);
+ },
+ complement: function() {
+ return this._applyCombination(complement, arguments);
+ },
+ monochromatic: function() {
+ return this._applyCombination(monochromatic, arguments);
+ },
+ splitcomplement: function() {
+ return this._applyCombination(splitcomplement, arguments);
+ },
+ triad: function() {
+ return this._applyCombination(triad, arguments);
+ },
+ tetrad: function() {
+ return this._applyCombination(tetrad, arguments);
+ }
+ };
+
+ // If input is an object, force 1 into "1.0" to handle ratios properly
+ // String input requires "1.0" as input, so 1 will be treated as 1
+ tinycolor.fromRatio = function(color, opts) {
+ if (typeof color == "object") {
+ var newColor = {};
+ for (var i in color) {
+ if (color.hasOwnProperty(i)) {
+ if (i === "a") {
+ newColor[i] = color[i];
+ }
+ else {
+ newColor[i] = convertToPercentage(color[i]);
+ }
+ }
+ }
+ color = newColor;
+ }
+
+ return tinycolor(color, opts);
+ };
+
+ // Given a string or object, convert that input to RGB
+ // Possible string inputs:
+ //
+ // "red"
+ // "#f00" or "f00"
+ // "#ff0000" or "ff0000"
+ // "#ff000000" or "ff000000"
+ // "rgb 255 0 0" or "rgb (255, 0, 0)"
+ // "rgb 1.0 0 0" or "rgb (1, 0, 0)"
+ // "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1"
+ // "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1"
+ // "hsl(0, 100%, 50%)" or "hsl 0 100% 50%"
+ // "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1"
+ // "hsv(0, 100%, 100%)" or "hsv 0 100% 100%"
+ //
+ function inputToRGB(color) {
+
+ var rgb = { r: 0, g: 0, b: 0 };
+ var a = 1;
+ var ok = false;
+ var format = false;
+
+ if (typeof color == "string") {
+ color = stringInputToObject(color);
+ }
+
+ if (typeof color == "object") {
+ if (color.hasOwnProperty("r") && color.hasOwnProperty("g") && color.hasOwnProperty("b")) {
+ rgb = rgbToRgb(color.r, color.g, color.b);
+ ok = true;
+ format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb";
+ }
+ else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("v")) {
+ color.s = convertToPercentage(color.s);
+ color.v = convertToPercentage(color.v);
+ rgb = hsvToRgb(color.h, color.s, color.v);
+ ok = true;
+ format = "hsv";
+ }
+ else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("l")) {
+ color.s = convertToPercentage(color.s);
+ color.l = convertToPercentage(color.l);
+ rgb = hslToRgb(color.h, color.s, color.l);
+ ok = true;
+ format = "hsl";
+ }
+
+ if (color.hasOwnProperty("a")) {
+ a = color.a;
+ }
+ }
+
+ a = boundAlpha(a);
+
+ return {
+ ok: ok,
+ format: color.format || format,
+ r: mathMin(255, mathMax(rgb.r, 0)),
+ g: mathMin(255, mathMax(rgb.g, 0)),
+ b: mathMin(255, mathMax(rgb.b, 0)),
+ a: a
+ };
+ }
+
+
+ // Conversion Functions
+ // --------------------
+
+ // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:
+ //
+
+ // `rgbToRgb`
+ // Handle bounds / percentage checking to conform to CSS color spec
+ //
+ // *Assumes:* r, g, b in [0, 255] or [0, 1]
+ // *Returns:* { r, g, b } in [0, 255]
+ function rgbToRgb(r, g, b){
+ return {
+ r: bound01(r, 255) * 255,
+ g: bound01(g, 255) * 255,
+ b: bound01(b, 255) * 255
+ };
+ }
+
+ // `rgbToHsl`
+ // Converts an RGB color value to HSL.
+ // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]
+ // *Returns:* { h, s, l } in [0,1]
+ function rgbToHsl(r, g, b) {
+
+ r = bound01(r, 255);
+ g = bound01(g, 255);
+ b = bound01(b, 255);
+
+ var max = mathMax(r, g, b), min = mathMin(r, g, b);
+ var h, s, l = (max + min) / 2;
+
+ if(max == min) {
+ h = s = 0; // achromatic
+ }
+ else {
+ var d = max - min;
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
+ switch(max) {
+ case r: h = (g - b) / d + (g < b ? 6 : 0); break;
+ case g: h = (b - r) / d + 2; break;
+ case b: h = (r - g) / d + 4; break;
+ }
+
+ h /= 6;
+ }
+
+ return { h: h, s: s, l: l };
+ }
+
+ // `hslToRgb`
+ // Converts an HSL color value to RGB.
+ // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]
+ // *Returns:* { r, g, b } in the set [0, 255]
+ function hslToRgb(h, s, l) {
+ var r, g, b;
+
+ h = bound01(h, 360);
+ s = bound01(s, 100);
+ l = bound01(l, 100);
+
+ function hue2rgb(p, q, t) {
+ if(t < 0) t += 1;
+ if(t > 1) t -= 1;
+ if(t < 1/6) return p + (q - p) * 6 * t;
+ if(t < 1/2) return q;
+ if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
+ return p;
+ }
+
+ if(s === 0) {
+ r = g = b = l; // achromatic
+ }
+ else {
+ var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
+ var p = 2 * l - q;
+ r = hue2rgb(p, q, h + 1/3);
+ g = hue2rgb(p, q, h);
+ b = hue2rgb(p, q, h - 1/3);
+ }
+
+ return { r: r * 255, g: g * 255, b: b * 255 };
+ }
+
+ // `rgbToHsv`
+ // Converts an RGB color value to HSV
+ // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]
+ // *Returns:* { h, s, v } in [0,1]
+ function rgbToHsv(r, g, b) {
+
+ r = bound01(r, 255);
+ g = bound01(g, 255);
+ b = bound01(b, 255);
+
+ var max = mathMax(r, g, b), min = mathMin(r, g, b);
+ var h, s, v = max;
+
+ var d = max - min;
+ s = max === 0 ? 0 : d / max;
+
+ if(max == min) {
+ h = 0; // achromatic
+ }
+ else {
+ switch(max) {
+ case r: h = (g - b) / d + (g < b ? 6 : 0); break;
+ case g: h = (b - r) / d + 2; break;
+ case b: h = (r - g) / d + 4; break;
+ }
+ h /= 6;
+ }
+ return { h: h, s: s, v: v };
+ }
+
+ // `hsvToRgb`
+ // Converts an HSV color value to RGB.
+ // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]
+ // *Returns:* { r, g, b } in the set [0, 255]
+ function hsvToRgb(h, s, v) {
+
+ h = bound01(h, 360) * 6;
+ s = bound01(s, 100);
+ v = bound01(v, 100);
+
+ var i = math.floor(h),
+ f = h - i,
+ p = v * (1 - s),
+ q = v * (1 - f * s),
+ t = v * (1 - (1 - f) * s),
+ mod = i % 6,
+ r = [v, q, p, p, t, v][mod],
+ g = [t, v, v, q, p, p][mod],
+ b = [p, p, t, v, v, q][mod];
+
+ return { r: r * 255, g: g * 255, b: b * 255 };
+ }
+
+ // `rgbToHex`
+ // Converts an RGB color to hex
+ // Assumes r, g, and b are contained in the set [0, 255]
+ // Returns a 3 or 6 character hex
+ function rgbToHex(r, g, b, allow3Char) {
+
+ var hex = [
+ pad2(mathRound(r).toString(16)),
+ pad2(mathRound(g).toString(16)),
+ pad2(mathRound(b).toString(16))
+ ];
+
+ // Return a 3 character hex if possible
+ if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {
+ return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);
+ }
+
+ return hex.join("");
+ }
+ // `rgbaToHex`
+ // Converts an RGBA color plus alpha transparency to hex
+ // Assumes r, g, b and a are contained in the set [0, 255]
+ // Returns an 8 character hex
+ function rgbaToHex(r, g, b, a) {
+
+ var hex = [
+ pad2(convertDecimalToHex(a)),
+ pad2(mathRound(r).toString(16)),
+ pad2(mathRound(g).toString(16)),
+ pad2(mathRound(b).toString(16))
+ ];
+
+ return hex.join("");
+ }
+
+ // `equals`
+ // Can be called with any tinycolor input
+ tinycolor.equals = function (color1, color2) {
+ if (!color1 || !color2) { return false; }
+ return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();
+ };
+ tinycolor.random = function() {
+ return tinycolor.fromRatio({
+ r: mathRandom(),
+ g: mathRandom(),
+ b: mathRandom()
+ });
+ };
+
+
+ // Modification Functions
+ // ----------------------
+ // Thanks to less.js for some of the basics here
+ //
+
+ function desaturate(color, amount) {
+ amount = (amount === 0) ? 0 : (amount || 10);
+ var hsl = tinycolor(color).toHsl();
+ hsl.s -= amount / 100;
+ hsl.s = clamp01(hsl.s);
+ return tinycolor(hsl);
+ }
+
+ function saturate(color, amount) {
+ amount = (amount === 0) ? 0 : (amount || 10);
+ var hsl = tinycolor(color).toHsl();
+ hsl.s += amount / 100;
+ hsl.s = clamp01(hsl.s);
+ return tinycolor(hsl);
+ }
+
+ function greyscale(color) {
+ return tinycolor(color).desaturate(100);
+ }
+
+ function lighten (color, amount) {
+ amount = (amount === 0) ? 0 : (amount || 10);
+ var hsl = tinycolor(color).toHsl();
+ hsl.l += amount / 100;
+ hsl.l = clamp01(hsl.l);
+ return tinycolor(hsl);
+ }
+
+ function brighten(color, amount) {
+ amount = (amount === 0) ? 0 : (amount || 10);
+ var rgb = tinycolor(color).toRgb();
+ rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100))));
+ rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100))));
+ rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100))));
+ return tinycolor(rgb);
+ }
+
+ function darken (color, amount) {
+ amount = (amount === 0) ? 0 : (amount || 10);
+ var hsl = tinycolor(color).toHsl();
+ hsl.l -= amount / 100;
+ hsl.l = clamp01(hsl.l);
+ return tinycolor(hsl);
+ }
+
+ // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.
+ // Values outside of this range will be wrapped into this range.
+ function spin(color, amount) {
+ var hsl = tinycolor(color).toHsl();
+ var hue = (mathRound(hsl.h) + amount) % 360;
+ hsl.h = hue < 0 ? 360 + hue : hue;
+ return tinycolor(hsl);
+ }
+
+ // Combination Functions
+ // ---------------------
+ // Thanks to jQuery xColor for some of the ideas behind these
+ //
+
+ function complement(color) {
+ var hsl = tinycolor(color).toHsl();
+ hsl.h = (hsl.h + 180) % 360;
+ return tinycolor(hsl);
+ }
+
+ function triad(color) {
+ var hsl = tinycolor(color).toHsl();
+ var h = hsl.h;
+ return [
+ tinycolor(color),
+ tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),
+ tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })
+ ];
+ }
+
+ function tetrad(color) {
+ var hsl = tinycolor(color).toHsl();
+ var h = hsl.h;
+ return [
+ tinycolor(color),
+ tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),
+ tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),
+ tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })
+ ];
+ }
+
+ function splitcomplement(color) {
+ var hsl = tinycolor(color).toHsl();
+ var h = hsl.h;
+ return [
+ tinycolor(color),
+ tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),
+ tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})
+ ];
+ }
+
+ function analogous(color, results, slices) {
+ results = results || 6;
+ slices = slices || 30;
+
+ var hsl = tinycolor(color).toHsl();
+ var part = 360 / slices;
+ var ret = [tinycolor(color)];
+
+ for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {
+ hsl.h = (hsl.h + part) % 360;
+ ret.push(tinycolor(hsl));
+ }
+ return ret;
+ }
+
+ function monochromatic(color, results) {
+ results = results || 6;
+ var hsv = tinycolor(color).toHsv();
+ var h = hsv.h, s = hsv.s, v = hsv.v;
+ var ret = [];
+ var modification = 1 / results;
+
+ while (results--) {
+ ret.push(tinycolor({ h: h, s: s, v: v}));
+ v = (v + modification) % 1;
+ }
+
+ return ret;
+ }
+
+ // Utility Functions
+ // ---------------------
+
+ tinycolor.mix = function(color1, color2, amount) {
+ amount = (amount === 0) ? 0 : (amount || 50);
+
+ var rgb1 = tinycolor(color1).toRgb();
+ var rgb2 = tinycolor(color2).toRgb();
+
+ var p = amount / 100;
+ var w = p * 2 - 1;
+ var a = rgb2.a - rgb1.a;
+
+ var w1;
+
+ if (w * a == -1) {
+ w1 = w;
+ } else {
+ w1 = (w + a) / (1 + w * a);
+ }
+
+ w1 = (w1 + 1) / 2;
+
+ var w2 = 1 - w1;
+
+ var rgba = {
+ r: rgb2.r * w1 + rgb1.r * w2,
+ g: rgb2.g * w1 + rgb1.g * w2,
+ b: rgb2.b * w1 + rgb1.b * w2,
+ a: rgb2.a * p + rgb1.a * (1 - p)
+ };
+
+ return tinycolor(rgba);
+ };
+
+
+ // Readability Functions
+ // ---------------------
+ //
+
+ // `readability`
+ // Analyze the 2 colors and returns an object with the following properties:
+ // `brightness`: difference in brightness between the two colors
+ // `color`: difference in color/hue between the two colors
+ tinycolor.readability = function(color1, color2) {
+ var c1 = tinycolor(color1);
+ var c2 = tinycolor(color2);
+ var rgb1 = c1.toRgb();
+ var rgb2 = c2.toRgb();
+ var brightnessA = c1.getBrightness();
+ var brightnessB = c2.getBrightness();
+ var colorDiff = (
+ Math.max(rgb1.r, rgb2.r) - Math.min(rgb1.r, rgb2.r) +
+ Math.max(rgb1.g, rgb2.g) - Math.min(rgb1.g, rgb2.g) +
+ Math.max(rgb1.b, rgb2.b) - Math.min(rgb1.b, rgb2.b)
+ );
+
+ return {
+ brightness: Math.abs(brightnessA - brightnessB),
+ color: colorDiff
+ };
+ };
+
+ // `readable`
+ // http://www.w3.org/TR/AERT#color-contrast
+ // Ensure that foreground and background color combinations provide sufficient contrast.
+ // *Example*
+ // tinycolor.isReadable("#000", "#111") => false
+ tinycolor.isReadable = function(color1, color2) {
+ var readability = tinycolor.readability(color1, color2);
+ return readability.brightness > 125 && readability.color > 500;
+ };
+
+ // `mostReadable`
+ // Given a base color and a list of possible foreground or background
+ // colors for that base, returns the most readable color.
+ // *Example*
+ // tinycolor.mostReadable("#123", ["#fff", "#000"]) => "#000"
+ tinycolor.mostReadable = function(baseColor, colorList) {
+ var bestColor = null;
+ var bestScore = 0;
+ var bestIsReadable = false;
+ for (var i=0; i < colorList.length; i++) {
+
+ // We normalize both around the "acceptable" breaking point,
+ // but rank brightness constrast higher than hue.
+
+ var readability = tinycolor.readability(baseColor, colorList[i]);
+ var readable = readability.brightness > 125 && readability.color > 500;
+ var score = 3 * (readability.brightness / 125) + (readability.color / 500);
+
+ if ((readable && ! bestIsReadable) ||
+ (readable && bestIsReadable && score > bestScore) ||
+ ((! readable) && (! bestIsReadable) && score > bestScore)) {
+ bestIsReadable = readable;
+ bestScore = score;
+ bestColor = tinycolor(colorList[i]);
+ }
+ }
+ return bestColor;
+ };
+
+
+ // Big List of Colors
+ // ------------------
+ //
+ var names = tinycolor.names = {
+ aliceblue: "f0f8ff",
+ antiquewhite: "faebd7",
+ aqua: "0ff",
+ aquamarine: "7fffd4",
+ azure: "f0ffff",
+ beige: "f5f5dc",
+ bisque: "ffe4c4",
+ black: "000",
+ blanchedalmond: "ffebcd",
+ blue: "00f",
+ blueviolet: "8a2be2",
+ brown: "a52a2a",
+ burlywood: "deb887",
+ burntsienna: "ea7e5d",
+ cadetblue: "5f9ea0",
+ chartreuse: "7fff00",
+ chocolate: "d2691e",
+ coral: "ff7f50",
+ cornflowerblue: "6495ed",
+ cornsilk: "fff8dc",
+ crimson: "dc143c",
+ cyan: "0ff",
+ darkblue: "00008b",
+ darkcyan: "008b8b",
+ darkgoldenrod: "b8860b",
+ darkgray: "a9a9a9",
+ darkgreen: "006400",
+ darkgrey: "a9a9a9",
+ darkkhaki: "bdb76b",
+ darkmagenta: "8b008b",
+ darkolivegreen: "556b2f",
+ darkorange: "ff8c00",
+ darkorchid: "9932cc",
+ darkred: "8b0000",
+ darksalmon: "e9967a",
+ darkseagreen: "8fbc8f",
+ darkslateblue: "483d8b",
+ darkslategray: "2f4f4f",
+ darkslategrey: "2f4f4f",
+ darkturquoise: "00ced1",
+ darkviolet: "9400d3",
+ deeppink: "ff1493",
+ deepskyblue: "00bfff",
+ dimgray: "696969",
+ dimgrey: "696969",
+ dodgerblue: "1e90ff",
+ firebrick: "b22222",
+ floralwhite: "fffaf0",
+ forestgreen: "228b22",
+ fuchsia: "f0f",
+ gainsboro: "dcdcdc",
+ ghostwhite: "f8f8ff",
+ gold: "ffd700",
+ goldenrod: "daa520",
+ gray: "808080",
+ green: "008000",
+ greenyellow: "adff2f",
+ grey: "808080",
+ honeydew: "f0fff0",
+ hotpink: "ff69b4",
+ indianred: "cd5c5c",
+ indigo: "4b0082",
+ ivory: "fffff0",
+ khaki: "f0e68c",
+ lavender: "e6e6fa",
+ lavenderblush: "fff0f5",
+ lawngreen: "7cfc00",
+ lemonchiffon: "fffacd",
+ lightblue: "add8e6",
+ lightcoral: "f08080",
+ lightcyan: "e0ffff",
+ lightgoldenrodyellow: "fafad2",
+ lightgray: "d3d3d3",
+ lightgreen: "90ee90",
+ lightgrey: "d3d3d3",
+ lightpink: "ffb6c1",
+ lightsalmon: "ffa07a",
+ lightseagreen: "20b2aa",
+ lightskyblue: "87cefa",
+ lightslategray: "789",
+ lightslategrey: "789",
+ lightsteelblue: "b0c4de",
+ lightyellow: "ffffe0",
+ lime: "0f0",
+ limegreen: "32cd32",
+ linen: "faf0e6",
+ magenta: "f0f",
+ maroon: "800000",
+ mediumaquamarine: "66cdaa",
+ mediumblue: "0000cd",
+ mediumorchid: "ba55d3",
+ mediumpurple: "9370db",
+ mediumseagreen: "3cb371",
+ mediumslateblue: "7b68ee",
+ mediumspringgreen: "00fa9a",
+ mediumturquoise: "48d1cc",
+ mediumvioletred: "c71585",
+ midnightblue: "191970",
+ mintcream: "f5fffa",
+ mistyrose: "ffe4e1",
+ moccasin: "ffe4b5",
+ navajowhite: "ffdead",
+ navy: "000080",
+ oldlace: "fdf5e6",
+ olive: "808000",
+ olivedrab: "6b8e23",
+ orange: "ffa500",
+ orangered: "ff4500",
+ orchid: "da70d6",
+ palegoldenrod: "eee8aa",
+ palegreen: "98fb98",
+ paleturquoise: "afeeee",
+ palevioletred: "db7093",
+ papayawhip: "ffefd5",
+ peachpuff: "ffdab9",
+ peru: "cd853f",
+ pink: "ffc0cb",
+ plum: "dda0dd",
+ powderblue: "b0e0e6",
+ purple: "800080",
+ rebeccapurple: "663399",
+ red: "f00",
+ rosybrown: "bc8f8f",
+ royalblue: "4169e1",
+ saddlebrown: "8b4513",
+ salmon: "fa8072",
+ sandybrown: "f4a460",
+ seagreen: "2e8b57",
+ seashell: "fff5ee",
+ sienna: "a0522d",
+ silver: "c0c0c0",
+ skyblue: "87ceeb",
+ slateblue: "6a5acd",
+ slategray: "708090",
+ slategrey: "708090",
+ snow: "fffafa",
+ springgreen: "00ff7f",
+ steelblue: "4682b4",
+ tan: "d2b48c",
+ teal: "008080",
+ thistle: "d8bfd8",
+ tomato: "ff6347",
+ turquoise: "40e0d0",
+ violet: "ee82ee",
+ wheat: "f5deb3",
+ white: "fff",
+ whitesmoke: "f5f5f5",
+ yellow: "ff0",
+ yellowgreen: "9acd32"
+ };
+
+ // Make it easy to access colors via `hexNames[hex]`
+ var hexNames = tinycolor.hexNames = flip(names);
+
+
+ // Utilities
+ // ---------
+
+ // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`
+ function flip(o) {
+ var flipped = { };
+ for (var i in o) {
+ if (o.hasOwnProperty(i)) {
+ flipped[o[i]] = i;
+ }
+ }
+ return flipped;
+ }
+
+ // Return a valid alpha value [0,1] with all invalid values being set to 1
+ function boundAlpha(a) {
+ a = parseFloat(a);
+
+ if (isNaN(a) || a < 0 || a > 1) {
+ a = 1;
+ }
+
+ return a;
+ }
+
+ // Take input from [0, n] and return it as [0, 1]
+ function bound01(n, max) {
+ if (isOnePointZero(n)) { n = "100%"; }
+
+ var processPercent = isPercentage(n);
+ n = mathMin(max, mathMax(0, parseFloat(n)));
+
+ // Automatically convert percentage into number
+ if (processPercent) {
+ n = parseInt(n * max, 10) / 100;
+ }
+
+ // Handle floating point rounding errors
+ if ((math.abs(n - max) < 0.000001)) {
+ return 1;
+ }
+
+ // Convert into [0, 1] range if it isn't already
+ return (n % max) / parseFloat(max);
+ }
+
+ // Force a number between 0 and 1
+ function clamp01(val) {
+ return mathMin(1, mathMax(0, val));
+ }
+
+ // Parse a base-16 hex value into a base-10 integer
+ function parseIntFromHex(val) {
+ return parseInt(val, 16);
+ }
+
+ // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1
+ //
+ function isOnePointZero(n) {
+ return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1;
+ }
+
+ // Check to see if string passed in is a percentage
+ function isPercentage(n) {
+ return typeof n === "string" && n.indexOf('%') != -1;
+ }
+
+ // Force a hex value to have 2 characters
+ function pad2(c) {
+ return c.length == 1 ? '0' + c : '' + c;
+ }
+
+ // Replace a decimal with it's percentage value
+ function convertToPercentage(n) {
+ if (n <= 1) {
+ n = (n * 100) + "%";
+ }
+
+ return n;
+ }
+
+ // Converts a decimal to a hex value
+ function convertDecimalToHex(d) {
+ return Math.round(parseFloat(d) * 255).toString(16);
+ }
+ // Converts a hex value to a decimal
+ function convertHexToDecimal(h) {
+ return (parseIntFromHex(h) / 255);
+ }
+
+ var matchers = (function() {
+
+ //
+ var CSS_INTEGER = "[-\\+]?\\d+%?";
+
+ //
+ var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?";
+
+ // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.
+ var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")";
+
+ // Actual matching.
+ // Parentheses and commas are optional, but not required.
+ // Whitespace can take the place of commas or opening paren
+ var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
+ var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
+
+ return {
+ rgb: new RegExp("rgb" + PERMISSIVE_MATCH3),
+ rgba: new RegExp("rgba" + PERMISSIVE_MATCH4),
+ hsl: new RegExp("hsl" + PERMISSIVE_MATCH3),
+ hsla: new RegExp("hsla" + PERMISSIVE_MATCH4),
+ hsv: new RegExp("hsv" + PERMISSIVE_MATCH3),
+ hsva: new RegExp("hsva" + PERMISSIVE_MATCH4),
+ hex3: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
+ hex6: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,
+ hex8: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/
+ };
+ })();
+
+ // `stringInputToObject`
+ // Permissive string parsing. Take in a number of formats, and output an object
+ // based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`
+ function stringInputToObject(color) {
+
+ color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase();
+ var named = false;
+ if (names[color]) {
+ color = names[color];
+ named = true;
+ }
+ else if (color == 'transparent') {
+ return { r: 0, g: 0, b: 0, a: 0, format: "name" };
+ }
+
+ // Try to match string input using regular expressions.
+ // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]
+ // Just return an object and let the conversion functions handle that.
+ // This way the result will be the same whether the tinycolor is initialized with string or object.
+ var match;
+ if ((match = matchers.rgb.exec(color))) {
+ return { r: match[1], g: match[2], b: match[3] };
+ }
+ if ((match = matchers.rgba.exec(color))) {
+ return { r: match[1], g: match[2], b: match[3], a: match[4] };
+ }
+ if ((match = matchers.hsl.exec(color))) {
+ return { h: match[1], s: match[2], l: match[3] };
+ }
+ if ((match = matchers.hsla.exec(color))) {
+ return { h: match[1], s: match[2], l: match[3], a: match[4] };
+ }
+ if ((match = matchers.hsv.exec(color))) {
+ return { h: match[1], s: match[2], v: match[3] };
+ }
+ if ((match = matchers.hsva.exec(color))) {
+ return { h: match[1], s: match[2], v: match[3], a: match[4] };
+ }
+ if ((match = matchers.hex8.exec(color))) {
+ return {
+ a: convertHexToDecimal(match[1]),
+ r: parseIntFromHex(match[2]),
+ g: parseIntFromHex(match[3]),
+ b: parseIntFromHex(match[4]),
+ format: named ? "name" : "hex8"
+ };
+ }
+ if ((match = matchers.hex6.exec(color))) {
+ return {
+ r: parseIntFromHex(match[1]),
+ g: parseIntFromHex(match[2]),
+ b: parseIntFromHex(match[3]),
+ format: named ? "name" : "hex"
+ };
+ }
+ if ((match = matchers.hex3.exec(color))) {
+ return {
+ r: parseIntFromHex(match[1] + '' + match[1]),
+ g: parseIntFromHex(match[2] + '' + match[2]),
+ b: parseIntFromHex(match[3] + '' + match[3]),
+ format: named ? "name" : "hex"
+ };
+ }
+
+ return false;
+ }
+
+ window.tinycolor = tinycolor;
+ })();
+
+ $(function () {
+ if ($.fn.spectrum.load) {
+ $.fn.spectrum.processNativeColorInputs();
+ }
+ });
+
+});
diff --git a/wp-content/plugins/child-theme-configurator/js/spectrum.min.js b/wp-content/plugins/child-theme-configurator/js/spectrum.min.js
new file mode 100644
index 0000000..610d6a4
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/js/spectrum.min.js
@@ -0,0 +1 @@
+!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof exports&&"object"==typeof module?module.exports=t:t(jQuery)}(function(t,e){"use strict";function r(e,r,n,a){for(var i=[],s=0;s ')}else{var h="sp-clear-display";i.push(t("
").append(t(' ').attr("title",a.noColorSelectedText)).html())}}return""+i.join("")+"
"}function n(){for(var t=0;tMath.abs(e-a);wt=i?"x":"y"}}else wt=null;var s=!wt||"x"===wt,o=!wt||"y"===wt;s&&(ut=parseFloat(t/rt)),o&&(ht=parseFloat((nt-e)/nt)),Jt=!1,X.showAlpha||(dt=1),q()},C,P),Wt?(N(Wt),D(),_(Wt)):D(),Y&&R();var n=g?"mousedown.spectrum":"click.spectrum touchstart.spectrum";Nt.delegate(".sp-thumb-el",n,e),jt.delegate(".sp-thumb-el:nth-child(1)",n,{ignore:!0},e)}function y(){if(Q&&window.localStorage){try{var e=window.localStorage[Q].split(",#");e.length>1&&(delete window.localStorage[Q],t.each(e,function(t,e){_(e)}))}catch(r){}try{vt=window.localStorage[Q].split(";")}catch(r){}}}function w(t){for(;-1!==vt.indexOf(t);)vt.splice(vt.indexOf(t),1);if(Q&&window.localStorage)try{window.localStorage[Q]=vt.join(";")}catch(e){}}function _(e){if(G){var r=tinycolor(e).toRgbString();if(!bt[r]&&-1===t.inArray(r,vt))for(vt.push(r);vt.length>mt;)vt.shift();if(Q&&window.localStorage)try{window.localStorage[Q]=vt.join(";")}catch(n){}}}function x(){var t=[];if(X.showPalette)for(var e=0;e=nt||0>=rt||0>=it)&&B(),et=!0,St.addClass(yt),wt=null,xt.trigger("dragstart.spectrum",[j()])}function P(){et=!1,St.removeClass(yt),xt.trigger("dragstop.spectrum",[j()])}function A(t){var e=Ot.val();if(null!==e&&""!==e||!Ut){var r=tinycolor(e);r.isValid()?(Yt=Gt=r.getFormat(),N(r),z(!0)):Ot.addClass("sp-validation-error")}else N(null),z(!0)}function M(){tt?T():R()}function R(){var e=t.Event("beforeShow.spectrum");return tt?void B():(xt.trigger(e,[j()]),void(U.beforeShow(j())===!1||e.isDefaultPrevented()||(n(),tt=!0,t(_t).bind("keydown.spectrum",H),t(_t).bind("click.spectrum",F),t(window).bind("resize.spectrum",Z),Kt.addClass("sp-active"),St.removeClass("sp-hidden"),B(),D(),Xt=j(),S(),U.show(Xt),xt.trigger("show.spectrum",[Xt]))))}function H(t){27===t.keyCode&&T()}function F(t){2!=t.button&&(et||(Qt?z(!0):O(),T()))}function T(){tt&&!Y&&(tt=!1,t(_t).unbind("keydown.spectrum",H),t(_t).unbind("click.spectrum",F),t(window).unbind("resize.spectrum",Z),Kt.removeClass("sp-active"),St.addClass("sp-hidden"),U.hide(j()),xt.trigger("hide.spectrum",[j()]))}function O(){N(Xt,!0)}function N(t,e){if(tinycolor.equals(t,j()))return void D();var r,n,a;!t&&Ut?Jt=!0:(Jt=!1,r=tinycolor(t),n=r.toHsv(),ft=n.h%360/360,ut=n.s,ht=n.v,dt=n.a),D(),r&&r.isValid()&&!e&&(a=r.getFormat(),"name"===a&&(Yt=a),Gt=Yt||a)}function j(t){return t=t||{},Ut&&Jt?null:tinycolor.fromRatio({h:ft,s:ut,v:ht,a:Math.round(100*dt)/100},{format:t.format||Gt})}function E(){return!Ot.hasClass("sp-validation-error")}function q(){D(),U.move(j()),xt.trigger("move.spectrum",[j()])}function D(){Ot.removeClass("sp-validation-error"),I();var t=tinycolor.fromRatio({h:ft,s:1,v:1});Pt.css("background-color",t.toHexString());var e=Gt;1>dt&&(0!==dt||"name"!==e)&&("hex"===e||"hex3"===e||"hex6"===e||"name"===e)&&(e="rgb");var r=j({format:e}),n="";if($t.removeClass("sp-clear-display"),$t.css("background-color","transparent"),!r&&Ut)$t.addClass("sp-clear-display");else{var a=r.toHexString(),i=r.toRgbString();if(b||1===r.alpha?$t.css("background-color",i):($t.css("background-color","transparent"),$t.css("filter",r.toFilter())),X.showAlpha){var s=r.toRgb();s.a=0;var o=tinycolor(s).toRgbString(),l="linear-gradient(left, "+o+", "+a+")";g?Ht.css("filter",tinycolor(o).toFilter({gradientType:1},a)):(Ht.css("background","-webkit-"+l),Ht.css("background","-moz-"+l),Ht.css("background","-ms-"+l),Ht.css("background","linear-gradient(to right, "+o+", "+a+")"))}n=r.toString(e)}X.showInput&&Ot.val(n),X.showPalette&&k(),S()}function I(){var t=ut,e=ht;if(Ut&&Jt)Tt.hide(),Rt.hide(),At.hide();else{Tt.show(),Rt.show(),At.show();var r=t*rt,n=nt-e*nt;r=Math.max(-at,Math.min(rt-at,r-at)),n=Math.max(-at,Math.min(nt-at,n-at)),At.css({top:n+"px",left:r+"px"});var a=dt*ot;Tt.css({left:a-lt/2+"px"});var i=ft*it;Rt.css({top:i-ct+"px"})}}function z(t){var e=j(),r="",n=!tinycolor.equals(e,Xt),a=Gt;e&&(1>dt&&(0!==dt||"name"!==a)&&("hex"===a||"hex3"===a||"hex6"===a||"name"===a)&&(a="rgb"),r=e.toString(a),_(e)),zt&&xt.val(r),t&&n&&(U.change(e),xt.trigger("change",[e]))}function B(){rt=Pt.width(),nt=Pt.height(),at=At.height(),st=Mt.width(),it=Mt.height(),ct=Rt.height(),ot=Ft.width(),lt=Tt.width(),Y||(St.css("position","absolute"),St.offset(X.offset?X.offset:s(St,Vt))),I(),X.showPalette&&k(),xt.trigger("reflow.spectrum")}function L(){xt.show(),Vt.unbind("click.spectrum touchstart.spectrum"),St.remove(),Kt.remove(),p[Zt.id]=null}function K(r,n){return r===e?t.extend({},X):n===e?X[r]:(X[r]=n,void c())}function V(){kt=!1,xt.attr("disabled",!1),Vt.removeClass("sp-disabled")}function $(){T(),kt=!0,xt.attr("disabled",!0),Vt.addClass("sp-disabled")}function W(t){X.offset=t,B()}var X=a(o,i),Y=X.flat,G=X.showSelectionPalette,Q=X.localStorageKey,J=X.theme,U=X.callbacks,Z=u(B,10),tt=!1,et=!1,rt=0,nt=0,at=0,it=0,st=0,ot=0,lt=0,ct=0,ft=0,ut=0,ht=0,dt=1,pt=[],gt=[],bt={},vt=X.selectionPalette.slice(0),mt=X.maxSelectionSize,yt="sp-dragging",wt=null,_t=i.ownerDocument,xt=(_t.body,t(i)),kt=!1,St=t(m,_t).addClass(J),Ct=St.find(".sp-picker-container"),Pt=St.find(".sp-color"),At=St.find(".sp-dragger"),Mt=St.find(".sp-hue"),Rt=St.find(".sp-slider"),Ht=St.find(".sp-alpha-inner"),Ft=St.find(".sp-alpha"),Tt=St.find(".sp-alpha-handle"),Ot=St.find(".sp-input"),Nt=St.find(".sp-palette"),jt=St.find(".sp-initial"),Et=St.find(".sp-cancel"),qt=St.find(".sp-clear"),Dt=St.find(".sp-choose"),It=St.find(".sp-palette-toggle"),zt=xt.is("input"),Bt=zt&&"color"===xt.attr("type")&&h(),Lt=zt&&!Y,Kt=Lt?t(v).addClass(J).addClass(X.className).addClass(X.replacerClassName):t([]),Vt=Lt?Kt:xt,$t=Kt.find(".sp-preview-inner"),Wt=X.color||zt&&xt.val(),Xt=!1,Yt=X.preferredFormat,Gt=Yt,Qt=!X.showButtons||X.clickoutFiresChange,Jt=!Wt,Ut=X.allowEmpty&&!Bt;d();var Zt={show:R,hide:T,toggle:M,reflow:B,option:K,enable:V,disable:$,offset:W,set:function(t){N(t)},get:j,destroy:L,container:St};return Zt.id=p.push(Zt)-1,Zt}function s(e,r){var n=0,a=e.outerWidth(),i=e.outerHeight(),s=r.outerHeight(),o=e[0].ownerDocument,l=o.documentElement,c=l.clientWidth+t(o).scrollLeft(),f=l.clientHeight+t(o).scrollTop(),u=r.offset();return u.top+=s,u.left-=Math.min(u.left,u.left+a>c&&c>a?Math.abs(u.left+a-c):0),u.top-=Math.min(u.top,u.top+i>f&&f>i?Math.abs(i+s-n):n),u}function o(){}function l(t){t.stopPropagation()}function c(t,e){var r=Array.prototype.slice,n=r.call(arguments,2);return function(){return t.apply(e,n.concat(r.call(arguments)))}}function f(e,r,n,a){function i(t){t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),t.returnValue=!1}function s(t){if(f){if(g&&c.documentMode<9&&!t.button)return l();var n=t.originalEvent&&t.originalEvent.touches&&t.originalEvent.touches[0],a=n&&n.pageX||t.pageX,s=n&&n.pageY||t.pageY,o=Math.max(0,Math.min(a-u.left,d)),b=Math.max(0,Math.min(s-u.top,h));p&&i(t),r.apply(e,[o,b,t])}}function o(r){var a=r.which?3==r.which:2==r.button;a||f||n.apply(e,arguments)!==!1&&(f=!0,h=t(e).height(),d=t(e).width(),u=t(e).offset(),t(c).bind(b),t(c.body).addClass("sp-dragging"),s(r),i(r))}function l(){f&&(t(c).unbind(b),t(c.body).removeClass("sp-dragging"),setTimeout(function(){a.apply(e,arguments)},0)),f=!1}r=r||function(){},n=n||function(){},a=a||function(){};var c=document,f=!1,u={},h=0,d=0,p="ontouchstart"in window,b={};b.selectstart=i,b.dragstart=i,b["touchmove mousemove"]=s,b["touchend mouseup"]=l,t(e).bind("touchstart mousedown",o)}function u(t,e,r){var n;return function(){var a=this,i=arguments,s=function(){n=null,t.apply(a,i)};r&&clearTimeout(n),(r||!n)&&(n=setTimeout(s,e))}}function h(){return t.fn.spectrum.inputTypeColorSupport()}var d={beforeShow:o,move:o,change:o,show:o,hide:o,color:!1,flat:!1,showInput:!1,allowEmpty:!1,showButtons:!0,clickoutFiresChange:!0,showInitial:!1,showPalette:!1,showPaletteOnly:!1,hideAfterPaletteSelect:!1,togglePaletteOnly:!1,showSelectionPalette:!0,localStorageKey:!1,appendTo:"body",maxSelectionSize:7,cancelText:"cancel",chooseText:"choose",togglePaletteMoreText:"more",togglePaletteLessText:"less",clearText:"Clear Color Selection",noColorSelectedText:"No Color Selected",preferredFormat:!1,className:"",containerClassName:"",replacerClassName:"",showAlpha:!1,theme:"sp-light",palette:[["#ffffff","#000000","#ff0000","#ff8000","#ffff00","#008000","#0000ff","#4b0082","#9400d3"]],selectionPalette:[],disabled:!1,offset:null},p=[],g=!!/msie/i.exec(window.navigator.userAgent),b=function(){function t(t,e){return!!~(""+t).indexOf(e)}var e=document.createElement("div"),r=e.style;return r.cssText="background-color:rgba(0,0,0,.5)",t(r.backgroundColor,"rgba")||t(r.backgroundColor,"hsla")}(),v=[""].join(""),m=function(){var t="";if(g)for(var e=1;6>=e;e++)t+="
";return[""].join("")}(),y="spectrum.id";t.fn.spectrum=function(e,r){if("string"==typeof e){var n=this,a=Array.prototype.slice.call(arguments,1);return this.each(function(){var r=p[t(this).data(y)];if(r){var i=r[e];if(!i)throw new Error("Spectrum: no such method: '"+e+"'");"get"==e?n=r.get():"container"==e?n=r.container:"option"==e?n=r.option.apply(r,a):"destroy"==e?(r.destroy(),t(this).removeData(y)):i.apply(r,a)}}),n}return this.spectrum("destroy").each(function(){var r=t.extend({},e,t(this).data()),n=i(this,r);t(this).data(y,n.id)})},t.fn.spectrum.load=!0,t.fn.spectrum.loadOpts={},t.fn.spectrum.draggable=f,t.fn.spectrum.defaults=d,t.fn.spectrum.inputTypeColorSupport=function w(){if("undefined"==typeof w._cachedResult){var e=t(" ")[0];w._cachedResult="color"===e.type&&"!"!==e.value}return w._cachedResult},t.spectrum={},t.spectrum.localization={},t.spectrum.palettes={},t.fn.spectrum.processNativeColorInputs=function(){var e=t("input[type=color]");e.length&&!h()&&e.spectrum({preferredFormat:"hex6"})},function(){function t(t){var r={r:0,g:0,b:0},a=1,s=!1,o=!1;return"string"==typeof t&&(t=T(t)),"object"==typeof t&&(t.hasOwnProperty("r")&&t.hasOwnProperty("g")&&t.hasOwnProperty("b")?(r=e(t.r,t.g,t.b),s=!0,o="%"===String(t.r).substr(-1)?"prgb":"rgb"):t.hasOwnProperty("h")&&t.hasOwnProperty("s")&&t.hasOwnProperty("v")?(t.s=R(t.s),t.v=R(t.v),r=i(t.h,t.s,t.v),s=!0,o="hsv"):t.hasOwnProperty("h")&&t.hasOwnProperty("s")&&t.hasOwnProperty("l")&&(t.s=R(t.s),t.l=R(t.l),r=n(t.h,t.s,t.l),s=!0,o="hsl"),t.hasOwnProperty("a")&&(a=t.a)),a=x(a),{ok:s,format:t.format||o,r:D(255,I(r.r,0)),g:D(255,I(r.g,0)),b:D(255,I(r.b,0)),a:a}}function e(t,e,r){return{r:255*k(t,255),g:255*k(e,255),b:255*k(r,255)}}function r(t,e,r){t=k(t,255),e=k(e,255),r=k(r,255);var n,a,i=I(t,e,r),s=D(t,e,r),o=(i+s)/2;if(i==s)n=a=0;else{var l=i-s;switch(a=o>.5?l/(2-i-s):l/(i+s),i){case t:n=(e-r)/l+(r>e?6:0);break;case e:n=(r-t)/l+2;break;case r:n=(t-e)/l+4}n/=6}return{h:n,s:a,l:o}}function n(t,e,r){function n(t,e,r){return 0>r&&(r+=1),r>1&&(r-=1),1/6>r?t+6*(e-t)*r:.5>r?e:2/3>r?t+(e-t)*(2/3-r)*6:t}var a,i,s;if(t=k(t,360),e=k(e,100),r=k(r,100),0===e)a=i=s=r;else{var o=.5>r?r*(1+e):r+e-r*e,l=2*r-o;a=n(l,o,t+1/3),i=n(l,o,t),s=n(l,o,t-1/3)}return{r:255*a,g:255*i,b:255*s}}function a(t,e,r){t=k(t,255),e=k(e,255),r=k(r,255);var n,a,i=I(t,e,r),s=D(t,e,r),o=i,l=i-s;if(a=0===i?0:l/i,i==s)n=0;else{switch(i){case t:n=(e-r)/l+(r>e?6:0);break;case e:n=(r-t)/l+2;break;case r:n=(t-e)/l+4}n/=6}return{h:n,s:a,v:o}}function i(t,e,r){t=6*k(t,360),e=k(e,100),r=k(r,100);var n=E.floor(t),a=t-n,i=r*(1-e),s=r*(1-a*e),o=r*(1-(1-a)*e),l=n%6,c=[r,s,i,i,o,r][l],f=[o,r,r,s,i,i][l],u=[i,i,o,r,r,s][l];return{r:255*c,g:255*f,b:255*u}}function s(t,e,r,n){var a=[M(q(t).toString(16)),M(q(e).toString(16)),M(q(r).toString(16))];return n&&a[0].charAt(0)==a[0].charAt(1)&&a[1].charAt(0)==a[1].charAt(1)&&a[2].charAt(0)==a[2].charAt(1)?a[0].charAt(0)+a[1].charAt(0)+a[2].charAt(0):a.join("")}function o(t,e,r,n){var a=[M(H(n)),M(q(t).toString(16)),M(q(e).toString(16)),M(q(r).toString(16))];return a.join("")}function l(t,e){e=0===e?0:e||10;var r=B(t).toHsl();return r.s-=e/100,r.s=S(r.s),B(r)}function c(t,e){e=0===e?0:e||10;var r=B(t).toHsl();return r.s+=e/100,r.s=S(r.s),B(r)}function f(t){return B(t).desaturate(100)}function u(t,e){e=0===e?0:e||10;var r=B(t).toHsl();return r.l+=e/100,r.l=S(r.l),B(r)}function h(t,e){e=0===e?0:e||10;var r=B(t).toRgb();return r.r=I(0,D(255,r.r-q(255*-(e/100)))),r.g=I(0,D(255,r.g-q(255*-(e/100)))),r.b=I(0,D(255,r.b-q(255*-(e/100)))),B(r)}function d(t,e){e=0===e?0:e||10;var r=B(t).toHsl();return r.l-=e/100,r.l=S(r.l),B(r)}function p(t,e){var r=B(t).toHsl(),n=(q(r.h)+e)%360;return r.h=0>n?360+n:n,B(r)}function g(t){var e=B(t).toHsl();return e.h=(e.h+180)%360,B(e)}function b(t){var e=B(t).toHsl(),r=e.h;return[B(t),B({h:(r+120)%360,s:e.s,l:e.l}),B({h:(r+240)%360,s:e.s,l:e.l})]}function v(t){var e=B(t).toHsl(),r=e.h;return[B(t),B({h:(r+90)%360,s:e.s,l:e.l}),B({h:(r+180)%360,s:e.s,l:e.l}),B({h:(r+270)%360,s:e.s,l:e.l})]}function m(t){var e=B(t).toHsl(),r=e.h;return[B(t),B({h:(r+72)%360,s:e.s,l:e.l}),B({h:(r+216)%360,s:e.s,l:e.l})]}function y(t,e,r){e=e||6,r=r||30;var n=B(t).toHsl(),a=360/r,i=[B(t)];for(n.h=(n.h-(a*e>>1)+720)%360;--e;)n.h=(n.h+a)%360,i.push(B(n));return i}function w(t,e){e=e||6;for(var r=B(t).toHsv(),n=r.h,a=r.s,i=r.v,s=[],o=1/e;e--;)s.push(B({h:n,s:a,v:i})),i=(i+o)%1;return s}function _(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[t[r]]=r);return e}function x(t){return t=parseFloat(t),(isNaN(t)||0>t||t>1)&&(t=1),t}function k(t,e){P(t)&&(t="100%");var r=A(t);return t=D(e,I(0,parseFloat(t))),r&&(t=parseInt(t*e,10)/100),E.abs(t-e)<1e-6?1:t%e/parseFloat(e)}function S(t){return D(1,I(0,t))}function C(t){return parseInt(t,16)}function P(t){return"string"==typeof t&&-1!=t.indexOf(".")&&1===parseFloat(t)}function A(t){return"string"==typeof t&&-1!=t.indexOf("%")}function M(t){return 1==t.length?"0"+t:""+t}function R(t){return 1>=t&&(t=100*t+"%"),t}function H(t){return Math.round(255*parseFloat(t)).toString(16)}function F(t){return C(t)/255}function T(t){t=t.replace(O,"").replace(N,"").toLowerCase();var e=!1;if(L[t])t=L[t],e=!0;else if("transparent"==t)return{r:0,g:0,b:0,a:0,format:"name"};var r;return(r=V.rgb.exec(t))?{r:r[1],g:r[2],b:r[3]}:(r=V.rgba.exec(t))?{r:r[1],g:r[2],b:r[3],a:r[4]}:(r=V.hsl.exec(t))?{h:r[1],s:r[2],l:r[3]}:(r=V.hsla.exec(t))?{h:r[1],s:r[2],l:r[3],a:r[4]}:(r=V.hsv.exec(t))?{h:r[1],s:r[2],v:r[3]}:(r=V.hsva.exec(t))?{h:r[1],s:r[2],v:r[3],a:r[4]}:(r=V.hex8.exec(t))?{a:F(r[1]),r:C(r[2]),g:C(r[3]),b:C(r[4]),format:e?"name":"hex8"}:(r=V.hex6.exec(t))?{r:C(r[1]),g:C(r[2]),b:C(r[3]),format:e?"name":"hex"}:(r=V.hex3.exec(t))?{r:C(r[1]+""+r[1]),g:C(r[2]+""+r[2]),b:C(r[3]+""+r[3]),format:e?"name":"hex"}:!1}var O=/^[\s,#]+/,N=/\s+$/,j=0,E=Math,q=E.round,D=E.min,I=E.max,z=E.random,B=function(e,r){if(e=e?e:"",r=r||{},e instanceof B)return e;if(!(this instanceof B))return new B(e,r);var n=t(e);this._originalInput=e,this._r=n.r,this._g=n.g,this._b=n.b,this._a=n.a,this._roundA=q(100*this._a)/100,this._format=r.format||n.format,this._gradientType=r.gradientType,this._r<1&&(this._r=q(this._r)),this._g<1&&(this._g=q(this._g)),this._b<1&&(this._b=q(this._b)),this._ok=n.ok,this._tc_id=j++};B.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},setAlpha:function(t){return this._a=x(t),this._roundA=q(100*this._a)/100,this},toHsv:function(){var t=a(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=a(this._r,this._g,this._b),e=q(360*t.h),r=q(100*t.s),n=q(100*t.v);return 1==this._a?"hsv("+e+", "+r+"%, "+n+"%)":"hsva("+e+", "+r+"%, "+n+"%, "+this._roundA+")"},toHsl:function(){var t=r(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=r(this._r,this._g,this._b),e=q(360*t.h),n=q(100*t.s),a=q(100*t.l);return 1==this._a?"hsl("+e+", "+n+"%, "+a+"%)":"hsla("+e+", "+n+"%, "+a+"%, "+this._roundA+")"},toHex:function(t){return s(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(){return o(this._r,this._g,this._b,this._a)},toHex8String:function(){return"#"+this.toHex8()},toRgb:function(){return{r:q(this._r),g:q(this._g),b:q(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+q(this._r)+", "+q(this._g)+", "+q(this._b)+")":"rgba("+q(this._r)+", "+q(this._g)+", "+q(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:q(100*k(this._r,255))+"%",g:q(100*k(this._g,255))+"%",b:q(100*k(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+q(100*k(this._r,255))+"%, "+q(100*k(this._g,255))+"%, "+q(100*k(this._b,255))+"%)":"rgba("+q(100*k(this._r,255))+"%, "+q(100*k(this._g,255))+"%, "+q(100*k(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":this._a<1?!1:K[s(this._r,this._g,this._b,!0)]||!1},toFilter:function(t){var e="#"+o(this._r,this._g,this._b,this._a),r=e,n=this._gradientType?"GradientType = 1, ":"";if(t){var a=B(t);r=a.toHex8String()}return"progid:DXImageTransform.Microsoft.gradient("+n+"startColorstr="+e+",endColorstr="+r+")"},toString:function(t){var e=!!t;t=t||this._format;var r=!1,n=this._a<1&&this._a>=0,a=!e&&n&&("hex"===t||"hex6"===t||"hex3"===t||"name"===t);return a?"name"===t&&0===this._a?this.toName():this.toRgbString():("rgb"===t&&(r=this.toRgbString()),"prgb"===t&&(r=this.toPercentageRgbString()),("hex"===t||"hex6"===t)&&(r=this.toHexString()),"hex3"===t&&(r=this.toHexString(!0)),"hex8"===t&&(r=this.toHex8String()),"name"===t&&(r=this.toName()),"hsl"===t&&(r=this.toHslString()),"hsv"===t&&(r=this.toHsvString()),r||this.toHexString())},_applyModification:function(t,e){var r=t.apply(null,[this].concat([].slice.call(e)));return this._r=r._r,this._g=r._g,this._b=r._b,this.setAlpha(r._a),this},lighten:function(){return this._applyModification(u,arguments)},brighten:function(){return this._applyModification(h,arguments)},darken:function(){return this._applyModification(d,arguments)},desaturate:function(){return this._applyModification(l,arguments)},saturate:function(){return this._applyModification(c,arguments)},greyscale:function(){return this._applyModification(f,arguments)},spin:function(){return this._applyModification(p,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(y,arguments)},complement:function(){return this._applyCombination(g,arguments)},monochromatic:function(){return this._applyCombination(w,arguments)},splitcomplement:function(){return this._applyCombination(m,arguments)},triad:function(){return this._applyCombination(b,arguments)},tetrad:function(){return this._applyCombination(v,arguments)}},B.fromRatio=function(t,e){if("object"==typeof t){var r={};for(var n in t)t.hasOwnProperty(n)&&("a"===n?r[n]=t[n]:r[n]=R(t[n]));t=r}return B(t,e)},B.equals=function(t,e){return t&&e?B(t).toRgbString()==B(e).toRgbString():!1},B.random=function(){return B.fromRatio({r:z(),g:z(),b:z()})},B.mix=function(t,e,r){r=0===r?0:r||50;var n,a=B(t).toRgb(),i=B(e).toRgb(),s=r/100,o=2*s-1,l=i.a-a.a;n=o*l==-1?o:(o+l)/(1+o*l),n=(n+1)/2;var c=1-n,f={r:i.r*n+a.r*c,g:i.g*n+a.g*c,b:i.b*n+a.b*c,a:i.a*s+a.a*(1-s)};return B(f)},B.readability=function(t,e){var r=B(t),n=B(e),a=r.toRgb(),i=n.toRgb(),s=r.getBrightness(),o=n.getBrightness(),l=Math.max(a.r,i.r)-Math.min(a.r,i.r)+Math.max(a.g,i.g)-Math.min(a.g,i.g)+Math.max(a.b,i.b)-Math.min(a.b,i.b);return{brightness:Math.abs(s-o),color:l}},B.isReadable=function(t,e){var r=B.readability(t,e);return r.brightness>125&&r.color>500},B.mostReadable=function(t,e){for(var r=null,n=0,a=!1,i=0;i125&&s.color>500,l=3*(s.brightness/125)+s.color/500;(o&&!a||o&&a&&l>n||!o&&!a&&l>n)&&(a=o,n=l,r=B(e[i]))}return r};var L=B.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},K=B.hexNames=_(L),V=function(){var t="[-\\+]?\\d+%?",e="[-\\+]?\\d*\\.\\d+%?",r="(?:"+e+")|(?:"+t+")",n="[\\s|\\(]+("+r+")[,|\\s]+("+r+")[,|\\s]+("+r+")\\s*\\)?",a="[\\s|\\(]+("+r+")[,|\\s]+("+r+")[,|\\s]+("+r+")[,|\\s]+("+r+")\\s*\\)?";return{rgb:new RegExp("rgb"+n),rgba:new RegExp("rgba"+a),hsl:new RegExp("hsl"+n),hsla:new RegExp("hsla"+a),hsv:new RegExp("hsv"+n),hsva:new RegExp("hsva"+a),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();window.tinycolor=B}(),t(function(){t.fn.spectrum.load&&t.fn.spectrum.processNativeColorInputs()})});
\ No newline at end of file
diff --git a/wp-content/plugins/child-theme-configurator/lang/child-theme-configurator-de_DE.mo b/wp-content/plugins/child-theme-configurator/lang/child-theme-configurator-de_DE.mo
new file mode 100644
index 0000000..8c802f4
Binary files /dev/null and b/wp-content/plugins/child-theme-configurator/lang/child-theme-configurator-de_DE.mo differ
diff --git a/wp-content/plugins/child-theme-configurator/lang/child-theme-configurator-de_DE.po b/wp-content/plugins/child-theme-configurator/lang/child-theme-configurator-de_DE.po
new file mode 100644
index 0000000..9174272
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/lang/child-theme-configurator-de_DE.po
@@ -0,0 +1,1590 @@
+# Copyright (C) 2017 Child Theme Configurator
+# This file is distributed under the same license as the Child Theme Configurator package.
+msgid ""
+msgstr ""
+"Project-Id-Version: Child Theme Configurator 2.2.3\n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/child-theme-configurator\n"
+"POT-Creation-Date: 2017-01-21 08:01+0100\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2017-01-22 08:39+0100\n"
+"Language-Team: \n"
+"X-Generator: Poedit 1.8.11\n"
+"Last-Translator: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Language: de_DE\n"
+
+#: includes/classes/Admin.php:395
+msgid "Zip file creation failed."
+msgstr "ZIP-Dateierstellung fehlgeschlagen."
+
+#: includes/classes/Admin.php:421
+msgid "The Functions file is required and cannot be deleted."
+msgstr "Die Funktionen-Datei wird benötigt und kann nicht entfernt werden."
+
+#: includes/classes/Admin.php:501
+msgid "You do not have permission to configure child themes."
+msgstr "Sie haben nicht die Berechtigung zur Konfiguration von Kindthemen."
+
+#: includes/classes/Admin.php:534
+msgid "%s does not exist. Please select a valid Parent Theme."
+msgstr "%s existiert nicht. Bitte wählen Sie ein gültiges Elternthema."
+
+#: includes/classes/Admin.php:537
+msgid "Please select a valid Parent Theme."
+msgstr "Bitte wählen Sie ein gültiges Elternthema."
+
+#: includes/classes/Admin.php:542
+msgid "Please select a valid Child Theme."
+msgstr "Bitte wählen Sie ein gültiges Kindthema."
+
+#: includes/classes/Admin.php:546
+msgid "Please enter a valid Child Theme directory name."
+msgstr "Bitte geben Sie ein gültiges Kindthema-Verzeichnis ein."
+
+#: includes/classes/Admin.php:551
+msgid ""
+"%s exists. Please enter a different Child Theme template "
+"name."
+msgstr ""
+"%s existiert. Bitte einen anderen Kindthema-Vorlagennamen "
+"eingeben."
+
+#: includes/classes/Admin.php:570
+msgid "Your theme directories are not writable."
+msgstr "Ihr Themen-Verzeichnis ist schreibgeschützt."
+
+#: includes/classes/Admin.php:651
+msgid "Could not upgrade child theme"
+msgstr "Konnte das Kindthema nicht aktualisieren."
+
+#: includes/classes/Admin.php:733
+msgid "Your stylesheet is not writable."
+msgstr "Ihre Formatvorlage kann nicht überschrieben werden."
+
+#: includes/classes/Admin.php:1317
+msgid "Could not set write permissions."
+msgstr "Konnte Schreibberechtigung nicht setzen."
+
+#: includes/classes/Admin.php:1418
+msgid "There were errors while resetting permissions."
+msgstr "Es traten beim Zurücksetzen der Berechtigungen Fehler auf."
+
+#: includes/classes/Admin.php:1492
+msgid "Could not upload file."
+msgstr "Konnte Datei nicht hochladen"
+
+#: includes/classes/Admin.php:1518
+msgid "Invalid theme root directory."
+msgstr "Ungültiges Themen-Hauptverzeichnis."
+
+#: includes/classes/Admin.php:1530
+msgid "No writable temp directory."
+msgstr "Fehler beim Schreiben ins temporäre Verzeichnis."
+
+#: includes/classes/Admin.php:1560
+msgid "PclZip returned zero bytes."
+msgstr "PclZip gab 0 Bytes zurück."
+
+#. Plugin Name of the plugin/theme
+#: includes/classes/Core.php:94 includes/classes/Core.php:105
+#: includes/forms/main.php:35
+msgid "Child Theme Configurator"
+msgstr "Child Theme Configurator"
+
+#: includes/classes/Core.php:95 includes/classes/Core.php:106
+#: includes/classes/Core.php:117
+msgid "Child Themes"
+msgstr "Kindthemen"
+
+#: includes/classes/Core.php:135
+msgid "Child Theme Configurator requires WordPress version %s or later."
+msgstr "Der Child Theme Configurator benötigt Wordpress-Version %s oder neuer."
+
+#: includes/classes/UI.php:35
+msgid "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
+msgstr "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
+
+#: includes/classes/UI.php:98
+msgid ""
+"The Theme editor has been disabled. Template files must be edited offline."
+msgstr ""
+"Der Themeneditor wurde deaktiviert. Formatvorlagen müssen offline bearbeitet "
+"werden."
+
+#: includes/classes/UI.php:102
+msgid "Click here to edit template files using the Theme Editor"
+msgstr ""
+"Hier für die Bearbeitung von Formatvorlagen mit dem Themeneditor klicken."
+
+#: includes/classes/UI.php:269
+msgid "URL/None"
+msgstr "URL/Kein(e)"
+
+#: includes/classes/UI.php:270
+msgid "Origin"
+msgstr "Quelle"
+
+#: includes/classes/UI.php:271
+msgid "Color 1"
+msgstr "Farbe 1"
+
+#: includes/classes/UI.php:272
+msgid "Color 2"
+msgstr "Farbe 2"
+
+#: includes/classes/UI.php:273
+msgid "Width/None"
+msgstr "Breite/Keine"
+
+#: includes/classes/UI.php:274
+msgid "Style"
+msgstr "Stil"
+
+#: includes/classes/UI.php:275
+msgid "Color"
+msgstr "Farbe"
+
+#: includes/classes/UI.php:277
+msgid ""
+"Are you sure you wish to RESET? This will destroy any work you have done in "
+"the Configurator."
+msgstr ""
+"Wollen Sie sicher ZURÜCKSETZEN? Dies wird alle Arbeiten überschreiben, die "
+"Sie in der Konfiguration vorgenommen haben."
+
+#: includes/classes/UI.php:278
+msgid "! "
+msgstr "! "
+
+#: includes/classes/UI.php:279 includes/forms/rule-value.php:33
+msgid "Selectors"
+msgstr "Selektoren"
+
+#: includes/classes/UI.php:280
+msgid "Close"
+msgstr "Schließen"
+
+#: includes/classes/UI.php:281
+msgid "Edit Selector"
+msgstr "Selektor bearbeiten"
+
+#: includes/classes/UI.php:282
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: includes/classes/UI.php:283
+msgid "Rename"
+msgstr "Umbenennen"
+
+#: includes/classes/UI.php:284
+msgid "The stylesheet cannot be displayed."
+msgstr "Die Formatvorlage kann nicht angezeigt werden."
+
+#: includes/classes/UI.php:285
+msgid "(Child Only)"
+msgstr "(Nur Kind)"
+
+#: includes/classes/UI.php:286
+msgid "Please enter a valid Child Theme."
+msgstr "Bitte ein gültiges Kindthema eingeben."
+
+#: includes/classes/UI.php:287
+msgid "Please enter a valid Child Theme name."
+msgstr "Bitte einen gültigen Namen eines Kindthemas eingeben."
+
+#: includes/classes/UI.php:288
+msgid "%s exists. Please enter a different Child Theme"
+msgstr "%s existiert. Bitte anderes Kindthema eingeben"
+
+#: includes/classes/UI.php:289
+msgid "The page could not be loaded correctly."
+msgstr "Die Seite konnte nicht korrekt geladen werden."
+
+#: includes/classes/UI.php:290
+msgid ""
+"Conflicting or out-of-date jQuery libraries were loaded by another plugin:"
+msgstr ""
+"Nicht mehr aktuelle oder in Konflikt stehende jQuery-Bibliotheken von "
+"anderem Plugin geladen:"
+
+#: includes/classes/UI.php:291
+msgid "Deactivating or replacing plugins may resolve this issue."
+msgstr ""
+"Das Deaktivieren oder Ersetzen des Plugins könnte dieses Problem lösen."
+
+#: includes/classes/UI.php:292
+msgid "%sWhy am I seeing this?%s"
+msgstr "%sWieso sehe ich das?%s"
+
+#: includes/classes/UI.php:295
+msgid "No Styles Available. Check Parent/Child settings."
+msgstr "Keine Stile verfügbar. Prüfen Sie die Eltern/Kind-Einstellungen."
+
+#: includes/classes/UI.php:296
+msgid "Updating"
+msgstr "Aktualisiere"
+
+#: includes/classes/UI.php:297
+msgid "Checking"
+msgstr "Überprüfe"
+
+#: includes/classes/UI.php:298
+msgid "The theme \"%s\" generated unexpected PHP debug output."
+msgstr "Das Thema \"%s\" generierte unerwartete PHP-Debug-Ausgaben."
+
+#: includes/classes/UI.php:299
+msgid ""
+"The theme \"%s\" could not be analyzed because the preview did not render "
+"correctly."
+msgstr ""
+"Das Thema \"%s\" konnte nicht untersucht werden, weil die Vorschau nicht "
+"korrekt angezeigt wird."
+
+#: includes/classes/UI.php:300
+msgid ""
+"First, verify you can preview your home page with the "
+"Customizer and try analyzing again.
If that does not work, try "
+"temporarily disabling plugins that minify CSS or that "
+"force redirects between HTTP and HTTPS .
"
+msgstr ""
+"Prüfen Sie zuerst, ob die Voransicht für Ihre Homepage "
+"mit dem Customizer funktioniert und untersuchen Sie erneut.
Wenn "
+"es nicht geht, deaktivieren Sie vorübergehend Plugins, welche CSS "
+"herabsetzen (minify) oder Umleitungen zwischen HTTP und "
+"HTTPS erzwingen .
"
+
+#: includes/classes/UI.php:301
+msgid "Click to show/hide PHP debug output"
+msgstr "Klicken zum Anzeigen/Verbergen der PHP-Debug-Ausgabe"
+
+#: includes/classes/UI.php:302
+msgid ""
+"Please contact this Theme's author and report the items inside the box "
+"above. You may or may not be able to use this Theme as a Child Theme while "
+"these conditions exist.
It is possible that this theme has specific "
+"requirements to work correctly as a child theme. Please make sure you are "
+"using the latest version of this theme and check your theme's documentation "
+"for more information.
"
+msgstr ""
+"Bitte kontaktieren Sie diesen Themenautor und teilen Sie ihm die Elemente "
+"der Box oben mit. Das Thema wird eventuell als Kindthema funktionieren, "
+"solange dieser Zustand anhält.
Möglicherweise hat dieses Thema "
+"besondere Anforderungen, um als Kindthema richtig zu funktionieren. Bitte "
+"stellen Sie sicher, dass Sie die neueste Version des Themen verwenden und "
+"die Dokumentation für weitere Information konsultieren.
"
+
+#: includes/classes/UI.php:303
+msgid "Do Not Activate \"%s\"! A PHP FATAL ERROR has been detected."
+msgstr "Aktivieren Sie nicht \"%s\"! Ein PHP FATAL ERROR wurde entdeckt."
+
+#: includes/classes/UI.php:304
+msgid "This theme loads stylesheets after the wp_styles queue."
+msgstr "Dieses Thema lädt Formatvorlagen nach der wp_styles-Warteschlange."
+
+#: includes/classes/UI.php:305
+msgid ""
+"This makes it difficult for plugins to override these styles. You can try "
+"to resolve this using the \"Repair header template\" option (Step 6, "
+"\"Additional handling options\", below).
"
+msgstr ""
+"Dies macht es schwierig für Plugins, diese Stile zu überschreiben. Sie "
+"können das lösen, indem Sie die \"Repariere Kopfvorlage\"-Option benutzen "
+"(Schritt 6, \"Zusätzliche Handling-Optionen\", unten).
"
+
+#: includes/classes/UI.php:306
+msgid ""
+"This theme loads the parent theme's style.css
file outside the "
+"wp_styles queue."
+msgstr ""
+"Dieses Thema lädt die Elternthema style.css
-Datei außerhalb der "
+"wp_style-Warteschlange."
+
+#: includes/classes/UI.php:307
+msgid ""
+"This is common with older themes but requires the use of @import"
+"code>, which is no longer recommended. You can try to resolve this using the "
+"\"Repair header template\" option (see step 6, \"Additional handling options"
+"\", below).
"
+msgstr ""
+"Dies ist häufig bei älteren Themen, aber benötigt die Benutzung von "
+"@import
, was nicht mehr empfohlen ist. Sie können versuchen es "
+"zu lösen, indem Sie die \"Reparieren Kopfvorlage\"-Option benutzen (Schritt "
+"6, \"Zusätzliche Handling-Optionen\", unten).
"
+
+#: includes/classes/UI.php:308
+msgid "This child theme does not load a Configurator stylesheet."
+msgstr "Dieses Kindthema lädt keine Konfigurator-Formatvorlage."
+
+#: includes/classes/UI.php:309
+msgid ""
+"If you want to customize styles using this plugin, please click "
+"\"Configure Child Theme\" again to add this to the settings.
"
+msgstr ""
+"Wenn Sie Ihre Stile mit diesem Plugin anpassen möchten, klicken Sie bitte "
+"erneut auf \"Kindthema konfigurieren\", um diese Einstellung hinzuzufügen."
+"p>"
+
+#: includes/classes/UI.php:310
+msgid ""
+"This child theme uses the parent stylesheet but does not load the parent "
+"theme's style.css
file."
+msgstr ""
+"Dieses Kindthema nutzt die Eltern-Formatvorlagen, aber lädt nicht die "
+"Elternthema style.css
-Datei."
+
+#: includes/classes/UI.php:311
+msgid ""
+"
Please select a stylesheet handling method or check \"Ignore parent theme "
+"stylesheets\" (see step 6, below).
"
+msgstr ""
+"Bitte wählen Sie eine Formatvorlagen-Handling-Methode aus oder wählen Sie "
+"\"Eltern-Formatvorlagen ignorieren\" (siehe Schritt 6 unten).
"
+
+#: includes/classes/UI.php:312
+msgid "This child theme appears to be functioning correctly."
+msgstr "Dieses Kindthema scheint korrekt zu funktionieren."
+
+#: includes/classes/UI.php:313
+msgid "This theme appears OK to use as a Child theme."
+msgstr "Dieses Thema schient als Kindthema in Ordnung zu sein."
+
+#: includes/classes/UI.php:314
+msgid "This Child Theme has not been configured for this plugin."
+msgstr "Dieses Kindthema wurde nicht für dieses Plugin konfiguriert."
+
+#: includes/classes/UI.php:315
+msgid ""
+"The Configurator makes significant modifications to the child theme, "
+"including stylesheet changes and additional php functions. Please consider "
+"using the DUPLICATE child theme option (see step 1, above) and keeping the "
+"original as a backup.
"
+msgstr ""
+"Der Konfigurator macht signifikante Änderungen am Kindthema, inklusive "
+"Formatvorlagenänderungen und zusätzliche PHP-Funktionen. Bitte ziehen Sie "
+"die Option DUPLICATE Kindthema in Betracht (siehe Schritt 1, oben) und "
+"behalten Sie das Original als Backup.
"
+
+#: includes/classes/UI.php:316
+msgid ""
+"This child theme uses @import
to load the parent theme's "
+"style.css
file."
+msgstr ""
+"Dieses Kindthema nutzt @import
, um die Elternthema style."
+"css
-Datei zu laden."
+
+#: includes/classes/UI.php:317
+msgid ""
+"Please consider selecting \"Use the WordPress style queue\" for the "
+"parent stylesheet handling option (see step 6, below).
"
+msgstr ""
+"Bitte ziehen Sie die Auswahl von \"Wordpress-Style-Queue benutzen\" für "
+"die Elternvorlagen-Handling-Option in Betracht (siehe Schritt 6, unten).
"
+
+#: includes/classes/UI.php:318
+msgid ""
+"This theme loads additional stylesheets after the style.css
"
+"file:"
+msgstr ""
+"Dieses Thema lädt zusätzliche Formatvorlagen nach der style.css
-"
+"Datei."
+
+#: includes/classes/UI.php:319
+msgid ""
+"Consider saving new custom styles to a \"Separate stylesheet\" (see step "
+"5, below) so that you can customize these styles.
"
+msgstr ""
+"Ziehen Sie in Betracht, neue angepasste Stile als \"Separate Formatvorlage"
+"\" zu speichern (siehe Schritt 5, unten), so dass Sie diese Stile anpassen "
+"können.
"
+
+#: includes/classes/UI.php:320
+msgid ""
+"The parent theme's style.css
file is being loaded automatically."
+msgstr "Die Elternthema style.css
-Datei wird automatisch geladen."
+
+#: includes/classes/UI.php:321
+msgid ""
+"The Configurator selected \"Do not add any parent stylesheet handling\" "
+"for the \"Parent stylesheet handling\" option (see step 6, below).
"
+msgstr ""
+"Der Konfigurator hat \"Kein Elternvorlagen-Handling hinzufügen\" für die "
+"\"Elternvorlagen-Handling\"-Option ausgewählt (siehe Schritt 6, unten).
"
+
+#: includes/classes/UI.php:322
+msgid ""
+"This theme does not require the parent theme's style.css
file "
+"for its appearance."
+msgstr ""
+"Dieses Thema benötigt keine Elternthema style.css
-Datei für ihr "
+"Aussehen."
+
+#: includes/classes/UI.php:323
+msgid "This Child Theme was configured with an earlier version."
+msgstr "Dieses Kindthema wurde mit einer früheren Version konfiguriert."
+
+#: includes/classes/UI.php:324
+msgid ""
+"The selected stylesheet handling method is no longer used. Please update "
+"the configuration using the \"Repair header template\" option (see step 6, "
+"\"Additional handling options\", below).
"
+msgstr ""
+"Die gewählte Formatvorlagen-Handlingmethode ist nicht mehr in Gebrauch. "
+"Bitte aktualisieren Sie die Konfiguration mit der \"Reparieren Kopfvorlage\"-"
+"Option (siehe Schritt 6, \"Zusätzliche Handling-Optionen\", unten).
"
+
+#: includes/classes/UI.php:325
+msgid ""
+"Click to show/hide raw analysis data. Please include contents below with any "
+"support requests."
+msgstr ""
+"Klicken zur Anzeige/zum Verbergen von Rohanalyse-Daten. Bitte für alle "
+"Supportanfragen Inhalte unten anfügen."
+
+#: includes/classes/UI.php:326
+msgid ""
+"This child theme was configured using the CTC Pro \"Genesis stylesheet "
+"handling\" method."
+msgstr ""
+"Dieses Kindthema wurde mit der CTC-Pro-Methode \"Genesis Formatvorlagen-"
+"Handling\" konfiguriert."
+
+#: includes/classes/UI.php:327
+msgid ""
+"This method has been replaced by the \"Separate stylesheet\" and \"Ignore "
+"Parent Theme\" options ( selected below ) for broader framework "
+"compatability.
"
+msgstr ""
+"Diese Methode wurde durch \"Separate Formatvorlage\" und \"Elternthema "
+"ignorieren\"-Optionen ersetzt (unten ausgewählt), für eine breitere "
+"Framework-Kompatibilität.
"
+
+#: includes/classes/UI.php:328
+msgid "%1Click Here%2 to view the theme as viewed by the Analyzer.
"
+msgstr "%1Hier klicken%2 um das Thema wie im Analyzer anzuzeigen.
"
+
+#: includes/classes/Upgrade.php:60
+msgid "Enter your Update Key"
+msgstr "Geben Sie den Update-Schlüssel ein"
+
+#: includes/classes/Upgrade.php:61
+msgid ""
+"Sorry, we could not validate your Update Key. Please try again or, if you "
+"need assistance, please %s"
+msgstr ""
+"Wir konnten den Update-Schlüssel nicht verifizieren. Bitte nochmals "
+"probieren, falls Sie Hilfe brauchen, bitte %s"
+
+#: includes/classes/Upgrade.php:61
+msgid "contact us."
+msgstr "uns kontaktieren."
+
+#: includes/classes/Upgrade.php:67
+msgid "Child Theme Configurator Pro version %s"
+msgstr "Child Theme Configurator Pro Version %s"
+
+#: includes/classes/Upgrade.php:67
+msgid ""
+" is not compatible with the installed version of Child Theme Configurator "
+"and has been deactivated."
+msgstr ""
+" ist nicht kompatibel mit der installieren Version von Child Theme "
+"Configurator und wurde deaktiviert."
+
+#: includes/classes/Upgrade.php:69
+msgid ""
+"You can upgrade to the latest version by clicking the button below. After "
+"validating the Update Key from your order, WordPress will retrieve the "
+"plugin from our website and install it automatically. If you no longer wish "
+"to use the premium version, you can dismiss this notice by clicking the "
+"close icon (x) at the top right."
+msgstr ""
+"Sie können zur neuesten Version mit der Schaltfläche unten upgraden. Nach "
+"der Verifizierung des Update-Schlüssels Ihrer Bestellung wird WordPress das "
+"Plugin von unserer Webseite laden und es automatisch installieren. Wenn Sie "
+"die Premium-Version nicht mehr benutzen wollen, können Sie den Hinweis mit "
+"dem Klick auf das (x)-Symbol oben rechts wegklicken."
+
+#: includes/classes/Upgrade.php:70
+msgid "Upgrade Now"
+msgstr "Jetzt Upgraden"
+
+#: includes/classes/Upgrade.php:188
+msgid "Update Plugin"
+msgstr "Plugin Updaten"
+
+#: includes/forms/addl_css.php:7
+msgid "Parse additional stylesheets:"
+msgstr "Zusätzliche Formatvorlagen auslesen"
+
+#: includes/forms/addl_css.php:11
+msgid ""
+"Stylesheets that are currently being loaded by the parent theme are "
+"automatically selected below (except for Bootstrap stylesheets which add a "
+"large amount data to the configuration). To further reduce overhead, select "
+"only the additional stylesheets you wish to customize."
+msgstr ""
+"Formatvorlagen, die zurzeit vom Elternthema geladen werden, sind unten "
+"automatisch ausgewählt (ausgenommen für Bootstrap-Formatvorlagen welche eine "
+"große Datenmenge zur Konfiguration hinzufügen). Um weitere Überlastung zu "
+"vermindern, wählen Sie nur Formatvorlagen, die Sie anpassen wollen."
+
+#: includes/forms/addl_panels.php:9 includes/forms/addl_panels.php:39
+msgid "Use coupon code"
+msgstr "Rabatt-Code anwenden"
+
+#: includes/forms/addl_panels.php:9 includes/forms/addl_panels.php:39
+msgid "wordpress-org"
+msgstr "wordpress-org"
+
+#: includes/forms/addl_panels.php:9 includes/forms/addl_panels.php:39
+msgid "and get 20% off entire order ."
+msgstr "und bekommen Sie 20% auf die ganze Bestellung ."
+
+#: includes/forms/addl_panels.php:10 includes/forms/addl_panels.php:40
+msgid "Order Now"
+msgstr "Jetzt Bestellen"
+
+#: includes/forms/addl_panels.php:10 includes/forms/addl_panels.php:40
+msgid "*Prices and offers subject to change."
+msgstr "*Preise und Angebote können sich jederzeit ändern."
+
+#: includes/forms/addl_panels.php:11 includes/forms/addl_panels.php:12
+msgid "Learn more about IntelliWidget"
+msgstr "Erfahren Sie mehr über IntelliWidget"
+
+#: includes/forms/addl_panels.php:12
+msgid ""
+"IntelliWidget is a versatile widget manager that does the work of multiple "
+"plugins by combining custom page menus, featured posts, sliders and other "
+"dynamic content features into a single plugin that can display on a per-page "
+"or site-wide basis."
+msgstr ""
+"IntelliWidget ist ein ausgefeilter Widget-Manager, der die Arbeit vieler "
+"Plugins erledigt, indem es Seitenmenüs, Beliebte Beiträge (Featured Posts), "
+"Slider und anderen dynamischen Inhalt in ein einzelnes Plugin kombiniert, "
+"welches die Anzeige auf Seiten- oder Webseiten-Basis ermöglicht."
+
+#: includes/forms/addl_panels.php:13 includes/forms/addl_panels.php:16
+msgid "Learn more"
+msgstr "Mehr erfahren"
+
+#: includes/forms/addl_panels.php:14 includes/forms/addl_panels.php:15
+msgid "Learn more about IW Responsive Menu"
+msgstr "Mehr über IW Responsive Menu erfahren"
+
+#: includes/forms/addl_panels.php:15
+msgid ""
+"IntelliWidget Responsive Menu lets you break free from your theme’s built-in "
+"responsive menu options and gives you complete control over the user "
+"experience."
+msgstr ""
+"IntelliWidget Responsive Menu ermöglicht Ihnen das Ausbrechen aus den "
+"starren, eingebauten Thema-Menüoptionen und gibt Ihnen vollständige "
+"Kontrolle über die Nutzererfahrung."
+
+#: includes/forms/addl_panels.php:19
+msgid "Learn more about CTC Pro"
+msgstr "Mehr über CTC Pro erfahren"
+
+#: includes/forms/addl_panels.php:20
+msgid "Customizing WordPress just got even easier."
+msgstr "Es ist jetzt noch einfacher, WordPress anzupassen."
+
+#: includes/forms/addl_panels.php:21
+msgid ""
+"Thousands of users have already seen the benefits of using Child Theme "
+"Configurator. If you spend any amount of time customizing WordPress, CTC Pro "
+"will help maximize your productivity."
+msgstr ""
+"Tausende Benutzer haben schon die Vorteile des Child Theme Configurator "
+"erkannt. Wenn Sie Zeit für die Anpassung von WordPress aufwenden, wird CTC "
+"Pro Ihre Produktivität maximieren."
+
+#: includes/forms/addl_panels.php:22
+msgid "Designed by Developers Who Use It Every Day."
+msgstr "Entworfen von Entwicklern, die es täglich verwenden."
+
+#: includes/forms/addl_panels.php:23
+msgid ""
+"We've packed in more features to make design work quicker and easier with "
+"Child Theme Configurator Pro. "
+msgstr ""
+"Wir haben noch mehr Funktionen hineingepackt, um die Entwurfs-Arbeit noch "
+"schneller und einfacher zu gestalten mit Child Theme Configurator "
+"Pro."
+
+#: includes/forms/addl_panels.php:25
+msgid "Customize Plugin Stylesheets"
+msgstr "Plugin-Formatvorlagen anpassen"
+
+#: includes/forms/addl_panels.php:26
+msgid ""
+"Apply the power of CTC's top-rated interface to your site's plugin styles. "
+"All new design makes it much easier to get the results you want."
+msgstr ""
+"Benutze die Macht der ausgezeichnet bewerteten Schnittstelle von CTC für "
+"deine Plugin-Stile. Alle neuen Designs machen es noch einfacher, die "
+"gewünschten Resultate zu erhalten."
+
+#: includes/forms/addl_panels.php:27
+msgid "Quick Preview"
+msgstr "Schnell-Vorschau"
+
+#: includes/forms/addl_panels.php:27
+msgid "Preview your child theme with a single click."
+msgstr "Voransicht des Kindthemas mit nur einem Klick."
+
+#: includes/forms/addl_panels.php:28
+msgid "Color Palettes"
+msgstr "Farbpaletten"
+
+#: includes/forms/addl_panels.php:28
+msgid ""
+"Keep the colors you select just a click away. No more searching for hex "
+"codes and RGB values."
+msgstr ""
+"Behalten Sie die Farben nur einen Klick entfernt weg. Kein umständliches "
+"Suchen für Hex-Codes und RGB-Werte."
+
+#: includes/forms/addl_panels.php:29
+msgid "Find related styles"
+msgstr "Finde ähnliche Stile"
+
+#: includes/forms/addl_panels.php:29
+msgid ""
+"Use the \"All Styles\" panel to edit groups of selectors from a single "
+"combined list."
+msgstr ""
+"Nutzen Sie das \"Alle Stile\"-Bedienungsfeld, um Gruppen von Selektoren aus "
+"einer einzigen kombinierten Liste zu bearbeiten."
+
+#: includes/forms/addl_panels.php:30
+msgid "Find styles by Nav Menu"
+msgstr "Finde Stile mittels Nav-Menü"
+
+#: includes/forms/addl_panels.php:30
+msgid "Tweak menus quickly and easily."
+msgstr "Passe Menüs schnell und einfach an."
+
+#: includes/forms/addl_panels.php:31
+msgid "Most recent edits"
+msgstr "Letzte Bearbeitungen"
+
+#: includes/forms/addl_panels.php:31
+msgid "Return to recently edited selectors from a toggleable sidebar."
+msgstr ""
+"Kehre zu kürzlich bearbeiteten Selektoren mittels umschaltbarer Seitenleiste "
+"zurück."
+
+#: includes/forms/addl_panels.php:32
+msgid "Add Child Theme Files"
+msgstr "Fügen Sie Kindthemen-Dateien hinzu"
+
+#: includes/forms/addl_panels.php:33
+msgid "Create new template and script files right from the admin."
+msgstr ""
+"Erstellen Sie neue Vorlagen- und Skriptdateien direkt aus der Admin-"
+"Oberfläche."
+
+#: includes/forms/addl_panels.php:34
+msgid "Top-rated Online Support"
+msgstr "Top-bewerteter Online-Support"
+
+#: includes/forms/addl_panels.php:35
+msgid "Online Documentation"
+msgstr "Online-Dokumentation"
+
+#: includes/forms/addl_panels.php:36
+msgid "Tutorial Videos"
+msgstr "Tutorial-Videos"
+
+#: includes/forms/addl_tabs.php:8
+msgid "Upgrade"
+msgstr "Aktualisieren"
+
+#: includes/forms/backup.php:8
+msgid "Backup"
+msgstr "Sicherung"
+
+#: includes/forms/backups.php:10
+msgid "Restore backup from"
+msgstr "Sicherung wiederherstellen vom"
+
+#: includes/forms/current-theme.php:6
+msgid "Currently loaded"
+msgstr "Derzeit geladen"
+
+#: includes/forms/debug-toggle.php:8
+msgid "Debug"
+msgstr "Fehlersuche"
+
+#: includes/forms/file-form-buttons.php:9
+msgid "Make Selected Writable"
+msgstr "Auswahl beschreibbar machen"
+
+#: includes/forms/file-form-buttons.php:13
+msgid "Copy Selected to Child Theme"
+msgstr "Auswahl in das Kindthema kopieren"
+
+#: includes/forms/file-form-buttons.php:13 includes/forms/images.php:21
+msgid "Delete Selected"
+msgstr "Auswahl löschen"
+
+#: includes/forms/fileform.php:9
+msgid "Parent Templates"
+msgstr "Eltern-Vorlagen"
+
+#: includes/forms/fileform.php:9
+msgid "Child Theme Files"
+msgstr "Kindthema-Dateien"
+
+#: includes/forms/fileform.php:14
+msgid ""
+"Copy PHP templates from the parent theme by selecting them here. The "
+"Configurator defines a template as a Theme PHP file having no PHP functions "
+"or classes. Other PHP files cannot be safely overridden by a child theme."
+msgstr ""
+"Kopieren von PHP-Vorlagendateien des Elternthemen, indem Sie diese hier "
+"auswählen. Der Konfigurator definiert eine Vorlage als eine Themen-PHP-Datei "
+"ohne PHP-Funktionen oder -Klassen. Andere PHP-Dateien können von einem "
+"Kindthema nicht sicher überschrieben werden."
+
+#: includes/forms/fileform.php:17
+msgid ""
+"CAUTION: If your child theme is active, the child theme version of the file "
+"will be used instead of the parent immediately after it is copied."
+msgstr ""
+"ACHTUNG: Wenn Ihr Kindthema aktiv ist, wird nach dem Kopiervorgang sofort "
+"die Kindthema-Version der Datei anstatt der Eltern-Datei benutzt."
+
+#: includes/forms/fileform.php:19
+msgid "The %s file is generated separately and cannot be copied here."
+msgstr ""
+"Die %s Datei wird getrennt erstellt und kann nicht hierher kopiert werden."
+
+#: includes/forms/fileform.php:29
+msgid "Delete child theme templates by selecting them here."
+msgstr "Löschen von Kindthema-Vorlagen, indem Sie sie hier auswählen."
+
+#: includes/forms/fileform.php:30
+msgid ""
+"Delete child theme templates or make them writable by selecting them here. "
+"Writable files are displayed in red ."
+msgstr ""
+"Löschen Sie Kindthema-Vorlagen oder setzen Sie sie schreibbar, indem Sie sie "
+"hier auswählen. Schreibbare Dateien sind in red"
+"span> angezeigt."
+
+#: includes/forms/files.php:15
+msgid "Upload New Child Theme Image"
+msgstr "Neues Kindthema-Bild hochladen"
+
+#: includes/forms/files.php:18
+msgid ""
+"Theme images reside under the images
directory in your child "
+"theme and are meant for stylesheet use only. Use the Media Library for "
+"content images."
+msgstr ""
+"Diese Bilder befinden sich unter dem Images
-Verzeichnis in "
+"Ihrem Kindthema-Verzeichnis und sind nur für Formatvorlagen vorgesehen. "
+"Benutzen Sie die Medienbibliothek für Inhaltsbilder."
+
+#: includes/forms/files.php:25 includes/forms/files.php:51
+msgid "Upload"
+msgstr "Hochladen"
+
+#: includes/forms/files.php:32
+msgid "Child Theme Screenshot"
+msgstr "Kindthema Screenshot"
+
+#: includes/forms/files.php:41
+msgid "Upload New Screenshot"
+msgstr "Neuen Screenshot hochladen"
+
+#: includes/forms/files.php:44
+msgid ""
+"The theme screenshot should be a 4:3 ratio (e.g., 880px x 660px) JPG, PNG or "
+"GIF. It will be renamed screenshot
."
+msgstr ""
+"Der Thema-Screenshot sollte ein 4:3-Verhältnis aufweisen (z.Bsp, 880px x "
+"660px) JPG, PNG oder GIF. Es wird in screenshot
umbenannt."
+
+#: includes/forms/files.php:57
+msgid "Export Child Theme as Zip Archive"
+msgstr "Kindthema als ZIP-Archiv exportieren"
+
+#: includes/forms/files.php:58
+msgid ""
+"Click \"Export Zip\" to save a backup of the currently loaded child theme. "
+"You can export any of your themes from the Parent/Child tab."
+msgstr ""
+"Klicken Sie auf \"Export Zip\", um eine Sicherung des aktuellen Kindthemas "
+"zu erstellen. Sie können jedes Thema auf Ihrer Eltern/Kind-Registerkarte "
+"exportieren."
+
+#: includes/forms/files.php:68
+msgid "Secure Child Theme"
+msgstr "Kindthema schützen"
+
+#: includes/forms/files.php:71
+msgid ""
+"Attempt to reset child theme permissions to user ownership and read-only "
+"access."
+msgstr ""
+"Versucht, die Kindthema-Berechtigungen auf Besitz und Lese-Modus-Zugriff "
+"zurückzusetzen."
+
+#: includes/forms/files.php:77
+msgid "Make read-only"
+msgstr "Auf \"Nur Lesen\" setzen"
+
+#: includes/forms/images.php:10
+msgid "Child Theme Images"
+msgstr "Kindthema-Bilder"
+
+#: includes/forms/images.php:13
+msgid "Delete child theme images by selecting them here."
+msgstr "Löschen Sie Kindthema-Bilder, indem Sie sie hier auswählen."
+
+#: includes/forms/main.php:35
+msgid "version"
+msgstr "Version"
+
+#: includes/forms/notices.php:12
+msgid ""
+"The child theme is in read-only mode and Child Theme Configurator cannot "
+"apply changes. Click to see options"
+msgstr ""
+"Das Kindthema ist im Lesemodus und der Child Theme Configurator kann keine "
+"Änderungen anwenden. Klicken Sie für Optionen"
+
+#: includes/forms/notices.php:20
+msgid ""
+"Temporarily set write permissions by clicking the button below. When you "
+"are finished editing, revert to read-only by clicking \"Make read-only\" "
+"under the \"Files\" tab. "
+msgstr ""
+"Vorübergehend Schreibberechtigung setzen, indem Sie die Schaltfläche "
+"unten anklicken. Ist die Bearbeitung beendet, kehren Sie zu \"Auf Nur Lesen "
+"setzen\" zurück (unter der Dateien-Registerkarte. "
+
+#: includes/forms/notices.php:24
+msgid "Make files writable"
+msgstr "Dateien beschreibbar machen"
+
+#: includes/forms/notices.php:27
+msgid ""
+"Add "
+"your FTP/SSH credentials to the WordPress config file . "
+msgstr ""
+"Hinzufügen von FTP/SSH-Berechtigungen zur Wordpress-Konfigurationsdatei"
+"a>. "
+
+#: includes/forms/notices.php:29
+msgid ""
+"Assign WordPress to "
+"an application pool that has write permissions (Windows IIS systems)."
+"li>"
+msgstr ""
+"WordPress zu einem "
+"Applikations-Pool mit Schreibberechtigung zuweisen (Windows IIS-Systeme)."
+" "
+
+#: includes/forms/notices.php:30
+msgid ""
+"Set write "
+"permissions on the server manually (not recommended). "
+msgstr ""
+"Auf einem "
+"Server Schreibberechtigung manuell setzen (nicht empfohlen). "
+
+#: includes/forms/notices.php:32
+msgid "Run PHP under Apache with suEXEC (contact your web host). "
+msgstr ""
+"PHP unter Apache mit suEXEC ausführen (bitte Webprovider kontaktieren)."
+"li>"
+
+#: includes/forms/notices.php:45
+msgid ""
+"This Child Theme has incorrect ownership permissions. Child Theme "
+"Configurator will attempt to correct this when you click the button below."
+msgstr ""
+"Dieses Kindthema hat ungültige Besitzerberechtigungen. Child Theme "
+"Configurator kann mit dem Klicken auf die Schaltfläche unten versuchen, dies "
+"zu beheben."
+
+#: includes/forms/notices.php:51
+msgid "Correct Child Theme Permissions"
+msgstr "Kindthema-Berechtigungen korrigieren"
+
+#: includes/forms/notices.php:60
+msgid ""
+"Child Theme Configurator needs to update its internal data. Please set your "
+"preferences below and click \"Generate Child Theme Files\" to update your "
+"configuration."
+msgstr ""
+"Child Theme Configurator muss seine internen Daten aktualisieren. Bitte "
+"setzen Sie unten Ihre Voreinstellungen und klicken Sie auf \"Erzeugen "
+"Kindthema-Dateien\", um Ihre Konfiguration zu aktualisieren."
+
+#: includes/forms/notices.php:68
+msgid ""
+"However, some styles could not be parsed due to memory limits."
+"strong> Try deselecting \"Additional Stylesheets\" below and click "
+"\"Generate/Rebuild Child Theme Files\". %sWhy am I seeing this?%s"
+msgstr ""
+"Allerdings konnten einige Stile wegen Speicherlimiten nicht "
+"ausgelesen werden Versuchen Sie es mit der Deaktivierung von "
+"\"Zusätzliche Formatvorlagen\" unten und klicken Sie auf \"Erstellen/"
+"Neuaufbau Kindthema-Dateien\". %sWieso sehe ich das?%s"
+
+#: includes/forms/notices.php:76
+msgid ""
+"Child Theme Configurator did not detect any configuration data because a "
+"previously configured Child Theme has been removed. Please follow the steps "
+"for \"CONFIGURE an existing Child Theme\" under the \"Parent/Child\" Tab."
+msgstr ""
+"Child Theme Configurator entdeckte keine Konfigurationsdaten, weil ein "
+"vorher konfiguriertes Kindthema entfernt wurde. Bitte befolgen Sie die "
+"Schritte für \"Bestehendes Kindthema KONFIGURIEREN\" unter der \"Eltern-Kind"
+"\"-Registerkarte."
+
+#: includes/forms/notices.php:84
+msgid ""
+"Your stylesheet has changed since the last time you used the Configurator. "
+"Please follow the steps for \"CONFIGURE an existing Child Theme\" under the "
+"\"Parent/Child\" Tab or you will lose these changes."
+msgstr ""
+"Ihre Formatvorlage hat sich seit der letzten Benutzung des Konfigurators "
+"geändert. Bitte befolgen Sie die Schritte für \"Bestehendes Kindthema "
+"KONFIGURIEREN\" unter der \"Eltern-Kind\"-Registerkarte, oder Sie werden die "
+"Änderungen verlieren."
+
+#: includes/forms/notices.php:97
+msgid "Thank you for installing Child Theme Configurator."
+msgstr "Danke für die Installation des Child Theme Configurators."
+
+#: includes/forms/notices.php:100
+msgid ""
+"A lot of time and testing has gone into this release but there may be edge "
+"cases. If you have any questions, please"
+msgstr ""
+"Viel Zeit und Testaufwand wurde in diese Version gesteckt, aber es kann auch "
+"Grenzfälle geben. Wenn Sie Fragen haben, bitte"
+
+#: includes/forms/notices.php:102
+msgid "Contact Us."
+msgstr "Kontaktieren Sie uns."
+
+#: includes/forms/notices.php:105
+msgid "For more information, please open the Help tab at the top right or "
+msgstr ""
+"Für weitere Informationen öffnen Sie bitte die Hilfe-Registerkarte oben "
+"rechts oder "
+
+#: includes/forms/notices.php:107
+msgid "click here to view the latest videos."
+msgstr "klicken Sie hier, um die neuesten Videos zu sehen."
+
+#: includes/forms/notices.php:111
+msgid ""
+"It is a good idea to save a Zip Archive of your Child Theme before using CTC "
+"for the first time. Click the \"save backup\" link ( see Step 2, below ) to "
+"export your themes."
+msgstr ""
+"Es ist eine gute Idee, ein ZIP-Archiv Ihres Kindthemas zu sichern, bevor Sie "
+"CTC das erste Mal benutzen. Klicken Sie auf die \"Backup sichern\"-"
+"Verknüpfung (siehe Schritt 2, unten), um die Themen zu exportieren."
+
+#: includes/forms/parent-child.php:22
+msgid "Select an action:"
+msgstr "Aktion auswählen:"
+
+#: includes/forms/parent-child.php:30
+msgid "CREATE a new Child Theme"
+msgstr "Neues Kindthema ERSTELLEN"
+
+#: includes/forms/parent-child.php:33
+msgid ""
+"Install a new customizable child theme using an installed theme as a parent."
+msgstr ""
+"Ein neues anpassbares Kindthema installieren mit Hilfe eines installierten "
+"Themas als Eltern."
+
+#: includes/forms/parent-child.php:46
+msgid "CONFIGURE an existing Child Theme"
+msgstr "Bestehendes Kindthema KONFIGURIEREN"
+
+#: includes/forms/parent-child.php:49
+msgid ""
+"Set up a previously installed child theme for use with the Configurator or "
+"to modify current settings."
+msgstr ""
+"Ein vorher installiertes Kindthema für den Gebrauch mit dem Konfigurator "
+"aufsetzen oder um Einstellungen zu ändern."
+
+#: includes/forms/parent-child.php:60
+msgid "DUPLICATE an existing Child Theme"
+msgstr "Bestehendes Kindthema DUPLIZIEREN"
+
+#: includes/forms/parent-child.php:63
+msgid ""
+"Make a complete copy of an existing Child Theme in a new directory, "
+"including any menus, widgets and other Customizer settings. The option to "
+"copy the Parent Theme settings (step 8, below) is disabled with this action."
+msgstr ""
+"Eine komplette Kopie eines bestehenden Kindthemas in einem neuen Ordner "
+"erstellen, inkl. aller Menüs, Widgets und anderer Customizer-Einstellungen. "
+"Die Option zum Kopieren der Elternthema-Einstellungen (Schritt 8, unten) ist "
+"bei dieser Aktion deaktiviert."
+
+#: includes/forms/parent-child.php:74
+msgid ""
+"RESET an existing Child Theme (this will destroy any work you have done in "
+"the Configurator)"
+msgstr ""
+"Ein bestehendes Kindthema ZURÜCKSETZEN (wird alle gemachten Arbeiten im "
+"Konfigurator zerstören)"
+
+#: includes/forms/parent-child.php:77
+msgid ""
+"Revert the Child theme stylesheet and functions files to their state before "
+"the initial configuration or last reset. Additional child theme files will "
+"not be removed, but you can delete them under the Files tab."
+msgstr ""
+"Setzt die Kindthema-Vorlagen und -Funktionen auf ihren Anfangszustand oder "
+"letzte Zurücksetzung zurück. Zusätzliche Kindthemen-Dateien werden nicht "
+"entfernt, aber Sie können diese unter der Dateien-Registerkarte löschen."
+
+#: includes/forms/parent-child.php:88
+msgid "Select a Parent Theme:"
+msgstr "Elternthema auswählen:"
+
+#: includes/forms/parent-child.php:92 includes/forms/parent-child.php:120
+msgid "Click here to save a backup of the selected theme."
+msgstr "Hier klicken, um eine Sicherung des gewählten Themas zu erstellen."
+
+#: includes/forms/parent-child.php:98 includes/forms/parent-child.php:126
+msgid "Analyze"
+msgstr "Untersuchen"
+
+#: includes/forms/parent-child.php:102
+msgid "Analyze Parent Theme"
+msgstr "Elternthema untersuchen"
+
+#: includes/forms/parent-child.php:105 includes/forms/parent-child.php:133
+msgid ""
+"Click \"Analyze\" to determine stylesheet dependencies and other potential "
+"issues."
+msgstr ""
+"Klicken Sie auf \"Untersuchen\", um Formatvorlagen-Abhängigkeiten und andere "
+"mögliche Probleme zu finden."
+
+#: includes/forms/parent-child.php:116
+msgid "Select a Child Theme:"
+msgstr "Kindthema auswählen:"
+
+#: includes/forms/parent-child.php:130
+msgid "Analyze Child Theme"
+msgstr "Kindthema untersuchen"
+
+#: includes/forms/parent-child.php:145
+msgid "Name the new theme directory:"
+msgstr "Neuen Ordner benennen:"
+
+#: includes/forms/parent-child.php:149
+msgid "Directory Name"
+msgstr "Ordnername"
+
+#: includes/forms/parent-child.php:153 includes/forms/parent-child.php:402
+msgid "NOTE:"
+msgstr "HINWEIS:"
+
+#: includes/forms/parent-child.php:155
+msgid ""
+"This is NOT the name of the Child Theme. You can customize the name, "
+"description, etc. in step 7, below."
+msgstr ""
+"Das ist NICHT der Name des Kindthemas. Sie können den Namen, Beschreibung "
+"etc. in Schritt 7 unten anpassen."
+
+#: includes/forms/parent-child.php:162
+msgid "Verify Child Theme directory:"
+msgstr "Kindthemen-Ordner überprüfen:"
+
+#: includes/forms/parent-child.php:172
+msgid ""
+"For verification only (you cannot modify the directory of an existing Child "
+"Theme)."
+msgstr ""
+"Nur für die Überprüfung (Sie können den Ordner eines bestehenden Kindthemas "
+"nicht ändern)."
+
+#: includes/forms/parent-child.php:185
+msgid "Select where to save new styles:"
+msgstr "Auswählen, wo neue Stile gespeichert werden:"
+
+#: includes/forms/parent-child.php:194
+msgid "Primary Stylesheet (style.css)"
+msgstr "Primäre Formatvorlage (style.css)"
+
+#: includes/forms/parent-child.php:197
+msgid ""
+"Save new custom styles directly to the Child Theme primary stylesheet, "
+"replacing the existing values. The primary stylesheet will load in the order "
+"set by the theme."
+msgstr ""
+"Sichern von neuen Formatvorlagenstilen direkt in die Formatvorlage des "
+"Kindthemas (ersetzt vorhandene Werte). Die primäre Formatvorlage wird in der "
+"vom Thema gesetzten Reihenfolge geladen."
+
+#: includes/forms/parent-child.php:209
+msgid "Separate Stylesheet"
+msgstr "Separate Formatvorlage"
+
+#: includes/forms/parent-child.php:212
+msgid ""
+"Save new custom styles to a separate stylesheet and combine any existing "
+"child theme styles with the parent to form baseline. Select this option if "
+"you want to preserve the existing child theme styles instead of overwriting "
+"them. This option also allows you to customize stylesheets that load after "
+"the primary stylesheet."
+msgstr ""
+"Sichern von neuen Formatvorlagenstilen in eine separate Formatvorlage und "
+"Kombinieren von bestehenden Kind- und Elternthemavorlagen zu einer Basis. "
+"Diese Option wählen, wenn Sie bestehende Kindthemastile behalten wollen, "
+"anstatt sie zu überschreiben. Diese Option erlaubt auch die Anpassung von "
+"Formatvorlagen nach dem Laden der primären Vorlage."
+
+#: includes/forms/parent-child.php:220
+msgid "Click to expand"
+msgstr "Zum Erweitern klicken"
+
+#: includes/forms/parent-child.php:222
+msgid "Select Parent Theme stylesheet handling:"
+msgstr "Elternthema-Formatvorlagen-Handling auswählen:"
+
+#: includes/forms/parent-child.php:236
+msgid "Use the WordPress style queue."
+msgstr "Die WordPress Stil-Warteschlange benutzen."
+
+#: includes/forms/parent-child.php:242
+msgid ""
+"Let the Configurator determine the appropriate actions and dependencies and "
+"update the functions file automatically."
+msgstr ""
+"Den Konfigurator die richtigen Aktionen und Abhängigkeiten finden lassen und "
+"die Funktionendatei automatisch aktualisieren."
+
+#: includes/forms/parent-child.php:248
+msgid "Use @import
in the child theme stylesheet."
+msgstr "Benutzung von @import
in Kindthema-Vorlage."
+
+#: includes/forms/parent-child.php:254
+msgid ""
+"Only use this option if the parent stylesheet cannot be loaded using the "
+"WordPress style queue. Using @import
is not recommended."
+msgstr ""
+"Diese Option nur benutzen, wenn die Eltern-Formatvorlage mit der Wordpress "
+"Stil-Warteschlange nicht geladen werden kann. Das Benutzen von "
+"@import
ist nicht empfohlen."
+
+#: includes/forms/parent-child.php:260
+msgid "Do not add any parent stylesheet handling."
+msgstr "Kein Elternthema-Formatvorlagen-Handling hinzufügen."
+
+#: includes/forms/parent-child.php:263
+msgid ""
+"Select this option if this theme already handles the parent theme stylesheet "
+"or if the parent theme's style.css
file is not used for its "
+"appearance."
+msgstr ""
+"Diese Option auswählen, wenn das Thema die Elternthema-Vorlage bereits "
+"behandelt oder wenn die Elternthema style.css
-Datei nicht für "
+"die Darstellung benutzt wird."
+
+#: includes/forms/parent-child.php:270
+msgid "Advanced handling options"
+msgstr "Erweiterte Handling-Optionen"
+
+#: includes/forms/parent-child.php:277
+msgid "Ignore parent theme stylesheets."
+msgstr "Elternthema-Vorlagen ignorieren."
+
+#: includes/forms/parent-child.php:278
+msgid ""
+"Do not load or parse the parent theme styles. Only use this option if the "
+"Child Theme uses a Framework like Genesis and only uses child theme "
+"stylesheets for its appearance."
+msgstr ""
+"Elternthema-Stile nicht laden oder auslesen. Diese Option nur benutzen, wenn "
+"das Kindthema ein Framework wie Genesis nutzt und nur die Kindthema-"
+"Formatvorlagen für die Darstellung verwendet."
+
+#: includes/forms/parent-child.php:288
+msgid "Repair the header template in the child theme."
+msgstr "Die Kopfvorlage im Kindthema reparieren."
+
+#: includes/forms/parent-child.php:289
+msgid ""
+"Let the Configurator (try to) resolve any stylesheet issues listed above. "
+"This can fix many, but not all, common problems."
+msgstr ""
+"Den Konfigurator oben erwähnteVorlagenprobleme versuchen lösen zu lassen. "
+"Das kann viele gängige, aber nicht alle Probleme beheben"
+
+#: includes/forms/parent-child.php:299
+msgid "Remove stylesheet dependencies"
+msgstr "Vorlagen-Abhängigkeiten entfernen"
+
+#: includes/forms/parent-child.php:302
+msgid ""
+"By default, the order of stylesheets that load prior to the primary "
+"stylesheet is preserved by treating them as dependencies. In some cases, "
+"stylesheets are detected in the preview that are not used site-wide. If "
+"necessary, dependency can be removed for specific stylesheets below."
+msgstr ""
+"Normalerweise wird die Reihenfolge der Vorlagen, die vor der primären "
+"Formatvorlage laden, behalten, indem sie als Abhängigkeiten behandelt "
+"werden. In einigen Fällen werden Vorlagen in der Voransicht erkannt, welche "
+"nicht seitenweit verwendet werden. Falls nötig kann die Abhängigkeit für "
+"bestimmte Vorlagen unten entfernt werden."
+
+#: includes/forms/parent-child.php:312
+msgid "Customize the Child Theme Name, Description, Author, Version, etc.:"
+msgstr "Kindthema-Name, Beschreibung, Autor, Version usw. anpassen:"
+
+#: includes/forms/parent-child.php:316
+msgid "Show/Hide Child Theme Attributes"
+msgstr "Zeigen/Verbergen von Kindthema-Attributen"
+
+#: includes/forms/parent-child.php:316
+msgid "Click to toggle form"
+msgstr "Klicken, um Formular umzuschalten"
+
+#: includes/forms/parent-child.php:321
+msgid "Child Theme Name"
+msgstr "Kindthema-Name"
+
+#: includes/forms/parent-child.php:325
+msgid "Theme Name"
+msgstr "Themen-Name"
+
+#: includes/forms/parent-child.php:331 includes/forms/parent-child.php:335
+msgid "Theme Website"
+msgstr "Themen-Webseite"
+
+#: includes/forms/parent-child.php:341 includes/forms/parent-child.php:345
+msgid "Author"
+msgstr "Autor"
+
+#: includes/forms/parent-child.php:351 includes/forms/parent-child.php:355
+msgid "Author Website"
+msgstr "Autoren-Webseite"
+
+#: includes/forms/parent-child.php:361
+msgid "Theme Description"
+msgstr "Themen-Beschreibung"
+
+#: includes/forms/parent-child.php:365
+msgid "Description"
+msgstr "Beschreibung"
+
+#: includes/forms/parent-child.php:371
+msgid "Theme Tags"
+msgstr "Themen-Schlagwörter"
+
+#: includes/forms/parent-child.php:375
+msgid "Tags"
+msgstr "Schlagwörter"
+
+#: includes/forms/parent-child.php:381 includes/forms/parent-child.php:385
+msgid "Version"
+msgstr "Version"
+
+#: includes/forms/parent-child.php:394
+msgid ""
+"Copy Menus, Widgets and other Customizer Settings from the Parent Theme to "
+"the Child Theme:"
+msgstr ""
+"Menüs, Widgets und andere Customizer-Einstellungen vom Eltern- zum Kindthema "
+"kopieren:"
+
+#: includes/forms/parent-child.php:404
+msgid ""
+"This option replaces the Child Theme's existing Menus, Widgets and other "
+"Customizer Settings with those from the Parent Theme. You should only need "
+"to use this option the first time you configure a Child Theme."
+msgstr ""
+"Diese Option ersetzt die bestehenden Menüs, Widgets und andere Customizer-"
+"Einstellungen im Kindthema mit denen des Elternthemas. Sie sollten diese "
+"Option nur bei der Erstkonfiguration des Kindthemas verwenden."
+
+#: includes/forms/parent-child.php:415 includes/forms/parent-child.php:467
+msgid "Click to run the Configurator:"
+msgstr "Klicken, um den Konfiguration zu starten:"
+
+#: includes/forms/parent-child.php:419
+msgid "Configure Child Theme"
+msgstr "Kindthema konfigurieren"
+
+#: includes/forms/parent-child.php:441
+msgid "Parse Plugin stylesheets:"
+msgstr "Plugin-Formatvorlagen auslesen:"
+
+#: includes/forms/parent-child.php:446
+msgid "Select the plugin stylesheets you wish to customize below."
+msgstr "Wählen Sie unten die Plugin-Formatvorlagen, die Sie anpassen möchten."
+
+#: includes/forms/parent-child.php:471
+msgid "Configure Plugin Styles"
+msgstr "Plugin-Stile konfigurieren"
+
+#: includes/forms/query-selector.php:9
+msgid ""
+"To find and edit specific selectors within @media query blocks, first choose "
+"the query, then the selector. Use the \"base\" query to edit all other "
+"selectors."
+msgstr ""
+"Um bestimmte Selektoren in @media-Abfrageblöcken zu finden und zu "
+"bearbeiten, wählen Sie zuerst die Abfrage, dann den Selektor. Benutzen Sie "
+"die \"base\"-Abfrage, um alle andere Selektoren zu bearbeiten."
+
+#: includes/forms/query-selector.php:14
+msgid "@media Query"
+msgstr "@media Query"
+
+#: includes/forms/query-selector.php:15
+msgid "( or \"base\" )"
+msgstr "( oder \"base\" )"
+
+#: includes/forms/query-selector.php:25
+msgid "Selector"
+msgstr "Selektor"
+
+#: includes/forms/query-selector.php:38 includes/forms/rule-value.php:30
+msgid "Sample"
+msgstr "Muster"
+
+#: includes/forms/query-selector.php:46
+msgid "Save Child Values"
+msgstr "Kindwerte speichern"
+
+#: includes/forms/query-selector.php:47
+msgid "Delete Child Values"
+msgstr "Kindwerte löschen"
+
+#: includes/forms/query-selector.php:54 includes/forms/rule-value.php:14
+msgid "Property"
+msgstr "Eigenschaft"
+
+#: includes/forms/query-selector.php:57
+msgid "Baseline Value"
+msgstr "Basiswert"
+
+#: includes/forms/query-selector.php:60
+msgid "Child Value"
+msgstr "Kindwert"
+
+#: includes/forms/query-selector.php:66
+msgid "New Property"
+msgstr "Neue Eigenschaft"
+
+#: includes/forms/query-selector.php:76
+msgid "Order"
+msgstr "Reihenfolge"
+
+#: includes/forms/query-selector.php:85
+msgid "Copy Selector"
+msgstr "Selektor kopieren"
+
+#: includes/forms/query-selector.php:87 includes/forms/webfonts.php:15
+msgid "Save"
+msgstr "Speichern"
+
+#: includes/forms/query-selector.php:90
+msgid "Raw CSS"
+msgstr "Rohes CSS"
+
+#: includes/forms/query-selector.php:92
+msgid "Use to enter shorthand CSS or new @media queries and selectors."
+msgstr ""
+"Benutzen, um Shorthand-CSS oder neue @media-Queries und Selektoren "
+"einzugeben."
+
+#: includes/forms/query-selector.php:92
+msgid ""
+"Values entered here are merged into existing child styles or added to the "
+"child stylesheet if they do not exist in the parent."
+msgstr ""
+"Hier eingegebene Werte werden in bestehende Kind-Stile eingefügt oder "
+"hinzugefügt, falls sie im Eltern-Stil nicht bestehen sollten."
+
+#: includes/forms/related.php:1
+msgid "New user?"
+msgstr "Neuer Benutzer?"
+
+#: includes/forms/related.php:1
+msgid "Click help"
+msgstr "Klicken Sie auf Hilfe"
+
+#: includes/forms/related.php:1
+msgid "Get CTC Pro and other tools"
+msgstr "CTC Pro und andere Tools erhalten"
+
+#: includes/forms/related.php:1
+msgid "Lilaea Media - Responsive Tools for a Mobile World"
+msgstr "Lilaea Media - Responsive Tools für eine Mobile Welt"
+
+#: includes/forms/rule-value.php:9
+msgid ""
+"To find and edit selectors containing specific values for a given property, "
+"first choose the property (e.g., \"color\"), then click \"Selectors\" for "
+"any resulting value. A dialog panel will open with the corresponding "
+"selectors, grouped by media query."
+msgstr ""
+"Um Selektoren mit bestimmten Werten für eine Eigenschaft zu finden und zu "
+"bearbeiten, wählen Sie zuerst die Eigenschaft (z.Bsp. \"Farbe\") und klicken "
+"Sie dann \"Selektoren\" für resultierende Werte. Ein Dialogfeld wird mit den "
+"entsprechenden Selektoren erscheinen, gruppiert nach Media-Abfragen."
+
+#: includes/forms/rule-value.php:27
+msgid "Value"
+msgstr "Wert"
+
+#: includes/forms/settings-errors.php:20
+msgid ""
+"Child Theme %s has been reset. Please configure it using "
+"the settings below."
+msgstr ""
+"Kindthema %s wurde zurückgesetzt. Bitte mit den "
+"Einstellungen unten konfigurieren."
+
+#: includes/forms/settings-errors.php:24
+msgid "Update Key saved successfully."
+msgstr "Update-Schlüssel erfolgreich gespeichert."
+
+#: includes/forms/settings-errors.php:29
+msgid "Child Theme files modified successfully."
+msgstr "Kindthema-Dateien erfolgreich geändert."
+
+#: includes/forms/settings-errors.php:32
+msgid "Child Theme %s has been generated successfully."
+msgstr "Kindthema %s wurde erfolgreich erstellt."
+
+#: includes/forms/settings-errors.php:36
+msgid "IMPORTANT:"
+msgstr "WICHTIG:"
+
+#: includes/forms/settings-errors.php:39
+msgid "You must %sNetwork enable%s your child theme."
+msgstr "Sie müssen Ihr Kindthema %sNetzwerk-aktivieren%s."
+
+#: includes/forms/settings-errors.php:42 includes/forms/themepreview.php:20
+msgid "Go to Themes"
+msgstr "Zu Themen gehen"
+
+#: includes/forms/settings-errors.php:46
+msgid "%sPreview your child theme%s before activating."
+msgstr "%sPrüfen Sie Ihr Kindthema in der Voransicht% vor der Aktivierung."
+
+#: includes/forms/settings-errors.php:49 includes/forms/themepreview.php:18
+msgid "Live Preview"
+msgstr "Live-Vorschau"
+
+#: includes/forms/tabs.php:11
+msgid "Parent/ Child"
+msgstr "Eltern/Kind"
+
+#: includes/forms/tabs.php:14
+msgid "Query/ Selector"
+msgstr "Abfrage/Selektor"
+
+#: includes/forms/tabs.php:17
+msgid "Property/ Value"
+msgstr "Eigenschaft/Wert"
+
+#: includes/forms/tabs.php:22
+msgid "Web Fonts"
+msgstr "Webschriftarten"
+
+#: includes/forms/tabs.php:26
+msgid "Baseline Styles"
+msgstr "Basis-Stile"
+
+#: includes/forms/tabs.php:29
+msgid "Child Styles"
+msgstr "Kind-Stile"
+
+#: includes/forms/tabs.php:33
+msgid "Files"
+msgstr "Dateien"
+
+#: includes/forms/themepreview.php:12
+msgid "Version: "
+msgstr "Version: "
+
+#: includes/forms/themepreview.php:14
+msgid "By: "
+msgstr "Von:"
+
+#: includes/forms/themepreview.php:16
+msgid "Preview"
+msgstr "Vorschau"
+
+#: includes/forms/themepreview.php:17
+msgid " in default Site"
+msgstr " in Standard-Seite"
+
+#: includes/forms/themepreview.php:21
+msgid "Not Network Enabled"
+msgstr "Nicht Netzwerk-aktiviert"
+
+#: includes/forms/webfonts.php:18
+msgid "Linked Stylesheets"
+msgstr "Verknüpfte Formatvorlagen"
+
+#: includes/forms/webfonts.php:20
+msgid ""
+"Use @import url( [path] );
to link additional stylesheets. "
+"Child Theme Configurator uses the @import
keyword to identify "
+"them and convert them to <link>
tags. Example:"
+"strong>"
+msgstr ""
+"Benutze @import url( [path] );
, um zusätzliche Formatvorlagen "
+"zu verknüpfen. CTC benutzt das @import
Schlüsselwort, um sie zu "
+"identifizieren und sie in <link>
Tags zu konvertieren. "
+"Beispiel: "
+
+#: includes/forms/zipform.php:6
+msgid "Export Child Theme"
+msgstr "Kindthema exportieren"
+
+#. Plugin URI of the plugin/theme
+msgid "http://www.childthemeconfigurator.com"
+msgstr "http://www.childthemeconfigurator.com"
+
+#. Description of the plugin/theme
+msgid ""
+"When using the Customizer is not enough - Create child themes and customize "
+"styles, templates, functions and more."
+msgstr ""
+"Wenn der Customizer nicht genug sein sollte - Erzeugen Sie Kindthemen und "
+"passen Sie Stile, Vorlagen, Funktionen und mehr an."
+
+#. Author of the plugin/theme
+msgid "Lilaea Media"
+msgstr "Lilaea Media"
+
+#. Author URI of the plugin/theme
+msgid "http://www.lilaeamedia.com"
+msgstr "http://www.lilaeamedia.com"
diff --git a/wp-content/plugins/child-theme-configurator/lang/child-theme-configurator-fr_FR.mo b/wp-content/plugins/child-theme-configurator/lang/child-theme-configurator-fr_FR.mo
new file mode 100644
index 0000000..dfb3ac5
Binary files /dev/null and b/wp-content/plugins/child-theme-configurator/lang/child-theme-configurator-fr_FR.mo differ
diff --git a/wp-content/plugins/child-theme-configurator/lang/child-theme-configurator-fr_FR.po b/wp-content/plugins/child-theme-configurator/lang/child-theme-configurator-fr_FR.po
new file mode 100644
index 0000000..a40652b
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/lang/child-theme-configurator-fr_FR.po
@@ -0,0 +1,1149 @@
+# Translation of Plugins - Child Theme Configurator - Stable (latest release) in French (France)
+# This file is distributed under the same license as the Plugins - Child Theme Configurator - Stable (latest release) package.
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2017-05-05 09:58:25+0000\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: GlotPress/2.4.0-alpha\n"
+"Language: fr\n"
+"Project-Id-Version: Plugins - Child Theme Configurator - Stable (latest release)\n"
+
+#: includes/forms/parent-child.php:313
+msgid "Show/Hide Child Theme Attributes"
+msgstr "Afficher / masquer les attributs du thème enfant"
+
+#: includes/forms/parent-child.php:299
+msgid "By default, the order of stylesheets that load prior to the primary stylesheet is preserved by treating them as dependencies. In some cases, stylesheets are detected in the preview that are not used site-wide. If necessary, dependency can be removed for specific stylesheets below."
+msgstr "Par défaut, l’ordre des feuilles de style qui se chargent avant la feuille de style primaire est conservé en les traitant comme des dépendances. Dans certains cas, les feuilles de style sont détectées dans l’aperçu qui ne sont pas utilisés dans l’ensemble du site. Si nécessaire, la dépendance peut être supprimée pour les feuilles de style spécifiques ci-dessous."
+
+#: includes/forms/parent-child.php:296
+msgid "Remove stylesheet dependencies"
+msgstr "Supprimez les dépendances de la feuille de style"
+
+#: includes/forms/parent-child.php:267
+msgid "Advanced handling options"
+msgstr "Options de handling avancées"
+
+#: includes/classes/Upgrade.php:188
+msgid "Update Plugin"
+msgstr "Mettre à jour l’extension"
+
+#: includes/classes/Upgrade.php:70
+msgid "Upgrade Now"
+msgstr "Mettre à jour maintenant"
+
+#: includes/classes/Upgrade.php:69
+msgid "You can upgrade to the latest version by clicking the button below. After validating the Update Key from your order, WordPress will retrieve the plugin from our website and install it automatically. If you no longer wish to use the premium version, you can dismiss this notice by clicking the close icon (x) at the top right."
+msgstr "Vous pouvez passer à la dernière version en cliquant sur le bouton ci-dessous. Après avoir validé la clé de mise à jour de votre commande, WordPress va récupérer l’extension depuis notre site et l’installer automatiquement. Si vous ne souhaitez plus utiliser la version premium, vous pouvez rejeter cet avis en cliquant sur l’icône de fermeture (x) en haut à droite."
+
+#: includes/classes/Upgrade.php:67
+msgid " is not compatible with the installed version of Child Theme Configurator and has been deactivated."
+msgstr " n’est pas compatible avec la version installée de Child Theme Configurator et a été désactivé."
+
+#: includes/classes/Upgrade.php:67
+msgid "Child Theme Configurator Pro version %s"
+msgstr "Child Theme Configurator Pro version %s"
+
+#: includes/classes/Upgrade.php:61
+msgid "contact us."
+msgstr "nous contacter."
+
+#: includes/classes/Upgrade.php:61
+msgid "Sorry, we could not validate your Update Key. Please try again or, if you need assistance, please %s"
+msgstr "Désolé, nous ne pouvons pas valider votre clé de mise à jour. Veuillez réessayer ou, si vous avez besoin d’assistance, veuillez %s"
+
+#: includes/classes/Upgrade.php:60
+msgid "Enter your Update Key"
+msgstr "Entrez votre clé de mise à jour"
+
+#: includes/forms/zipform.php:6
+msgid "Export Child Theme"
+msgstr "Exporter le thème enfants"
+
+#: includes/forms/settings-errors.php:46
+msgid "%sPreview your child theme%s before activating."
+msgstr "%sPrévisualisez votre thème enfant%s avant de l’activer."
+
+#: includes/forms/settings-errors.php:39
+msgid "You must %sNetwork enable%s your child theme."
+msgstr "Vous devez %sRéseau activer%s votre thème enfant."
+
+#: includes/forms/settings-errors.php:24
+msgid "Update Key saved successfully."
+msgstr "La clé de mise à jour a été enregistrée avec succès."
+
+#: includes/forms/rule-value.php:9
+msgid "To find and edit selectors containing specific values for a given property, first choose the property (e.g., \"color\"), then click \"Selectors\" for any resulting value. A dialog panel will open with the corresponding selectors, grouped by media query."
+msgstr "Pour trouver et modifier des sélecteurs contenant des valeurs spécifiques pour une propriété donnée, choisissez d'abord la propriété (par exemple : « color »), puis cliquez sur « Sélecteurs » pour toute valeur résultante. Une fenêtre de dialogue s'ouvrira avec les sélecteurs correspondants, regroupés par media query."
+
+#: includes/forms/query-selector.php:9
+msgid "To find and edit specific selectors within @media query blocks, first choose the query, then the selector. Use the \"base\" query to edit all other selectors."
+msgstr "Pour trouver et modifier des sélecteurs spécifiques dans les blocs @media query, choisissez d'abord la requête (query), puis le sélecteur. Utilisez la requête « base » pour éditer les autres sélecteurs."
+
+#: includes/forms/notices.php:111
+msgid "It is a good idea to save a Zip Archive of your Child Theme before using CTC for the first time. Click the \"save backup\" link ( see Step 2, below ) to export your themes."
+msgstr "C’est une bonne idée que d’enregistrer une archive Zip de notre thème enfant avant d’utiliser CTC pour la première fois. Cliquez sur le lien « Enregistrer la sauvegarde » (voir l'étape 2 ci-dessous) pour exporter vos thèmes."
+
+#: includes/forms/notices.php:97
+msgid "Thank you for installing Child Theme Configurator."
+msgstr "Nous vous remercions d’avoir installé Child Theme Configurator."
+
+#: includes/forms/addl_panels.php:33
+msgid "Create new template and script files right from the admin."
+msgstr "Créez un nouveau modèle et des fichiers de script directement à partir de l’interface d’administration."
+
+#: includes/forms/addl_panels.php:32
+msgid "Add Child Theme Files"
+msgstr "Ajouter des fichiers du thème enfant"
+
+#: includes/classes/UI.php:345
+msgid "%1Click Here%2 to view the theme as viewed by the Analyzer.
"
+msgstr "%1Cliquez ici%2 pour voir le thème tel qu’observé par l’analyseur.
"
+
+#: includes/classes/UI.php:342
+msgid "Click to show/hide raw analysis data. Please include contents below with any support requests."
+msgstr "Cliquez pour afficher / masquer les données d’analyse brutes. Veuillez inclure le contenu ci-dessous avec toutes les demandes de support."
+
+#: includes/classes/UI.php:318
+msgid "Click to show/hide PHP debug output"
+msgstr "Cliquez pour afficher / masquer la sortie de débogage PHP"
+
+#: includes/classes/UI.php:317
+msgid "First, verify you can preview your home page with the Customizer and try analyzing again.
If that does not work, try temporarily disabling plugins that minify CSS or that force redirects between HTTP and HTTPS .
"
+msgstr "Pour commencer, vérifiez que vous pouvez visualiser votre page d’accueil avec l'outil de personnalisation puis essayez d’analyser à nouveau.
Si cela ne fonctionne pas, essayez de désactiver temporairement les extensions qui minifient le CSS ou qui Forcent les redirections entre HTTP et HTTPS .
"
+
+#: includes/classes/UI.php:319
+msgid "Please contact this Theme's author and report the items inside the box above. You may or may not be able to use this Theme as a Child Theme while these conditions exist.
It is possible that this theme has specific requirements to work correctly as a child theme. Please make sure you are using the latest version of this theme and check your theme's documentation for more information.
"
+msgstr "Veuillez contacter l’auteur de ce thème et signaler les informations de la fenêtre ci-dessus. Vous pourrez (ou pas) utiliser ce thème comme thème enfant tant que ces conditions existent.
Il est possible que ce thème ait des exigences spécifiques pour fonctionner correctement en tant que thème enfant. Assurez-vous d’utiliser la dernière version et de lire sa documentation pour plus d’informations.
"
+
+#: includes/forms/parent-child.php:89 includes/forms/parent-child.php:117
+msgid "Click here to save a backup of the selected theme."
+msgstr "Cliquez ici pour faire une copie de sauvegarde du thème sélectionné"
+
+#: includes/forms/files.php:58
+msgid "Click \"Export Zip\" to save a backup of the currently loaded child theme. You can export any of your themes from the Parent/Child tab."
+msgstr "Cliquez sur « Exporter le code postal » pour enregistrer une sauvegarde du thème enfant actuellement chargé. Vous pouvez exporter n’importe lequel de vos thèmes à partir de l’onglet Parent / Enfant."
+
+#: includes/forms/notices.php:45
+msgid "This Child Theme has incorrect ownership permissions. Child Theme Configurator will attempt to correct this when you click the button below."
+msgstr "Ce thème enfant a des permissions de propriété incorrectes. Child Theme Configurator tentera de le corriger lorsque vous cliquerez sur le bouton ci-dessous."
+
+#: includes/classes/UI.php:316
+msgid "The theme \"%s\" could not be analyzed because the preview did not render correctly."
+msgstr "Le thème « %s » n'a pas pu être analysé car l’aperçu n’a pas été rendu correctement."
+
+#: includes/classes/Admin.php:1518
+msgid "Invalid theme root directory."
+msgstr "Répertoire racine du thème invalide."
+
+#: includes/classes/Admin.php:1560
+msgid "PclZip returned zero bytes."
+msgstr "PclZip a renvoyé zéro octets."
+
+#: includes/classes/Admin.php:1530
+msgid "No writable temp directory."
+msgstr "Le répertoire temporaire n’est pas accessible en écriture."
+
+#: includes/classes/UI.php:338
+msgid "The Configurator selected \"Do not add any parent stylesheet handling\" for the \"Parent stylesheet handling\" option (see step 6, below).
"
+msgstr "Le configurateur a sélectionné « Ne pas ajouter de gestion de la feuille de style parent » pour l’option « Gestion de la feuille de style parent » (voir l’étape 6 ci-dessous).
"
+
+#. Description of the plugin/theme
+msgid "When using the Customizer is not enough - Create child themes and customize styles, templates, functions and more."
+msgstr "Lorsque l’outil de personnalisation ne suffit pas - créez des thèmes enfants et personnalisez les styles, les modèles, les fonctions et plus encore."
+
+#: includes/forms/tabs.php:29
+msgid "Child Styles"
+msgstr "Styles enfants"
+
+#: includes/forms/tabs.php:26
+msgid "Baseline Styles"
+msgstr "Styles de bases"
+
+#: includes/forms/query-selector.php:57
+msgid "Baseline Value"
+msgstr "Valeur de référence"
+
+#: includes/forms/query-selector.php:15
+msgid "( or \"base\" )"
+msgstr "(Ou « base »)"
+
+#: includes/forms/query-selector.php:14
+msgid "@media Query"
+msgstr "@media Query"
+
+#: includes/forms/parent-child.php:468
+msgid "Configure Plugin Styles"
+msgstr "Configurer les styles d’extension"
+
+#: includes/forms/parent-child.php:443
+msgid "Select the plugin stylesheets you wish to customize below."
+msgstr "Sélectionnez les feuilles de style que vous souhaitez personnaliser ci-dessous."
+
+#: includes/forms/parent-child.php:438
+msgid "Parse Plugin stylesheets:"
+msgstr "Examiner les feuilles de style d’extension :"
+
+#: includes/forms/parent-child.php:416
+msgid "Configure Child Theme"
+msgstr "Configurer le thème enfant"
+
+#: includes/forms/parent-child.php:412 includes/forms/parent-child.php:464
+msgid "Click to run the Configurator:"
+msgstr "Cliquez pour exécuter le configurateur :"
+
+#: includes/forms/parent-child.php:401
+msgid "This option replaces the Child Theme's existing Menus, Widgets and other Customizer Settings with those from the Parent Theme. You should only need to use this option the first time you configure a Child Theme."
+msgstr "Cette option remplace les menus existants, widgets et autres paramètres personnalisables du thème enfant par ceux du thème parent. Vous devriez utiliser cette option seulement la première fois que vous configurez un thème enfant."
+
+#: includes/forms/parent-child.php:391
+msgid "Copy Menus, Widgets and other Customizer Settings from the Parent Theme to the Child Theme:"
+msgstr "Copier menus, widgets et autres réglages de l'outil de personnalisation du thème parent pour le thème enfant :"
+
+#: includes/forms/parent-child.php:309
+msgid "Customize the Child Theme Name, Description, Author, Version, etc.:"
+msgstr "Personnaliser le nom du thème enfant, la description, l’auteur, la version, etc. :"
+
+#: includes/forms/parent-child.php:313
+msgid "Click to toggle form"
+msgstr "Cliquez pour basculer le formulaire"
+
+#: includes/forms/parent-child.php:286
+msgid "Let the Configurator (try to) resolve any stylesheet issues listed above. This can fix many, but not all, common problems."
+msgstr "Laissez le configurateur (essayer de) résoudre tous les problèmes de feuille de style listés ci-dessus. Cela peut résoudre parfois les problèmes courants."
+
+#: includes/forms/parent-child.php:285
+msgid "Repair the header template in the child theme."
+msgstr "Réparez le modèle d’en-tête du thème enfant."
+
+#: includes/forms/parent-child.php:275
+msgid "Do not load or parse the parent theme styles. Only use this option if the Child Theme uses a Framework like Genesis and only uses child theme stylesheets for its appearance."
+msgstr "Ne chargez pas et n’analysez pas les styles du thème parent. Utilisez uniquement cette option si le thème enfant utilise un framework comme Genesis et n’utilise que des feuilles de style du thème enfant pour son apparence."
+
+#: includes/forms/parent-child.php:274
+msgid "Ignore parent theme stylesheets."
+msgstr "Ignorez les feuilles de style du thème parent."
+
+#: includes/forms/parent-child.php:260
+msgid "Select this option if this theme already handles the parent theme stylesheet or if the parent theme's style.css
file is not used for its appearance."
+msgstr "Sélectionnez cette option si ce thème gère déjà la feuille de style du thème parent ou si le fichier style.css
du thème parent n’est pas utilisé pour son apparence."
+
+#: includes/forms/parent-child.php:257
+msgid "Do not add any parent stylesheet handling."
+msgstr "N’ajoutez pas de gestion de la feuille de style parent."
+
+#: includes/forms/parent-child.php:251
+msgid "Only use this option if the parent stylesheet cannot be loaded using the WordPress style queue. Using @import
is not recommended."
+msgstr "Utilisez uniquement cette option si la feuille de style parent ne peut pas être chargée à l’aide de la file de style WordPress. L’utilisation de @import
n’est pas recommandée."
+
+#: includes/forms/parent-child.php:245
+msgid "Use @import
in the child theme stylesheet."
+msgstr "Utilisez @import
dans la feuille de style du thème enfant."
+
+#: includes/forms/parent-child.php:239
+msgid "Let the Configurator determine the appropriate actions and dependencies and update the functions file automatically."
+msgstr "Laissez le configurateur déterminer les actions et dépendances appropriées et mettre à jour automatiquement le fichier de fonctions."
+
+#: includes/forms/parent-child.php:233
+msgid "Use the WordPress style queue."
+msgstr "Utilisez la file d’attente de style de WordPress."
+
+#: includes/forms/parent-child.php:219
+msgid "Select Parent Theme stylesheet handling:"
+msgstr "Sélectionnez la gestion de la feuille de style du thème principal :"
+
+#: includes/forms/parent-child.php:209
+msgid "Save new custom styles to a separate stylesheet and combine any existing child theme styles with the parent to form baseline. Select this option if you want to preserve the existing child theme styles instead of overwriting them. This option also allows you to customize stylesheets that load after the primary stylesheet."
+msgstr "Enregistrez de nouveaux styles personnalisés dans une feuille de style distincte et combinez tous les styles du thème enfant existants avec le parent pour former une base de référence. Sélectionnez cette option si vous souhaitez préserver les styles du thème enfant existants au lieu de les écraser. Cette option vous permet également de personnaliser les feuilles de style qui se chargent après la feuille de style primaire."
+
+#: includes/forms/parent-child.php:206
+msgid "Separate Stylesheet"
+msgstr "Feuille de style séparée"
+
+#: includes/forms/parent-child.php:194
+msgid "Save new custom styles directly to the Child Theme primary stylesheet, replacing the existing values. The primary stylesheet will load in the order set by the theme."
+msgstr "Enregistrez de nouveaux styles personnalisés directement dans la feuille de style primaire du thème enfant, en remplaçant les valeurs existantes. La feuille de style principale sera chargée dans l’ordre défini par le thème."
+
+#: includes/forms/parent-child.php:191
+msgid "Primary Stylesheet (style.css)"
+msgstr "Feuille de style primaire (style.css)"
+
+#: includes/forms/parent-child.php:182
+msgid "Select where to save new styles:"
+msgstr "Sélectionnez l’endroit où enregistrer les nouveaux styles :"
+
+#: includes/forms/parent-child.php:217
+msgid "Click to expand"
+msgstr "Cliquez pour agrandir"
+
+#: includes/forms/parent-child.php:169
+msgid "For verification only (you cannot modify the directory of an existing Child Theme)."
+msgstr "Pour vérification uniquement (vous ne pouvez pas modifier le répertoire d’un thème enfant existant)."
+
+#: includes/forms/parent-child.php:159
+msgid "Verify Child Theme directory:"
+msgstr "Vérifiez le répertoire du thème enfant :"
+
+#: includes/forms/parent-child.php:152
+msgid "This is NOT the name of the Child Theme. You can customize the name, description, etc. in step 7, below."
+msgstr "Ce n’est PAS le nom du thème enfant. Vous pouvez personnaliser le nom, la description, etc. à l’étape 7 ci-dessous."
+
+#: includes/forms/parent-child.php:146
+msgid "Directory Name"
+msgstr "Nom de répertoire"
+
+#: includes/forms/parent-child.php:142
+msgid "Name the new theme directory:"
+msgstr "Nommez le nouveau répertoire du thème :"
+
+#: includes/forms/parent-child.php:127
+msgid "Analyze Child Theme"
+msgstr "Analyser le thème enfant"
+
+#: includes/forms/parent-child.php:113
+msgid "Select a Child Theme:"
+msgstr "Sélectionnez un thème enfant :"
+
+#: includes/forms/parent-child.php:102 includes/forms/parent-child.php:130
+msgid "Click \"Analyze\" to determine stylesheet dependencies and other potential issues."
+msgstr "Cliquez sur « Analyser » pour déterminer les dépendances de la feuille de style et d’autres problèmes potentiels."
+
+#: includes/forms/parent-child.php:99
+msgid "Analyze Parent Theme"
+msgstr "Analyser le thème parent"
+
+#: includes/forms/parent-child.php:95 includes/forms/parent-child.php:123
+msgid "Analyze"
+msgstr "Analyser"
+
+#: includes/forms/parent-child.php:85
+msgid "Select a Parent Theme:"
+msgstr "Sélectionnez un thème parent :"
+
+#: includes/forms/parent-child.php:74
+msgid "Revert the Child theme stylesheet and functions files to their state before the initial configuration or last reset. Additional child theme files will not be removed, but you can delete them under the Files tab."
+msgstr "Rétablir la feuille de style du thème enfant et les fichiers de fonctions à leur état précédent la configuration initiale ou la dernière réinitialisation. Les fichiers supplémentaires du thème enfant ne seront pas supprimés, mais vous pouvez les supprimer sous l’onglet Fichiers."
+
+#: includes/forms/parent-child.php:71
+msgid "RESET an existing Child Theme (this will destroy any work you have done in the Configurator)"
+msgstr "RÉINITIALISER un thème enfant existant (cela détruira tout travail que vous avez effectué avec le configurateur)"
+
+#: includes/forms/parent-child.php:60
+msgid "Make a complete copy of an existing Child Theme in a new directory, including any menus, widgets and other Customizer settings. The option to copy the Parent Theme settings (step 8, below) is disabled with this action."
+msgstr "Effectuez une copie complète d’un thème enfant existant dans un nouveau répertoire, y compris les menus, widgets et autres réglages de l'outil de personnalisation. L’option de copier les paramètres du thème parent (étape 8, ci-dessous) est désactivée avec cette action."
+
+#: includes/forms/parent-child.php:57
+msgid "DUPLICATE an existing Child Theme"
+msgstr "DUPLIQUER un thème enfant existant"
+
+#: includes/forms/parent-child.php:46
+msgid "Set up a previously installed child theme for use with the Configurator or to modify current settings."
+msgstr "Configurez un thème enfant précédemment installé pour l’utiliser avec le configurateur ou pour modifier les réglages actuels."
+
+#: includes/forms/parent-child.php:43
+msgid "CONFIGURE an existing Child Theme"
+msgstr "CONFIGURER un thème enfant existant"
+
+#: includes/forms/parent-child.php:30
+msgid "Install a new customizable child theme using an installed theme as a parent."
+msgstr "Installez un nouveau thème enfant personnalisable à l’aide d’un thème installé en tant que parent."
+
+#: includes/forms/parent-child.php:27
+msgid "CREATE a new Child Theme"
+msgstr "CRÉER un nouveau thème enfant"
+
+#: includes/forms/parent-child.php:19
+msgid "Select an action:"
+msgstr "Sélectionnez une action :"
+
+#: includes/forms/current-theme.php:6
+msgid "Currently loaded"
+msgstr "Actuellement chargé"
+
+#: includes/forms/fileform.php:14
+msgid "Copy PHP templates from the parent theme by selecting them here. The Configurator defines a template as a Theme PHP file having no PHP functions or classes. Other PHP files cannot be safely overridden by a child theme."
+msgstr "Copiez les modèles PHP à partir du thème parent en les sélectionnant ici. Le configurateur définit un modèle en tant que fichier PHP de thème n’ayant pas de fonctions ou de classes PHP. Les autres fichiers PHP ne peuvent être remplacés sans risques par un thème enfant."
+
+#: includes/forms/notices.php:107
+msgid "click here to view the latest videos."
+msgstr "Cliquez ici pour voir les dernières vidéos."
+
+#: includes/forms/notices.php:105
+msgid "For more information, please open the Help tab at the top right or "
+msgstr "Pour plus d’informations, ouvrez l’onglet Aide en haut à droite ou "
+
+#: includes/forms/notices.php:102
+msgid "Contact Us."
+msgstr "Contactez-nous."
+
+#: includes/forms/notices.php:100
+msgid "A lot of time and testing has gone into this release but there may be edge cases. If you have any questions, please"
+msgstr "Beaucoup de temps et de tests ont été utilisés dans cette version, mais il peut y avoir des cas limite. Si vous avez des questions, veuillez"
+
+#: includes/forms/notices.php:84
+msgid "Your stylesheet has changed since the last time you used the Configurator. Please follow the steps for \"CONFIGURE an existing Child Theme\" under the \"Parent/Child\" Tab or you will lose these changes."
+msgstr "Votre feuille de style a changé depuis la dernière fois que vous avez utilisé le configurateur. Suivez les étapes pour « CONFIGURER un thème enfant existant » sous l’onglet « Parent / Enfant » ou vous perdrez ces modifications."
+
+#: includes/forms/notices.php:76
+msgid "Child Theme Configurator did not detect any configuration data because a previously configured Child Theme has been removed. Please follow the steps for \"CONFIGURE an existing Child Theme\" under the \"Parent/Child\" Tab."
+msgstr "Child Theme Configurator n'a détecté aucune donnée de configuration car un thème enfant précédemment configuré a été supprimé. Suivez les étapes pour « CONFIGURER un thème enfant existant » sous l'onglet « Parent / Enfant »."
+
+#: includes/classes/UI.php:344
+msgid "This method has been replaced by the \"Separate stylesheet\" and \"Ignore Parent Theme\" options ( selected below ) for broader framework compatability.
"
+msgstr "Cette méthode a été remplacée par les options « Feuille de style séparée » et « Ignorer les éléments parental » (sélectionnés ci-dessous) pour une compatibilité de framework plus large.
"
+
+#: includes/classes/UI.php:343
+msgid "This child theme was configured using the CTC Pro \"Genesis stylesheet handling\" method."
+msgstr "Ce thème enfant a été configuré en utilisant la méthode CTC Pro « Genesis stylesheet handling »."
+
+#: includes/classes/UI.php:341
+msgid "The selected stylesheet handling method is no longer used. Please update the configuration using the \"Repair header template\" option (see step 6, \"Additional handling options\", below).
"
+msgstr "La méthode de manipulation de la feuille de style sélectionnée n’est plus utilisée. Veuillez mettre à jour la configuration à l’aide de l'option « Réparer le modèle d'en-tête » (voir l'étape 6, « Options de manipulation supplémentaires » ci-dessous).
"
+
+#: includes/classes/UI.php:340
+msgid "This Child Theme was configured with an earlier version."
+msgstr "Ce thème enfant a été configuré avec une version antérieure."
+
+#: includes/classes/UI.php:339
+msgid "This theme does not require the parent theme's style.css
file for its appearance."
+msgstr "Ce thème ne nécessite pas le fichier style.css
du thème parent pour son apparence."
+
+#: includes/classes/UI.php:337
+msgid "The parent theme's style.css
file is being loaded automatically."
+msgstr "Le fichier style.css
du thème parent est chargé automatiquement."
+
+#: includes/classes/UI.php:336
+msgid "Consider saving new custom styles to a \"Separate stylesheet\" (see step 5, below) so that you can customize these styles.
"
+msgstr "Envisagez de sauvegarder de nouveaux styles personnalisés dans une « Feuille de style séparée » (voir l’étape 5 ci-dessous) afin que vous puissiez personnaliser ces styles.
"
+
+#: includes/classes/UI.php:335
+msgid "This theme loads additional stylesheets after the style.css
file:"
+msgstr "Ce thème charge des feuilles de style supplémentaires après le fichier style.css
:"
+
+#: includes/classes/UI.php:334
+msgid "Please consider selecting \"Use the WordPress style queue\" for the parent stylesheet handling option (see step 6, below).
"
+msgstr "Veuillez considérer la sélection « Utiliser la file d'attente de style WordPress » pour l’option de gestion de la feuille de style parent (voir l'étape 6 ci-dessous).
"
+
+#: includes/classes/UI.php:333
+msgid "This child theme uses @import
to load the parent theme's style.css
file."
+msgstr "Ce thème enfant utilise @import
pour charger le fichier style.css
du thème parent."
+
+#: includes/classes/UI.php:332
+msgid "The Configurator makes significant modifications to the child theme, including stylesheet changes and additional php functions. Please consider using the DUPLICATE child theme option (see step 1, above) and keeping the original as a backup.
"
+msgstr "Le Configurateur modifie considérablement le thème enfant, y compris les modifications de la feuille de style et les fonctions php supplémentaires. Veuillez envisager d’utiliser l’option « DUPLIQUER thème enfant » (voir l'étape 1 ci-dessus) et de conserver l’original en tant que sauvegarde.
"
+
+#: includes/classes/UI.php:331
+msgid "This Child Theme has not been configured for this plugin."
+msgstr "Ce thème enfant n’a pas été configuré pour cette extension."
+
+#: includes/classes/UI.php:330
+msgid "This theme appears OK to use as a Child theme."
+msgstr "Ce thème semble correct pour l’utilisation en tant que thème enfant."
+
+#: includes/classes/UI.php:329
+msgid "This child theme appears to be functioning correctly."
+msgstr "Ce thème enfant semble fonctionner correctement."
+
+#: includes/classes/UI.php:328
+msgid "Please select a stylesheet handling method or check \"Ignore parent theme stylesheets\" (see step 6, below).
"
+msgstr "Sélectionnez une méthode de gestion de la feuille de style ou cochez « Ignorer les feuilles de style du thème parent » (voir l'étape 6 ci-dessous).
"
+
+#: includes/classes/UI.php:327
+msgid "This child theme uses the parent stylesheet but does not load the parent theme's style.css
file."
+msgstr "Ce thème enfant utilise la feuille de style parent mais ne charge pas le fichier style.css
du thème parent."
+
+#: includes/classes/UI.php:326
+msgid "If you want to customize styles using this plugin, please click \"Configure Child Theme\" again to add this to the settings.
"
+msgstr "Si vous souhaitez personnaliser les styles à l’aide de ce plugin, cliquez à nouveau sur « Configurer thème enfant » pour ajouter ceci aux paramètres.
"
+
+#: includes/classes/UI.php:325
+msgid "This child theme does not load a Configurator stylesheet."
+msgstr "Ce thème enfant ne charge pas un configurateur de feuille de style."
+
+#: includes/classes/UI.php:324
+msgid "This is common with older themes but requires the use of @import
, which is no longer recommended. You can try to resolve this using the \"Repair header template\" option (see step 6, \"Additional handling options\", below).
"
+msgstr "Ceci est courant avec les thèmes anciens, mais nécessite l’utilisation de @import
, ce qui n’est plus recommandé. Vous pouvez essayer de résoudre ce problème en utilisant l’option « Réparer le modèle d'en-tête » (voir l'étape 6, « Options de manipulation supplémentaires » ci-dessous).
"
+
+#: includes/classes/UI.php:323
+msgid "This theme loads the parent theme's style.css
file outside the wp_styles queue."
+msgstr "Ce thème charge le fichier style.css
du thème parent à l’extérieur de la file d’attente wp_styles."
+
+#: includes/classes/UI.php:322
+msgid "This makes it difficult for plugins to override these styles. You can try to resolve this using the \"Repair header template\" option (Step 6, \"Additional handling options\", below).
"
+msgstr "Cela rend difficile pour les plugins de passer outre ces styles. Vous pouvez essayer de résoudre ce problème en utilisant l’option « Réparer l’en-tête d'en-tête » (Étape 6, « Options de manipulation supplémentaires » ci-dessous).
"
+
+#: includes/classes/UI.php:321
+msgid "This theme loads stylesheets after the wp_styles queue."
+msgstr "Ce thème charge les feuilles de style après la file d’attente wp_styles."
+
+#: includes/classes/UI.php:320
+msgid "Do Not Activate \"%s\"! A PHP FATAL ERROR has been detected."
+msgstr "Ne pas activer « %s » ! Une erreur fatale PHP a été détectée."
+
+#: includes/classes/UI.php:315
+msgid "The theme \"%s\" generated unexpected PHP debug output."
+msgstr "Le thème « %s » a généré une sortie de débogage PHP inattendue."
+
+#: includes/classes/UI.php:314
+msgid "Checking"
+msgstr "Vérification"
+
+#: includes/classes/UI.php:313
+msgid "Updating"
+msgstr "Mise à jour"
+
+#: includes/classes/UI.php:312
+msgid "No Styles Available. Check Parent/Child settings."
+msgstr "Aucun style disponible. Vérifiez les paramètres parent / enfant."
+
+#: includes/classes/UI.php:294
+msgid "Are you sure you wish to RESET? This will destroy any work you have done in the Configurator."
+msgstr "Êtes-vous sûr de vouloir RÉINITIALISER ? Cela détruira tout le travail que vous avez effectué dans le configurateur."
+
+#: includes/forms/settings-errors.php:32
+msgid "Child Theme %s has been generated successfully."
+msgstr "Le thème enfant %s a été généré avec succès."
+
+#: includes/forms/settings-errors.php:20
+msgid "Child Theme %s has been reset. Please configure it using the settings below."
+msgstr "Le thème enfant %s a été réinitialisé. Veuillez le configurer en utilisant les réglages ci-dessous."
+
+#: includes/classes/UI.php:36
+msgid "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
+msgstr "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
+
+#: includes/classes/Admin.php:651
+msgid "Could not upgrade child theme"
+msgstr "Impossible de mette à niveau le thème enfant"
+
+#: includes/classes/Admin.php:542
+msgid "Please select a valid Child Theme."
+msgstr "Sélectionnez un thème enfant valide."
+
+#. Author URI of the plugin/theme
+msgid "http://www.lilaeamedia.com"
+msgstr "http://www.lilaeamedia.com"
+
+#. Author of the plugin/theme
+msgid "Lilaea Media"
+msgstr "Lilaea Media"
+
+#. Plugin URI of the plugin/theme
+msgid "http://www.childthemeconfigurator.com"
+msgstr "http://www.childthemeconfigurator.com"
+
+#: includes/forms/webfonts.php:20
+msgid "Use @import url( [path] );
to link additional stylesheets. Child Theme Configurator uses the @import
keyword to identify them and convert them to <link>
tags. Example: "
+msgstr "Utilisez @import url ([chemin d'accès]);
pour lier des feuilles de style supplémentaires. Child Theme Configurator utilise le mot-clé @import
pour les identifier et les convertir en <lien>
étiquettes. Exemple : "
+
+#: includes/forms/webfonts.php:18
+msgid "Linked Stylesheets"
+msgstr "Feuilles de styles liés"
+
+#: includes/forms/themepreview.php:21
+msgid "Not Network Enabled"
+msgstr "Non activé en réseau"
+
+#: includes/forms/themepreview.php:17
+msgid " in default Site"
+msgstr " dans site par défaut"
+
+#: includes/forms/themepreview.php:16
+msgid "Preview"
+msgstr "Aperçu"
+
+#: includes/forms/themepreview.php:14
+msgid "By: "
+msgstr "Par : "
+
+#: includes/forms/themepreview.php:12
+msgid "Version: "
+msgstr "Version : "
+
+#: includes/forms/tabs.php:33
+msgid "Files"
+msgstr "Fichiers"
+
+#: includes/forms/tabs.php:22
+msgid "Web Fonts"
+msgstr "Polices web"
+
+#: includes/forms/tabs.php:17
+msgid "Property/ Value"
+msgstr "Propriété / Valeur"
+
+#: includes/forms/tabs.php:14
+msgid "Query/ Selector"
+msgstr "Requête / Sélecteur"
+
+#: includes/forms/tabs.php:11
+msgid "Parent/ Child"
+msgstr "Parent / Enfant"
+
+#: includes/forms/rule-value.php:27
+msgid "Value"
+msgstr "Valeur"
+
+#: includes/forms/related.php:1
+msgid "Lilaea Media - Responsive Tools for a Mobile World"
+msgstr "Lilaea Media - Outils responsive pour un monde mobile"
+
+#: includes/forms/related.php:1
+msgid "Get CTC Pro and other tools"
+msgstr "Obtenez CTC Pro et d’autres outils"
+
+#: includes/forms/related.php:1
+msgid "Click help"
+msgstr "Cliquez sur l’aide"
+
+#: includes/forms/related.php:1
+msgid "New user?"
+msgstr "Nouvel utilisateur ?"
+
+#: includes/forms/query-selector.php:92
+msgid "Values entered here are merged into existing child styles or added to the child stylesheet if they do not exist in the parent."
+msgstr "Les valeurs entrées ici sont fusionnées dans des styles enfants existants ou ajoutées à la feuille de style enfant si elles n’existent pas dans le parent."
+
+#: includes/forms/query-selector.php:92
+msgid "Use to enter shorthand CSS or new @media queries and selectors."
+msgstr "Utilisé pour saisir les propriétés raccourcies CSS ou nouveaux @media queries et sélecteurs."
+
+#: includes/forms/query-selector.php:90
+msgid "Raw CSS"
+msgstr "Raw CSS"
+
+#: includes/forms/query-selector.php:87 includes/forms/webfonts.php:15
+msgid "Save"
+msgstr "Enregistrer"
+
+#: includes/forms/query-selector.php:85
+msgid "Copy Selector"
+msgstr "Copier le sélecteur"
+
+#: includes/forms/query-selector.php:76
+msgid "Order"
+msgstr "Trier"
+
+#: includes/forms/query-selector.php:66
+msgid "New Property"
+msgstr "Nouvelle propriété"
+
+#: includes/forms/query-selector.php:60
+msgid "Child Value"
+msgstr "Valeur de l’enfant"
+
+#: includes/forms/query-selector.php:54 includes/forms/rule-value.php:14
+msgid "Property"
+msgstr "Propriétés"
+
+#: includes/forms/query-selector.php:47
+msgid "Delete Child Values"
+msgstr "Supprimer les valeurs de l’enfant"
+
+#: includes/forms/query-selector.php:46
+msgid "Save Child Values"
+msgstr "Sauvegarder les valeurs de l’enfant"
+
+#: includes/forms/query-selector.php:38 includes/forms/rule-value.php:30
+msgid "Sample"
+msgstr "Échantillon"
+
+#: includes/forms/query-selector.php:25
+msgid "Selector"
+msgstr "Sélecteur"
+
+#: includes/forms/debug-toggle.php:8
+msgid "Debug"
+msgstr "Debug"
+
+#: includes/forms/parent-child.php:150 includes/forms/parent-child.php:399
+msgid "NOTE:"
+msgstr "NOTE :"
+
+#: includes/forms/parent-child.php:378 includes/forms/parent-child.php:382
+msgid "Version"
+msgstr "Version"
+
+#: includes/forms/parent-child.php:372
+msgid "Tags"
+msgstr "Étiquettes"
+
+#: includes/forms/parent-child.php:368
+msgid "Theme Tags"
+msgstr "Étiquettes du thème"
+
+#: includes/forms/parent-child.php:362
+msgid "Description"
+msgstr "Description"
+
+#: includes/forms/parent-child.php:358
+msgid "Theme Description"
+msgstr "Description du thème"
+
+#: includes/forms/parent-child.php:348 includes/forms/parent-child.php:352
+msgid "Author Website"
+msgstr "Site web de l’auteur"
+
+#: includes/forms/parent-child.php:338 includes/forms/parent-child.php:342
+msgid "Author"
+msgstr "Auteur"
+
+#: includes/forms/parent-child.php:328 includes/forms/parent-child.php:332
+msgid "Theme Website"
+msgstr "Site web du thème"
+
+#: includes/forms/parent-child.php:322
+msgid "Theme Name"
+msgstr "Nom du thème"
+
+#: includes/forms/parent-child.php:318
+msgid "Child Theme Name"
+msgstr "Nom du thème enfant"
+
+#: includes/forms/main.php:35
+msgid "version"
+msgstr "version"
+
+#: includes/forms/images.php:13
+msgid "Delete child theme images by selecting them here."
+msgstr "Supprimez les images du thème enfant en les sélectionnant ici."
+
+#: includes/forms/images.php:10
+msgid "Child Theme Images"
+msgstr "Images du thèmes enfant"
+
+#: includes/forms/files.php:77
+msgid "Make read-only"
+msgstr "Mettre en lecture seule"
+
+#: includes/forms/files.php:71
+msgid "Attempt to reset child theme permissions to user ownership and read-only access."
+msgstr "Essayez de réinitialiser les autorisations du thème enfant à propriété utilisateur et à lecture seule."
+
+#: includes/forms/files.php:68
+msgid "Secure Child Theme"
+msgstr "Thème enfant sécurisé"
+
+#: includes/forms/files.php:57
+msgid "Export Child Theme as Zip Archive"
+msgstr "Exporter un thème enfant comme archive Zip"
+
+#: includes/forms/files.php:44
+msgid "The theme screenshot should be a 4:3 ratio (e.g., 880px x 660px) JPG, PNG or GIF. It will be renamed screenshot
."
+msgstr "La capture d’écran du thème devrait avoir un rapport 4:3 (par exemple, 880x660 px) JPG, PNG ou GIF. Elle sera renommé screenshot
."
+
+#: includes/forms/files.php:41
+msgid "Upload New Screenshot"
+msgstr "Téléverser une nouvelle capture d’écran"
+
+#: includes/forms/files.php:32
+msgid "Child Theme Screenshot"
+msgstr "Capture d’écran du thème enfant"
+
+#: includes/forms/files.php:25 includes/forms/files.php:51
+msgid "Upload"
+msgstr "Envoi"
+
+#: includes/forms/files.php:18
+msgid "Theme images reside under the images
directory in your child theme and are meant for stylesheet use only. Use the Media Library for content images."
+msgstr "Les images du thème résident dans le répertoire images
dans votre thème enfant et ne sont utilisées que pour l’utilisation de la feuille de style. Utilisez la bibliothèque multimédia pour les images de contenu."
+
+#: includes/forms/files.php:15
+msgid "Upload New Child Theme Image"
+msgstr "Télécharger une nouvelle image pour le thème enfant"
+
+#: includes/forms/file-form-buttons.php:13 includes/forms/images.php:21
+msgid "Delete Selected"
+msgstr "Supprimer sélection"
+
+#: includes/forms/file-form-buttons.php:13
+msgid "Copy Selected to Child Theme"
+msgstr "Copier la sélection dans le thème enfant"
+
+#: includes/forms/file-form-buttons.php:9
+msgid "Make Selected Writable"
+msgstr "Rendre la sélection modifiable"
+
+#: includes/forms/fileform.php:30
+msgid "Delete child theme templates or make them writable by selecting them here. Writable files are displayed in red ."
+msgstr "Supprimez les modèles du thème enfant ou rendez-les modifiables en les sélectionnant ici. Les fichiers modifiables sont affichés en rouge ."
+
+#: includes/forms/fileform.php:29
+msgid "Delete child theme templates by selecting them here."
+msgstr "Supprimez les modèles du thème enfant en les sélectionnant ici."
+
+#: includes/forms/fileform.php:19
+msgid "The %s file is generated separately and cannot be copied here."
+msgstr "Le fichier %s est généré séparément et ne peut pas être copié ici."
+
+#: includes/forms/fileform.php:17
+msgid "CAUTION: If your child theme is active, the child theme version of the file will be used instead of the parent immediately after it is copied."
+msgstr "ATTENTION : si votre thème enfant est actif, la version du fichier du thème enfant sera utilisée à la place de celle du parent qui vient d’être copiée."
+
+#: includes/forms/fileform.php:9
+msgid "Child Theme Files"
+msgstr "Fichiers thème enfant"
+
+#: includes/forms/fileform.php:9
+msgid "Parent Templates"
+msgstr "Modèles parents"
+
+#: includes/classes/UI.php:119
+msgid "Click here to edit template files using the Theme Editor"
+msgstr "Cliquez ici pour éditer les fichiers modèles à l'aide de l’éditeur de thème"
+
+#: includes/classes/UI.php:115
+msgid "The Theme editor has been disabled. Template files must be edited offline."
+msgstr "L'éditeur de thème a été désactivé. Les fichiers du modèle doivent être édités en mode hors connexion."
+
+#: includes/forms/backups.php:10
+msgid "Restore backup from"
+msgstr "Restaurer la sauvegarde à partir de"
+
+#: includes/forms/backup.php:8
+msgid "Backup"
+msgstr "Sauvegarde"
+
+#: includes/forms/addl_tabs.php:7
+msgid "Upgrade"
+msgstr "Mettre à jour"
+
+#: includes/forms/addl_panels.php:36
+msgid "Tutorial Videos"
+msgstr "Vidéos didactiques"
+
+#: includes/forms/addl_panels.php:35
+msgid "Online Documentation"
+msgstr "Documentation en ligne"
+
+#: includes/forms/addl_panels.php:34
+msgid "Top-rated Online Support"
+msgstr "Support en ligne le mieux noté"
+
+#: includes/forms/addl_panels.php:31
+msgid "Return to recently edited selectors from a toggleable sidebar."
+msgstr "Revenez aux sélecteurs récemment modifié à partir d'une barre latérale occultable."
+
+#: includes/forms/addl_panels.php:31
+msgid "Most recent edits"
+msgstr "Modifications les plus récentes"
+
+#: includes/forms/addl_panels.php:30
+msgid "Tweak menus quickly and easily."
+msgstr "Améliorer les menus rapidement et facilement."
+
+#: includes/forms/addl_panels.php:30
+msgid "Find styles by Nav Menu"
+msgstr "Trouver des styles par menu Nav"
+
+#: includes/forms/addl_panels.php:29
+msgid "Use the \"All Styles\" panel to edit groups of selectors from a single combined list."
+msgstr "Utilisez le panneau « Tous les styles » pour éditer des groupes de sélecteurs à partir d'une seule liste combinée."
+
+#: includes/forms/addl_panels.php:29
+msgid "Find related styles"
+msgstr "Trouver des styles connexes"
+
+#: includes/forms/addl_panels.php:28
+msgid "Keep the colors you select just a click away. No more searching for hex codes and RGB values."
+msgstr "Gardez les couleurs que vous sélectionnez à portée de clic. Fini les recherches de codes hexadécimaux et de valeurs RVB."
+
+#: includes/forms/addl_panels.php:28
+msgid "Color Palettes"
+msgstr "Palettes de couleurs"
+
+#: includes/forms/addl_panels.php:27
+msgid "Preview your child theme with a single click."
+msgstr "Prévisualisez votre thème enfant en un seul clic."
+
+#: includes/forms/addl_panels.php:27
+msgid "Quick Preview"
+msgstr "Aperçu rapide"
+
+#: includes/forms/addl_panels.php:26
+msgid "Apply the power of CTC's top-rated interface to your site's plugin styles. All new design makes it much easier to get the results you want."
+msgstr "Appliquez la puissance de l’interface de qualité de CTC aux styles de l’extension de votre site. La nouvelle conception rend beaucoup plus facile l’obtention des résultats souhaités."
+
+#: includes/forms/addl_panels.php:25
+msgid "Customize Plugin Stylesheets"
+msgstr "Personnaliser les feuilles de styles d’extensions"
+
+#: includes/forms/addl_panels.php:23
+msgid "We've packed in more features to make design work quicker and easier with Child Theme Configurator Pro. "
+msgstr "Nous avons ajouté plus de fonctionnalités pour rendre le travail de conception plus rapide et plus facile avec Child Theme Configurator Pro. "
+
+#: includes/forms/addl_panels.php:22
+msgid "Designed by Developers Who Use It Every Day."
+msgstr "Conçu par des développeurs qui l’utilisent tous les jours."
+
+#: includes/forms/addl_panels.php:21
+msgid "Thousands of users have already seen the benefits of using Child Theme Configurator. If you spend any amount of time customizing WordPress, CTC Pro will help maximize your productivity."
+msgstr "Des milliers d’utilisateurs ont déjà vu les avantages de l’utilisation de Child Theme Configurator. Si vous passez du temps à personnaliser WordPress, CTC Pro vous aidera à maximiser votre productivité."
+
+#: includes/forms/addl_panels.php:20
+msgid "Customizing WordPress just got even easier."
+msgstr "Personnaliser WordPress est devenu encore plus facile."
+
+#: includes/forms/addl_panels.php:19
+msgid "Learn more about CTC Pro"
+msgstr "En savoir plus sur CTC Pro"
+
+#: includes/forms/addl_panels.php:15
+msgid "IntelliWidget Responsive Menu lets you break free from your theme’s built-in responsive menu options and gives you complete control over the user experience."
+msgstr "Le menu IntelliWidget responsive vous permet de vous libérer des options de menu responsive intégrées de votre thème et vous donne un contrôle total sur l’expérience utilisateur."
+
+#: includes/forms/addl_panels.php:14 includes/forms/addl_panels.php:15
+msgid "Learn more about IW Responsive Menu"
+msgstr "En savoir plus sur IW Responsive Menu"
+
+#: includes/forms/addl_panels.php:13 includes/forms/addl_panels.php:16
+msgid "Learn more"
+msgstr "En savoir plus"
+
+#: includes/forms/addl_panels.php:12
+msgid "IntelliWidget is a versatile widget manager that does the work of multiple plugins by combining custom page menus, featured posts, sliders and other dynamic content features into a single plugin that can display on a per-page or site-wide basis."
+msgstr "IntelliWidget est un gestionnaire de widgets polyvalent qui effectue le travail de plusieurs extensions en combinant des menus de pages personnalisées, des articles mis en avant, des diaporamas et d'autres fonctionnalités de contenu dynamique en un seul plugin pouvant être affiché par page ou sur l’ensemble du site."
+
+#: includes/forms/addl_panels.php:11 includes/forms/addl_panels.php:12
+msgid "Learn more about IntelliWidget"
+msgstr "En savoir plus sur IntelliWidget"
+
+#: includes/forms/addl_panels.php:10 includes/forms/addl_panels.php:40
+msgid "*Prices and offers subject to change."
+msgstr "* Prix et offres susceptibles d'être modifiés."
+
+#: includes/forms/addl_panels.php:10 includes/forms/addl_panels.php:40
+msgid "Order Now"
+msgstr "Commandez maintenant"
+
+#: includes/forms/addl_panels.php:9 includes/forms/addl_panels.php:39
+msgid "and get 20% off entire order ."
+msgstr "et obtenez 20% de réduction sur le total de votre commande ."
+
+#: includes/forms/addl_panels.php:9 includes/forms/addl_panels.php:39
+msgid "wordpress-org"
+msgstr "wordpress-org"
+
+#: includes/forms/addl_panels.php:9 includes/forms/addl_panels.php:39
+msgid "Use coupon code"
+msgstr "Utiliser le code promo"
+
+#: includes/forms/addl_css.php:11
+msgid "Stylesheets that are currently being loaded by the parent theme are automatically selected below (except for Bootstrap stylesheets which add a large amount data to the configuration). To further reduce overhead, select only the additional stylesheets you wish to customize."
+msgstr "Les feuilles de styles actuellement chargées par le thème principal sont automatiquement sélectionnées ci-dessous (à l’exception des feuilles de style Bootstrap qui ajoutent une grande quantité de données à la configuration). Pour réduire davantage la charge, sélectionnez uniquement les feuilles de style supplémentaires que vous souhaitez personnaliser."
+
+#: includes/forms/addl_css.php:7
+msgid "Parse additional stylesheets:"
+msgstr "Analyser des feuilles de style supplémentaires :"
+
+#: includes/forms/notices.php:68
+msgid "However, some styles could not be parsed due to memory limits. Try deselecting \"Additional Stylesheets\" below and click \"Generate/Rebuild Child Theme Files\". %sWhy am I seeing this?%s"
+msgstr "Cependant, certains styles n’ont pu être analysés en raison des limites de la mémoire. Essayez de désélectionner « Feuilles de styles supplémentaires » ci-dessous et cliquez sur « Générer / Reconstruire les fichiers du thème enfants ». %sPourquoi est-ce que je vois ça ?%s"
+
+#: includes/forms/notices.php:60
+msgid "Child Theme Configurator needs to update its internal data. Please set your preferences below and click \"Generate Child Theme Files\" to update your configuration."
+msgstr "Child Theme Configurator doit mettre à jour ses données internes. Configurez vos préférences ci-dessous et cliquez sur « Générer des fichiers de thème pour enfants » pour mettre à jour votre configuration."
+
+#: includes/forms/notices.php:51
+msgid "Correct Child Theme Permissions"
+msgstr "Corriger les droits du thème enfants"
+
+#: includes/forms/notices.php:32
+msgid "Run PHP under Apache with suEXEC (contact your web host). "
+msgstr "Exécutez PHP sous Apache avec suEXEC (contactez votre hébergeur). "
+
+#: includes/forms/notices.php:30
+msgid "Set write permissions on the server manually (not recommended). "
+msgstr "Définir les autorisations d’écriture manuellement sur le serveur (déconseillé). "
+
+#: includes/forms/notices.php:29
+msgid "Assign WordPress to an application pool that has write permissions (Windows IIS systems). "
+msgstr "Affectez WordPress à un pool d’applications ayant des autorisations d’écriture (Systèmes Windows IIS). "
+
+#: includes/forms/notices.php:27
+msgid "Add your FTP/SSH credentials to the WordPress config file . "
+msgstr "Ajoutez vos identifiants FTP / SSH au fichier de configuration WordPress . "
+
+#: includes/forms/notices.php:24
+msgid "Make files writable"
+msgstr "Créer des fichiers pouvant être écrits"
+
+#: includes/forms/notices.php:20
+msgid "Temporarily set write permissions by clicking the button below. When you are finished editing, revert to read-only by clicking \"Make read-only\" under the \"Files\" tab. "
+msgstr "Définissez temporairement les autorisations d’écriture en cliquant sur le bouton ci-dessous. Lorsque vous avez fini d’éditer, revenez en lecture seule en cliquant sur « Créer en lecture seule » sous l'onglet « Fichiers ». "
+
+#: includes/forms/notices.php:12
+msgid "The child theme is in read-only mode and Child Theme Configurator cannot apply changes. Click to see options"
+msgstr "Le thème enfant est en mode lecture seule et Child Theme Configurator ne peut pas appliquer les modifications. Cliquez pour voir les options"
+
+#: includes/classes/Admin.php:1492
+msgid "Could not upload file."
+msgstr "Impossible de télécharger le fichier."
+
+#: includes/classes/Admin.php:1418
+msgid "There were errors while resetting permissions."
+msgstr "Il y a eu des erreurs lors de la réinitialisation des autorisations."
+
+#: includes/classes/Admin.php:1317
+msgid "Could not set write permissions."
+msgstr "Impossible de définir les autorisations d’écriture."
+
+#: includes/classes/Admin.php:733
+msgid "Your stylesheet is not writable."
+msgstr "Votre feuille de style n’est pas accessible en écriture."
+
+#: includes/classes/Admin.php:570
+msgid "Your theme directories are not writable."
+msgstr "Vos répertoires de thème ne sont pas accessibles en écriture."
+
+#: includes/classes/Admin.php:551
+msgid "%s exists. Please enter a different Child Theme template name."
+msgstr "%s Existe. Entrez un autre nom de modèle du thème enfant."
+
+#: includes/classes/Admin.php:546
+msgid "Please enter a valid Child Theme directory name."
+msgstr "Entrez un nom de répertoire du thème enfant valide."
+
+#: includes/classes/Admin.php:537
+msgid "Please select a valid Parent Theme."
+msgstr "Sélectionnez un thème parent valide."
+
+#: includes/classes/Admin.php:534
+msgid "%s does not exist. Please select a valid Parent Theme."
+msgstr "%s n’existe pas. Sélectionnez un thème parent valide."
+
+#: includes/classes/Admin.php:501
+msgid "You do not have permission to configure child themes."
+msgstr "Vous n’avez pas la permission de configurer des thèmes enfants."
+
+#: includes/classes/Admin.php:421
+msgid "The Functions file is required and cannot be deleted."
+msgstr "Le fichier fonctions est requis et ne peut être supprimé."
+
+#: includes/classes/Admin.php:395
+msgid "Zip file creation failed."
+msgstr "La création du fichier zip a échoué."
+
+#: includes/classes/UI.php:309
+msgid "%sWhy am I seeing this?%s"
+msgstr "%sPourquoi est-ce que je vois ceci ?%s"
+
+#: includes/classes/UI.php:308
+msgid "Deactivating or replacing plugins may resolve this issue."
+msgstr "La désactivation ou le remplacement des extensions peut résoudre ce problème."
+
+#: includes/classes/UI.php:307
+msgid "Conflicting or out-of-date jQuery libraries were loaded by another plugin:"
+msgstr "Les bibliothèques jQuery conflictuelles ou périmées ont été chargées par une autre extension :"
+
+#: includes/classes/UI.php:306
+msgid "The page could not be loaded correctly."
+msgstr "La page n’a pas pu être chargée correctement."
+
+#: includes/classes/UI.php:305
+msgid "%s exists. Please enter a different Child Theme"
+msgstr "%s existe. Entrez un autre thème enfant"
+
+#: includes/classes/UI.php:304
+msgid "Please enter a valid Child Theme name."
+msgstr "Veuillez entrer un nom valide pour le thème enfant."
+
+#: includes/classes/UI.php:303
+msgid "Please enter a valid Child Theme."
+msgstr "Veuillez entrer un thème enfant valide."
+
+#: includes/classes/UI.php:302
+msgid "(Child Only)"
+msgstr "(Enfant seulement)"
+
+#: includes/classes/UI.php:301
+msgid "The stylesheet cannot be displayed."
+msgstr "La feuille de style ne peut pas être affichée."
+
+#: includes/classes/UI.php:300
+msgid "Rename"
+msgstr "Renommer"
+
+#: includes/classes/UI.php:299
+msgid "Cancel"
+msgstr "Annuler"
+
+#: includes/classes/UI.php:298
+msgid "Edit Selector"
+msgstr "Modifier le sélecteur"
+
+#: includes/classes/UI.php:297
+msgid "Close"
+msgstr "Fermer"
+
+#: includes/classes/UI.php:296 includes/forms/rule-value.php:33
+msgid "Selectors"
+msgstr "Sélecteurs"
+
+#: includes/classes/UI.php:295
+msgid "! "
+msgstr "! "
+
+#: includes/classes/UI.php:292
+msgid "Color"
+msgstr "Couleur"
+
+#: includes/classes/UI.php:291
+msgid "Style"
+msgstr "Style"
+
+#: includes/classes/UI.php:290
+msgid "Width/None"
+msgstr "Largeur / Aucun"
+
+#: includes/classes/UI.php:289
+msgid "Color 2"
+msgstr "Couleur 2"
+
+#: includes/classes/UI.php:288
+msgid "Color 1"
+msgstr "Couleur 1"
+
+#: includes/classes/UI.php:287
+msgid "Origin"
+msgstr "Origine"
+
+#: includes/classes/UI.php:286
+msgid "URL/None"
+msgstr "URL / Aucun"
+
+#: includes/forms/settings-errors.php:49 includes/forms/themepreview.php:18
+msgid "Live Preview"
+msgstr "Aperçu en direct"
+
+#: includes/forms/settings-errors.php:42 includes/forms/themepreview.php:20
+msgid "Go to Themes"
+msgstr "Aller aux thèmes"
+
+#: includes/forms/settings-errors.php:36
+msgid "IMPORTANT:"
+msgstr "IMPORTANT :"
+
+#: includes/forms/settings-errors.php:29
+msgid "Child Theme files modified successfully."
+msgstr "Les fichiers enfants ont été modifiés avec succès."
+
+#: includes/classes/Core.php:138
+msgid "Child Theme Configurator requires WordPress version %s or later."
+msgstr "Child Theme Configurator nécessite la version %s ou ultérieure de WordPress."
+
+#: includes/classes/Core.php:98 includes/classes/Core.php:109
+#: includes/classes/Core.php:120
+msgid "Child Themes"
+msgstr "Thèmes enfants"
+
+#. #-#-#-#-# tmp-child-theme-configurator.pot (Child Theme Configurator
+#. 2.2.4.1) #-#-#-#-#
+#. Plugin Name of the plugin/theme
+#: includes/classes/Core.php:97 includes/classes/Core.php:108
+#: includes/forms/main.php:35
+msgid "Child Theme Configurator"
+msgstr "Child Theme Configurator"
\ No newline at end of file
diff --git a/wp-content/plugins/child-theme-configurator/lang/child-theme-configurator-sr_RS.mo b/wp-content/plugins/child-theme-configurator/lang/child-theme-configurator-sr_RS.mo
new file mode 100644
index 0000000..fc8b1ca
Binary files /dev/null and b/wp-content/plugins/child-theme-configurator/lang/child-theme-configurator-sr_RS.mo differ
diff --git a/wp-content/plugins/child-theme-configurator/lang/child-theme-configurator-sr_RS.po b/wp-content/plugins/child-theme-configurator/lang/child-theme-configurator-sr_RS.po
new file mode 100644
index 0000000..3e6618d
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/lang/child-theme-configurator-sr_RS.po
@@ -0,0 +1,964 @@
+# Copyright (C) 2015 Child Theme Configurator
+# This file is distributed under the same license as the Child Theme Configurator package.
+msgid ""
+msgstr ""
+"Project-Id-Version: Child Theme Configurator 1.7.0\n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/child-theme-configurator\n"
+"POT-Creation-Date: 2015-02-20 02:29:04+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2015-03-03 11:16+0100\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"X-Generator: Poedit 1.7.4\n"
+"Language: sr_RS\n"
+
+#. Plugin Name of the plugin/theme
+#: child-theme-configurator.php:76 child-theme-configurator.php:86
+#: includes/forms/main.php:23
+msgid "Child Theme Configurator"
+msgstr "Child Theme Configurator"
+
+#: child-theme-configurator.php:77 child-theme-configurator.php:87
+#: child-theme-configurator.php:97
+msgid "Child Themes"
+msgstr "Podređene teme"
+
+#: child-theme-configurator.php:112
+msgid "Child Theme Configurator requires WordPress version %s or later."
+msgstr "Child Theme Configurator zahteva WordPress verziju %s ili noviju"
+
+#: includes/class-ctc-ui.php:143
+msgid "Child Theme files modified successfully."
+msgstr "Podređena tema uspešno izmenjena."
+
+#: includes/class-ctc-ui.php:146
+msgid ""
+"Child Theme %s has been generated successfully.\n"
+" "
+msgstr "Podređena tema %s uspešno generisana.\n"
+
+#: includes/class-ctc-ui.php:149
+msgid "IMPORTANT:"
+msgstr "VAŽNO:"
+
+#: includes/class-ctc-ui.php:151 includes/forms/themepreview.php:20
+msgid "Go to Themes"
+msgstr "Idi na teme"
+
+#: includes/class-ctc-ui.php:151
+msgid "Network enable"
+msgstr "Aktiviraj mrežu"
+
+#: includes/class-ctc-ui.php:151
+msgid "your child theme."
+msgstr "vaša podređena tema."
+
+#: includes/class-ctc-ui.php:153 includes/forms/themepreview.php:18
+msgid "Live Preview"
+msgstr "Live pregled"
+
+#: includes/class-ctc-ui.php:153
+msgid "Test your child theme"
+msgstr "Testirajte svoju podređenu temu"
+
+#: includes/class-ctc-ui.php:153
+msgid "before activating."
+msgstr "pre nego što je aktivirate."
+
+#: includes/class-ctc.php:143
+msgid "URL/None"
+msgstr "URL/Nijedan"
+
+#: includes/class-ctc.php:144
+msgid "Origin"
+msgstr "Poreklo"
+
+#: includes/class-ctc.php:145
+msgid "Color 1"
+msgstr "Boja 1"
+
+#: includes/class-ctc.php:146
+msgid "Color 2"
+msgstr "Boja 2"
+
+#: includes/class-ctc.php:147
+msgid "Width/None"
+msgstr "Širina/Nijedna"
+
+#: includes/class-ctc.php:148
+msgid "Style"
+msgstr "Stil"
+
+#: includes/class-ctc.php:149
+msgid "Color"
+msgstr "Boja"
+
+#: includes/class-ctc.php:151
+msgid "Are you sure? This will replace your current settings."
+msgstr "Jeste li sigurni? Ovim ćete zameniti svoje trenutne postavke."
+
+#: includes/class-ctc.php:152
+msgid "! "
+msgstr "! "
+
+#: includes/class-ctc.php:153 includes/forms/rule-value.php:32
+msgid "Selectors"
+msgstr "Selektori"
+
+#: includes/class-ctc.php:154
+msgid "Close"
+msgstr "Zatvori"
+
+#: includes/class-ctc.php:155
+msgid "Edit"
+msgstr "Uredi"
+
+#: includes/class-ctc.php:156
+msgid "Cancel"
+msgstr "Otkaži"
+
+#: includes/class-ctc.php:157
+msgid "Rename"
+msgstr "Promeni naziv"
+
+#: includes/class-ctc.php:158
+msgid "The stylesheet cannot be displayed."
+msgstr "Datoteka sa stilovima ne može biti prikazana."
+
+#: includes/class-ctc.php:159
+msgid "(Child Only)"
+msgstr "(Samo podređena)"
+
+#: includes/class-ctc.php:160
+msgid "Please enter a valid Child Theme."
+msgstr "Unesite važeću podređenu temu."
+
+#: includes/class-ctc.php:161
+msgid "Please enter a valid Child Theme name."
+msgstr "Unesite naziv važeće podređene teme"
+
+#: includes/class-ctc.php:162
+msgid "%s exists. Please enter a different Child Theme"
+msgstr "%s već postoji. Unesite drugačiju podređenu temu. "
+
+#: includes/class-ctc.php:163
+msgid "The page could not be loaded correctly so some controls have been disabled."
+msgstr "Stranica se nije pravilno učitala, tako da su neke kontrole deaktivirane."
+
+#: includes/class-ctc.php:165
+msgid "Conflicting jQuery libraries were loaded by another plugin:"
+msgstr "Drugi plugin je učitao konfliktne jQuery biblioteke:"
+
+#: includes/class-ctc.php:167
+msgid "Deactivating other plugins may resolve this issue."
+msgstr "Deaktiviranjem drugih plugin-a možete rešiti ovaj problem."
+
+#: includes/class-ctc.php:168
+msgid "%sWhy am I seeing this?%s"
+msgstr "%sZašto vidim ovu poruku?%s"
+
+#: includes/class-ctc.php:385
+msgid "Zip file creation failed."
+msgstr "Neuspelo kreiranje zip datoteke."
+
+#: includes/class-ctc.php:421
+msgid "The Functions file is required and cannot be deleted."
+msgstr "Datoteka ‘Funkcije’ je obavezna i ne može se obrisati. "
+
+#: includes/class-ctc.php:502
+msgid "You do not have permission to configure child themes."
+msgstr "Nemate dozvole da konfigurišete podređene teme."
+
+#: includes/class-ctc.php:549
+msgid "%s does not exist. Please select a valid Parent Theme."
+msgstr "%s ne postoji. Odaberite važeću nadređenu temu."
+
+#: includes/class-ctc.php:553
+msgid "Please select a valid Parent Theme."
+msgstr "Odaberite važeću nadređenu temu."
+
+#: includes/class-ctc.php:556
+msgid "Please enter a valid Child Theme directory."
+msgstr "Unesite važeći direktorijum za podređenu temu."
+
+#: includes/class-ctc.php:564
+msgid "Please enter a valid Child Theme template name."
+msgstr "Unesite važeći naziv šablona podređene teme."
+
+#: includes/class-ctc.php:569
+msgid "%s exists. Please enter a different Child Theme template name."
+msgstr "%s već postoji. Unesite drugi naziv šablona podređene teme."
+
+#: includes/class-ctc.php:575
+msgid "Your theme directories are not writable."
+msgstr "Direktorijumi vaše teme nisu raspoloživi za pisanje. "
+
+#: includes/class-ctc.php:635
+msgid "Your stylesheet is not writable."
+msgstr "Vaša datoteka sa stilovima nije raspoloživa za pisanje."
+
+#: includes/class-ctc.php:877
+msgid ""
+"A closing PHP tag was detected in Child theme functions file so \"Parent Stylesheet "
+"Handling\" option was not configured. Closing PHP at the end of the file is discouraged "
+"as it can cause premature HTTP headers. Please edit functions.php
to "
+"remove the final ?>
tag and click \"Generate/Rebuild Child Theme Files"
+"\" again."
+msgstr ""
+"Završna PHP oznaka otkrivena je u datoteci sa funkcijama podređene teme pa opcija "
+"\"Rukovanje nadređenom datotekom sa stilovima\" nije konfigurisana. Zatvaranje PHP-a na "
+"kraju datoteke ne preporučuje se jer može dovesti do preuranjenih HTTP zaglavlja. "
+"Uredite functions.php
da ukloni završnu ?>
oznaku i "
+"kliknite na \"Generiši/Ponovo izgradi datoteke sa podređenim temama\"."
+
+#: includes/class-ctc.php:964
+msgid "Could not delete file."
+msgstr "Datoteka nije obrisana."
+
+#: includes/class-ctc.php:1040
+msgid "Could not set write permissions."
+msgstr "Dozvole za pisanje nisu podešene."
+
+#: includes/class-ctc.php:1114
+msgid "There were errors while resetting permissions."
+msgstr "Došlo je do grešaka prilikom podešavanja dozvola."
+
+#: includes/class-ctc.php:1156
+msgid "Could not upload file."
+msgstr "Datoteka nije otpremljena."
+
+#: includes/class-ctc.php:1239
+msgid ""
+"Child Theme Configurator is unable to write to the stylesheet. This can be resolved "
+"using one of the following options:"
+msgstr ""
+"Child Theme Configurator ne može da piše u datoteku sa stilovima. To se može rešiti uz "
+"pomoć jedne od sledećih opcija: "
+
+#: includes/class-ctc.php:1242
+msgid ""
+"Temporarily make the stylesheet writable by clicking the button below. You should "
+"change this back when you are finished editing for security by clicking \"Make read-only"
+"\" under the \"Files\" tab. "
+msgstr ""
+"Trenutno učinite datoteku sa stilovima raspoloživom za pisanje tako što ćete "
+"kliknuti na taster ispod. Kad završite uređivanje, trebalo bi da vratite opciju na "
+"prethodno stanje iz bezbednosnih razloga, tako što ćete kliknuti na \"Raspoloživo samo "
+"za čitanje\" na tabulatoru \"Datoteke\". "
+
+#: includes/class-ctc.php:1245
+msgid "Temporarily make stylesheet writable"
+msgstr "Privremeno napravite datoteku sa stilovima raspoloživu za pisanje."
+
+#: includes/class-ctc.php:1246
+msgid ""
+"Add your FTP/SSH "
+"credentials to the WordPress config file . "
+msgstr ""
+"Dodajte svoje FTP/SSH "
+"akreditive WordPress datoteci za konfiguraciju . "
+
+#: includes/class-ctc.php:1248
+msgid ""
+"Assign WordPress to an application pool "
+"that has write permissions (Windows IIS systems). "
+msgstr ""
+"Dodelite WordPress skupu aplikacija "
+"koji ima dozvole za pisanje (Windows IIS systems). "
+
+#: includes/class-ctc.php:1249
+msgid ""
+"Set the stylesheet write permissions on the server "
+"manually (not recommended). "
+msgstr ""
+"Podesite ručno dozvole na serveru (ne "
+"preporučuje se). "
+
+#: includes/class-ctc.php:1251
+msgid "Run PHP under Apache with suEXEC (contact your web host). "
+msgstr "Pokreni PHP pod Apache-om uz suEXEC (obratite se svom web hostu). "
+
+#: includes/class-ctc.php:1261
+msgid ""
+"This Child Theme is not owned by your website account. It may have been created by a "
+"prior version of this plugin or by another program. Moving forward, it must be owned by "
+"your website account to make changes. Child Theme Configurator will attempt to correct "
+"this when you click the button below."
+msgstr ""
+"Nalog vašeg web site-a ne poseduje ovu podređenu temu. Možda je kreirana od strane "
+"prethodne verzije ovog plugin-a ili od strane drugog programa. Da biste pravili izmene, "
+"mora biti u vlasništvu naloga vašeg web site-a. Child Theme Configurator će pokušati da "
+"to ispravi kad kliknete na donji taster."
+
+#: includes/class-ctc.php:1264
+msgid "Correct Child Theme Permissions"
+msgstr "Dozvole za ispravljanje podređene teme"
+
+#: includes/class-ctc.php:1271
+msgid ""
+"Child Theme Configurator needs to update its interal data. Please set your preferences "
+"below and click \"Generate Child Theme Files\" to update your configuration."
+msgstr ""
+"Child Theme Configurator treba da ažurira svoje interne podatke. Podesite "
+"karakteristike i kliknite na \"Generiši datoteke podređene teme\" kako biste ažurirali "
+"konfiguraciju."
+
+#: includes/class-ctc.php:1277
+msgid ""
+"However, some styles could not be parsed due to memory limits. Try "
+"deselecting \"Additional Stylesheets\" below and click \"Generate/Rebuild Child Theme "
+"Files\". %sWhy am I seeing this?%s"
+msgstr ""
+"Neki stilovi ne mogu biti parsirani zbog ograničenja memorije. "
+"Pokušajte da poništite štikliranje opcije \"Dodatne datoteke sa stilovima\" i kliknite "
+"na \"Generiši/Ponovo izgradi datoteke sa podređenimm temama\". %Zašto vidim ovu poruku?"
+"% "
+
+#: includes/class-ctc.php:1286
+msgid ""
+"Child Theme Configurator did not detect any configuration data because a previously "
+"configured Child Theme has been removed. Please set your preferences below and click "
+"\"Generate Child Theme Files\"."
+msgstr ""
+"Child Theme Configurator nije otkrio podatke o konfiguraciji jer je prethodno "
+"konfigurisana podređena tema uklonjena. Podesite karakteristike i kliknite na "
+"\"Generiši datoteke podređene teme\"."
+
+#: includes/forms/addl_css.php:7
+msgid "Parse additional stylesheets:"
+msgstr "Parsiraj dodatne datoteke sa stilovima:"
+
+#: includes/forms/addl_css.php:11 includes/forms/parent-child.php:226
+msgid ""
+"Stylesheets that are currently being loaded by the parent theme are automatically "
+"selected below (except for Bootstrap stylesheets which add a large amount data to the "
+"configuration). To further reduce overhead, select only the additional stylesheets you "
+"wish to customize."
+msgstr ""
+"Datoteke sa stilovima koje trenutno učitava nadređena tema automatski se biraju dole "
+"(osim Bootstrap datoteke sa stilovima koja dodaje veliku količinu podataka "
+"konfiguraciji). Da biste redukovali opterećenje, odaberite samo dodatne datoteke sa "
+"stilovima koje želite da prilagodite."
+
+#: includes/forms/addl_panels.php:8 includes/forms/addl_panels.php:9
+msgid "Learn more about IntelliWidget"
+msgstr "Saznajte više o IntelliWidget-u"
+
+#: includes/forms/addl_panels.php:9
+msgid ""
+"IntelliWidget is a versatile widget manager that does the work of multiple plugins by "
+"combining custom page menus, featured posts, sliders and other dynamic content features "
+"into a single plugin that can display on a per-page or site-wide basis."
+msgstr ""
+"IntelliWidget je svestran upravljač widget-ima koji radi sa mnogim dodacima tako što "
+"kombinuje prilagođene stranice menija, uobličene postove, slajdere i druge "
+"funkcionalnosti dinamičkog sadržaja u jednom plugin-u koji se može prikazati na "
+"stranici ili na site-u. "
+
+#: includes/forms/addl_panels.php:10 includes/forms/addl_panels.php:13
+msgid "Learn more"
+msgstr "Saznajte više"
+
+#: includes/forms/addl_panels.php:11 includes/forms/addl_panels.php:12
+msgid "Learn more about IW Responsive Menu"
+msgstr "Saznajte više o IW responzivnom meniju"
+
+#: includes/forms/addl_panels.php:12
+msgid ""
+"IntelliWidget Responsive Menu lets you break free from your theme’s built-in responsive "
+"menu options and gives you complete control over the user experience."
+msgstr ""
+"IntelliWidget responzivni meni omogućava vam da se oslobodite ugrađenih opcija "
+"responzivnog menija i daje vam potpunu kontrolu korisničkog iskustva."
+
+#: includes/forms/addl_panels.php:16 includes/help/help_en_US.php:211
+msgid "Learn more about CTC Pro"
+msgstr "Saznajte više o CTC Pro"
+
+#: includes/forms/addl_panels.php:17
+msgid "Customizing WordPress just got even easier."
+msgstr "Prilagođavanje WordPress-a upravo je postalo još lakše!"
+
+#: includes/forms/addl_panels.php:18
+msgid ""
+"Thousands of users have already seen the benefits of using Child Theme Configurator. If "
+"you spend any amount of time customizing WordPress, CTC Pro will help maximize your "
+"productivity."
+msgstr ""
+"Hiljade korisnika već su uvidele prednosti upotrebe dodatka Child Theme Configurator. "
+"Ako trošite vreme na prilagođavanje WordPress-a, CTC Pro pomoći će vam da povećate "
+"produktivnost."
+
+#: includes/forms/addl_panels.php:19
+msgid "Designed by Developers Who Use It Every Day."
+msgstr "Osmislili su ga programeri koji ga svakodnevno koriste."
+
+#: includes/forms/addl_panels.php:20
+msgid ""
+"We've packed in more features to make design work quicker and easier with Child "
+"Theme Configurator Pro. "
+msgstr ""
+"Spakovali smo više funkcioonalnosti kako bi dizajn radio brže i lakše uz Child "
+"Theme Configurator Pro. "
+
+#: includes/forms/addl_panels.php:22
+msgid "Customize Plugin Stylesheets"
+msgstr "Datoteke sa stilovima za prilagođavanje plugin-a "
+
+#: includes/forms/addl_panels.php:23
+msgid ""
+"Apply the power of CTC's top-rated interface to your site's plugin styles. All new "
+"design makes it much easier to get the results you want."
+msgstr ""
+"Primenite moć najbolje ocenjenih CTC interfejsa na plugin stilove svog site-a. "
+"Zahvaljujući novom dizajnu, biće vam mnogo lakše da dobijete rezultate koje želite. "
+
+#: includes/forms/addl_panels.php:24
+msgid "Quick Preview"
+msgstr "Brzi pregled"
+
+#: includes/forms/addl_panels.php:24
+msgid "Test your child theme with a single click."
+msgstr "Testirajte svoju podređenu temu jednim klikom."
+
+#: includes/forms/addl_panels.php:25
+msgid "Find related styles"
+msgstr "Nađite povezane stilove"
+
+#: includes/forms/addl_panels.php:25
+msgid ""
+"Use the \"All Styles\" panel to edit groups of selectors from a single combined list."
+msgstr ""
+"Koristite panel \"Svi stilovi\" da biste uredili grupe selektora iz pojedinačne "
+"kombinovane liste. "
+
+#: includes/forms/addl_panels.php:26
+msgid "Find styles by Nav Menu"
+msgstr "Nađi stilove u navigacionom meniju"
+
+#: includes/forms/addl_panels.php:26
+msgid "Tweak menus quickly and easily."
+msgstr "Uzima delove menija lako i brzo."
+
+#: includes/forms/addl_panels.php:27
+msgid "Most recent edits"
+msgstr "Najnovije ispravke"
+
+#: includes/forms/addl_panels.php:27
+msgid "Return to recently edited selectors from a toggleable sidebar."
+msgstr "Vratite se na nedavno uređene selektore sa podesive bočne trake. "
+
+#: includes/forms/addl_panels.php:28
+msgid "Free Upgrades"
+msgstr "Besplatna nadgradnja"
+
+#: includes/forms/addl_panels.php:29
+msgid "Your Update Key gives you access to new Pro features as soon as they are released."
+msgstr ""
+"Vaš novi ključ za ažuriranje omogućava vam pristup novim profesionalnim "
+"funkcionalnostima čim se objave."
+
+#: includes/forms/addl_panels.php:30
+msgid "Top-rated Online Support"
+msgstr "Najbolje ocenjena online podrška"
+
+#: includes/forms/addl_panels.php:31
+msgid "Online Documentation"
+msgstr "Online dokumentacija"
+
+#: includes/forms/addl_panels.php:32
+msgid "Tutorial Videos"
+msgstr "Video tutorijali"
+
+#: includes/forms/addl_panels.php:34
+msgid "For a limited time save over 15% off Child Theme Configurator Pro."
+msgstr ""
+"U ograničenom vremenskom periodu, uštedite više od 15% za Child Theme Configurator Pro."
+
+#: includes/forms/addl_panels.php:35
+msgid "Upgrade Now"
+msgstr "Nadgradi sada"
+
+#: includes/forms/addl_panels.php:35
+msgid "Buy Now - Only $14.95 USD*"
+msgstr "Kupite sada - samo $14.95 USD*"
+
+#: includes/forms/addl_panels.php:35
+msgid "*Prices subject to change."
+msgstr "*Cene su podložne promenama."
+
+#: includes/forms/addl_tabs.php:8
+msgid "Get CTC Pro"
+msgstr "Obezbedite CTC Pro"
+
+#: includes/forms/at-import.php:15 includes/forms/query-selector.php:85
+msgid "Save"
+msgstr "Sačuvaj"
+
+#: includes/forms/at-import.php:18
+msgid "@import Statements"
+msgstr "@uvezi izjave"
+
+#: includes/forms/backup.php:8
+msgid "Backup"
+msgstr "Backup"
+
+#: includes/forms/backups.php:10 includes/forms/parent-child.php:209
+msgid "Restore backup from"
+msgstr "Obnovi backup iz"
+
+#: includes/forms/fileform.php:8
+msgid "The Theme editor has been disabled. Template files must be edited offline."
+msgstr "Uređivač teme je deaktiviran. Datoteke šablona moraju se uređivati offline."
+
+#: includes/forms/fileform.php:12
+msgid "Click here to edit template files using the Theme Editor"
+msgstr "Kliknite ovde da biste uredili datoteke šablona uz pomoć uređivača teme"
+
+#: includes/forms/fileform.php:23
+msgid "Parent Templates"
+msgstr "Nadređeni šabloni"
+
+#: includes/forms/fileform.php:23
+msgid "Child Theme Files"
+msgstr "Datoteke podređene teme"
+
+#: includes/forms/fileform.php:28
+msgid "Copy PHP template files from the parent theme by selecting them here."
+msgstr "Kopirajte PHP datoteke šablona iz nadređene teme tako što ćete ih odabrati ovde. "
+
+#: includes/forms/fileform.php:31
+msgid ""
+"CAUTION: If your child theme is active, the child theme version of the file will be "
+"used instead of the parent immediately after it is copied."
+msgstr ""
+"PAŽNJA: Ako je vaša podređena tema aktivna, verzija podređene teme datoteke koristiće "
+"se umesto nadređene odmah nakon kopiranja."
+
+#: includes/forms/fileform.php:33
+msgid "The %s file is generated separately and cannot be copied here."
+msgstr "Datoteka %s je posebno generisana i ne može se kopirati ovde. "
+
+#: includes/forms/fileform.php:43
+msgid "Delete child theme templates by selecting them here."
+msgstr "Obrišite šablone podređene teme tako što ćete ih odabrati ovde."
+
+#: includes/forms/fileform.php:44
+msgid ""
+"Delete child theme templates or make them writable by selecting them here. Writable "
+"files are displayed in red ."
+msgstr ""
+"Obrišite šablone podređene teme ili ih podesite za pisanje tako što ćete ih odabrati "
+"ovde. Datoteke za pisanje prikazane su crvenom bojom ."
+
+#: includes/forms/fileform.php:57
+msgid "Make Selected Writable"
+msgstr "Neka odabrano bude raspoloživo za pisanje"
+
+#: includes/forms/fileform.php:61
+msgid "Copy Selected to Child Theme"
+msgstr "Kopiraj odabrano u podređenu temu"
+
+#: includes/forms/fileform.php:61 includes/forms/images.php:21
+msgid "Delete Selected"
+msgstr "Obriši odabrano"
+
+#: includes/forms/files.php:15
+msgid "Upload New Child Theme Image"
+msgstr "Otpremi novu sliku podređene teme"
+
+#: includes/forms/files.php:18
+msgid ""
+"Theme images reside under the images
directory in your child theme and are "
+"meant for stylesheet use only. Use the Media Library for content images."
+msgstr ""
+"Slike teme nalaze se u direktorijumu slike
u vašoj podređenoj temi i "
+"napravljene su samo za upotrebu datoteke sa stilovima. Koristite biblioteku za slike "
+"sadržaja."
+
+#: includes/forms/files.php:25 includes/forms/files.php:51
+msgid "Upload"
+msgstr "Otpremi"
+
+#: includes/forms/files.php:32
+msgid "Child Theme Screenshot"
+msgstr "Snimak ekrana podređene teme"
+
+#: includes/forms/files.php:41
+msgid "Upload New Screenshot"
+msgstr "Otpremi novi snimak ekrana"
+
+#: includes/forms/files.php:44
+msgid ""
+"The theme screenshot should be a 4:3 ratio (e.g., 880px x 660px) JPG, PNG or GIF. It "
+"will be renamed screenshot
."
+msgstr ""
+"Odnos teme i snimka ekrana treba da bude 4:3 (e.g., 880px x 660px) JPG, PNG or GIF. "
+"Naziv će biti promenjen slika ekrana
."
+
+#: includes/forms/files.php:59
+msgid "Export Child Theme as Zip Archive"
+msgstr "Izvezi podređenu temu kao zip arhivu"
+
+#: includes/forms/files.php:64
+msgid "Export"
+msgstr "Izvezi"
+
+#: includes/forms/files.php:73
+msgid "Secure Child Theme"
+msgstr "Obezbedi podređenu temu"
+
+#: includes/forms/files.php:76
+msgid "Attempt to reset child theme permissions to user ownership and read-only access."
+msgstr ""
+"Pokušaj da poništiš dozvole podređene teme u vlasništvu korisnika i pristup samo za "
+"čitanje."
+
+#: includes/forms/files.php:82
+msgid "Make read-only"
+msgstr "Neka bude samo za čitanje"
+
+#: includes/forms/files.php:99
+msgid "Debug"
+msgstr "Otkloni greške"
+
+#: includes/forms/files.php:102
+msgid "Check the box to enable debugging output."
+msgstr "Štiklirajte polje da biste aktivirali otklanjanje grešaka"
+
+#: includes/forms/images.php:10
+msgid "Child Theme Images"
+msgstr "Slike podređene teme"
+
+#: includes/forms/images.php:13
+msgid "Delete child theme images by selecting them here."
+msgstr "Obrišite slike podređene teme tako što ćete ih odabrati ovde."
+
+#: includes/forms/main.php:23
+msgid "version"
+msgstr "verzija"
+
+#: includes/forms/parent-child.php:17
+msgid "Parent Theme"
+msgstr "Nadređena tema"
+
+#: includes/forms/parent-child.php:25
+msgid "Child Theme"
+msgstr "Podređena tema"
+
+#: includes/forms/parent-child.php:27
+msgid "(click to edit additional fields)"
+msgstr "(kliknite da biste uredili dodatna polja)"
+
+#: includes/forms/parent-child.php:34
+msgid "Create New Child Theme"
+msgstr "Kreiraj novu podređenu temu"
+
+#: includes/forms/parent-child.php:43
+msgid "Use Existing Child Theme"
+msgstr "Koristi postojeću podređenu temu"
+
+#: includes/forms/parent-child.php:48
+msgid "Theme Slug"
+msgstr "Slug teme"
+
+#: includes/forms/parent-child.php:59
+msgid "Child Theme Name"
+msgstr "Naziv podređene teme"
+
+#: includes/forms/parent-child.php:63
+msgid "Theme Name"
+msgstr "Naziv teme"
+
+#: includes/forms/parent-child.php:66 includes/forms/parent-child.php:70
+msgid "Theme Website"
+msgstr "Tema web site-a"
+
+#: includes/forms/parent-child.php:73 includes/forms/parent-child.php:77
+msgid "Author"
+msgstr "Autor"
+
+#: includes/forms/parent-child.php:81 includes/forms/parent-child.php:85
+msgid "Author Website"
+msgstr "Autor web site-a"
+
+#: includes/forms/parent-child.php:88
+msgid "Theme Description"
+msgstr "Opis teme"
+
+#: includes/forms/parent-child.php:91
+msgid "Description"
+msgstr "Opis"
+
+#: includes/forms/parent-child.php:94
+msgid "Theme Tags"
+msgstr "Oznake teme"
+
+#: includes/forms/parent-child.php:97
+msgid "Tags"
+msgstr "Oznake"
+
+#: includes/forms/parent-child.php:100 includes/forms/parent-child.php:104
+msgid "Version"
+msgstr "Verzija"
+
+#: includes/forms/parent-child.php:110
+msgid "Stylesheet handling"
+msgstr "Upravljanje datotekama sa stilovima"
+
+#: includes/forms/parent-child.php:113
+msgid "(click to view options)"
+msgstr "(kliknite da biste videli opcije)"
+
+#: includes/forms/parent-child.php:121
+msgid "Enqueue parent stylesheet (default)"
+msgstr "Dodaj nadređenu datoteku sa stilovima (podrazumevano)"
+
+#: includes/forms/parent-child.php:124
+msgid ""
+"Select this option if the parent theme enqueues the stylesheet but has no special "
+"handling for child themes. Start with this option if unsure."
+msgstr ""
+"Odaberite ovu opciju ako je nadređena tema dodala datoteku sa stilovima, ali nema "
+"poseban način upravljanja za podređene teme. Ako niste sigurni, počnite od ove opcije."
+
+#: includes/forms/parent-child.php:127
+msgid ""
+"NOTE: This theme links the stylesheet in the header template and should use the "
+"@import option to render correctly. "
+msgstr ""
+"NAPOMENA: Ova tema povezuje datoteku sa stilovima u zaglavlju šablona i treba "
+"koristiti opciju @uvezi da bi se ispravno prikazala. "
+
+#: includes/forms/parent-child.php:132
+msgid "@import
parent stylesheet"
+msgstr "@uvezi
nadređenu datoteku sa stilovima"
+
+#: includes/forms/parent-child.php:135
+msgid ""
+"Select this option if the parent theme links the stylesheet in the header template. "
+"Using @import
is discouraged but necessary in this case unless you modify "
+"the header template."
+msgstr ""
+"Odaberite ovu opciju ako nadređena tema povezuje datoteku sa stilovima u zaglavlju "
+"šablona. Upotreba opcije @uvezi
se ne preporučuje, ali u ovom slučaju je "
+"neophodna, osim ako izmenite zaglavlje šablona. "
+
+#: includes/forms/parent-child.php:142
+msgid "Enqueue child stylesheet"
+msgstr "Dodaj datoteku sa stilovima"
+
+#: includes/forms/parent-child.php:145
+msgid ""
+"Select this option if the parent theme incorrectly loads the \"template\" stylesheet or "
+"does not load the \"style.css\" file at all. This is unusual but occurs in some themes."
+msgstr "Odaberite ovu opciju ako nadređena tema netačno učitava datoteku sa stilovima "
+
+#: includes/forms/parent-child.php:152
+msgid "None (handled by theme)"
+msgstr "Nijedan (rukovodi tema)"
+
+#: includes/forms/parent-child.php:156
+msgid ""
+"Select this option if all stylesheets are automatically loaded for child themes (e.g., "
+"\"Responsive\" by CyberChimps)."
+msgstr ""
+"Odaberite ovu opciju ako se sve datoteke sa stilovima automatski učitavaju za podređene "
+"teme (npr. \"Responsive\" čiji je autor CyberChimps)."
+
+#: includes/forms/parent-child.php:161
+msgid "Copy Parent Theme Menus, Widgets and other Options"
+msgstr "Kopiraj meni nadređene teme, widget-e i druge opcije"
+
+#: includes/forms/parent-child.php:168 includes/forms/parent-child.php:183
+msgid "NOTE:"
+msgstr "NAPOMENA:"
+
+#: includes/forms/parent-child.php:170
+msgid "This will overwrite child theme options you may have already set."
+msgstr "Ovim ćete poništiti opcije podređene teme koje ste možda već podesili."
+
+#: includes/forms/parent-child.php:176
+msgid "Backup current stylesheet"
+msgstr "Uradi backup za tekuću datoteku sa stilovima"
+
+#: includes/forms/parent-child.php:185
+msgid ""
+"This creates a copy of the current stylesheet before applying changes. You can remove "
+"old backup files using the Files tab."
+msgstr ""
+"Ovim se kreira kopija tekuće datoteke sa stilovima pre nego što se primene izmene. "
+"Možete ukloniti stare datoteke za podršku uz pomoć tabulatora ‘Datoteke’. "
+
+#: includes/forms/parent-child.php:190
+msgid "Reset/Restore from backup"
+msgstr "Poništi/Vrati iz backup-a"
+
+#: includes/forms/parent-child.php:196
+msgid "Leave unchanged"
+msgstr "Ostavi nepromenjeno"
+
+#: includes/forms/parent-child.php:202
+msgid "Reset all"
+msgstr "Poništi sve"
+
+#: includes/forms/parent-child.php:222
+msgid "Parse additional stylesheets"
+msgstr "Parsiraj dodatne datoteke sa stilovima"
+
+#: includes/forms/parent-child.php:245
+msgid "Generate/Rebuild Child Theme Files"
+msgstr "Generiši/Ponovo izgradi datoteke podređene teme"
+
+#: includes/forms/query-selector.php:13
+msgid "Query"
+msgstr "Upit"
+
+#: includes/forms/query-selector.php:24
+msgid "Selector"
+msgstr "Selektor"
+
+#: includes/forms/query-selector.php:37 includes/forms/rule-value.php:29
+msgid "Sample"
+msgstr "Primer"
+
+#: includes/forms/query-selector.php:45
+msgid "Save Child Values"
+msgstr "Sačuvaj podređene vrednosti"
+
+#: includes/forms/query-selector.php:52 includes/forms/rule-value.php:13
+msgid "Rule"
+msgstr "Pravilo"
+
+#: includes/forms/query-selector.php:55
+msgid "Parent Value"
+msgstr "Nadređena vrednost"
+
+#: includes/forms/query-selector.php:58
+msgid "Child Value"
+msgstr "Podređena vrednost"
+
+#: includes/forms/query-selector.php:64
+msgid "New Rule"
+msgstr "Novo pravilo"
+
+#: includes/forms/query-selector.php:74
+msgid "Order"
+msgstr "Nalog"
+
+#: includes/forms/query-selector.php:83
+msgid "Copy Selector"
+msgstr "Kopiraj selektor"
+
+#: includes/forms/query-selector.php:88
+msgid "Raw CSS"
+msgstr "Neobrađeni CSS"
+
+#: includes/forms/query-selector.php:90
+msgid "Use to enter shorthand CSS or new @media queries and selectors."
+msgstr "Koristite da biste uneli shorthand CSS ili nove @media upite i selektore."
+
+#: includes/forms/query-selector.php:90
+msgid ""
+"Values entered here are merged into existing child styles or added to the child "
+"stylesheet if they do not exist in the parent."
+msgstr ""
+"Ovde unete vrednosti spajaju se u postojeće podređene stilove ili se dodaju podređenoj "
+"datoteci sa stilovima ako ne postoje u nadređenoj datoteci. "
+
+#: includes/forms/related.php:1
+msgid "New user?"
+msgstr "Novi korisnik?"
+
+#: includes/forms/related.php:1
+msgid "Click help"
+msgstr "Kliknite za pomoć"
+
+#: includes/forms/related.php:1
+msgid "Get CTC Pro and other tools"
+msgstr "Obezbedite CTC Pro i druge alate"
+
+#: includes/forms/related.php:1
+msgid "Lilaea Media - Responsive Tools for a Mobile World"
+msgstr "Lilaea Media - odgovarajući alati za svet mobilnih "
+
+#: includes/forms/rule-value.php:26
+msgid "Value"
+msgstr "Vrednost"
+
+#: includes/forms/tabs.php:11
+msgid "Parent/Child"
+msgstr "Nadređeni/Podređeni"
+
+#: includes/forms/tabs.php:16
+msgid "Query/Selector"
+msgstr "Upit/Selektor"
+
+#: includes/forms/tabs.php:19
+msgid "Rule/Value"
+msgstr "Pravilo/Vrednost"
+
+#: includes/forms/tabs.php:22
+msgid "@import"
+msgstr "@uvezi"
+
+#: includes/forms/tabs.php:25
+msgid "Child CSS"
+msgstr "Podređeni CSS"
+
+#: includes/forms/tabs.php:28
+msgid "Parent CSS"
+msgstr "Nadređeni CSS"
+
+#: includes/forms/tabs.php:34
+msgid "Files"
+msgstr "Datoteke"
+
+#: includes/forms/themepreview.php:12
+msgid "Version: "
+msgstr "Verzija"
+
+#: includes/forms/themepreview.php:14
+msgid "By: "
+msgstr "Od:"
+
+#: includes/forms/themepreview.php:16
+msgid "Preview"
+msgstr "Pregled"
+
+#: includes/forms/themepreview.php:17
+msgid " in default Site"
+msgstr "na podrazumevanom site-u"
+
+#: includes/forms/themepreview.php:21
+msgid "Not Network Enabled"
+msgstr "Nema aktivirane mreže"
+
+#. Plugin URI of the plugin/theme
+msgid "http://www.lilaeamedia.com/plugins/child-theme-configurator/"
+msgstr "http://www.lilaeamedia.com/plugins/child-theme-configurator/"
+
+#. Description of the plugin/theme
+msgid ""
+"Create a Child Theme and customize the stylesheet and templates. Fast CSS editor lets "
+"you search, preview and modify by selector, rule or value."
+msgstr ""
+"Kreirajte podređenu temu i prilagodite datoteke sa stilovima i šablone. Brzi CSS "
+"uređivač omogućava vam pretragu, pregled i modifikovanje na osnovu selektora, pravila "
+"ili vrednosti."
+
+#. Author of the plugin/theme
+msgid "Lilaea Media"
+msgstr "Lilaea Media"
+
+#. Author URI of the plugin/theme
+msgid "http://www.lilaeamedia.com/"
+msgstr "http://www.lilaeamedia.com/"
diff --git a/wp-content/plugins/child-theme-configurator/lang/child-theme-configurator.pot b/wp-content/plugins/child-theme-configurator/lang/child-theme-configurator.pot
new file mode 100644
index 0000000..839b0b4
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/lang/child-theme-configurator.pot
@@ -0,0 +1,1467 @@
+# Copyright (C) 2019 Child Theme Configurator
+# This file is distributed under the same license as the Child Theme Configurator package.
+msgid ""
+msgstr ""
+"Project-Id-Version: Child Theme Configurator 2.4.2\n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/child-theme-configurator\n"
+"POT-Creation-Date: 2019-02-17 01:46:27+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2019-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: LANGUAGE \n"
+
+#. #-#-#-#-# child-theme-configurator.pot (Child Theme Configurator 2.4.2) #-#-#-#-#
+#. Plugin Name of the plugin/theme
+#: includes/classes/Core.php:97 includes/classes/Core.php:108
+#: includes/forms/main.php:35
+msgid "Child Theme Configurator"
+msgstr ""
+
+#: includes/classes/Core.php:98 includes/classes/Core.php:109
+#: includes/classes/Core.php:120
+msgid "Child Themes"
+msgstr ""
+
+#: includes/classes/Core.php:138
+msgid "Child Theme Configurator requires WordPress version %s or later."
+msgstr ""
+
+#: includes/classes/UI.php:35
+msgid "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
+msgstr ""
+
+#: includes/classes/UI.php:115
+msgid ""
+"The Theme editor has been disabled. Template files must be edited offline."
+msgstr ""
+
+#: includes/classes/UI.php:119
+msgid "Click here to edit template files using the Theme Editor"
+msgstr ""
+
+#: includes/classes/UI.php:290
+msgid "URL/None"
+msgstr ""
+
+#: includes/classes/UI.php:291
+msgid "Origin"
+msgstr ""
+
+#: includes/classes/UI.php:292
+msgid "Color 1"
+msgstr ""
+
+#: includes/classes/UI.php:293
+msgid "Color 2"
+msgstr ""
+
+#: includes/classes/UI.php:294
+msgid "Width/None"
+msgstr ""
+
+#: includes/classes/UI.php:295
+msgid "Style"
+msgstr ""
+
+#: includes/classes/UI.php:296
+msgid "Color"
+msgstr ""
+
+#: includes/classes/UI.php:298
+msgid ""
+"Are you sure you wish to RESET? This will destroy any work you have done in "
+"the Configurator."
+msgstr ""
+
+#: includes/classes/UI.php:299
+msgid "! "
+msgstr ""
+
+#: includes/classes/UI.php:300 includes/forms/rule-value.php:33
+msgid "Selectors"
+msgstr ""
+
+#: includes/classes/UI.php:301
+msgid "Close"
+msgstr ""
+
+#: includes/classes/UI.php:302
+msgid "Edit Selector"
+msgstr ""
+
+#: includes/classes/UI.php:303
+msgid "Cancel"
+msgstr ""
+
+#: includes/classes/UI.php:304
+msgid "Rename"
+msgstr ""
+
+#: includes/classes/UI.php:305
+msgid "The stylesheet cannot be displayed."
+msgstr ""
+
+#: includes/classes/UI.php:306
+msgid "(Child Only)"
+msgstr ""
+
+#: includes/classes/UI.php:307
+msgid "Please enter a valid Child Theme."
+msgstr ""
+
+#: includes/classes/UI.php:308
+msgid "Please enter a valid Child Theme name."
+msgstr ""
+
+#: includes/classes/UI.php:309
+msgid "%s exists. Please enter a different Child Theme"
+msgstr ""
+
+#: includes/classes/UI.php:310
+msgid "The page could not be loaded correctly."
+msgstr ""
+
+#: includes/classes/UI.php:311
+msgid ""
+"Conflicting or out-of-date jQuery libraries were loaded by another plugin:"
+msgstr ""
+
+#: includes/classes/UI.php:312
+msgid "Deactivating or replacing plugins may resolve this issue."
+msgstr ""
+
+#: includes/classes/UI.php:313
+msgid "%sWhy am I seeing this?%s"
+msgstr ""
+
+#: includes/classes/UI.php:316
+msgid "No Styles Available. Check Parent/Child settings."
+msgstr ""
+
+#: includes/classes/UI.php:317
+msgid "Updating"
+msgstr ""
+
+#: includes/classes/UI.php:318
+msgid "Checking"
+msgstr ""
+
+#: includes/classes/UI.php:319
+msgid "The theme \"%s\" generated unexpected PHP debug output."
+msgstr ""
+
+#: includes/classes/UI.php:320
+msgid ""
+"The theme \"%s\" could not be analyzed because the preview did not render "
+"correctly."
+msgstr ""
+
+#: includes/classes/UI.php:321
+msgid ""
+"First, verify you can preview your home page with the "
+"Customizer and try analyzing again.
If that does not work, try "
+"temporarily disabling plugins that minify CSS or that "
+"force redirects between HTTP and HTTPS .
"
+msgstr ""
+
+#: includes/classes/UI.php:322
+msgid "Click to show/hide PHP debug output"
+msgstr ""
+
+#: includes/classes/UI.php:324
+msgid ""
+"PLEASE NOTE:
The analyzer reveals errors that "
+"may otherwise go undetected. Unless this is a fatal error, WordPress may "
+"appear to work correctly; however, PHP will continue to log the error until "
+"it is resolved. Please contact the author of any theme or plugin "
+"mentioned above and cut/paste the error from the text "
+"area. Do not use a screen capture as it may cut off part of the "
+"error text. Additional information about the error may also be "
+"available in the CTC documentation .
"
+msgstr ""
+
+#: includes/classes/UI.php:325
+msgid "Do Not Activate \"%s\"! A PHP FATAL ERROR has been detected."
+msgstr ""
+
+#: includes/classes/UI.php:326
+msgid "This theme loads stylesheets after the wp_styles queue."
+msgstr ""
+
+#: includes/classes/UI.php:327
+msgid ""
+"This makes it difficult for plugins to override these styles. You can try "
+"to resolve this using the \"Repair header template\" option (Step 6, "
+"\"Additional handling options\", below).
"
+msgstr ""
+
+#: includes/classes/UI.php:328
+msgid ""
+"This theme loads the parent theme's style.css
file outside the "
+"wp_styles queue."
+msgstr ""
+
+#: includes/classes/UI.php:329
+msgid ""
+"This is common with older themes but requires the use of @import"
+"code>, which is no longer recommended. You can try to resolve this using the "
+"\"Repair header template\" option (see step 6, \"Additional handling options"
+"\", below).
"
+msgstr ""
+
+#: includes/classes/UI.php:330
+msgid "This child theme does not load a Configurator stylesheet."
+msgstr ""
+
+#: includes/classes/UI.php:331
+msgid ""
+"If you want to customize styles using this plugin, please click "
+"\"Configure Child Theme\" again to add this to the settings.
"
+msgstr ""
+
+#: includes/classes/UI.php:332
+msgid ""
+"This child theme uses the parent stylesheet but does not load the parent "
+"theme's style.css
file."
+msgstr ""
+
+#: includes/classes/UI.php:333
+msgid ""
+"Please select a stylesheet handling method or check \"Ignore parent theme "
+"stylesheets\" (see step 6, below).
"
+msgstr ""
+
+#: includes/classes/UI.php:334
+msgid "This child theme appears to be functioning correctly."
+msgstr ""
+
+#: includes/classes/UI.php:335
+msgid "This theme appears OK to use as a Child theme."
+msgstr ""
+
+#: includes/classes/UI.php:336
+msgid "This Child Theme has not been configured for this plugin."
+msgstr ""
+
+#: includes/classes/UI.php:337
+msgid ""
+"The Configurator makes significant modifications to the child theme, "
+"including stylesheet changes and additional php functions. Please consider "
+"using the DUPLICATE child theme option (see step 1, above) and keeping the "
+"original as a backup.
"
+msgstr ""
+
+#: includes/classes/UI.php:338
+msgid ""
+"This child theme uses @import
to load the parent theme's "
+"style.css
file."
+msgstr ""
+
+#: includes/classes/UI.php:339
+msgid ""
+"Please consider selecting \"Use the WordPress style queue\" for the "
+"parent stylesheet handling option (see step 6, below).
"
+msgstr ""
+
+#: includes/classes/UI.php:340
+msgid ""
+"This theme loads additional stylesheets after the style.css
"
+"file:"
+msgstr ""
+
+#: includes/classes/UI.php:341
+msgid ""
+"Consider saving new custom styles to a \"Separate stylesheet\" (see step "
+"5, below) so that you can customize these styles.
"
+msgstr ""
+
+#: includes/classes/UI.php:342
+msgid ""
+"The parent theme's style.css
file is being loaded automatically."
+msgstr ""
+
+#: includes/classes/UI.php:343
+msgid ""
+"The Configurator selected \"Do not add any parent stylesheet handling\" "
+"for the \"Parent stylesheet handling\" option (see step 6, below).
"
+msgstr ""
+
+#: includes/classes/UI.php:344
+msgid ""
+"This theme does not require the parent theme's style.css
file "
+"for its appearance."
+msgstr ""
+
+#: includes/classes/UI.php:345
+msgid ""
+"This Child Theme was configured to accomodate a hard-coded stylesheet link."
+msgstr ""
+
+#: includes/classes/UI.php:346
+msgid ""
+"This workaround was used in earlier versions of CTC and can be eliminated "
+"by using the \"Repair header template\" option (see step 6, \"Additional "
+"handling options\", below).
"
+msgstr ""
+
+#: includes/classes/UI.php:347
+msgid ""
+"Click to show/hide raw analysis data. Please include contents below with any "
+"support requests."
+msgstr ""
+
+#: includes/classes/UI.php:348
+msgid ""
+"This child theme was configured using the CTC Pro \"Genesis stylesheet "
+"handling\" method."
+msgstr ""
+
+#: includes/classes/UI.php:349
+msgid ""
+"This method has been replaced by the \"Separate stylesheet\" and \"Ignore "
+"Parent Theme\" options ( selected below ) for broader framework "
+"compatability.
"
+msgstr ""
+
+#: includes/classes/UI.php:350
+msgid "%1Click Here%2 to view the theme as viewed by the Analyzer.
"
+msgstr ""
+
+#: includes/classes/UI.php:351
+msgid ""
+"This theme uses a RTL (right-to-left) stylesheet that is not being loaded in "
+"the child theme."
+msgstr ""
+
+#: includes/classes/UI.php:352
+msgid ""
+"Use the Web Fonts tab to add a link to the parent RTL stylesheet. See the "
+"documentation for more information."
+msgstr ""
+
+#: includes/classes/UI.php:353
+msgid "Both WP Rocket and Autoptimize plugins are enabled."
+msgstr ""
+
+#: includes/classes/UI.php:354
+msgid ""
+"The combination of these two plugins interferes with the Analysis results. "
+"Please temporarily deactivate one of them and Analyze again."
+msgstr ""
+
+#: includes/classes/UI.php:355
+msgid ""
+"The WordPress configuration file has been modified incorrectly."
+"strong> Please see this FAQ for more information."
+"
"
+msgstr ""
+
+#: includes/classes/Upgrade.php:60
+msgid "Enter your Update Key"
+msgstr ""
+
+#: includes/classes/Upgrade.php:61
+msgid ""
+"Sorry, we could not validate your Update Key. Please try again or, if you "
+"need assistance, please %s"
+msgstr ""
+
+#: includes/classes/Upgrade.php:61
+msgid "contact us."
+msgstr ""
+
+#: includes/classes/Upgrade.php:67
+msgid "Child Theme Configurator Pro version %s"
+msgstr ""
+
+#: includes/classes/Upgrade.php:67
+msgid ""
+" is not compatible with the installed version of Child Theme Configurator "
+"and has been deactivated."
+msgstr ""
+
+#: includes/classes/Upgrade.php:69
+msgid ""
+"You can upgrade to the latest version by clicking the button below. After "
+"validating the Update Key from your order, WordPress will retrieve the "
+"plugin from our website and install it automatically. If you no longer wish "
+"to use the premium version, you can dismiss this notice by clicking the "
+"close icon (x) at the top right."
+msgstr ""
+
+#: includes/classes/Upgrade.php:70
+msgid "Upgrade Now"
+msgstr ""
+
+#: includes/classes/Upgrade.php:188
+msgid "Update Plugin"
+msgstr ""
+
+#: includes/forms/addl_css.php:7
+msgid "Parse additional stylesheets:"
+msgstr ""
+
+#: includes/forms/addl_css.php:11
+msgid ""
+"Stylesheets that are currently being loaded by the parent theme are "
+"automatically selected below (except for Bootstrap stylesheets which add a "
+"large amount data to the configuration). To further reduce overhead, select "
+"only the additional stylesheets you wish to customize."
+msgstr ""
+
+#: includes/forms/addl_panels.php:8 includes/forms/addl_panels.php:9
+msgid "Learn more about Premium Support"
+msgstr ""
+
+#: includes/forms/addl_panels.php:9
+msgid ""
+"Maybe you are having trouble getting your child theme to work, or just don’t "
+"want to mess with it ... Let us set it up for you! "
+msgstr ""
+
+#: includes/forms/addl_panels.php:10 includes/forms/addl_panels.php:15
+msgid "Learn more"
+msgstr ""
+
+#: includes/forms/addl_panels.php:11 includes/forms/addl_panels.php:14
+msgid "Learn more about Hook Highlighter"
+msgstr ""
+
+#: includes/forms/addl_panels.php:12
+msgid ""
+"Hook Highlighter provides Administrators insight into the internal program "
+"flow of WordPress when activated on any front-facing page of a website."
+msgstr ""
+
+#: includes/forms/addl_panels.php:13
+msgid ""
+"Display action and filter hooks, program files and backtrace information "
+"inline for the current page."
+msgstr ""
+
+#: includes/forms/addl_panels.php:18
+msgid "Learn more about CTC Pro"
+msgstr ""
+
+#: includes/forms/addl_panels.php:19
+msgid "Customizing WordPress just got even easier."
+msgstr ""
+
+#: includes/forms/addl_panels.php:20
+msgid ""
+"Thousands of users have already seen the benefits of using Child Theme "
+"Configurator. If you spend any amount of time customizing WordPress, CTC Pro "
+"will help maximize your productivity."
+msgstr ""
+
+#: includes/forms/addl_panels.php:21
+msgid "Designed by Developers Who Use It Every Day."
+msgstr ""
+
+#: includes/forms/addl_panels.php:22
+msgid ""
+"We've packed in more features to make design work quicker and easier with "
+"Child Theme Configurator Pro. "
+msgstr ""
+
+#: includes/forms/addl_panels.php:24
+msgid "Customize Plugin Stylesheets"
+msgstr ""
+
+#: includes/forms/addl_panels.php:25
+msgid ""
+"Apply the power of CTC's top-rated interface to your site's plugin styles. "
+"All new design makes it much easier to get the results you want."
+msgstr ""
+
+#: includes/forms/addl_panels.php:26
+msgid "Quick Preview"
+msgstr ""
+
+#: includes/forms/addl_panels.php:26
+msgid "Preview your child theme with a single click."
+msgstr ""
+
+#: includes/forms/addl_panels.php:27
+msgid "Color Palettes"
+msgstr ""
+
+#: includes/forms/addl_panels.php:27
+msgid ""
+"Keep the colors you select just a click away. No more searching for hex "
+"codes and RGB values."
+msgstr ""
+
+#: includes/forms/addl_panels.php:28
+msgid "Find related styles"
+msgstr ""
+
+#: includes/forms/addl_panels.php:28
+msgid ""
+"Use the \"All Styles\" panel to edit groups of selectors from a single "
+"combined list."
+msgstr ""
+
+#: includes/forms/addl_panels.php:29
+msgid "Find styles by Nav Menu"
+msgstr ""
+
+#: includes/forms/addl_panels.php:29
+msgid "Tweak menus quickly and easily."
+msgstr ""
+
+#: includes/forms/addl_panels.php:30
+msgid "Most recent edits"
+msgstr ""
+
+#: includes/forms/addl_panels.php:30
+msgid "Return to recently edited selectors from a toggleable sidebar."
+msgstr ""
+
+#: includes/forms/addl_panels.php:31
+msgid "Add Child Theme Files"
+msgstr ""
+
+#: includes/forms/addl_panels.php:32
+msgid "Create new template and script files right from the admin."
+msgstr ""
+
+#: includes/forms/addl_panels.php:33
+msgid "Top-rated Online Support"
+msgstr ""
+
+#: includes/forms/addl_panels.php:34
+msgid "Online Documentation"
+msgstr ""
+
+#: includes/forms/addl_panels.php:35
+msgid "Tutorial Videos"
+msgstr ""
+
+#: includes/forms/addl_panels.php:37
+msgid "Upgrade Offer"
+msgstr ""
+
+#: includes/forms/addl_panels.php:38
+msgid "Use coupon code"
+msgstr ""
+
+#: includes/forms/addl_panels.php:38
+msgid "wordpress-org"
+msgstr ""
+
+#: includes/forms/addl_panels.php:38
+msgid "and get 20% off entire order ."
+msgstr ""
+
+#: includes/forms/addl_panels.php:39
+msgid "Order Now"
+msgstr ""
+
+#: includes/forms/addl_panels.php:39
+msgid "*Prices and offers subject to change."
+msgstr ""
+
+#: includes/forms/addl_tabs.php:7
+msgid "Upgrade"
+msgstr ""
+
+#: includes/forms/backup.php:8
+msgid "Backup"
+msgstr ""
+
+#: includes/forms/backups.php:10
+msgid "Restore backup from"
+msgstr ""
+
+#: includes/forms/current-theme.php:6
+msgid "Currently loaded"
+msgstr ""
+
+#: includes/forms/debug-toggle.php:8
+msgid "Debug"
+msgstr ""
+
+#: includes/forms/errorstrings.php:6
+msgid "Zip file creation failed."
+msgstr ""
+
+#: includes/forms/errorstrings.php:7
+msgid "You do not have permission to configure child themes."
+msgstr ""
+
+#: includes/forms/errorstrings.php:8
+msgid "%s does not exist. Please select a valid Parent Theme."
+msgstr ""
+
+#: includes/forms/errorstrings.php:9
+msgid "The Functions file is required and cannot be deleted."
+msgstr ""
+
+#: includes/forms/errorstrings.php:10
+msgid "Please select a valid Parent Theme."
+msgstr ""
+
+#: includes/forms/errorstrings.php:11
+msgid "Please select a valid Child Theme."
+msgstr ""
+
+#: includes/forms/errorstrings.php:12
+msgid "Please enter a valid Child Theme directory name."
+msgstr ""
+
+#: includes/forms/errorstrings.php:13
+msgid ""
+"%s exists. Please enter a different Child Theme template "
+"name."
+msgstr ""
+
+#: includes/forms/errorstrings.php:14
+msgid "Your theme directories are not writable."
+msgstr ""
+
+#: includes/forms/errorstrings.php:16
+msgid "Could not upgrade child theme"
+msgstr ""
+
+#: includes/forms/errorstrings.php:17
+msgid "Your stylesheet is not writable."
+msgstr ""
+
+#: includes/forms/errorstrings.php:19
+msgid ""
+"A closing PHP tag was detected in Child theme functions file so \"Parent "
+"Stylesheet Handling\" option was not configured. Closing PHP at the end of "
+"the file is discouraged as it can cause premature HTTP headers. Please edit "
+"functions.php
to remove the final ?>
tag and "
+"click \"Generate/Rebuild Child Theme Files\" again."
+msgstr ""
+
+#: includes/forms/errorstrings.php:20
+msgid "Could not copy file: %s"
+msgstr ""
+
+#: includes/forms/errorstrings.php:21
+msgid "Could not delete %s file."
+msgstr ""
+
+#: includes/forms/errorstrings.php:22
+msgid "could not copy %s"
+msgstr ""
+
+#: includes/forms/errorstrings.php:23
+msgid "invalid dir: %s"
+msgstr ""
+
+#: includes/forms/errorstrings.php:24
+msgid "deleted: %s != %s files"
+msgstr ""
+
+#: includes/forms/errorstrings.php:25
+msgid "newfiles != files"
+msgstr ""
+
+#: includes/forms/errorstrings.php:26
+msgid "There were errors while resetting permissions."
+msgstr ""
+
+#: includes/forms/errorstrings.php:28
+msgid "Could not upload file."
+msgstr ""
+
+#: includes/forms/errorstrings.php:29
+msgid "Invalid theme root directory."
+msgstr ""
+
+#: includes/forms/errorstrings.php:30
+msgid "No writable temp directory."
+msgstr ""
+
+#: includes/forms/errorstrings.php:31
+msgid "PclZip returned zero bytes."
+msgstr ""
+
+#: includes/forms/errorstrings.php:32
+msgid "Unpack failed -- %s"
+msgstr ""
+
+#: includes/forms/errorstrings.php:33
+msgid "Pack failed -- %s"
+msgstr ""
+
+#: includes/forms/errorstrings.php:34
+msgid "Maximum number of styles exceeded."
+msgstr ""
+
+#: includes/forms/errorstrings.php:35
+msgid "Error moving file: %s"
+msgstr ""
+
+#: includes/forms/errorstrings.php:36
+msgid "Could not set write permissions."
+msgstr ""
+
+#: includes/forms/file-form-buttons.php:9
+msgid "Make Selected Writable"
+msgstr ""
+
+#: includes/forms/file-form-buttons.php:13
+msgid "Copy Selected to Child Theme"
+msgstr ""
+
+#: includes/forms/file-form-buttons.php:13 includes/forms/images.php:21
+msgid "Delete Selected"
+msgstr ""
+
+#: includes/forms/fileform.php:9
+msgid "Parent Templates"
+msgstr ""
+
+#: includes/forms/fileform.php:9
+msgid "Child Theme Files"
+msgstr ""
+
+#: includes/forms/fileform.php:14
+msgid ""
+"Copy PHP templates from the parent theme by selecting them here. The "
+"Configurator defines a template as a Theme PHP file having no PHP functions "
+"or classes. Other PHP files cannot be safely overridden by a child theme."
+msgstr ""
+
+#: includes/forms/fileform.php:17
+msgid ""
+"CAUTION: If your child theme is active, the child theme version of the file "
+"will be used instead of the parent immediately after it is copied."
+msgstr ""
+
+#: includes/forms/fileform.php:19
+msgid "The %s file is generated separately and cannot be copied here."
+msgstr ""
+
+#: includes/forms/fileform.php:24
+msgid "Click to edit functions.php"
+msgstr ""
+
+#: includes/forms/fileform.php:24
+msgid "Click to edit files using the Theme Editor"
+msgstr ""
+
+#: includes/forms/fileform.php:29
+msgid "Delete child theme templates by selecting them here."
+msgstr ""
+
+#: includes/forms/fileform.php:30
+msgid ""
+"Delete child theme templates or make them writable by selecting them here. "
+"Writable files are displayed in red ."
+msgstr ""
+
+#: includes/forms/files.php:15
+msgid "Upload New Child Theme Image"
+msgstr ""
+
+#: includes/forms/files.php:18
+msgid ""
+"Theme images reside under the images
directory in your child "
+"theme and are meant for stylesheet use only. Use the Media Library for "
+"content images."
+msgstr ""
+
+#: includes/forms/files.php:25 includes/forms/files.php:51
+msgid "Upload"
+msgstr ""
+
+#: includes/forms/files.php:32
+msgid "Child Theme Screenshot"
+msgstr ""
+
+#: includes/forms/files.php:41
+msgid "Upload New Screenshot"
+msgstr ""
+
+#: includes/forms/files.php:44
+msgid ""
+"The theme screenshot should be a 4:3 ratio (e.g., 880px x 660px) JPG, PNG or "
+"GIF. It will be renamed screenshot
."
+msgstr ""
+
+#: includes/forms/files.php:57
+msgid "Export Child Theme as Zip Archive"
+msgstr ""
+
+#: includes/forms/files.php:58
+msgid ""
+"Click \"Export Zip\" to save a backup of the currently loaded child theme. "
+"You can export any of your themes from the Parent/Child tab."
+msgstr ""
+
+#: includes/forms/files.php:68
+msgid "Secure Child Theme"
+msgstr ""
+
+#: includes/forms/files.php:71
+msgid ""
+"Attempt to reset child theme permissions to user ownership and read-only "
+"access."
+msgstr ""
+
+#: includes/forms/files.php:77
+msgid "Make read-only"
+msgstr ""
+
+#: includes/forms/images.php:10
+msgid "Child Theme Images"
+msgstr ""
+
+#: includes/forms/images.php:13
+msgid "Delete child theme images by selecting them here."
+msgstr ""
+
+#: includes/forms/main.php:35
+msgid "version"
+msgstr ""
+
+#: includes/forms/notices.php:12
+msgid ""
+"The child theme is in read-only mode and Child Theme Configurator cannot "
+"apply changes. Click to see options"
+msgstr ""
+
+#: includes/forms/notices.php:20
+msgid ""
+"Temporarily set write permissions by clicking the button below. When you "
+"are finished editing, revert to read-only by clicking \"Make read-only\" "
+"under the \"Files\" tab. "
+msgstr ""
+
+#: includes/forms/notices.php:24
+msgid "Make files writable"
+msgstr ""
+
+#: includes/forms/notices.php:27
+msgid ""
+"Add "
+"your FTP/SSH credentials to the WordPress config file . "
+msgstr ""
+
+#: includes/forms/notices.php:29
+msgid ""
+"Assign WordPress to "
+"an application pool that has write permissions (Windows IIS systems)."
+"li>"
+msgstr ""
+
+#: includes/forms/notices.php:30
+msgid ""
+"Set write "
+"permissions on the server manually (not recommended). "
+msgstr ""
+
+#: includes/forms/notices.php:32
+msgid "Run PHP under Apache with suEXEC (contact your web host). "
+msgstr ""
+
+#: includes/forms/notices.php:45
+msgid ""
+"This Child Theme has incorrect ownership permissions. Child Theme "
+"Configurator will attempt to correct this when you click the button below."
+msgstr ""
+
+#: includes/forms/notices.php:51
+msgid "Correct Child Theme Permissions"
+msgstr ""
+
+#: includes/forms/notices.php:60
+msgid ""
+"Child Theme Configurator needs to update its internal data. Please set your "
+"preferences below and click \"Generate Child Theme Files\" to update your "
+"configuration."
+msgstr ""
+
+#: includes/forms/notices.php:68
+msgid ""
+"However, some styles could not be parsed due to memory limits."
+"strong> Try deselecting \"Additional Stylesheets\" below and click "
+"\"Generate/Rebuild Child Theme Files\". %sWhy am I seeing this?%s"
+msgstr ""
+
+#: includes/forms/notices.php:76
+msgid ""
+"Child Theme Configurator did not detect any configuration data because a "
+"previously configured Child Theme has been removed. Please follow the steps "
+"for \"CONFIGURE an existing Child Theme\" under the \"Parent/Child\" Tab."
+msgstr ""
+
+#: includes/forms/notices.php:84
+msgid ""
+"Your stylesheet has changed since the last time you used the Configurator. "
+"Please follow the steps for \"CONFIGURE an existing Child Theme\" under the "
+"\"Parent/Child\" Tab or you will lose these changes."
+msgstr ""
+
+#: includes/forms/notices.php:97
+msgid "Thank you for installing Child Theme Configurator."
+msgstr ""
+
+#: includes/forms/notices.php:100
+msgid ""
+"A lot of time and testing has gone into this release but there may be edge "
+"cases. If you have any questions, please"
+msgstr ""
+
+#: includes/forms/notices.php:102
+msgid "Contact Us."
+msgstr ""
+
+#: includes/forms/notices.php:105
+msgid "For more information, please open the Help tab at the top right or "
+msgstr ""
+
+#: includes/forms/notices.php:107
+msgid "click here to view the latest videos."
+msgstr ""
+
+#: includes/forms/notices.php:111
+msgid ""
+"It is a good idea to save a Zip Archive of your Child Theme before using CTC "
+"for the first time. Click the \"save backup\" link ( see Step 2, below ) to "
+"export your themes."
+msgstr ""
+
+#: includes/forms/parent-child.php:19
+msgid "Select an action:"
+msgstr ""
+
+#: includes/forms/parent-child.php:27
+msgid "CREATE a new Child Theme"
+msgstr ""
+
+#: includes/forms/parent-child.php:30
+msgid ""
+"Install a new customizable child theme using an installed theme as a parent."
+msgstr ""
+
+#: includes/forms/parent-child.php:43
+msgid "CONFIGURE an existing Child Theme"
+msgstr ""
+
+#: includes/forms/parent-child.php:46
+msgid ""
+"Set up a previously installed child theme for use with the Configurator or "
+"to modify current settings."
+msgstr ""
+
+#: includes/forms/parent-child.php:57
+msgid "DUPLICATE an existing Child Theme"
+msgstr ""
+
+#: includes/forms/parent-child.php:60
+msgid ""
+"Make a complete copy of an existing Child Theme in a new directory, "
+"including any menus, widgets and other Customizer settings. The option to "
+"copy the Parent Theme settings (step 8, below) is disabled with this action."
+msgstr ""
+
+#: includes/forms/parent-child.php:71
+msgid ""
+"RESET an existing Child Theme (this will destroy any work you have done in "
+"the Configurator)"
+msgstr ""
+
+#: includes/forms/parent-child.php:74
+msgid ""
+"Revert the Child theme stylesheet and functions files to their state before "
+"the initial configuration or last reset. Additional child theme files will "
+"not be removed, but you can delete them under the Files tab."
+msgstr ""
+
+#: includes/forms/parent-child.php:85
+msgid "Select a Parent Theme:"
+msgstr ""
+
+#: includes/forms/parent-child.php:89 includes/forms/parent-child.php:117
+msgid "Click here to save a backup of the selected theme."
+msgstr ""
+
+#: includes/forms/parent-child.php:95 includes/forms/parent-child.php:123
+msgid "Analyze"
+msgstr ""
+
+#: includes/forms/parent-child.php:99
+msgid "Analyze Parent Theme"
+msgstr ""
+
+#: includes/forms/parent-child.php:102 includes/forms/parent-child.php:130
+msgid ""
+"Click \"Analyze\" to determine stylesheet dependencies and other potential "
+"issues."
+msgstr ""
+
+#: includes/forms/parent-child.php:113
+msgid "Select a Child Theme:"
+msgstr ""
+
+#: includes/forms/parent-child.php:127
+msgid "Analyze Child Theme"
+msgstr ""
+
+#: includes/forms/parent-child.php:142
+msgid "Name the new theme directory:"
+msgstr ""
+
+#: includes/forms/parent-child.php:146
+msgid "Directory Name"
+msgstr ""
+
+#: includes/forms/parent-child.php:150 includes/forms/parent-child.php:400
+msgid "NOTE:"
+msgstr ""
+
+#: includes/forms/parent-child.php:152
+msgid ""
+"This is NOT the name of the Child Theme. You can customize the name, "
+"description, etc. in step 7, below."
+msgstr ""
+
+#: includes/forms/parent-child.php:159
+msgid "Verify Child Theme directory:"
+msgstr ""
+
+#: includes/forms/parent-child.php:169
+msgid ""
+"For verification only (you cannot modify the directory of an existing Child "
+"Theme)."
+msgstr ""
+
+#: includes/forms/parent-child.php:182
+msgid "Select where to save new styles:"
+msgstr ""
+
+#: includes/forms/parent-child.php:191
+msgid "Primary Stylesheet (style.css)"
+msgstr ""
+
+#: includes/forms/parent-child.php:194
+msgid ""
+"Save new custom styles directly to the Child Theme primary stylesheet, "
+"replacing the existing values. The primary stylesheet will load in the order "
+"set by the theme."
+msgstr ""
+
+#: includes/forms/parent-child.php:206
+msgid "Separate Stylesheet"
+msgstr ""
+
+#: includes/forms/parent-child.php:209
+msgid ""
+"Save new custom styles to a separate stylesheet and combine any existing "
+"child theme styles with the parent to form baseline. Select this option if "
+"you want to preserve the existing child theme styles instead of overwriting "
+"them. This option also allows you to customize stylesheets that load after "
+"the primary stylesheet."
+msgstr ""
+
+#: includes/forms/parent-child.php:217
+msgid "Click to expand"
+msgstr ""
+
+#: includes/forms/parent-child.php:219
+msgid "Select Parent Theme stylesheet handling:"
+msgstr ""
+
+#: includes/forms/parent-child.php:233
+msgid "Use the WordPress style queue."
+msgstr ""
+
+#: includes/forms/parent-child.php:239
+msgid ""
+"Let the Configurator determine the appropriate actions and dependencies and "
+"update the functions file automatically."
+msgstr ""
+
+#: includes/forms/parent-child.php:245
+msgid "Use @import
in the child theme stylesheet."
+msgstr ""
+
+#: includes/forms/parent-child.php:251
+msgid ""
+"Only use this option if the parent stylesheet cannot be loaded using the "
+"WordPress style queue. Using @import
is not recommended."
+msgstr ""
+
+#: includes/forms/parent-child.php:257
+msgid "Do not add any parent stylesheet handling."
+msgstr ""
+
+#: includes/forms/parent-child.php:260
+msgid ""
+"Select this option if this theme already handles the parent theme stylesheet "
+"or if the parent theme's style.css
file is not used for its "
+"appearance."
+msgstr ""
+
+#: includes/forms/parent-child.php:267
+msgid "Advanced handling options"
+msgstr ""
+
+#: includes/forms/parent-child.php:274
+msgid "Ignore parent theme stylesheets."
+msgstr ""
+
+#: includes/forms/parent-child.php:275
+msgid ""
+"Do not load or parse the parent theme styles. Only use this option if the "
+"Child Theme uses a Framework like Genesis and uses only child theme "
+"stylesheets for its appearance."
+msgstr ""
+
+#: includes/forms/parent-child.php:285
+msgid "Repair the header template in the child theme."
+msgstr ""
+
+#: includes/forms/parent-child.php:286
+msgid ""
+"Let the Configurator (try to) resolve any stylesheet issues listed above. "
+"This can fix many, but not all, common problems."
+msgstr ""
+
+#: includes/forms/parent-child.php:297
+msgid "Do not force dependency for these stylesheet handles:"
+msgstr ""
+
+#: includes/forms/parent-child.php:301
+msgid ""
+"By default, the order of stylesheets that load prior to the primary "
+"stylesheet is preserved by treating them as dependencies. In some cases, "
+"stylesheets are detected in the preview that are not used site-wide. If "
+"necessary, dependency can be removed for specific stylesheets above."
+msgstr ""
+
+#: includes/forms/parent-child.php:310
+msgid "Customize the Child Theme Name, Description, Author, Version, etc.:"
+msgstr ""
+
+#: includes/forms/parent-child.php:314
+msgid "Show/Hide Child Theme Attributes"
+msgstr ""
+
+#: includes/forms/parent-child.php:314
+msgid "Click to toggle form"
+msgstr ""
+
+#: includes/forms/parent-child.php:319
+msgid "Child Theme Name"
+msgstr ""
+
+#: includes/forms/parent-child.php:323
+msgid "Theme Name"
+msgstr ""
+
+#: includes/forms/parent-child.php:329 includes/forms/parent-child.php:333
+msgid "Theme Website"
+msgstr ""
+
+#: includes/forms/parent-child.php:339 includes/forms/parent-child.php:343
+msgid "Author"
+msgstr ""
+
+#: includes/forms/parent-child.php:349 includes/forms/parent-child.php:353
+msgid "Author Website"
+msgstr ""
+
+#: includes/forms/parent-child.php:359
+msgid "Theme Description"
+msgstr ""
+
+#: includes/forms/parent-child.php:363
+msgid "Description"
+msgstr ""
+
+#: includes/forms/parent-child.php:369
+msgid "Theme Tags"
+msgstr ""
+
+#: includes/forms/parent-child.php:373
+msgid "Tags"
+msgstr ""
+
+#: includes/forms/parent-child.php:379 includes/forms/parent-child.php:383
+msgid "Version"
+msgstr ""
+
+#: includes/forms/parent-child.php:392
+msgid ""
+"Copy Menus, Widgets and other Customizer Settings from the Parent Theme to "
+"the Child Theme:"
+msgstr ""
+
+#: includes/forms/parent-child.php:402
+msgid ""
+"This option replaces the Child Theme's existing Menus, Widgets and other "
+"Customizer Settings with those from the Parent Theme. You should only need "
+"to use this option the first time you configure a Child Theme. Some "
+"themes use additional options that cannot be copied with the free verson of "
+"CTC. Click the \"Upgrade\" tab for more information. "
+msgstr ""
+
+#: includes/forms/parent-child.php:413 includes/forms/parent-child.php:465
+msgid "Click to run the Configurator:"
+msgstr ""
+
+#: includes/forms/parent-child.php:417
+msgid "Configure Child Theme"
+msgstr ""
+
+#: includes/forms/parent-child.php:439
+msgid "Parse Plugin stylesheets:"
+msgstr ""
+
+#: includes/forms/parent-child.php:444
+msgid "Select the plugin stylesheets you wish to customize below."
+msgstr ""
+
+#: includes/forms/parent-child.php:469
+msgid "Configure Plugin Styles"
+msgstr ""
+
+#: includes/forms/query-selector.php:9
+msgid ""
+"To find and edit specific selectors within @media query blocks, first choose "
+"the query, then the selector. Use the \"base\" query to edit all other "
+"selectors."
+msgstr ""
+
+#: includes/forms/query-selector.php:14
+msgid "@media Query"
+msgstr ""
+
+#: includes/forms/query-selector.php:15
+msgid "( or \"base\" )"
+msgstr ""
+
+#: includes/forms/query-selector.php:25
+msgid "Selector"
+msgstr ""
+
+#: includes/forms/query-selector.php:38 includes/forms/rule-value.php:30
+msgid "Sample"
+msgstr ""
+
+#: includes/forms/query-selector.php:46
+msgid "Save Child Values"
+msgstr ""
+
+#: includes/forms/query-selector.php:47
+msgid "Delete Child Values"
+msgstr ""
+
+#: includes/forms/query-selector.php:54 includes/forms/rule-value.php:14
+msgid "Property"
+msgstr ""
+
+#: includes/forms/query-selector.php:57
+msgid "Baseline Value"
+msgstr ""
+
+#: includes/forms/query-selector.php:60
+msgid "Child Value"
+msgstr ""
+
+#: includes/forms/query-selector.php:66
+msgid "New Property"
+msgstr ""
+
+#: includes/forms/query-selector.php:76
+msgid "Order"
+msgstr ""
+
+#: includes/forms/query-selector.php:85
+msgid "Copy Selector"
+msgstr ""
+
+#: includes/forms/query-selector.php:87 includes/forms/webfonts.php:15
+msgid "Save"
+msgstr ""
+
+#: includes/forms/query-selector.php:90
+msgid "Raw CSS"
+msgstr ""
+
+#: includes/forms/query-selector.php:92
+msgid "Use to enter shorthand CSS or new @media queries and selectors."
+msgstr ""
+
+#: includes/forms/query-selector.php:92
+msgid ""
+"Values entered here are merged into existing child styles or added to the "
+"child stylesheet if they do not exist in the parent."
+msgstr ""
+
+#: includes/forms/related.php:1
+msgid "New user?"
+msgstr ""
+
+#: includes/forms/related.php:1
+msgid "Click help"
+msgstr ""
+
+#: includes/forms/related.php:1
+msgid "Get CTC Pro and other tools"
+msgstr ""
+
+#: includes/forms/related.php:1
+msgid "Lilaea Media - Responsive Tools for a Mobile World"
+msgstr ""
+
+#: includes/forms/rule-value.php:9
+msgid ""
+"To find and edit selectors containing specific values for a given property, "
+"first choose the property (e.g., \"color\"), then click \"Selectors\" for "
+"any resulting value. A dialog panel will open with the corresponding "
+"selectors, grouped by media query."
+msgstr ""
+
+#: includes/forms/rule-value.php:27
+msgid "Value"
+msgstr ""
+
+#: includes/forms/settings-errors.php:16
+msgid "CTC encountered an error:"
+msgstr ""
+
+#: includes/forms/settings-errors.php:48
+msgid ""
+"Child Theme %s has been reset. Please configure it using "
+"the settings below."
+msgstr ""
+
+#: includes/forms/settings-errors.php:54
+msgid "Update Key saved successfully."
+msgstr ""
+
+#: includes/forms/settings-errors.php:61
+msgid "Child Theme files modified successfully."
+msgstr ""
+
+#: includes/forms/settings-errors.php:67
+msgid "Child Theme %s has been generated successfully."
+msgstr ""
+
+#: includes/forms/settings-errors.php:71
+msgid "IMPORTANT:"
+msgstr ""
+
+#: includes/forms/settings-errors.php:74
+msgid "You must %sNetwork enable%s your child theme."
+msgstr ""
+
+#: includes/forms/settings-errors.php:77 includes/forms/themepreview.php:20
+msgid "Go to Themes"
+msgstr ""
+
+#: includes/forms/settings-errors.php:81
+msgid "%sPreview your child theme%s before activating."
+msgstr ""
+
+#: includes/forms/settings-errors.php:84 includes/forms/themepreview.php:18
+msgid "Live Preview"
+msgstr ""
+
+#: includes/forms/tabs.php:11
+msgid "Parent/ Child"
+msgstr ""
+
+#: includes/forms/tabs.php:14
+msgid "Query/ Selector"
+msgstr ""
+
+#: includes/forms/tabs.php:17
+msgid "Property/ Value"
+msgstr ""
+
+#: includes/forms/tabs.php:22
+msgid "Web Fonts & CSS"
+msgstr ""
+
+#: includes/forms/tabs.php:26
+msgid "Baseline Styles"
+msgstr ""
+
+#: includes/forms/tabs.php:29
+msgid "Child Styles"
+msgstr ""
+
+#: includes/forms/tabs.php:33
+msgid "Files"
+msgstr ""
+
+#: includes/forms/themepreview.php:12
+msgid "Version: "
+msgstr ""
+
+#: includes/forms/themepreview.php:14
+msgid "By: "
+msgstr ""
+
+#: includes/forms/themepreview.php:16
+msgid "Preview"
+msgstr ""
+
+#: includes/forms/themepreview.php:17
+msgid " in default Site"
+msgstr ""
+
+#: includes/forms/themepreview.php:21
+msgid "Not Network Enabled"
+msgstr ""
+
+#: includes/forms/webfonts.php:18
+msgid "Additional Linked Stylesheets"
+msgstr ""
+
+#: includes/forms/webfonts.php:20
+msgid ""
+"Use @import url( [path] );
to link additional stylesheets. "
+"Child Theme Configurator uses the @import
keyword to identify "
+"them and convert them to <link>
tags. Example:"
+"strong>"
+msgstr ""
+
+#: includes/forms/webfonts.php:23
+msgid "Local Font Files"
+msgstr ""
+
+#: includes/forms/webfonts.php:25
+msgid ""
+"Use a relative path to link to webfont kit stylesheets you have uploaded to "
+"your Child Theme. Example: "
+msgstr ""
+
+#: includes/forms/zipform.php:6
+msgid "Export Child Theme"
+msgstr ""
+
+#. Plugin URI of the plugin/theme
+msgid "http://www.childthemeconfigurator.com"
+msgstr ""
+
+#. Description of the plugin/theme
+msgid ""
+"When using the Customizer is not enough - Create child themes and customize "
+"styles, templates, functions and more."
+msgstr ""
+
+#. Author of the plugin/theme
+msgid "Lilaea Media"
+msgstr ""
+
+#. Author URI of the plugin/theme
+msgid "http://www.lilaeamedia.com"
+msgstr ""
diff --git a/wp-content/plugins/child-theme-configurator/readme.txt b/wp-content/plugins/child-theme-configurator/readme.txt
new file mode 100644
index 0000000..8323673
--- /dev/null
+++ b/wp-content/plugins/child-theme-configurator/readme.txt
@@ -0,0 +1,682 @@
+=== Child Theme Configurator ===
+Contributors: lilaeamedia
+Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=8QE5YJ8WE96AJ
+Tags: child, theme, child theme, child themes, custom styles, customize styles, customize theme, css, responsive, css editor, child theme editor, child theme generator, child theme creator, style, stylesheet, customizer, childtheme, childthemes
+Requires at least: 4.0
+Requires PHP: 5.6.36
+Tested up to: 5.5
+Stable tag: 2.5.6
+License: GPLv2 or later
+License URI: http://www.gnu.org/licenses/gpl-2.0.html
+
+When using the Customizer is not enough - Create a child theme from your installed themes and customize styles, templates, functions and more.
+
+== Description ==
+
+Child Theme Configurator is a fast and easy to use utility that allows you to analyze any theme for common problems, create a child theme and customize it beyond the options of the Customizer. Designed for WordPress users who want to be able to customize child theme stylesheets directly, Child Theme Configurator lets you easily identify and override the exact CSS attributes you want to customize. The Analyzer scans the rendered theme and automatically configures your child theme. It correctly enqueues theme and font stylesheets for optimum performance and handles vendor-specific syntax, giving you unlimited control over the Child Theme look and feel while leaving your Parent Theme untouched. [Learn more about how to create a child theme](http://www.childthemeconfigurator.com).
+
+
+= Take Control of Your Child Themes =
+
+Child Theme Configurator parses and indexes your stylesheets so that every CSS media query, selector, property and value are at your fingertips. Second, it shows you how each customization you make will look before you commit it to the child theme. Finally, it saves your work so that you can customize styles in your child themes without the risk of losing your edits.
+
+You can create any number of child themes from your existing Parent Themes. Child Theme Configurator lets you choose from your installed themes (even existing child themes) and save the results in your Themes directory.
+
+When you are ready, just activate the Child Theme and your WordPress site takes on the custom styles automatically.
+
+https://www.youtube.com/watch?v=xL0YmieF6d0
+
+= Why create child themes and customize styles using Child Theme Configurator? =
+
+1. Some things cannot be changed using the Customizer.
+
+2. Unless you use a child theme, you will lose any changes you made to templates and stylesheets when you update.
+
+3. Child Theme Configurator automatically determines the correct way to set up a child theme based on the theme you are using.
+
+4. You can find the exact style selectors your theme uses and change properties quickly.
+
+5. You can locate, copy and edit theme templates from the admin.
+
+6. Much more:
+ * Update themes without losing customizations
+ * Smart Theme Analyzer determines correct settings to use
+ * Resolve common child theme issues with almost any parent theme
+ * Copy existing widgets, menus and Customizer options to child theme
+ * Use web fonts in your child theme
+ * Enqueue (link) stylesheets instead of using @import
+ * Quickly locate and edit theme CSS.
+ * Customize @media queries for responsive design
+ * Select hex, RGBA (transparent) and named colors using Spectrum color picker
+ * Add fallback styles (multiple values per property)
+ * Save hours of development time
+ * Multisite compatible
+ * Make modifications unavailable to the Customizer
+ * Export child themes as Zip Archive
+ * Identify and override exact selectors from the parent theme
+ * Change specific colors, backgrounds, font styles, etc., without changing other elements
+ * Automatically generate cross-browser and vendor-prefixed properties and CSS gradients
+ * Preview custom styles before committing to them
+ * Uses WP Filesystem API – will not create files you cannot remove
+
+= Child Theme Configurator PRO =
+
+Apply the CSS customizing power of Child Theme Configurator to any WordPress Plugin installed on your website. Child Theme Configurator PRO scans your plugins and lets you customize their stylesheets. We’ve added more features to make customizing styles quicker and easier with PRO.
+
+https://www.youtube.com/watch?v=fktwCk43a8c
+
+Learn more at http://www.childthemeconfigurator.com/child-theme-configurator-pro
+
+= Unlimited Widget Content With a Single Plugin =
+
+IntelliWidget is a versatile widget manager that does the work of multiple plugins by combining custom page menus, featured posts, sliders and other dynamic content features that can display on a per-page or site-wide basis.
+
+https://www.youtube.com/watch?v=Ttw1xIZ2b-g
+
+Learn more at https://www.lilaeamedia.com/plugins/intelliwidget
+
+= Hook Highlighter =
+
+Hook Highlighter provides Administrators insight into the internal program flow of WordPress when activated on any front-facing page of a website.
+
+Display action and filter hooks, program files and backtrace information inline for the current page.
+
+https://www.youtube.com/watch?v=fyeroaJK_xw
+
+Learn more at https://www.lilaeamedia.com/product/hook-highlighter
+
+== Installation ==
+
+1. To install from the Plugins repository:
+ * In the WordPress Admin, go to "Plugins > Add New."
+ * Type "child theme" in the "Search" box and click "Search Plugins."
+ * Locate "Child Theme Configurator" in the list and click "Install Now."
+
+2. To install manually:
+ * Download the Child Theme Configurator from http://wordpress.org/plugins/child-theme-configurator
+ * In the WordPress Admin, go to "Plugins > Add New."
+ * Click the "Upload" link at the top of the page.
+ * Browse for the zip file, select and click "Install."
+
+3. In the WordPress Admin, go to "Plugins > Installed Plugins." Locate "Child Theme Configurator" in the list and click "Activate."
+
+4. Navigate to Tools > Child Themes (multisite users go to Network Admin > Themes > Child Themes).
+
+= The Parent/Child Tab: 10 Easy Steps to Create a Child Theme =
+
+1. Select an action:
+ * CREATE a new Child Theme - Install a new customizable child theme using an installed theme as a parent.
+ * CONFIGURE an existing Child Theme - Set up a previously installed child theme for use with the Configurator or to modify current settings.
+ * DUPLICATE an existing Child Theme - Make a complete copy of an existing Child Theme in a new directory, including any menus, widgets and other Customizer settings. The option to copy the Parent Theme settings (step 8, below) is disabled with this action.
+ * RESET an existing Child Theme (this will destroy any work you have done in the Configurator) - Revert the Child theme stylesheet and functions files to their state before the initial configuration or last reset.
+
+2. Select a Parent Theme if creating a new Child Theme; select a Child Theme if configuring, duplicating or resetting.
+
+3. Analyze Child Theme - Click "Analyze" to determine stylesheet dependencies and other potential issues.
+
+4. If creating a new Child Theme, name the new theme directory; otherwise verify it the directory is correct. - This is NOT the name of the Child Theme. You can customize the name, description, etc. in step 7, below.
+
+5. Select where to save new styles:
+ * Primary Stylesheet (style.css) - Save new custom styles directly to the Child Theme primary stylesheet, replacing the existing values. The primary stylesheet will load in the order set by the theme.
+ * Separate Stylesheet - Save new custom styles to a separate stylesheet and use any existing child theme styles as a baseline. Select this option if you want to preserve the original child theme styles instead of overwriting them. This option also allows you to customize stylesheets that load after the primary stylesheet.
+
+6. Select Parent Theme stylesheet handling:
+ * Use the WordPress style queue. - Let the Configurator determine the appropriate actions and dependencies and update the functions file automatically.
+ * Use @import in the child theme stylesheet. - Only use this option if the parent stylesheet cannot be loaded using the WordPress style queue. Using @import is not recommended.
+ * Do not add any parent stylesheet handling. - Select this option if this theme already handles the parent theme stylesheet or if the parent theme's style.css file is not used for its appearance.
+
+7. Customize the Child Theme Name, Description, Author, Version, etc.: (Click to toggle form)
+
+8. Copy Parent Theme Menus, Widgets and other Customizer Settings to Child Theme: - NOTE: This will overwrite any child theme options you may have already set.
+
+9. Click the button to run the Configurator.
+
+10. IMPORTANT: Always test child themes with Live Preview (theme customizer) before activating!
+
+== Frequently Asked Questions ==
+
+= How do I move changes I have already made to my theme into a Child Theme? =
+
+Follow these steps: http://www.childthemeconfigurator.com/how-to-use/#child_from_modified_parent
+
+= When I run the analyzer I get "Constants Already Defined" notice in PHP Debug Output =
+
+This is a misconfiguration created by the Bluehost auto-installer. http://www.childthemeconfigurator.com/child-theme-faqs/#constants" class="scroll-to">How to fix.
+
+= Is there a tutorial? =
+
+There are videos under the "Help" tab at the top right of the page. You can also view them at http://www.childthemeconfigurator.com/tutorial-videos
+
+= If the parent theme changes (e.g., upgrade), do I have to update the child theme? =
+
+No. This is the point of using child themes. Changes to the parent theme are automatically inherited by the child theme.
+
+A child theme is not a "copy" of the parent theme. It is a special feature of WordPress that let's you override specific styles and functions leaving the rest of the theme intact. Quality themes should identify any deprecated functions or styles in the upgrade notes so that child theme users can make adjustments accordingly.
+
+= If I uninstall Child Theme Configurator are child themes affected? =
+
+No. Child Theme Configurator is designed to work independently of themes and plugins. Just remember that if you re-install, you must rebuild the configuration data using the Parent/Child tab.
+
+= How do I add comments? =
+
+Arbitrary comments are not supported. Providing a high level of flexibility for previewing and modifying custom styles requires sophisticated parsing and data structures. Maintaining comments that are bound to any particular element in the stylesheet is prohibitively expensive compared to the value it would add. Although we are working to include this as an option in the future, currently all comments are stripped from the child theme stylesheet code.
+
+= Does it work with Multisite? =
+
+Yes. Go to "Network Admin > Themes > Child Themes." Child themes must be "Network enabled" to preview and activate for Network sites.
+
+= Does it work with plugins? =
+
+Child Theme Configurator PRO brings the CSS editing power of Child Theme Configurator to any WordPress Plugin installed on your website by scanning your plugins and creating custom CSS in your Child Themes. Learn more at http://www.childthemeconfigurator.com/child-theme-configurator-pro
+
+= Why doesn't this work with my [insert vendor here] theme? =
+
+Some themes (particularly commercial themes) do not correctly load parent template files or automatically load child theme stylesheets or php files.
+
+This is unfortunate, because in the best case they effectively prohibit the webmaster from adding any customizations (other than those made through the admin theme options) that will survive past an upgrade. **In the worst case they will break your website when you activate the child theme.**
+
+Contact the vendor directly to ask for this core functionality. It is our opinion that ALL themes (especially commercial ones) must pass the Theme Unit Tests outlined by WordPress.org and ALWAYS TEST CHILD THEMES BEFORE ACTIVATING (See "Preview and Activate").
+
+= Will this slow down my site? =
+
+Child Theme Configurator is designed to add the minimum amount of additional overhead possible and can actually improve performance. **For example:**
+
+ * Child Theme Configurator creates or updates files that are already being read by the system. On the front-end, there are no database calls so WordPress can run independent of the plugin. In fact, you can remove Child Theme Configurator when you are finished setting up your child themes.
+ * Custom styles are applied to a stylesheet file that can be cached by the browser and/or cached and minimized by a performance caching plugin. Because the editor creates mostly "overrides" to existing styles, the file is typically smaller than other stylesheets.
+ * The code that drives the editor interface only loads when the tool is being used from the WordPress Admin, including Javascript and CSS. This means that it will not get in the way of other admin pages.
+ * The biggest performance hit occurs when you generate the Child Theme files from the Parent/Child tab, but this is a one-time event and only occurs from the WordPress Admin.
+
+= HELP! I changed a file and now I am unable to access my website or login to wp-admin to fix it! =
+
+To back out of a broken child theme you have to manually rename the offending theme directory name (via FTP, SSH or your web host control panel file manager) so that WordPress can’t find it. WordPress will then throw an error and revert back to the default theme (currently twenty-fifteen).
+
+The child theme is in your themes folder, usually
+
+[wordpress]/wp-content/themes/[child-theme]
+
+To prevent this in the future, always test child themes with Live Preview (theme customizer) before activating.
+
+= Why are my menus displaying incorrectly when I activate new child themes? =
+...or...
+= Why is my custom header missing when I activate new child themes? =
+...or...
+= Why does my custom background go back to the default when I activate new child themes? =
+...or...
+= Why do my theme options disappear when I activate new child themes? =
+
+These options are specific to each theme and are saved separately in the database. When you create new child themes, their options are blank.
+
+Many of these options can be copied over to the child theme by checking "Copy Parent Theme Menus, Widgets and other Options" when you generate the child theme files on the Parent/Child tab.
+
+If you want to set different options you can either apply them after you activate the child theme using the theme customizer, or by using the "Live Preview" under Appearance > Themes.
+
+Every theme handles options in its own way. Most often, they will create a set of options and store them in the WordPress database. Some options are specific to the active theme (or child theme), and some are specific to the parent theme only (meaning the child theme CANNOT customize them). You will have to find out from the theme author which are which.
+
+= Where is Child Theme Configurator in the Admin? =
+
+For most users Child Theme Configurator can be found under "Tools > Child Themes."
+
+WordPress Multisite (Network) users go to "Network Admin > Themes > Child Themes."
+
+NOTE: Only users with "install_themes" capability will have access to Child Theme Configurator.
+
+Click the "Help" tab at the top right for a quick reference.
+
+= How do I add Web Fonts? =
+
+The easiest method is to paste the @import code provided by Google, Font Squirrel or any other Web Font site into the Web Fonts tab. The fonts will then be available to use as a value of the font-family property. Be sure you understand the license for any embedded fonts.
+
+You can also create a secondary stylesheet that contains @font-face rules and import it using the Web Fonts tab.
+
+= Why doesn't the Parent Theme have any styles when I "View Parent CSS"? =
+
+Check the appropriate additional stylesheets under "Parse additional stylesheets" on the Parent/Child tab and load the Child Theme again. CTC tries to identify these files by fetching a page from the parent theme, but you may need to set them manually.
+
+= Where are the styles? The configurator doesn't show anything! =
+
+All of the styles are loaded dynamically. You must start typing in the text boxes to select styles to edit.
+"Base" is the query group that contains styles that are not associated with any particular "At-rule."
+
+Start by clicking the "Query/Selector" tab and typing "base" in the first box. You can then start typing in the second box to retrieve the style selectors to edit.
+
+= Why do the preview tabs return "Stylesheet could not be displayed"? =
+
+You have to load a child theme from the Parent/Child tab for the preview to display. This can also happen when your WP_CONTENT_URL is different than $bloginfo('site_url'). Ajax cannot make cross-domain requests by default. Check that your Settings > General > "WordPress Address (URL)" value is correct. (Often caused by missing "www" in the domain.)
+
+= Can I edit the Child Theme stylesheet manually offline or by using the Editor or do I have to use the Configurator? =
+
+You can make any manual customizations you wish to the stylesheet. Just make sure you import the revised stylesheet using the Parent/Child panel or the Configurator will overwrite your customizations the next time you use it. Just follow the steps as usual but select the "Use Existing Child Theme" radio button as the "Child Theme" option. The Configurator will automatically update its internal data from the new stylesheet.
+
+= Where are the child theme .php files? =
+
+Child Theme Configurator automatically adds a blank functions.php file to the child theme's directory. You can copy parent theme template files using the Files tab. If you want to create new templates and directories you will have to create/upload them manually via FTP or SSH. Remember that a child theme will automatically inherit the parent theme's templates unless they also exist in the child theme's directory. Only copy templates that you intend to customize.
+
+= How do I customize a specific color/font style/background? =
+
+You can override a specific CSS value globally using the Property/Value tab. See Property/Value, above.
+
+= How do I add custom styles that aren't in the Parent Theme? =
+
+You can add queries and selectors using the "Raw CSS" textarea on the Query/Selector tab. See Query/Selector, above.
+
+= How do I remove a style from the Parent Theme? =
+
+You shouldn't really "remove" a style from the Parent. You can, however, set the property to "inherit," "none," or zero (depending on the property). This will negate the Original value. Some experimentation may be necessary.
+
+= How do I remove a style from the Child Theme? =
+
+Delete the value from the input for the property you wish to remove. Child Theme Configurator only adds overrides for properties that contain values.
+
+= How do I set the !important flag? =
+
+We always recommend relying on good cascading design over global overrides. To that end, you have ability to change the load order of child theme custom styles by entering a value in the "Order" field. And yes, you can now set properties as important by checking the "!" box next to each input. Please use judiciously.
+
+= How do I create cross-browser gradients? =
+
+Child Theme Configurator uses a standardized syntax for gradients and only supports two-color gradients without intermediate stops. The inputs consist of origin (e.g., top, left, 135deg, etc.), start color and end color. The browser-specific syntax is generated automatically when you save these values. See Caveats, below, for more information.
+
+= How do I make my Theme responsive? =
+
+The short answer is to use a responsive Parent Theme. Some common characteristics of responsive design are:
+
+* Avoiding fixed width and height values. Using max- and min-height values and percentages are ways to make your designs respond to the viewer's browser size.
+* Combining floats and clears with inline and relative positions allow the elements to adjust gracefully to their container's width.
+* Showing and hiding content with Javascript.
+
+For more information view "Make a Theme Responsive":
+
+https://www.youtube.com/watch?v=iBiiAgsK4G4
+
+
+== Screenshots ==
+
+1. Parent/Child tab
+2. Parent/Child tab with parent theme menu open
+3. Query/Selector tab
+4. Property/Value tab
+5. Web Fonts tab
+6. Parent CSS tab
+7. Files tab
+
+== Changelog ==
+= 2.5.6 =
+* WP 5.5 update removed commonL10n - causing scripts to break - replaced with CTC getxt value.
+= 2.5.5 =
+* Removed curly brace syntax from substring argument in Packer class.
+= 2.5.4 =
+* Fixed case where registered styles not showing in queue during analysis.
+= 2.5.3 =
+* Fixes to stylesheet. Updates to help tabs.
+= 2.5.2 =
+* Logic to prevent malformed style properties
+* Minor cosmetic changes
+= 2.5.0 =
+* Preview class now evaluates stylesheet hooks as they fire instead of calling them again to prevent function exists errors.
+* Tested for PHP version 7.1
+* Modified input parser to allow multi-stop background gradients.
+
+= 2.4.x =
+* Analyzer now saves all signals on successful child theme regardless of analysis results.
+* This fixes a bug in some themes where the enqueue hooks were being rewitten incorrectly after adding web fonts.
+* Fixed a serious regression bug created by version 2.4.2.
+* Added call to customizer.php to initialize theme mods prior to analyzing child theme
+* Deferred copy_theme_mods until after child theme analysis. This allows hooks in Preview to initialize custom theme mods
+* Added mpriority (max priority) to CSS object to accommodate multiple irregular stylesheet hooks
+* Restored original (pre 2.4.1) version filter hook style_loader_src to child theme stylesheets to prevent caching
+* Strip closing php tag from functions.php to prevent premature response header
+* Fixed localization issues (thanks @alexclassroom for identifying these)
+* Modified style_loader_src hook to only add timestamp under certain conditions to prevent loading delay for most requests. (thanks @anthony750)
+* Automatically add action parent RTL stylesheet when child theme does not have one.
+* Handle case where parent theme changes queue action incorrectly points to non-existent child theme stylesheet.
+* Correctly copies customizer css to child theme.
+* Fixed PHP 7.3 compatability issue (thanks @forest-skills for identifying this)
+
+= 2.3.x =
+* strip scripts during template scan to prevent false positives
+* check file size during template scan to prevent timeout
+* changed syntax of statement that was being flagged by WP Defender
+* Fixed bug in screenshot copy.
+* Fixed incorrect reference to errors array in UI.
+* Added ability to rename @media query
+* Added height/Width for theme images on Files Tab
+* Added test for RTL in Analyzer
+* Added test cases for WP Rocket and AutOptimize plugins in Analyzer
+* Added redirect for error condition after configurator POST
+* Clarified descriptions for certain Analyzer signal conditions
+* Set priority of child theme css hook to force load after parent
+* Remove pruned selectors from menu
+
+= 2.2.x =
+* Modified preview to include all registered stylesheets in queue
+* Disable Autoptimize in preview
+* Added support for General Sibling Selector (~)
+* Fixed CSS class loading FALSE for dictionaries on fresh install
+* Fixed using wrong nonce for plugin mode preview (Pro)
+* Fixed error thrown when packing negative integers (Pro)
+* Disable Pagespeed in preview
+* Fixed Preview and Analyzer for some child theme configurations by removing nonce requirement
+* Fixed header not being repaired on first pass with "Repair Header" selected
+* Fixed styles being pruned before new "Raw CSS" styles are added
+* Fix bug in parent dependencies
+* Fix bug where stylesheet dependency arrays are not being initialized
+* Add action hook to extend copy theme settings feature
+* Display non active tabs, enable upgrade/register before config data is created
+* Show raw results after Analysis to help debugging
+* Fix javascript not escaping quotes in input fields
+* Restored original ajax preview and added fallback method for cross-domain preview
+* Fix in javascript affecting Pro users
+* Cross domain Parse error
+* Showing "reconfigure" message on new install
+* Manual upgrade Pro from plugin
+* Add pre_option stylesheet and template filters to Preview class
+* Use child theme name on duplicate
+* Ability to force/unforce dependency
+* Identify and handle imported stylesheets, convert to links
+* Fixes related to testing if CTC Pro is installed
+
+= 2.1.x =
+* change packer class to use standard < 5.4 array syntax
+* Loading dictionaries on demand
+* Reversed key/value dictionary structure for huge memory improvement
+* Added packer class to flatten multidim arrays for huge memory improvement
+* Reduced key name lengths throughout
+* Improved data validation on inputs
+* Require minimum Pro version ( Pro users only )
+* Move html output to separate view includes
+* Move theme mod routines to own functions
+
+= 2.0.x =
+* Fix: preview not parsing parent styles correctly when minimized.
+* Fix: cast argument to array in sort functions.
+* Updated Child Theme Configurator language template.
+* Updated child theme preview class to use is_theme_active and other methods to eliminate conflicts with Jetpack and any other plugin that references the customize manager.
+* Updated child theme preview class to send origin headers and run customize_preview_init action along with some other actions.
+* Added logic conditions in preview class to help prevent Analyzer from failing in some cases
+* Enabled theme zip file export for any selected theme independent of theme currently loaded in Configurator
+* Fixed bugs present with servers not running Apache with SuExec
+* Fixed issue with Windows servers that do not return C: with filesystem paths
+* Automatically set priority of enqueue hook based on value from parent theme
+* Made file scan routine more efficient
+* Support for background-image as base64 data
+* Tweaked analyzer signals
+* Updated language template and de_DE files
+* Fix: case where child stylesheet link was not being added resulting in "This child theme does not load a Configurator stylesheet" notice
+* Fix: fatal error in debug mode
+* Minor bug fixes
+* New Theme Analyzer automatically checks for issues and determines correct settings
+* Step by step setup of Parent/Child settings
+* Simplified parent stylesheet handling options
+* Option to write new child theme styles to a separate stylesheet
+* Uses WordPress style dependencies to ensure correct child theme stylesheet load order
+* Automatically repairs themes that use outdated stylesheet handling methods
+* Parses parent theme files and only displays templates that can be be overridden by child themes
+* Numerous minor bug fixes
+
+= 1.7.x =
+* Fix: regression bug in 1.7.9 causing new property menu to fail
+* Fix: use nonce when retrieving front-end html to parse default additional stylesheets
+* Refactored classes to make Child Theme Configurator more lightweight on front end
+* Fix: disable autoload on configuration data options
+* Fix: normalize media query and add to menu when added via raw css
+* Fix: Margin and Padding shorthand generated incorrectly.
+* Addressed case where parent or child theme is in subdirectory.
+* Minimized admin CSS.
+* Sanitize child theme slug
+* Remove cascade load order comments from generated CSS
+* Set admin background to prevent theme override
+* Refactored background normalization function to better follow CSS specification.
+* Check child theme exists function case-insensitive.
+* Changed chldthmcfg.init() call to fire on load instead of .ready() to prevent JS conflicts
+* Uses spectrum color picker to support transparency and named colors.
+* Refactored entire system to support fallback values for any property.
+* Fix path when duplicating child theme on first run
+* New Feature: "delete child values" button - easily revert custom styles in child theme stylesheet
+* Will not write child theme stylesheet if error detected in functions.php
+* Fixed minified JS
+* Restored multisite admin menu link under Tools by popular demand
+* Automatically Network enables new child theme on creation
+* Fix for FTP notice - now uses PHP_OS constant to detect win vs nix
+* Added duplicate child theme feature
+* added dismiss option to warnings by popular demand.
+* Changed @import tab to "Web Fonts." @import statements are automatically converted to enqueued external links.
+* Added "Enqueue both parent and child stylesheets" option to enable child theme overrides without using @import.
+* Added checks for hard-coded link tags in header template to help resolve incorrect stylesheet load order.
+* Fix: "Enqueue child stylesheet" now passes correct value.
+* Fix: hide called before iris init
+* Fix: @import not being written on rebuild/configure
+* Fix: min height on property/value panel
+* Only prune child theme selectors on rename
+* Removed conflicting wistia javascript link
+* New Feature: Enqueue child theme stylesheet option for themes that do not load it.
+* New Feature: Child Theme and Author website, description and tag fields.
+* Fix: Redesigned UI Javascript using jQuery objects for better browser memory management.
+* Fix: Child Theme Stylesheet version is timestamped to force browser reload after changes.
+
+= 1.6.x =
+* Fix: Empty functions file created causing inserted markers to be output to browser.
+* Fix: check for closed PHP tag in functions file prior to inserting markers
+* Fix: undefined constant LILAEAMEDIA_URL
+* Fix: logic to determine whether to display config notice
+* Fix: incorrect path generation and validation on Windows servers
+* Added error handling and notification to prevent jQuery conflicts and out of memory conditions
+* Fix: removed max-height on property/value overlay
+* Added debug option
+* New Feature: Copy selector button for Raw CSS textarea on Query/Selector tab.
+* Fix: Menus rendering incorrectly for RTL locales
+* Fix: Border-top etc. not being written correctly to stylesheet
+* Fix: Refactored ajax semaphore logic and flow
+* New Feature: Better child theme handling for multisite. Moved interface to Themes menu and check for network enabled.
+* Fix: Restrict child theme configurator access to install_themes capability
+* Fix: Preview links to Themes admin if not network enabled to prevent 'Cheatin, uh?' error.
+* Fix: only users with "install_themes" capability have access to Child Theme Configurator. This resolves permission issues with both multisite and single site installs. **MULTISITE USERS:** The Admin HAS MOVED to Network Admin > Themes > Child Themes for better handling for multisite (network) installs.
+* Fix: Regular expression introduced in version 1.6.2 parses selectors incorrectly.
+* Fix: replaced wp_normalize_path with class method to support legacy WP versions
+* Fix: support for multiple layered background images
+* Fix: background:none being parsed into gradient origin parameter
+* Fix: support for data URIs
+* Fix: support for *= and ^= notation in selectors
+* Fix: add check if theme uses hard-wired stylesheet link and alert to use @import instead of link option
+* Fix: conflicts with using jQuery UI from CDN - using local version of 1.11.2 Widget/Menu/Selectmenu instead
+* Fix: using wp-color-picker handle instead of iris as dependency to make sure wpColorPicker() methods are loaded
+* Fix: copy parent theme widgets logic is different when child theme is active
+* New Feature: option to load parent stylesheet using wp_enqueue_style (link), @import or none.
+* Thanks to cmwwebfx and Shapeshifter3 for pushing me on this
+* New Feature: automatically-generated slug and name
+* New Feature: restore from backup and reset options
+* New Feature: backup files to "Child Theme Files" on Files Tab so they can be deleted
+* New Feature: Added new theme chooser select menu with screenshot, theme info and link to live preview.
+* Fix: Admin scripts now only load when CTC page is being viewed.
+* Fix: parent CSS preview to correctly display all parsed parent stylesheets in sequence
+* Fix: Refactored throughout for maintainability
+
+= 1.5.x =
+* New Feature: Load imported stylesheets into the CTC admin so web fonts can be previewed.
+* Set preview swatch to z-index -1 to prevent it from covering up the controls
+* Spread config data across multiple option records to prevent out of memory errors with large stylesheets.
+* Do not automatically select Bootstrap CSS files as additional stylesheets to (greatly) reduce overhead.
+* Add jQuery UI styles that are no longer being loaded by default in the WP admin (autoselect menus).
+* Fixed a bug in the way zero values are handled that was breaking css output in certain situations
+* Added regex filter for non-printable (e.g., null) characters in input strings
+* Fixed a bug introduced in v1.5.2(.1) that copied all of the parent styles to the child theme stylesheet. This should only be an issue for 'background-image' styles that reference images in the parent theme and do not have child theme overrides.
+* Rolled back changes to the javascript controller that introduced a number of type errors.
+* Tweaked preview ajax call to handle ssl.
+* Automatically set additional stylesheets to parse based on parent theme links in head.
+* Render parent CSS including additional stylesheets
+* Added copy option to Parent/Child tab to assign menu locations, sidebars/widgets, custom header, background, and other options to new Child Themes.
+* Refactored CTC to use the WP_Filesystem API.
+* Non suExec configurations will now require user credentials to add, remove or update Child Theme files.
+* Added the ability for you to make the files writable while editing and then make them read-only when you are done.
+* You can also set your credentials in wp-config.php: http://codex.wordpress.org/Editing_wp-config.php#WordPress_Upgrade_Constants
+
+= 1.4.x =
+* Removed backreference in main CSS parser regex due to high memory usage.
+* Fixed uninitialized variable in files UI.
+* Feature: export child themes as zip archive
+* Added transform to list of vendor properties
+* Bug fixed: parser not loading multiple instances of same @media rulesets
+* Refactored uploader to use wp core functions for compatibility and security
+* Increased CHLD_THM_CFG_MAX_RECURSE_LOOPS to 1000 to accommodate complex parent frameworks
+* Fix: javascript bug
+* Fix: regression bug - sanitizing broke raw input selectors
+* Fix: escape quotes in text inputs. This has bugged me for a while now.
+* Fix: Escape backslash for octal content values. Thanks Laurent for reporting this.
+* Fix: Normalize colors to lowercase and short form when possible to prevent duplicate entries in the data
+* Refactored the way CTC caches updates and returns them to the UI controller to reduce memory consumption.
+* Prevent out of memory fatals when generating new child themes.
+* Changed "Scan Parent for Additional Stylesheets" to individual checkbox options for each file with a toggle to show/hide in the Parent/Child tab.
+* Added automatic update of form when Parent Theme is changed.
+* Pre-populate Parent/Child form when parent slug is passed to CTC options.
+* updated parser to match selectors containing parentheses and empty media rulesets
+* Tweaked the Files tab options and added check for DISALLOW_FILE_EDIT
+* Removed automatic @import rules for additional stylesheets that are loaded.
+* Fixed bug caused by new jQuery .css function handling of empty css values (preview swatch).
+* New Feature: Theme Files tab:
+* Copy parent templates to child themes to be edited using the Theme Editor.
+* Remove child theme templates.
+* Upload child theme images.
+* Remove child theme images.
+* Upload child theme screenshot.
+
+= 1.3.x =
+* Fixes a bug with the way the @import data is stored that threw errors on php 5.3 and corrupted v1.3.2 @import data.
+* New Feature: option to scan parent theme for additional stylesheets. This allows CTC to be used with themes such as "Responsive" by CyberChimps.
+* New Feature: automatically copies parent theme screenshot to child.
+* Fixed unquoted regex pattern in file path security check function. Thanks to buzcuz for reporting this.
+* Updated help tab content. Added additional sanitization of source and target file paths.
+* Changed CSS preview to retrieve directly from WordPress Admin instead of remote http GET to prevent caching issues.
+* Added loading icon for CSS preview.
+* Fixed JS type error on backup toggle.
+* Improved extensibility throughout.
+
+= 1.2.x =
+* Replace PHP short tags with standard codes.
+* New Features: You can now rename selectors in place from the Query/Selector panel. Made stylesheet backup optional. Bugs fixed: Incorrect parsing of background position when '0', fixed type error when background image url value is removed.
+* Bugs fixed: "star hack" properties no longer throwing js error. Important flag now works on borders and gradients.
+* New features: Link to Query/Selector tab from specific Property/Value selector, new property focus on adding new property. Bugs fixed: clear Query/Selector inputs when loaded selector is empty, use latest min.js script.
+
+= 1.1.x =
+* Added check for writability before attempting to create child theme files to avoid fatal error on servers not running suEXEC. Fixed a bug in the ctc_update_cache function that was throwing a fatal JS error when new media queries were saved via the Raw CSS input. Configurator now adds functions.php file to child theme when it does not exist.
+* Added reorder sequence and important flag functionality. Fixed bug where multiple inputs with same selector/property combo were assigned the same id. Fixed bug in the shorthand encoding routine.
+* Added tutorial video to help tabs.
+* Added call to reset_updates() before update_option() to prevent serialization errors.
+* Query/Selector panel now defaults to 'base'
+* Fixed bug causing background-image with full urls (http://) to be parsed as gradients
+* Fixed bug causing property menu to throw error when selector has no properties
+* Fixed sort bug in shorthand parser that was returning properties in wrong order
+* Fixed bug that assumed lowercase only for theme slugs. (Thanks to timk)
+* Fixed update redirect to execute on first run
+* Small bug fix to javascript (casting number to string)
+* Fixed major bug where inputs containing '0' were being ignored
+* Removed "no leading digits" requirement for theme slug
+* Change query sort function to keep parent order of queries without device width rules
+* Fixed gettext calls to use static namespace parameter
+* Auto populate child theme inputs when existing theme is selected
+* Correctly remove border when values are blanked
+* Fixed duplicate "new property" bug on Query/Selector panel
+* added timestamp to backup file
+* Added encode_shorthand function to recombine margin/padding values when all 4 sides are present
+* Corrected parsing for certain backgrounds and gradients (e.g., supports hsla color syntax)
+* Handle empty selectors
+* Ajax load for menus and updates
+* Clean up Parent/Child form UI and validation
+* Streamlined UI overall
+
+= 1.0.0 =
+* Initial release.
+
+== Upgrade Notice ==
+
+* Preview class now evaluates stylesheet hooks as they fire instead of calling them again to prevent function exists errors.
+* Tested for PHP version 7.1
+* See changelog for details.
+
+== Query/Selector Tab ==
+
+There are two ways to identify and customize baseline (parent) styles. Child Theme Configurator lets you search styles by CSS selector and by property. If you wish to customize a specific CSS selector (e.g., h1), use the "Query/Selector" tab. If you have a specific CSS value you wish to customize site-wide (e.g., the color of the type), use the "Property/Value" tab.
+
+The Query/Selector tab lets you find specific CSS selectors and edit them. First, find the query that contains the CSS selector you wish to edit by typing in the Query autoselect box. Select by clicking with the mouse or by pressing the "Enter" or "Tab" keys. CSS selectors are in the base query by default.
+Next, find the CSS selector by typing in the "Selector" autoselect box. Select by clicking with the mouse or by pressing the "Enter" or "Tab" keys.
+
+This will load all of the properties for that CSS selector with the Original values on the left and the child theme values inputs on the right. Any existing child theme values will be automatically populated. There is also a Sample preview that displays the combination of Parent and Child overrides. Note that the border and background-image get special treatment.
+
+The "Order" field contains the original sequence of the CSS selector in the parent theme stylesheet. You can change the CSS selector order sequence by entering a lower or higher number in the "Order" field. You can also force style overrides (so called "!important" flag) by checking the "!" box next to each input. Please use judiciously.
+
+Click "Save" to update the child theme stylesheet and save your changes to the WordPress admin.
+
+== Adding Raw CSS ==
+
+If you wish to add additional properties to a given CSS selector, first load the selector using the Query/Selector tab. Then find the property you wish to override by typing in the New Property autoselect box. Select by clicking with the mouse or by pressing the "Enter" or "Tab" keys. This will add a new input row to the selector inputs.
+
+If you wish to add completely new CSS selectors, or even new @media queries, you can enter free-form CSS in the "Raw CSS" textarea. Be aware that your syntax must be correct (i.e., balanced curly braces, etc.) for the parser to load the new custom styles. You will know it is invalid because a red "X" will appear next to the save button.
+
+If you prefer to use shorthand syntax for properties and values instead of the inputs provided by Child Theme Configurator, you can enter them here as well. The parser will convert your input into normalized CSS code automatically.
+
+== Property/Value Tab ==
+
+The Property/Value tab lets you find specific values for a given property and then edit that value for individual CSS selectors that use that property/value combination. First, find the property you wish to override by typing in the Property autoselect box. Select by clicking with the mouse or by pressing the "Enter" or "Tab" keys.
+
+This will load all of the unique values that exist for that property in the parent theme stylesheet with a Sample preview for that value. If there are values that exist in the child theme stylesheet that do not exist in the parent stylesheet, they will be displayed as well.
+
+For each unique value, click the "Selectors" link to view a list of CSS selectors that use that property/value combination, grouped by query with a Sample preview of the value and inputs for the child theme value. Any existing child theme values will be automatically populated.
+
+Click "Save" to update the child theme stylesheet and save your changes to the WordPress admin.
+
+If you want to edit all of the properties for the CSS selector you can click the “Edit” link and the CSS selector will automatically load in the Query/Selector Tab.
+
+== Web Fonts Tab ==
+
+You can add additional stylesheets and web fonts by typing @import rules into the textarea on the Web Fonts tab. **Important: do not import the parent theme stylesheet here.** Use the "Parent stylesheet handling" option from the Parent/Child tab.
+
+== Files Tab ==
+
+= Parent Templates =
+
+You can copy PHP template files from the parent theme by checking the boxes. Click "Copy Selected to Child Theme" and the templates will be added to the child theme's directory.
+
+CAUTION: If your child theme is active, the child theme's version of the file will be used instead of the parent immediately after it is copied. The functions.php file is generated separately and cannot be copied here.
+
+= Child Theme Files =
+
+Templates copied from the parent are listed here. These can be edited using the Theme Editor in the Appearance Menu. Remove child theme images by checking the boxes and clicking "Delete Selected."
+
+= Child Theme Images =
+
+Theme images reside under the images
directory in your child theme and are meant for stylesheet use only. Use the media gallery for content images. You can upload new images using the image upload form.
+
+= Child Theme Screenshot =
+
+You can upload a custom screenshot for the child theme here. The theme screenshot should be a 4:3 ratio (eg., 880px x 660px) JPG, PNG or GIF. It will be renamed "screenshot".
+
+= Export Child Theme as Zip Archive =
+
+You can download your child theme for use on another WordPress site by clicking "Export".
+
+== Preview and Activate ==
+
+**IMPORTANT: Test child themes before activating!**
+
+Some themes (particularly commercial themes) do not correctly load parent template files or automatically load child theme stylesheets or php files.
+
+**In the worst cases they will break your website when you activate the child theme.**
+
+1. Navigate to Appearance > Themes in the WordPress Admin. You will now see the new Child Theme as one of the installed Themes.
+2. Click "Live Preview" (theme customizer) below the new Child Theme to see it in action.
+3. When you are ready to take the Child Theme live, click "Activate."
+
+**MULTISITE USERS:** You must Network Enable your child theme before you can use Live Preview. Go to "Themes" in the Network Admin.
+
+== Caveats ==
+
+* Arbitrary comments are not supported. Providing a high level of flexibility for previewing and modifying custom styles requires a sophisticated parsing system. Maintaining comments that are bound to any particular element in the stylesheet is prohibitively expensive compared to the value it would add. Although we are working to include this as an option in the future, currently all comments are stripped from the child theme stylesheet code.
+* No @keyframes or @font-face rules. Child Theme Configurator only supports @media and @import. If you need other @rules, put them in a separate stylesheet and import them into the Child Theme stylesheet.
+* Only two-color gradients. Child Theme Configurator is powerful, but we have simplified the gradient interface. You can use any gradient you want as long as it has two colors and no intermediate stops.
+* CSS properties are auto-discovered. Child Theme Configurator loads the properties that exist in the Parent stylesheet. You can always add new properties using the “Raw CSS” text area.
+* Legacy gradient syntax is not supported. Child Theme Configurator does not support the MS filter gradient or legacy webkit gradient. These will continue to work if they are used in the parent theme, but will not be written to the child theme stylesheet. If there is a demand, we may add it in a future release, but most users should have upgraded by now.
+
+== Documentation ==
+
+Go to http://www.childthemeconfigurator.com/
+
+Serbo-Croatian translation courtesy of Borisa Djuraskovic borisad@webhostinghub.com http://www.webhostinghub.com
+
+Copyright: (C) 2014-2018 Lilaea Media
diff --git a/wp-content/plugins/child-theme-configurator/screenshot-1.jpg b/wp-content/plugins/child-theme-configurator/screenshot-1.jpg
new file mode 100644
index 0000000..d69c3f6
Binary files /dev/null and b/wp-content/plugins/child-theme-configurator/screenshot-1.jpg differ
diff --git a/wp-content/plugins/child-theme-configurator/screenshot-2.jpg b/wp-content/plugins/child-theme-configurator/screenshot-2.jpg
new file mode 100644
index 0000000..620caa0
Binary files /dev/null and b/wp-content/plugins/child-theme-configurator/screenshot-2.jpg differ
diff --git a/wp-content/plugins/child-theme-configurator/screenshot-3.jpg b/wp-content/plugins/child-theme-configurator/screenshot-3.jpg
new file mode 100644
index 0000000..cafdd4d
Binary files /dev/null and b/wp-content/plugins/child-theme-configurator/screenshot-3.jpg differ
diff --git a/wp-content/plugins/child-theme-configurator/screenshot-4.jpg b/wp-content/plugins/child-theme-configurator/screenshot-4.jpg
new file mode 100644
index 0000000..73cd5c2
Binary files /dev/null and b/wp-content/plugins/child-theme-configurator/screenshot-4.jpg differ
diff --git a/wp-content/plugins/child-theme-configurator/screenshot-5.jpg b/wp-content/plugins/child-theme-configurator/screenshot-5.jpg
new file mode 100644
index 0000000..fe4073e
Binary files /dev/null and b/wp-content/plugins/child-theme-configurator/screenshot-5.jpg differ
diff --git a/wp-content/plugins/child-theme-configurator/screenshot-6.jpg b/wp-content/plugins/child-theme-configurator/screenshot-6.jpg
new file mode 100644
index 0000000..2d141e3
Binary files /dev/null and b/wp-content/plugins/child-theme-configurator/screenshot-6.jpg differ
diff --git a/wp-content/plugins/child-theme-configurator/screenshot-7.jpg b/wp-content/plugins/child-theme-configurator/screenshot-7.jpg
new file mode 100644
index 0000000..9c94b24
Binary files /dev/null and b/wp-content/plugins/child-theme-configurator/screenshot-7.jpg differ
diff --git a/wp-content/uploads/2020/08/icon.png b/wp-content/uploads/2020/08/icon.png
deleted file mode 100644
index d833f5e..0000000
Binary files a/wp-content/uploads/2020/08/icon.png and /dev/null differ
diff --git a/wp-content/uploads/cropped-icon-150x150.png b/wp-content/uploads/cropped-icon-150x150.png
new file mode 100644
index 0000000..3e0334b
Binary files /dev/null and b/wp-content/uploads/cropped-icon-150x150.png differ
diff --git a/wp-content/uploads/cropped-icon-180x180.png b/wp-content/uploads/cropped-icon-180x180.png
new file mode 100644
index 0000000..dba6ab5
Binary files /dev/null and b/wp-content/uploads/cropped-icon-180x180.png differ
diff --git a/wp-content/uploads/cropped-icon-192x192.png b/wp-content/uploads/cropped-icon-192x192.png
new file mode 100644
index 0000000..fd63e30
Binary files /dev/null and b/wp-content/uploads/cropped-icon-192x192.png differ
diff --git a/wp-content/uploads/cropped-icon-270x270.png b/wp-content/uploads/cropped-icon-270x270.png
new file mode 100644
index 0000000..6485684
Binary files /dev/null and b/wp-content/uploads/cropped-icon-270x270.png differ
diff --git a/wp-content/uploads/cropped-icon-300x300.png b/wp-content/uploads/cropped-icon-300x300.png
new file mode 100644
index 0000000..e2568a8
Binary files /dev/null and b/wp-content/uploads/cropped-icon-300x300.png differ
diff --git a/wp-content/uploads/cropped-icon-32x32.png b/wp-content/uploads/cropped-icon-32x32.png
new file mode 100644
index 0000000..dfdb37c
Binary files /dev/null and b/wp-content/uploads/cropped-icon-32x32.png differ
diff --git a/wp-content/uploads/cropped-icon-340x230.png b/wp-content/uploads/cropped-icon-340x230.png
new file mode 100644
index 0000000..f398aa9
Binary files /dev/null and b/wp-content/uploads/cropped-icon-340x230.png differ
diff --git a/wp-content/uploads/cropped-icon.png b/wp-content/uploads/cropped-icon.png
new file mode 100644
index 0000000..a41bab4
Binary files /dev/null and b/wp-content/uploads/cropped-icon.png differ
diff --git a/wp-content/uploads/icon-150x150.png b/wp-content/uploads/icon-150x150.png
new file mode 100644
index 0000000..3e0334b
Binary files /dev/null and b/wp-content/uploads/icon-150x150.png differ
diff --git a/wp-content/uploads/icon-300x300.png b/wp-content/uploads/icon-300x300.png
new file mode 100644
index 0000000..e2568a8
Binary files /dev/null and b/wp-content/uploads/icon-300x300.png differ
diff --git a/wp-content/uploads/icon-340x230.png b/wp-content/uploads/icon-340x230.png
new file mode 100644
index 0000000..f398aa9
Binary files /dev/null and b/wp-content/uploads/icon-340x230.png differ
diff --git a/wp-content/uploads/icon.png b/wp-content/uploads/icon.png
new file mode 100644
index 0000000..fbc070b
Binary files /dev/null and b/wp-content/uploads/icon.png differ
diff --git a/wp-content/uploads/2020/08/EN_Google_Podcasts_Badge_1x.png b/wp-content/uploads/icons/google/EN_Google_Podcasts_Badge_1x.png
similarity index 100%
rename from wp-content/uploads/2020/08/EN_Google_Podcasts_Badge_1x.png
rename to wp-content/uploads/icons/google/EN_Google_Podcasts_Badge_1x.png
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-165x40-150x40.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-165x40-150x40.png
new file mode 100644
index 0000000..c771c14
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-165x40-150x40.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-165x40.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-165x40.png
new file mode 100644
index 0000000..a52a6e0
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-165x40.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-330x80-150x80.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-330x80-150x80.png
new file mode 100644
index 0000000..99f8310
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-330x80-150x80.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-330x80-300x73.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-330x80-300x73.png
new file mode 100644
index 0000000..ead7096
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-330x80-300x73.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-330x80.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-330x80.png
new file mode 100644
index 0000000..26d919c
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-330x80.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-660x160-150x150.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-660x160-150x150.png
new file mode 100644
index 0000000..de8cf90
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-660x160-150x150.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-660x160-300x73.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-660x160-300x73.png
new file mode 100644
index 0000000..f5957b6
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-660x160-300x73.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-660x160-340x160.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-660x160-340x160.png
new file mode 100644
index 0000000..8888f37
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-660x160-340x160.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-660x160.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-660x160.png
new file mode 100644
index 0000000..c7ef67a
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-grn-660x160.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-165x40-150x40.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-165x40-150x40.png
new file mode 100644
index 0000000..d00fb8b
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-165x40-150x40.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-165x40.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-165x40.png
new file mode 100644
index 0000000..db966ef
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-165x40.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-330x80-150x80.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-330x80-150x80.png
new file mode 100644
index 0000000..c84a815
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-330x80-150x80.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-330x80-300x73.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-330x80-300x73.png
new file mode 100644
index 0000000..9b845ea
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-330x80-300x73.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-330x80.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-330x80.png
new file mode 100644
index 0000000..7f6dbc6
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-330x80.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-660x160-150x150.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-660x160-150x150.png
new file mode 100644
index 0000000..1388e01
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-660x160-150x150.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-660x160-300x73.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-660x160-300x73.png
new file mode 100644
index 0000000..e17c07c
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-660x160-300x73.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-660x160-340x160.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-660x160-340x160.png
new file mode 100644
index 0000000..75748ce
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-660x160-340x160.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-660x160.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-660x160.png
new file mode 100644
index 0000000..c19e100
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-blk-wht-660x160.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-wht-blk-165x40.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-wht-blk-165x40.png
new file mode 100644
index 0000000..ec79879
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-wht-blk-165x40.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-wht-blk-330x80.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-wht-blk-330x80.png
new file mode 100644
index 0000000..290ab64
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-wht-blk-330x80.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-wht-blk-660x160.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-wht-blk-660x160.png
new file mode 100644
index 0000000..25c6a37
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-wht-blk-660x160.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-wht-grn-165x40.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-wht-grn-165x40.png
new file mode 100644
index 0000000..3e04b64
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-wht-grn-165x40.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-wht-grn-330x80.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-wht-grn-330x80.png
new file mode 100644
index 0000000..59ddb55
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-wht-grn-330x80.png differ
diff --git a/wp-content/uploads/icons/spotify/spotify-podcast-badge-wht-grn-660x160.png b/wp-content/uploads/icons/spotify/spotify-podcast-badge-wht-grn-660x160.png
new file mode 100644
index 0000000..f642f18
Binary files /dev/null and b/wp-content/uploads/icons/spotify/spotify-podcast-badge-wht-grn-660x160.png differ
diff --git a/wp-content/uploads/icons/sticher/sticher-150x150.png b/wp-content/uploads/icons/sticher/sticher-150x150.png
new file mode 100644
index 0000000..5bd0c58
Binary files /dev/null and b/wp-content/uploads/icons/sticher/sticher-150x150.png differ
diff --git a/wp-content/uploads/icons/sticher/sticher-300x90.png b/wp-content/uploads/icons/sticher/sticher-300x90.png
new file mode 100644
index 0000000..ddda7fb
Binary files /dev/null and b/wp-content/uploads/icons/sticher/sticher-300x90.png differ
diff --git a/wp-content/uploads/icons/sticher/sticher-340x167.png b/wp-content/uploads/icons/sticher/sticher-340x167.png
new file mode 100644
index 0000000..e681098
Binary files /dev/null and b/wp-content/uploads/icons/sticher/sticher-340x167.png differ
diff --git a/wp-content/uploads/icons/sticher/sticher.png b/wp-content/uploads/icons/sticher/sticher.png
new file mode 100644
index 0000000..0cb5aaf
Binary files /dev/null and b/wp-content/uploads/icons/sticher/sticher.png differ