: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
function footer_text_settings() {
return '<div class="themify-info-link">' . __( 'Enter your text to replace the copyright and credit links in the footer. HTML tags allowed. Type %year% to display the current year.', 'themify' ) . '</div>' . themify_footer_text_left() . themify_footer_text_right();
if ( ! function_exists( 'themify_footer_text_left' ) ) {
* Footer Text Left Function
function themify_footer_text_left() {
return '<h4>' . __('Footer Text One', 'themify') . '</h4><div data-show-if-element="[name=setting-footer_text_left_hide]" data-show-if-value="false"><textarea class="widthfull" rows="4" name="setting-footer_text_left">' . esc_textarea( themify_get( 'setting-footer_text_left','',true ) ) . '</textarea></div><div><label><input type="checkbox" name="setting-footer_text_left_hide" value="hide" ' . checked( themify_get( 'setting-footer_text_left_hide','',true ), 'hide', false ) . ' />' . __( 'Hide Footer Text One', 'themify' ) . '</label></div>';
if ( ! function_exists( 'themify_footer_text_right' ) ) {
* Footer Text Right Function
function themify_footer_text_right(){
return '<h4>' . __('Footer Text Two', 'themify') . '</h4><div data-show-if-element="[name=setting-footer_text_right_hide]" data-show-if-value="false"><textarea class="widthfull" rows="4" name="setting-footer_text_right">' . esc_textarea( themify_get( 'setting-footer_text_right','',true ) ) . '</textarea></div><div><label><input type="checkbox" name="setting-footer_text_right_hide" value="hide" ' . checked( themify_get( 'setting-footer_text_right_hide','',true ), 'hide', false ) . ' />' . __( 'Hide Footer Text Two', 'themify' ) . '</label></div>';
if(!function_exists('themify_homepage_widgets')){
* Widgets module function
* @return string Module markup
function themify_homepage_widgets(){
$val = themify_get( 'setting-homepage_widgets',false,true );
'value' => 'homewidget-4col',
'img' => 'themify/img/sidebars/4col.png',
'title' => __('Widgets 4 Columns', 'themify')),
'value' => 'homewidget-3col',
'img' => 'themify/img/sidebars/3col.png',
'title' => __('Widgets 3 Columns', 'themify'),
'value' => 'homewidget-2col',
'img' => 'themify/img/sidebars/2col.png',
'title' => __('Widgets 3 Columns', 'themify')),
'value' => 'homewidget-1col',
'img' => 'themify/img/sidebars/1col.png',
'title' => __('Widgets 1 Column', 'themify')),
'img' => 'themify/img/sidebars/none.png',
'title' => __('No Widgets', 'themify'))
foreach($options as $option){
if(!$val && !empty($option['selected'])){
$class = $val === $option['value']?' selected':'';
$output .= '<a href="#" class="preview-icon' . $class . '" title="' . esc_attr( $option['title'] ) . '"><img src="' . THEME_URI.'/'.$option['img']. '" alt="' . esc_attr( $option['value'] ) . '" loading="lazy" decoding="async" width="46" height="35"/></a>';
$output .= '<input type="hidden" name="setting-homepage_widgets" class="val" value="' . esc_attr( $val ) . '" />';
if(!function_exists('themify_footer_widgets')){
* Widgets module function
* @return string Module markup
function themify_footer_widgets(){
$val = themify_get( 'setting-footer_widgets',false,true );
'value' => 'footerwidget-4col',
'img' => 'themify/img/sidebars/4col.png',
'title' => __('Widgets 4 Columns', 'themify')),
'value' => 'footerwidget-3col',
'img' => 'themify/img/sidebars/3col.png',
'title' => __('Widgets 3 Columns', 'themify'),
'value' => 'footerwidget-2col',
'img' => 'themify/img/sidebars/2col.png',
'title' => __('Widgets 2 Columns', 'themify')),
'value' => 'footerwidget-1col',
'img' => 'themify/img/sidebars/1col.png',
'title' => __('Widgets 1 Column', 'themify')),
'img' => 'themify/img/sidebars/none.png',
'title' => __('No Widgets', 'themify'))
foreach($options as $option){
if(!$val &&!empty($option['selected'])){
$class = $val === $option['value']?' selected':'';
$output .= '<a href="#" class="preview-icon' . $class. '" title="' . esc_attr( $option['title'] ) . '"><img src="' . THEME_URI.'/'.$option['img']. '" alt="' . esc_attr( $option['value'] ) . '" loading="lazy" decoding="async" width="46" height="35" /></a>';
$output .= '<input type="hidden" name="setting-footer_widgets" class="val" value="' . esc_attr( $val ) . '" />';
if ( ! function_exists( 'themify_entries_navigation' ) ) {
* Display module to select numbered pagination or links to previous and next posts.
* @return string $html Module markup.
function themify_entries_navigation( $data = array() ) {
$key = 'setting-entries_nav';
$v= themify_get( $key,'numbered',true );
$html .= '<label for="' . $key . '_numbered">';
$html .= '<input ' . checked( $v, 'numbered', false) . ' type="radio" id="' . $key . '_numbered" name="' . $key . '" value="numbered" /> ';
$html .= __( 'Numbered Pagination (page 1, 2, 3, etc.)', 'themify' ) . '</label>';
$html .= '<label for="' . $key . '_prevnext">';
$html .= '<input ' . checked( $v, 'prevnext', false ) . ' type="radio" id="' . $key . '_prevnext" name="' . $key . '" value="prevnext" /> ';
$html .= __( 'Previous Posts and Next Posts Links', 'themify' ) . '</label>';
* Renders Accessibility options
function themify_accessibility_options( $data = array() ) {
<span class="label">' . __( 'Link Focus Outline', 'themify' ) . '</span>
<select name="' . $key.'lfo' . '">' . themify_options_module( array(
array( 'name' => __( 'Light', 'themify' ), 'value' => '' ),
array( 'name' => __( 'Heavy', 'themify' ), 'value' => 'h' ),
array( 'name' => __( 'None', 'themify' ), 'value' => 'n' )
<span class="label">' . __( 'General Font Size', 'themify' ) . '</span>
<select name="' . $key.'fs' . '">' . themify_options_module( array(
array( 'name' => __( 'Normal', 'themify' ), 'value' => '' ),
array( 'name' => __( 'Large', 'themify' ), 'value' => 'l' ),
* Render the input field to allow uploading font packages
function themify_fontello_input_callback( $data = array() ) {
<div class="themify_field_row">
<span class="label">'. __('Fontello Icon Package', 'themify') . '</span>
<input id="setting-fontello" type="text" class="width10" name="setting-fontello" value="' . esc_attr( themify_get( 'setting-fontello','',true ) ) . '" /> <br />
<div class="pushlabel" style="display:block;">
<div class="themify_medialib_wrapper">
<a href="#" class="themify-media-lib-browse" data-submit=\'' . json_encode( array( 'action' => 'themify_handle_fontello_upload', 'field_name' => 'setting-fontello' ) ) . '\' data-uploader-title="' . __( 'Upload package', 'themify' ) .'" data-uploader-button-text="'. __( 'Upload package', 'themify' ) .'" data-fields="setting-fontello" data-type="application/zip">'. __( 'Browse Library', 'themify' ) . '</a>
<small class="description">' . __( 'Go to <a target="_blank" rel="noopener" href="http://fontello.com">fontello.com</a>, pick your icons, download the webfont zip, upload and insert the zip URL here. The icon package will be auto detected on Themify\'s icon library where you click "Insert Icon".', 'themify' ) . '</small>
<small class="description">' . sprintf( __( '<a href="%s">Full Tutorial</a>' ), 'https://themify.me/blog/how-to-add-custom-icon-fonts' ) . '</small>
if(!function_exists('themify_performance_settings')) {
* Script Minification Settings
* @param array Themify data
* @return string Module markup
function themify_performance_settings($data = array()){
$server=themify_get_server();
$htaccess_file=$server==='nginx'?null:Themify_Enqueue_Assets::getHtaccessFile();
$isMultiSite=is_multisite();
$cache_dir=TFCache::get_wp_content_dir();
if ($htaccess_file!==null && Themify_Filesystem::is_file($htaccess_file) && Themify_Filesystem::is_writable($htaccess_file)) {
$message= sprintf(__('Enabling Gzip will add code to your .htaccess file (%s)','themify'),$htaccess_file);
$gzip=themify_check( 'setting-cache_gzip',true );
$browser_cache=themify_check( 'setting-cache_browser',true );
$message= $server!=='apache'?sprintf(__('It looks like you are using Nginx server. Please <a href="%s" target="_blank" rel="noopener">follow</a> this tutorial to enable this feature.','themify'),'https://themify.me/docs/enable-gzip-nginx-servers'):sprintf(__('The htaccess file %s isn`t writable. Please allow to write to enable this feauture','themify'),$htaccess_file);
$gzip=$browser_cache=null;
$cache_plugins=false!==TFCache::get_cache_plugins();
$menuCache='data-show-if-element="[name$=setting-cache-html]" data-show-if-value="false"';
if($cache_plugins===true){
$menuCache='style="display:none"';
$warning=__('Themify Cache can not be enabled due to another cache plugin is activated.','themify');
elseif(!Themify_Filesystem::is_writable($cache_dir)){
$warning=sprintf(__('The directory %s isn`t writable. Please allow to write to enable this feauture','themify'),$cache_dir);
$tmp='<div class="pushlabel themify_warning note">'.__('WP_CACHE is not enabled. Please enable it on wp-config.php file. ','themify');
$tmp.=' <a href="https://wordpress.org/support/article/editing-wp-config-php/#cache" target="_blank" rel="noopener">'.__('Read details','themify').'</a>.';
if(Themify_Filesystem::is_writable(ABSPATH . 'wp-config.php' )){
$tmp.='<br/><br/><a href="#" data-action="themify_write_config" data-send="all" data-clearing-text="'.__('Writing...','themify').'" data-done-text="'.__('Done','themify').'" data-default-text="'.__('Try to fix it','themify').'" data-default-icon="ti-eraser" class="button button-outline js-clear-cache"> <span>'.__('Try to fix it','themify').'</span></a>';
'is_single'=>__('Exclude Single Posts','themify'),
'is_page'=>__('Exclude Pages','themify'),
'is_front_page'=>__('Exclude Front Page','themify'),
'is_home'=>__('Exclude Home','themify'),
'is_archives'=>__('Exclude Archives','themify'),
'is_tags'=>__('Exclude Tags','themify'),
'is_category'=>__('Exclude Category','themify'),
'is_feed'=>__('Exclude Feeds','themify'),
'is_author'=>__('Exclude Author Pages','themify')
if(themify_is_woocommerce_active()){
$ignore_cache['is_shop']=__('Exclude Shop Page','themify');
$ignore_cache['is_product']=__('Exclude Single Products','themify');
$ignore_cache['is_product_category']=__('Exclude Product Categories','themify');
$ignore_cache['is_product_tag']=__('Exclude Product Tags','themify');
$key='setting-cache-live';
$tmp.='<p><span class="label">' . __( 'Cache Expires', 'themify' ) . '</span><label class="pushlabel"><input type="text" name="'.$key.'" value="'.themify_get($key,(WEEK_IN_SECONDS/60),true).'" class="width4"> '.__('Minutes (default 1 week)','themify').'</label></p>';
$key='setting-cache-ignore';
$tmp.='<span class="label">' . __( 'Exclude Caching On', 'themify' ) . '</span><div class="pushlabel">';
foreach($ignore_cache as $k=>$v){
$tmp.='<input type="checkbox" value="'.$k.'" id="'.$key.'" name="'.$key.'_'.$k.'" '. checked( themify_check($key.'_'.$k,true ),true,false ) .'/> ' . $v . '</label>';
$pageCache=$warning==='' && Themify_Filesystem::is_file(TFCache::get_cache_config_file());
$key = 'setting-disable-lazy';
<div class="themify-info-link">To maximize your pagespeeed performance, please follow <a href="https://themify.me/blog/get-90-score-google-pagespeed-insights" target="_blank">this tutorial</a> to setup your theme and content.</div>
<span class="label">' . __( 'Themify Lazy Load', 'themify' ) .themify_help(__('Lazy load can speed up pagespeed by loading media (image, audio, video, iframe, etc.) when they are visible in the viewport.','themify')) . '</span>';
$output.='<label for="'.$key.'"><input type="checkbox" id="'.$key.'" name="'.$key.'" '. checked( themify_check($key,true ),true, false ) .'/> ' . __('Disable lazy load', 'themify') . '</label><br/>';
$output.='<div data-show-if-element="[name$='.$key.']" data-show-if-value="false" class="tf_clearfix">';
$output .= sprintf( '<div class="label">%s</div><div class="label input-range width10"><div class="range-slider width8"></div><input type="text" name="%s" value="%s" data-min="0" data-max="100" data-default-min="0" data-default-max="100" class="width4" readonly> px</div>',
esc_html__( 'Blur Image', 'themify' ),
themify_get('setting-lazy-blur',25,true )
$key = 'setting-dev-mode';
$disabled = defined( 'THEMIFY_DEV' ) && THEMIFY_DEV ? ' disabled' : '';
$output.='<hr><p><span class="label">' . __( 'Development Mode', 'themify' ) .themify_help(__('Warning: the following will be disabled: Themify cache, menu cache, concate CSS caching, Gzip scripts. Only enable this for development purposes (eg. preview child theme CSS/script changes).','themify')) . '</span>';
$output.='<label for="'.$key.'"><input type="checkbox"' . $disabled . ' id="'.$key.'" name="'.$key.'" '. checked(themify_check($key,true ),true, false ) .'/> ' . __('Enable development mode', 'themify') . '</label><br/>';
$output .= '<p class="description">' . __( 'This option is being overriden due to THEMIFY_DEV constant being defined. Try checking wp-config.php.', 'themify' ) . '</p>';
$output.='<span data-show-if-element="[name$='.$key.']" data-show-if-value="true">';
$output.='<label for="'.$key.'-concate" class="pushlabel"><input type="checkbox" id="'.$key.'-concate" name="'.$key.'-concate" '. checked(themify_check($key.'-concate',true ),true, false ) .'/> ' . __('Disable Concate CSS', 'themify') . '</label><br/>';
$output.='<span class="themify_warning">'.__('Warning: the following will be disabled: Themify cache, menu cache, concate CSS caching, Gzip scripts. Only enable this for development purposes (eg. preview child theme CSS/script changes).','themify').'</span></span>';
$output.='<div data-show-if-element="[name$='.$key.']" data-show-if-value="false">';//dev mode
$key = 'setting-cache-html';
<span class="label">' . __( 'Themify Cache', 'themify' ) .themify_help(__('Caching can reduce page size and server responses (only frontend public viewing will be cached). Themify Cache can not be used with third party cache plugins to avoid conflicts.','themify')) . '</span>
<label for="'.$key.'"'.($warning!==''?' class="themify_field_disable"':'').'><input type="checkbox"'.($warning!==''?' disabled="disabled"':'').' id="'.$key.'" name="'.$key.'" '. checked( ($pageCache===true ?themify_check($key,true ):false),true,false ) .'/> ' . __('Enable Themify Cache (recommended)', 'themify') . '</label>
<small class="pushlabel'.($warning!==''?' themify_warning':'').'" style="margin:20px 0;">'.$warning.'</small></p>';
$output.='<div data-show-if-element="[name$='.$key.']" data-show-if-value="true">
<span class="label">'. __( 'Excluding Caching URLs', 'themify' ) .'</span>
<textarea class="widthfull" rows="5" name="setting-cache-rule" id="setting-cache-rule">'. esc_html( themify_get( 'setting-cache-rule','',true ) ).'</textarea>'
.'<small>'.__('Enter the URLs to exclude caching (supports regular expressions). Separate each rule with a line break.','themify').'</small>';
$output.='<br/><br/><a href="#" data-action="themify_clear_all_html" data-send="all" data-clearing-text="'.__('Clearing...','themify').'" data-done-text="'.__('Done','themify').'" data-default-text="'.__('Clear Themify Cache','themify').'" data-default-icon="ti-eraser" class="button button-outline js-clear-cache"><i class="ti-eraser"></i> <span>'.__('Clear Themify Cache','themify').'</span></a>';
$output.='<br/><label><input type="checkbox" value="1" id="tmp_cache_network" name="tmp_cache_network"/>'.__('Clear all network sites','themify').'</label>';
<span class="label">' . __( 'Browser Caching', 'themify' ) .themify_help(__("Cache static assets (CSS, JS, images, etc.) on user's browser. HTML is not cached",'themify')) . '</span>
<label for="setting-cache_browser"'.($browser_cache===null?' class="themify_field_disable"':'').'><input type="checkbox"'.($browser_cache===null?' disabled="disabled"':'').'id="setting-cache_browser" name="setting-cache_browser" '.checked( $browser_cache, true, false ).'/> ' . __('Enable Browser Caching (recommended)', 'themify').'</label>
<span class="label">' . __( 'Gzip Scripts', 'themify' ) .themify_help(__('Using Gzip version of scripts can reduce script file size by 60-80%.','themify')) . '</span>
<label for="setting-cache_gzip"'.($gzip===null?' class="themify_field_disable"':'').'><input type="checkbox"'.($gzip===null?' disabled="disabled"':'').'id="setting-cache_gzip" name="setting-cache_gzip" '.checked( $gzip, true, false ).'/> ' . __('Enable Gzip scripts (recommended)', 'themify').'</label>
<small class="pushlabel'.($gzip===null?' themify_warning':'').'" >'.$message.'</small>
if ( ! wp_image_editor_supports() ) {
$message=__('The GD library or Imagick extensions are not installed. Ask your host provider to enable them to use this feature.','themify');
$webp=themify_check( 'setting-webp',true );
if ( $server === 'litespeed' ) {
$message = sprintf( __( 'It looks like you are using LiteSpeed server. Please follow <a href="%s" target="_blank" rel="noopener">this tutorial</a> to enable WebP images on your server.', 'themify' ), 'https://docs.litespeedtech.com/lscache/lscwp/imageopt/' );
} else if ( $server !== 'apache' ) {
$message=sprintf(__('It looks like you are using %s server. Please <a href="%s" target="_blank" rel="noopener">follow</a> this tutorial to enable this feature.','themify'), ucfirst($server),'https://themify.me/docs/enable-webp-nginx-servers');
$webp_quality = (int) themify_get( 'setting-webp-quality', '5', true );
<span class="label">' . __( 'Concate CSS', 'themify' ) . '</span>
<a href="#" data-action="themify_clear_all_concate" data-send="all" data-clearing-text="'.__('Clearing...','themify').'" data-done-text="'.__('Done','themify').'" data-default-text="'.__('Clear Concate CSS Cache','themify').'" data-default-icon="ti-eraser" class="button button-outline js-clear-cache"><i class="ti-eraser"></i> <span>'.__('Clear Concate CSS Cache','themify').'</span></a>
if(!Themify_Enqueue_Assets::createDir()){
$output.='<span class="pushlabel themify_warning">'.__('It looks like the WordPress upload folder path is set wrong or have file permission issue. Please check the upload path on WP Settings > Media. Make sure the folder is set correctly and it has correct file permission.','themify').'</span>';
$output.='<br/><label class="pushlabel"><input type="checkbox" value="1" id="tmp_cache_concte_network" name="tmp_cache_concte_network"/>'.__('Clear Concate cache in the whole network site','themify').'</label>';
$key='setting-cache-menu';
$output.='<div '.$menuCache.'><hr><p>
<span class="label">' . __( 'WordPress Menus Cache', 'themify' ) .themify_help(__('Caching WordPress menus can reduce queries. Will only work when there is no active cache plugin. If you have server cache, you can disable this feature.', 'themify')) . '</span>';
if ( defined( 'POLYLANG_VERSION' ) ) {
$output .= '<small class="pushlabel themify_warning">' . __( 'Themify menu cache has been disabled because Polylang is detected and it can not work with menu caching.', 'themify' ) . '</small>';
$output .= '<label for="'. $key.'"><input type="checkbox" id="'. $key.'" name="'. $key.'" '.checked(themify_check( $key,true ), true, false ).'/> ' . __('Disable menu cache', 'themify').'</label>';
$output.='</div>';//end of dev mode
<span class="label">' . __( 'WebP Image', 'themify' ) .themify_help(__('Using WebP image format can reduce file size by 50-90%. Only local images will be converted. The CDN and external images can not be converted. For background images of Themify Builder, you have to regenerate CSS and .htaccess file must be writeable.','themify')) . '</span>
<label for="setting-webp"'.($webp===null?' class="themify_field_disable"':'').'><input type="checkbox"'.($webp===null?' disabled="disabled"':'').'id="setting-webp" name="setting-webp" '.checked( $webp, true, false ).'/> ' . __('Enable WebP image (recommended)', 'themify').'</label>
<span class="label">' . __( 'WebP Image Quality', 'themify' ) . themify_help( __( 'Lower quality has smaller file size, but image might appear pixelated/blurry.', 'themify' ) ) . '</span> <select' . ($webp===null ? ' disabled="disabled"' : '' ) . ' id="setting-webp-quality" name="setting-webp-quality">'
. '<option value="1" ' . selected( $webp_quality, 1, false ) . '>' . __( 'Lowest', 'themify' ) . '</option>'
. '<option value="2" ' . selected( $webp_quality, 2, false ) . '>' . __( 'Low', 'themify' ) . '</option>'
. '<option value="3" ' . selected( $webp_quality, 3, false ) . '>' . __( 'Medium', 'themify' ) . '</option>'
. '<option value="4" ' . selected( $webp_quality, 4, false ) . '>' . __( 'Good', 'themify' ) . '</option>'
. '<option value="5" ' . selected( $webp_quality, 5, false ) . '>' . __( 'High', 'themify' ) . '</option>'
. '<option value="6" ' . selected( $webp_quality, 6, false ) . '>' . __( 'Highest', 'themify' ) . '</option>'
<span class="pushlabel"><a href="#" data-action="themify_clear_all_webp" data-clearing-text="'.__('Clearing...','themify').'" data-done-text="'.__('Done','themify').'" data-default-text="'.__('Clear WebP Images','themify').'" data-default-icon="ti-eraser" class="button button-outline js-clear-cache"><i class="ti-eraser"></i> <span>'.__('Clear WebP Images','themify').'</span></a></span>';
$output.='<small class="pushlabel themify_warning" >'.$message.'</small>';
<span class="label">' . __( 'jQuery Script', 'themify' ) .themify_help(__('Defer jQuery and all scripts can prevent render blocking. If your site/plugin(s) have inline jQuery code conflicting it, disable this option.','themify')) . '</span>
<label for="'. $key.'"><input type="checkbox" id="'. $key.'" name="'. $key.'" '.checked(themify_check( $key,true ), true, false ).'/> ' . __('Defer jQuery script loading', 'themify').'</label>
$key = 'setting-jquery-migrate';
<span class="label">' . __( 'jQuery Migrate', 'themify' ) .themify_help(__('Only enable this if your plugin(s) use the deprecated jQuery versions.','themify')) . '</span>
<label for="'. $key.'"><input type="checkbox" id="'. $key.'" name="'. $key.'" '.checked(themify_check( $key,true ), true, false ).'/> ' . __('Enable jQuery Migrate', 'themify').'</label>
if(themify_is_woocommerce_active()){
$key='setting-optimize-wc';
<span class="label">' . __( 'WooCommerce Script Optimization', 'themify' ) .themify_help(__('Themify loads WooCommerce scripts on demand for faster page load. If you are encountering issues with third party WooCommerce extensions, try to disable WooCommerce script optimization.','themify')) . '</span>
<label for="'. $key.'"><input type="checkbox" id="'. $key.'" name="'. $key.'" '.checked(themify_check( $key,true ), true, false ).'/> ' . __('Disable WooCommerce script loading optimization', 'themify').'</label>
$output.='<div data-show-if-element="[name$=setting-jquery]" data-show-if-value="false"><p data-show-if-element="[name$=setting-optimize-wc]" data-show-if-value="false">
<span class="label">' . __( 'WooCommerce Script Defer', 'themify' ) .themify_help(__('WooCommerce scripts are deferred for faster page load. If you are encountering issues with third party WooCommerce extensions, try to disable script defer.','themify')) . '</span>
<label for="'. $key.'"><input type="checkbox" id="'. $key.'" name="'. $key.'" '.checked(themify_check( $key,true ), true, false ).'/> ' . __('Disable WooCommerce script defer', 'themify').'</label>
<span class="label">' . __( 'WordPress Emoji', 'themify' ) .themify_help(__('If you are not using WordPress Emoji icons, keep it disabled to reduce script load.','themify')) . '</span>
<label for="'. $key.'"><input type="checkbox" id="'. $key.'" name="'. $key.'" '.checked(themify_check( $key,true ), true, false ).'/> ' . __('Enable Emoji script loading', 'themify').'</label>
if(!function_exists('themify_webfonts_subsets')) {
* Module to specify additional characters subsets
* @param array Themify data
* @return string Module markup
function themify_webfonts_subsets($data = array()){
// List of fonts, recommended or full
if(!defined('THEMIFY_GOOGLE_FONTS') || THEMIFY_GOOGLE_FONTS == true){
<span class="label">' . __( 'Download Google Fonts', 'themify' ) .'</span>
<label for="'.$key.'"><input type="checkbox" id="'.$key.'" name="'.$key.'" '. checked( themify_check($key,true ),true, false ) .'/> ' . __('Download Google Fonts to Local', 'themify') . '</label>
<small class="pushlabel">'.__('Downloads all Google Fonts used in the theme and Builder to your local server. Note: Google Maps, YouTube and any embeds loaded in iframe are excluded as they are loaded in the iframe.','themify').'</small>
$html.='<br/><span class="pushlabel"><a href="#" data-action="themify_clear_gfonts" data-send="all" data-clearing-text="'.__('Clearing...','themify').'" data-done-text="'.__('Done','themify').'" data-default-text="'.__('Clear Google Fonts Cache','themify').'" data-default-icon="ti-eraser" class="button button-outline js-clear-cache"><i class="ti-eraser"></i> <span>'.__('Clear Google Fonts Cache','themify').'</span></a></span></p><hr>';
$key = 'setting-webfonts_list';
<span class="label">' . __('Google Fonts List', 'themify') . '</span>';
$html .= '<label for="' . esc_attr( $key . '_disabled' ) . '">
<input ' . checked( themify_check( $key ) ? themify_get( $key ) : '', 'disabled', false ) . ' type="radio" id="' . esc_attr( $key . '_disabled' ) . '" name="' . esc_attr( $key ) . '" value="disabled" /> ' . __( 'Disable Google fonts', 'themify' ) . '</label><br/>';
$html .= '<span class="pushlabel">
<label for="' . esc_attr( $key . '_recommended' ) . '">
<input ' . checked( themify_check( $key )? themify_get( $key ) : 'recommended', 'recommended', false) . ' type="radio" id="' . esc_attr( $key . '_recommended' ) . '" name="' . esc_attr( $key ) . '" value="recommended" /> ' . __( 'Show recommended Google Fonts only', 'themify' ) . '</label><br/>';
<label for="' . esc_attr( $key . '_full' ) . '">
<input ' . checked( themify_check( $key )? themify_get( $key ) : '', 'full', false ) . ' type="radio" id="' . esc_attr( $key . '_full' ) . '" name="' . esc_attr( $key ) . '" value="full" /> ' . __( 'Show all Google Fonts (showing all fonts will take longer to load)', 'themify' ) . '</label>
* Renders the option to responsive design
function themify_disable_responsive_design_option( $data = array() ) {
$out = sprintf( '<p class="tf_clearfix"><span class="label width10">%s</span></p>', esc_html__( 'Responsive Breakpoints:', 'themify' ) );
$opt_data = themify_get_data();
$break_points = themify_get_breakpoints('',true);
$pre = 'setting-customizer_responsive_design_';
$bp_tablet_landscape = !empty( $opt_data[ $pre . 'tablet_landscape'] ) ? $opt_data[ $pre . 'tablet_landscape'] : 1024;
$bp_tablet = !empty( $opt_data[ $pre . 'tablet'] ) ? $opt_data[ $pre . 'tablet'] : 768;
$bp_mobile =!empty( $opt_data[ $pre . 'mobile'] ) ? $opt_data[ $pre . 'mobile'] : 600;
$out .= sprintf( '<div class="tf_clearfix"><div class="label">%s</div><div class="label input-range width10"><div class="range-slider width8"></div><input type="text" name="%s" value="%s" data-min="%d" data-max="%d" data-default-min="%d" data-default-max="%d" class="width4"> px</div></div>',
esc_html__( 'Tablet Landscape', 'themify' ),
$pre . 'tablet_landscape',
$bp_tablet_landscape < $break_points['tablet_landscape'][0] ? $bp_tablet_landscape : $break_points['tablet_landscape'][0],//min
$bp_tablet_landscape > $break_points['tablet_landscape'][1] ? $bp_tablet_landscape : $break_points['tablet_landscape'][1],//max
$break_points['tablet_landscape'][0],// default min
$break_points['tablet_landscape'][1]// default max
$out .= sprintf( '<div class="tf_clearfix"><div class="label">%s</div><div class="label input-range width10"><div class="range-slider width8"></div><input type="text" name="%s" value="%s" data-min="%d" data-max="%d" data-default-min="%d" data-default-max="%d" class="width4"> px</div></div>',
esc_html__( 'Tablet Portrait', 'themify' ),
$bp_tablet < $break_points['tablet'][0] ? $bp_tablet : $break_points['tablet'][0],//min
$bp_tablet > $break_points['tablet'][1] ? $bp_tablet : $break_points['tablet'][1],//max
$break_points['tablet'][0],
$break_points['tablet'][1]
$out .= sprintf( '<div class="tf_clearfix"><div class="label">%s</div><div class="label input-range width10"><div class="range-slider width8"></div><input type="text" name="%s" value="%s" data-min="%d" data-max="%d" data-default-min="%d" data-default-max="%d" class="width4"> px</div></div>',
esc_html__( 'Mobile', 'themify' ),
$bp_mobile < 320 ? $bp_mobile : 320,//min
$bp_mobile > $break_points['mobile'] ? $bp_mobile : $break_points['mobile'],//max