403Webshell
Server IP : 104.21.14.103  /  Your IP : 3.141.12.224
Web Server : LiteSpeed
System : Linux business53.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64
User : giankuin ( 1871)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /proc/self/root/home/giankuin/dietcontrungnhanh.com/wp-content/plugins/perfmatters/inc/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /proc/self/root/home/giankuin/dietcontrungnhanh.com/wp-content/plugins/perfmatters/inc/settings.php
<?php
//register settings + options
function perfmatters_settings() {

	if(get_option('perfmatters_options') == false) {	
		add_option('perfmatters_options', apply_filters('perfmatters_default_options', perfmatters_default_options()));
	}

    $perfmatters_options = get_option('perfmatters_options');
    $perfmatters_tools = get_option('perfmatters_tools');

    /* options primary section
    /**********************************************************/
    add_settings_section('perfmatters_options', __('General', 'perfmatters'), '__return_false', 'perfmatters_options');

    //disable emojis
    add_settings_field(
    	'disable_emojis', 
    	perfmatters_title(__('Disable Emojis', 'perfmatters'), 'disable_emojis', 'https://perfmatters.io/docs/disable-emojis-wordpress/'), 
    	'perfmatters_print_input', 
    	'perfmatters_options', 
    	'perfmatters_options', 
    	array(
            'id' => 'disable_emojis',
            'tooltip' => __('Removes WordPress Emojis JavaScript file (wp-emoji-release.min.js).', 'perfmatters')
        )
    );

    //disable dashicons
    add_settings_field(
        'disable_dashicons', 
        perfmatters_title(__('Disable Dashicons', 'perfmatters'), 'disable_dashicons', 'https://perfmatters.io/docs/remove-dashicons-wordpress/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_options', 
        array(
            'id' => 'disable_dashicons',
            'tooltip' => __('Disables dashicons on the front end when not logged in.', 'perfmatters')
        )
    );

    //disable embeds
    add_settings_field(
    	'disable_embeds', 
    	perfmatters_title(__('Disable Embeds', 'perfmatters'), 'disable_embeds', 'https://perfmatters.io/docs/disable-embeds-wordpress/'), 
    	'perfmatters_print_input', 
    	'perfmatters_options', 
    	'perfmatters_options', 
    	array(
    		'id' => 'disable_embeds',
    		'tooltip' => __('Removes WordPress Embed JavaScript file (wp-embed.min.js).', 'perfmatters')   		
    	)
    );

	//disable xml-rpc
    add_settings_field(
    	'disable_xmlrpc', 
    	perfmatters_title(__('Disable XML-RPC', 'perfmatters'), 'disable_xmlrpc', 'https://perfmatters.io/docs/disable-xml-rpc-wordpress/'), 
    	'perfmatters_print_input', 
    	'perfmatters_options', 
    	'perfmatters_options', 
    	array(
    		'id' => 'disable_xmlrpc',
    		'tooltip' => __('Disables WordPress XML-RPC functionality.', 'perfmatters')
    	)
    );

	//remove jquery migrate
    add_settings_field(
    	'remove_jquery_migrate', 
    	perfmatters_title(__('Remove jQuery Migrate', 'perfmatters'), 'remove_jquery_migrate', 'https://perfmatters.io/docs/remove-jquery-migrate-wordpress/'), 
    	'perfmatters_print_input', 
    	'perfmatters_options', 
    	'perfmatters_options', 
    	array(
    		'id' => 'remove_jquery_migrate',
    		'tooltip' => __('Removes jQuery Migrate JavaScript file (jquery-migrate.min.js).', 'perfmatters')
    	)
    );

    //hide wp version
    add_settings_field(
    	'hide_wp_version', 
    	perfmatters_title(__('Hide WP Version', 'perfmatters'), 'hide_wp_version', 'https://perfmatters.io/docs/remove-wordpress-version-number/'), 
    	'perfmatters_print_input', 
    	'perfmatters_options', 
    	'perfmatters_options', 
    	array(
    		'id' => 'hide_wp_version',
    		'tooltip' => __('Removes WordPress version meta tag.', 'perfmatters')
    	)
    );

    //remove rsd link
    add_settings_field(
    	'remove_rsd_link', 
    	perfmatters_title(__('Remove RSD Link', 'perfmatters'), 'remove_rsd_link', 'https://perfmatters.io/docs/remove-rsd-link-wordpress/'), 
    	'perfmatters_print_input', 
    	'perfmatters_options', 
    	'perfmatters_options', 
    	array(
    		'id' => 'remove_rsd_link',
    		'tooltip' => __('Remove RSD (Real Simple Discovery) link tag.', 'perfmatters')
    	)
    );

    //remove shortlink
    add_settings_field(
    	'remove_shortlink', 
    	perfmatters_title(__('Remove Shortlink', 'perfmatters'), 'remove_shortlink', 'https://perfmatters.io/docs/remove-shortlink-wordpress/'), 
    	'perfmatters_print_input', 
    	'perfmatters_options', 
    	'perfmatters_options', 
    	array(
    		'id' => 'remove_shortlink',
    		'tooltip' => __('Remove Shortlink link tag.', 'perfmatters')
    	)
    );

    //disable rss feeds
    add_settings_field(
    	'disable_rss_feeds', 
    	perfmatters_title(__('Disable RSS Feeds', 'perfmatters'), 'disable_rss_feeds', 'https://perfmatters.io/docs/disable-rss-feeds-wordpress/'), 
    	'perfmatters_print_input', 
    	'perfmatters_options', 
    	'perfmatters_options', 
    	array(
    		'id' => 'disable_rss_feeds',
    		'tooltip' => __('Disable WordPress generated RSS feeds and 301 redirect URL to parent.', 'perfmatters')
    	)
    );

    //remove feed links
    add_settings_field(
    	'remove_feed_links', 
    	perfmatters_title(__('Remove RSS Feed Links', 'perfmatters'), 'remove_feed_links', 'https://perfmatters.io/docs/remove-rss-feed-links-wordpress/'), 
    	'perfmatters_print_input', 
    	'perfmatters_options', 
    	'perfmatters_options', 
    	array(
    		'id' => 'remove_feed_links',
    		'tooltip' => __('Disable WordPress generated RSS feed link tags.', 'perfmatters')
    	)
    );

    //disable self pingbacks
    add_settings_field(
    	'disable_self_pingbacks', 
    	perfmatters_title(__('Disable Self Pingbacks', 'perfmatters'), 'disable_self_pingbacks', 'https://perfmatters.io/docs/disable-self-pingbacks-wordpress/'), 
    	'perfmatters_print_input', 
    	'perfmatters_options', 
    	'perfmatters_options', 
    	array(
    		'id' => 'disable_self_pingbacks',
    		'tooltip' => __('Disable Self Pingbacks (generated when linking to an article on your own blog).', 'perfmatters')
    	)
    );

    //disable rest api
    add_settings_field(
    	'disable_rest_api', 
    	perfmatters_title(__('Disable REST API', 'perfmatters'), 'disable_rest_api', 'https://perfmatters.io/docs/disable-wordpress-rest-api/'), 
    	'perfmatters_print_input', 
    	'perfmatters_options', 
    	'perfmatters_options', 
    	array(
    		'id' => 'disable_rest_api',
    		'input' => 'select',
    		'options' => array(
    			''                   => __('Default (Enabled)', 'perfmatters'),
    			'disable_non_admins' => __('Disable for Non-Admins', 'perfmatters'),
    			'disable_logged_out' => __('Disable When Logged Out', 'perfmatters')
    		),
    		'tooltip' => __('Disables REST API requests and displays an error message if the requester doesn\'t have permission.', 'perfmatters')
    	)
    );

    //remove rest api links
    add_settings_field(
    	'remove_rest_api_links', 
    	perfmatters_title(__('Remove REST API Links', 'perfmatters'), 'remove_rest_api_links', 'https://perfmatters.io/docs/remove-wordpress-rest-api-links/'), 
    	'perfmatters_print_input', 
    	'perfmatters_options', 
    	'perfmatters_options', 
    	array(
    		'id' => 'remove_rest_api_links',
    		'tooltip' => __('Removes REST API link tag from the front end and the REST API header link from page requests.', 'perfmatters')
    	)
    );

    //disable google maps
    add_settings_field(
        'disable_google_maps', 
        perfmatters_title(__('Disable Google Maps', 'perfmatters'), 'disable_google_maps', 'https://perfmatters.io/docs/disable-google-maps-api-wordpress/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_options', 
        array(
            'id' => 'disable_google_maps',
            'class' => 'perfmatters-input-controller',
            'tooltip' => __('Removes any instances of Google Maps being loaded across your entire site.', 'perfmatters')
        )
    );

    //disable google maps exclusions
    add_settings_field(
        'disable_google_maps_exclusions', 
        perfmatters_title(__('Exclude Post IDs', 'perfmatters'), 'disable_google_maps_exclusions', 'https://perfmatters.io/docs/disable-google-maps-api-wordpress/#exclude'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_options', 
        array(
            'id' => 'disable_google_maps_exclusions',
            'input' => 'text',
            'placeholder' => '23,19,blog',
            'class' => 'disable_google_maps' . (empty($perfmatters_options['disable_google_maps']) ? ' hidden' : ''),
            'tooltip' => __('Prevent Google Maps from being disabled on specific post IDs. Format: comma separated', 'perfmatters')
        )
    );

    //disable password strength meter
    add_settings_field(
        'disable_password_strength_meter', 
        perfmatters_title(__('Disable Password Strength Meter', 'perfmatters'), 'disable_password_strength_meter', 'https://perfmatters.io/docs/disable-password-meter-strength/'),
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_options', 
        array(
            'id' => 'disable_password_strength_meter',
            'tooltip' => __('Removes WordPress and WooCommerce Password Strength Meter scripts from non essential pages.', 'perfmatters')
        )
    );

    //disable comments
    add_settings_field(
        'disable_comments', 
        perfmatters_title(__('Disable Comments', 'perfmatters'), 'disable_comments', 'https://perfmatters.io/docs/wordpress-disable-comments/'),
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_options', 
        array(
            'id' => 'disable_comments',
            'tooltip' => __('Disables WordPress comments across your entire site.', 'perfmatters')
        )
    );

    //remove comment urls
    add_settings_field(
        'remove_comment_urls', 
        perfmatters_title(__('Remove Comment URLs', 'perfmatters'), 'remove_comment_urls', 'https://perfmatters.io/docs/remove-wordpress-comment-author-link'),
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_options', 
        array(
            'id' => 'remove_comment_urls',
            'tooltip' => __('Removes the WordPress comment author link and website field from blog posts.', 'perfmatters')
        )
    );

    //blank favicon
    add_settings_field(
        'blank_favicon', 
        perfmatters_title(__('Add Blank Favicon', 'perfmatters'), 'blank_favicon', 'https://perfmatters.io/docs/blank-favicon/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_options', 
        array(
            'id' => 'blank_favicon',
            'tooltip' => __('Adds a blank favicon to your WordPress header, which will prevent a missing favicon or 404 error. If you already have a favicon on your site, you should leave this off. ', 'perfmatters')
        )
    );

    //remove global styles
    add_settings_field(
        'remove_global_styles', 
        perfmatters_title(__('Remove Global Styles', 'perfmatters'), 'remove_global_styles', 'https://perfmatters.io/docs/remove-global-inline-styles-wordpress/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_options', 
        array(
            'id' => 'remove_global_styles',
            'tooltip' => __('Remove the inline global styles (CSS and SVG code) related to duotone filters.', 'perfmatters')
        )
    );

    //separate block styles
    add_settings_field(
        'separate_block_styles', 
        perfmatters_title(__('Separate Block Styles', 'perfmatters'), 'separate_block_styles', 'https://perfmatters.io/docs/separate-core-block-styles-wordpress/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_options', 
        array(
            'id' => 'separate_block_styles',
            'tooltip' => __('Load core block styles only when they are rendered instead of in a global stylesheet.', 'perfmatters')
        )
    );

    //disable heartbeat
    add_settings_field(
        'disable_heartbeat', 
        perfmatters_title(__('Disable Heartbeat', 'perfmatters'), 'disable_heartbeat', 'https://perfmatters.io/docs/disable-wordpress-heartbeat-api/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_options', 
        array(
            'id' => 'disable_heartbeat',
            'input' => 'select',
            'options' => array(
                ''                   => __('Default', 'perfmatters'),
                'disable_everywhere' => __('Disable Everywhere', 'perfmatters'),
                'allow_posts'        => __('Only Allow When Editing Posts/Pages', 'perfmatters')
            ),
            'tooltip' => __('Disable WordPress Heartbeat everywhere or in certain areas (used for auto saving and revision tracking).', 'perfmatters')
        )
    );

    //heartbeat frequency
    add_settings_field(
        'heartbeat_frequency', 
        perfmatters_title(__('Heartbeat Frequency', 'perfmatters'), 'heartbeat_frequency', 'https://perfmatters.io/docs/change-heartbeat-frequency-wordpress/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_options', 
        array(
            'id' => 'heartbeat_frequency',
            'input' => 'select',
            'options' => array(
                ''   => sprintf(__('%s Seconds', 'perfmatters'), '15') . ' (' . __('Default', 'perfmatters') . ')',
                '30' => sprintf(__('%s Seconds', 'perfmatters'), '30'),
                '45' => sprintf(__('%s Seconds', 'perfmatters'), '45'),
                '60' => sprintf(__('%s Seconds', 'perfmatters'), '60')
            ),
            'tooltip' => __('Controls how often the WordPress Heartbeat API is allowed to run.', 'perfmatters')
        )
    );

    //limit post revisions
    add_settings_field(
        'limit_post_revisions', 
        perfmatters_title(__('Limit Post Revisions', 'perfmatters'), 'limit_post_revisions', 'https://perfmatters.io/docs/disable-limit-post-revisions-wordpress/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_options', 
        array(
            'id' => 'limit_post_revisions',
            'input' => 'select',
            'options' => array(
                ''      => __('Default', 'perfmatters'),
                'false' => __('Disable Post Revisions', 'perfmatters'),
                '1'     => '1',
                '2'     => '2',
                '3'     => '3',
                '4'     => '4',
                '5'     => '5',
                '10'    => '10',
                '15'    => '15',
                '20'    => '20',
                '25'    => '25',
                '30'    => '30'
            ),
            'tooltip' => __('Limits the maximum amount of revisions that are allowed for posts and pages.', 'perfmatters')
        )
    );

    //autosave interval
    add_settings_field(
        'autosave_interval', 
        perfmatters_title(__('Autosave Interval', 'perfmatters'), 'autosave_interval', 'https://perfmatters.io/docs/change-autosave-interval-wordpress/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_options', 
        array(
            'id' => 'autosave_interval',
            'input' => 'select',
            'options' => array(
                ''      => '1 ' . __('Minute', 'perfmatters') . ' (' . __('Default', 'perfmatters') . ')',
                '86400' => __('Disable Autosave Interval', 'perfmatters'),
                '120'   => '2 ' . __('Minutes', 'perfmatters'),
                '180'   => '3 ' . __('Minutes', 'perfmatters'),
                '240'   => '4 ' . __('Minutes', 'perfmatters'),
                '300'   => '5 ' . __('Minutes', 'perfmatters'),
                '600'   => '10 ' . __('Minutes', 'perfmatters'),
                '900'   => '15 ' . __('Minutes', 'perfmatters'),
                '1200'  => '20 ' . __('Minutes', 'perfmatters'),
                '1500'  => '25 ' . __('Minutes', 'perfmatters'),
                '1800'  => '30 ' . __('Minutes', 'perfmatters')
            ),
            'tooltip' => __('Controls how often WordPress will auto save posts and pages while editing.', 'perfmatters')
        )
    );

    //login url options section
    add_settings_section('login_url', __('Login URL', 'perfmatters'), '__return_false', 'perfmatters_options');

    //change login url
    add_settings_field(
        'login_url', 
        perfmatters_title(__('Custom Login URL', 'perfmatters'), 'login_url', 'https://perfmatters.io/docs/change-wordpress-login-url/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'login_url', 
        array(
            'id' => 'login_url',
            'input' => 'text',
            'validate' => '^[a-z0-9-]+$',
            'placeholder' => 'hideme',
            'tooltip' => __('When set, this will change your WordPress login URL (slug) to the provided string and will block wp-admin and wp-login endpoints from being directly accessed.', 'perfmatters')
        )
    );

    //login url behavior
    add_settings_field(
        'login_url_behavior', 
        perfmatters_title(__('Disabled Behavior', 'perfmatters'), 'login_url_behavior', 'https://perfmatters.io/docs/change-wordpress-login-url/#disabled-behavior'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'login_url', 
        array(
            'id' => 'login_url_behavior',
            'input' => 'select',
            'options' => array(
                '' => __('Message', 'perfmatters') . ' (' . __('Default', 'perfmatters') . ')',
                '404' => __('404 Template', 'perfmatters'),
                'home' => __('Home URL', 'perfmatters'),
                'redirect' => __('Local Redirect', 'perfmatters')
            ),
            'class' => 'perfmatters-input-controller',
            'tooltip' => __('Change what happens when an original login endpoint is visited.', 'perfmatters')
        )
    );

    //login url message
    add_settings_field(
        'login_url_message', 
        perfmatters_title(__('Message', 'perfmatters'), 'login_url_message', 'https://perfmatters.io/docs/change-wordpress-login-url/#message'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'login_url', 
        array(
            'id' => 'login_url_message',
            'input' => 'text',
            'class' => 'login_url_behavior perfmatters-select-control-' . (!empty($perfmatters_options['login_url_behavior']) ? ' hidden' : ''),
            'placeholder' => __('This has been disabled.', 'perfmatters'),
            'tooltip' => __('Change the disabled message that is displayed.', 'perfmatters')
        )
    );

    //login url redirect
    add_settings_field(
        'login_url_redirect', 
        perfmatters_title(__('Redirect Slug', 'perfmatters'), 'login_url_redirect', 'https://perfmatters.io/docs/change-wordpress-login-url/#local-redirect'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'login_url', 
        array(
            'id' => 'login_url_redirect',
            'input' => 'text',
            'class' => 'login_url_behavior perfmatters-select-control-redirect' . (empty($perfmatters_options['login_url_behavior']) || $perfmatters_options['login_url_behavior'] !== 'redirect' ? ' hidden' : ''),
            'placeholder' => __('404', 'perfmatters'),
            'tooltip' => __('Change the slug that is used for the local redirect.', 'perfmatters')
        )
    );

    if(class_exists('WooCommerce')) {

        //woocommerce options section
        add_settings_section('perfmatters_woocommerce', 'WooCommerce', '__return_false', 'perfmatters_options');

        //disable woocommerce scripts
        add_settings_field(
            'disable_woocommerce_scripts', 
            perfmatters_title(__('Disable Scripts', 'perfmatters'), 'disable_woocommerce_scripts', 'https://perfmatters.io/docs/disable-woocommerce-scripts-and-styles/'), 
            'perfmatters_print_input', 
            'perfmatters_options', 
            'perfmatters_woocommerce', 
            array(
                'id' => 'disable_woocommerce_scripts',
                'tooltip' => __('Disables WooCommerce scripts and styles except on product, cart, and checkout pages.', 'perfmatters')
            )
        );

        //disable woocommerce cart fragmentation
        add_settings_field(
            'disable_woocommerce_cart_fragmentation', 
            perfmatters_title(__('Disable Cart Fragmentation', 'perfmatters'), 'disable_woocommerce_cart_fragmentation', 'https://perfmatters.io/docs/disable-woocommerce-cart-fragments-ajax/'), 
            'perfmatters_print_input', 
            'perfmatters_options', 
            'perfmatters_woocommerce', 
            array(
                'id' => 'disable_woocommerce_cart_fragmentation',
                'tooltip' => __('Disables WooCommerce cart fragmentation script when there are no items in the cart.', 'perfmatters')
            )
        );

        //disable woocommerce status meta box
        add_settings_field(
            'disable_woocommerce_status', 
            perfmatters_title(__('Disable Status Meta Box', 'perfmatters'), 'disable_woocommerce_status', 'https://perfmatters.io/docs/disable-woocommerce-status-meta-box/'), 
            'perfmatters_print_input', 
            'perfmatters_options', 
            'perfmatters_woocommerce', 
            array(
                'id' => 'disable_woocommerce_status',
                'tooltip' => __('Disables WooCommerce status meta box from the WP Admin Dashboard.', 'perfmatters')
            )
        );

        //disable woocommerce widgets
        add_settings_field(
            'disable_woocommerce_widgets', 
            perfmatters_title(__('Disable Widgets', 'perfmatters'), 'disable_woocommerce_widgets', 'https://perfmatters.io/docs/disable-woocommerce-widgets/'), 
            'perfmatters_print_input', 
            'perfmatters_options', 
            'perfmatters_woocommerce', 
            array(
                'id' => 'disable_woocommerce_widgets',
                'tooltip' => __('Disables all WooCommerce widgets.', 'perfmatters')
            )
        );
    }

    /* assets section
    /**********************************************************/
    add_settings_section('assets', __('Assets', 'perfmatters'), '__return_false', 'perfmatters_options');

    //script manager
    add_settings_field(
        'script_manager', 
        perfmatters_title(__('Script Manager', 'perfmatters'), 'script_manager', 'https://perfmatters.io/docs/disable-scripts-per-post-page/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'assets', 
        array(
            'id' => 'script_manager',
            'section' => 'assets',
            'tooltip' => __('Enables the Perfmatters Script Manager, which gives you the ability to disable CSS and JS files on a page by page basis.', 'perfmatters')
        )
    );

    //assets js section
    add_settings_section('assets_js', __('JavaScript', 'perfmatters'), '__return_false', 'perfmatters_options');

    //defer js
    add_settings_field(
        'defer_js', 
        perfmatters_title(__('Defer Javascript', 'perfmatters'), 'defer_js', 'https://perfmatters.io/docs/defer-javascript-wordpress/#defer'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'assets_js', 
        array(
            'id' => 'defer_js',
            'section' => 'assets',
            'tooltip' => __('Add the defer attribute to your JavaScript files.', 'perfmatters'),
            'class' => 'perfmatters-input-controller'
        )
    );

    //defer inline
    add_settings_field(
        'defer_inline', 
        perfmatters_title(__('Include Inline Scripts', 'perfmatters'), 'defer_inline', 'https://perfmatters.io/docs/defer-javascript-wordpress/#include-inline-scripts'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'assets_js', 
        array(
            'id' => 'defer_inline',
            'section' => 'assets',
            'tooltip' => __('Include inline scripts in deferral.', 'perfmatters'),
            'class' => 'assets-defer_js' . (empty($perfmatters_options['assets']['defer_js']) ? ' hidden' : '')
        )
    );

    //defer jquery
    add_settings_field(
        'defer_jquery', 
        perfmatters_title(__('Include jQuery', 'perfmatters'), 'defer_jquery', 'https://perfmatters.io/docs/defer-javascript-wordpress/#include-jquery'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'assets_js', 
        array(
            'id' => 'defer_jquery',
            'section' => 'assets',
            'confirmation' => __('Many plugins and themes require jQuery. We recommend either testing jQuery deferral separately or leaving this option turned off.', 'perfmatters'),
            'tooltip' => __('Allow jQuery core to be deferred. We recommend testing this separately or leaving it off.', 'perfmatters'),
            'class' => 'assets-defer_js' . (empty($perfmatters_options['assets']['defer_js']) ? ' hidden' : '') . ' pm-advanced-option'
        )
    );

    //js exlusions
    add_settings_field(
        'js_exclusions', 
        perfmatters_title(__('Exclude from Deferral', 'perfmatters'), 'js_exclusions', 'https://perfmatters.io/docs/defer-javascript-wordpress/#exclude'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'assets_js', 
        array(
            'id' => 'js_exclusions',
            'section' => 'assets',
            'input' => 'textarea',
            'textareatype' => 'oneperline',
            'placeholder' => 'example.js',
            'tooltip' => __('Exclude specific JavaScript files from deferral. Exclude a file by adding the source URL (example.js). Format: one per line', 'perfmatters'),
            'class' => 'assets-defer_js' . (empty($perfmatters_options['assets']['defer_js']) ? ' hidden' : '')
        )
    );

    //delay_js
    add_settings_field(
        'delay_js', 
        perfmatters_title(__('Delay JavaScript', 'perfmatters'), 'delay_js', 'https://perfmatters.io/docs/delay-javascript/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'assets_js', 
        array(
            'id' => 'delay_js',
            'section' => 'assets',
            'tooltip' => __('Delay JavaScript from loading until user interaction.', 'perfmatters'),
            'class' => 'perfmatters-input-controller'
        )
    );

    //delayed js behavior
    add_settings_field(
        'delay_js_behavior', 
        perfmatters_title(__('Delay Behavior', 'perfmatters'), 'delay_js_behavior', 'https://perfmatters.io/docs/delay-javascript/#behavior'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'assets_js', 
        array(
            'id' => 'delay_js_behavior',
            'section' => 'assets',
            'input' => 'select',
            'options' => array(
                '' => __('Only Delay Specified Scripts', 'perfmatters') . ' (' . __('Default', 'perfmatters') . ')',
                'all' => __('Delay All Scripts', 'perfmatters')
            ),
            'tooltip' => __('Choose the method used to delay scripts.', 'perfmatters'),
            'class' => 'assets-delay_js perfmatters-input-controller' . (empty($perfmatters_options['assets']['delay_js']) ? ' hidden' : '')
        )
    );

    //delay js inclusions
    add_settings_field(
        'delay_js_inclusions', 
        perfmatters_title(__('Delayed Scripts', 'perfmatters'), 'delay_js_inclusions', 'https://perfmatters.io/docs/delay-javascript/#scripts'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'assets_js', 
        array(
            'id' => 'delay_js_inclusions',
            'section' => 'assets',
            'input' => 'textarea',
            'textareatype' => 'oneperline',
            'placeholder' => 'example.js',
            'tooltip' => __('Delay specific JavaScript files by adding the source URL (example.js), or delay an inline script by adding a unique string from that script. Format: one per line', 'perfmatters'),
            'class' => 'assets-delay_js assets-delay_js_behavior perfmatters-select-control-' . (!empty($perfmatters_options['assets']['delay_js_behavior']) || empty($perfmatters_options['assets']['delay_js']) ? ' hidden' : '')
        )
    );

    //delay js quick exclusions
    add_settings_field(
        'delay_js_quick_exclusions', 
        perfmatters_title(__('Quick Exclusions', 'perfmatters'), 'delay_js_quick_exclusions', 'https://perfmatters.io/docs/delay-javascript/#quick-exclusions'), 
        'perfmatters_print_quick_exclusions', 
        'perfmatters_options', 
        'assets_js', 
        array(
            'id' => 'delay_js_quick_exclusions',
            'section' => 'assets',
            'tooltip' => __('Exclude scripts for popular plugins and themes based on our predefined lists of common exclusions.', 'perfmatters'),
            'class' => 'assets-delay_js assets-delay_js_behavior perfmatters-select-control-all' . (empty($perfmatters_options['assets']['delay_js_behavior'])  || empty($perfmatters_options['assets']['delay_js']) ? ' hidden' : '') . ' delay_js_quick_exclusions'
        )
    );

    //delay js exclusions
    add_settings_field(
        'delay_js_exclusions', 
        perfmatters_title(__('Excluded from Delay', 'perfmatters'), 'delay_js_exclusions', 'https://perfmatters.io/docs/delay-javascript/#excluded'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'assets_js', 
        array(
            'id' => 'delay_js_exclusions',
            'section' => 'assets',
            'input' => 'textarea',
            'textareatype' => 'oneperline',
            'placeholder' => 'example.js',
            'tooltip' => __('Exclude specific JavaScript files from delay by adding the source URL (example.js), or exclude an inline script by adding a unique string from that script. Format: one per line', 'perfmatters'),
            'class' => 'assets-delay_js assets-delay_js_behavior perfmatters-select-control-all' . (empty($perfmatters_options['assets']['delay_js_behavior'])  || empty($perfmatters_options['assets']['delay_js']) ? ' hidden' : '')
        )
    );

    //delay timeout
    add_settings_field(
        'delay_timeout', 
        perfmatters_title(__('Delay Timeout', 'perfmatters'), 'delay_timeout', 'https://perfmatters.io/docs/delay-javascript/#timeout'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'assets_js', 
        array(
            'id' => 'delay_timeout',
            'section' => 'assets',
            'tooltip' => __('Load delayed scripts after a set amount of time if no user interaction has been detected.', 'perfmatters'),
            'class' => 'assets-delay_js' . (empty($perfmatters_options['assets']['delay_js']) ? ' hidden' : '')
        )
    );

    //disable click delay
    add_settings_field(
        'disable_click_delay', 
        perfmatters_title(__('Disable Click Delay', 'perfmatters'), 'disable_click_delay', 'https://perfmatters.io/docs/delay-javascript/#disable-click-delay'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'assets_js', 
        array(
            'id' => 'disable_click_delay',
            'section' => 'assets',
            'tooltip' => __('Prevents the first click from being delayed until JavaScript has finished loading. This can be helpful if you are excluding scripts for interactive elements manually.', 'perfmatters'),
            'class' => 'assets-delay_js' . (empty($perfmatters_options['assets']['delay_js']) ? ' hidden' : ''). ' pm-advanced-option'
        )
    );

    //fastclick
    add_settings_field(
        'fastclick', 
        perfmatters_title(__('Enable FastClick', 'perfmatters'), 'fastclick', 'https://perfmatters.io/docs/delay-javascript/#fastclick'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'assets_js', 
        array(
            'id' => 'fastclick',
            'section' => 'assets',
            'tooltip' => __('Load the FastClick library locally to fix the double-click issue on iOS.', 'perfmatters'),
            'class' => 'assets-delay_js' . (empty($perfmatters_options['assets']['delay_js']) ? ' hidden' : ''). ' pm-advanced-option'
        )
    );

    //assets css section
    add_settings_section('assets_css', __('CSS', 'perfmatters'), '__return_false', 'perfmatters_options');

    //remove unused css
    add_settings_field(
        'remove_unused_css', 
        perfmatters_title(__('Remove Unused CSS', 'perfmatters'), 'remove_unused_css', 'https://perfmatters.io/docs/remove-unused-css/#remove-unused-css'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'assets_css', 
        array(
            'id' => 'remove_unused_css',
            'section' => 'assets',
            'tooltip' => __('Remove unused CSS from your stylesheets and print out used CSS inline in the header.', 'perfmatters'),
            'class' => 'perfmatters-input-controller'
        )
    );

    //used css method
    add_settings_field(
        'rucss_method', 
        perfmatters_title(__('Used CSS Method', 'perfmatters'), 'rucss_method', 'https://perfmatters.io/docs/remove-unused-css/#css-method'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'assets_css', 
        array(
            'id' => 'rucss_method',
            'section' => 'assets',
            'input' => 'select',
            'options' => array(
                '' => __('Inline', 'perfmatters') . ' (' . __('Default', 'perfmatters') . ')',
                'file' => __('File', 'perfmatters')
            ),
            'tooltip' => __('Choose how the used CSS will be included.', 'perfmatters'),
            'class' => 'assets-remove_unused_css' . (empty($perfmatters_options['assets']['remove_unused_css']) ? ' hidden' : '')
        )
    );

    //unused css stylesheet behavior
    add_settings_field(
        'rucss_stylesheet_behavior', 
        perfmatters_title(__('Stylesheet Behavior', 'perfmatters'), 'rucss_stylesheet_behavior', 'https://perfmatters.io/docs/remove-unused-css/#stylesheet-behavior'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'assets_css', 
        array(
            'id' => 'rucss_stylesheet_behavior',
            'section' => 'assets',
            'input' => 'select',
            'options' => array(
                '' => __('Delay', 'perfmatters') . ' (' . __('Default', 'perfmatters') . ')',
                'async' => __('Async', 'perfmatters'),
                'remove' => __('Remove', 'perfmatters')
            ),
            'tooltip' => __('Choose how the original stylesheets (unused CSS) will be included.', 'perfmatters'),
            'class' => 'assets-remove_unused_css' . (empty($perfmatters_options['assets']['remove_unused_css']) ? ' hidden' : '')
        )
    );

    //remove unused css excluded stylesheets
    add_settings_field(
        'rucss_excluded_stylesheets', 
        perfmatters_title(__('Excluded Stylesheets', 'perfmatters'), 'rucss_excluded_stylesheets', 'https://perfmatters.io/docs/remove-unused-css/#excluded-stylesheets'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'assets_css', 
        array(
            'id' => 'rucss_excluded_stylesheets',
            'section' => 'assets',
            'input' => 'textarea',
            'textareatype' => 'oneperline',
            'tooltip' => __('Exclude specific stylesheets from unused CSS removal by adding a unique portion of the source URL (example.css). Format: one per line', 'perfmatters'),
            'class' => 'assets-remove_unused_css' . (empty($perfmatters_options['assets']['remove_unused_css']) ? ' hidden' : '')
        )
    );

    //remove unused css excluded selectors
    add_settings_field(
        'rucss_excluded_selectors', 
        perfmatters_title(__('Excluded Selectors', 'perfmatters'), 'rucss_excluded_selectors', 'https://perfmatters.io/docs/remove-unused-css/#excluded-selectors'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'assets_css', 
        array(
            'id' => 'rucss_excluded_selectors',
            'section' => 'assets',
            'input' => 'textarea',
            'textareatype' => 'oneperline',
            'tooltip' => __('Exclude specific CSS selectors from being removed by adding the element ID, class name, etc. (#id, .class). Format: one per line', 'perfmatters'),
            'class' => 'assets-remove_unused_css' . (empty($perfmatters_options['assets']['remove_unused_css']) ? ' hidden' : '')
        )
    );

    //cdn url
    add_settings_field(
        'rucss_cdn_url', 
        perfmatters_title(__('CDN URL', 'perfmatters'), 'rucss_cdn_url', 'https://perfmatters.io/docs/remove-unused-css/#cdn-url'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'assets_css', 
        array(
            'id' => 'rucss_cdn_url',
            'section' => 'assets',
            'input' => 'text',
            'tooltip' => __('Provide your CDN URL if you are using a CDN rewrite outside of Perfmatters.', 'perfmatters'),
            'placeholder' => 'https://cdn.example.com',
            'class' => 'assets-remove_unused_css' . (empty($perfmatters_options['assets']['remove_unused_css']) ? ' hidden' : ''). ' pm-advanced-option'
        )
    );

    //clear used css
    add_settings_field(
        'clear_used_css', 
        perfmatters_title(__('Clear Used CSS', 'perfmatters'), 'clear_used_css', 'https://perfmatters.io/docs/remove-unused-css/#clear-used-css'), 
        'perfmatters_print_input',
        'perfmatters_options', 
        'assets_css', 
        array(
            'section' => 'assets',
            'id' => 'clear_used_css',
            'input' => 'button',
            'action' => 'clear_used_css',
            'title' => __('Clear Used CSS', 'perfmatters'),
            'class' => 'assets-remove_unused_css' . (empty($perfmatters_options['assets']['remove_unused_css']) ? ' hidden' : ''),
            'tooltip' => __('Remove all existing unused CSS files that have been generated.', 'perfmatters')
        )
    );

    //assets code section
    add_settings_section('assets_code', __('Code', 'perfmatters'), '__return_false', 'perfmatters_options');

    //header code
    add_settings_field(
        'header_code', 
        perfmatters_title(__('Add Header Code', 'perfmatters'), 'header_code', 'https://perfmatters.io/docs/wordpress-add-code-to-header-footer/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'assets_code', 
        array(
            'id' => 'header_code',
            'section' => 'assets',
            'input' => 'textarea',
            'textareatype' => 'codemirror',
            'tooltip' => __('Code added here will be printed in the head section on every page of your website.', 'perfmatters')
        )
    );

    //body code
    if(function_exists('wp_body_open') && version_compare(get_bloginfo('version'), '5.2' , '>=')) {

        add_settings_field(
            'body_code', 
            perfmatters_title(__('Add Body Code', 'perfmatters'), 'body_code', 'https://perfmatters.io/docs/wordpress-add-code-to-header-footer/'), 
            'perfmatters_print_input', 
            'perfmatters_options', 
            'assets_code', 
            array(
                'id' => 'body_code',
                'section' => 'assets',
                'input' => 'textarea',
                'textareatype' => 'codemirror',
                'tooltip' => __('Code added here will be printed below the opening body tag on every page of your website.', 'perfmatters')
            )
        );
    }

    //footer code
    add_settings_field(
        'footer_code', 
        perfmatters_title(__('Add Footer Code', 'perfmatters'), 'footer_code', 'https://perfmatters.io/docs/wordpress-add-code-to-header-footer/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'assets_code', 
        array(
            'id' => 'footer_code',
            'section' => 'assets',
            'input' => 'textarea',
            'textareatype' => 'codemirror',
            'tooltip' => __('Code added here will be printed above the closing body tag on every page of your website.', 'perfmatters')
        )
    );

    /* preload section
    /**********************************************************/
    add_settings_section('preload', __('Preloading', 'perfmatters'), '__return_false', 'perfmatters_options');

    //enable instant page
    add_settings_field(
        'instant_page', 
        perfmatters_title(__('Enable Instant Page', 'perfmatters'), 'instant_page', 'https://perfmatters.io/docs/link-prefetch/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'preload', 
        array(
            'id' => 'instant_page',
            'section' => 'preload',
            'tooltip' => __('Automatically prefetch URLs in the background after a user hovers over a link. This results in almost instantaneous load times and improves the user experience.', 'perfmatters')
        )
    );

    //preload critical images
    add_settings_field(
        'critical_images', 
        perfmatters_title(__('Preload Critical Images', 'perfmatters'), 'critical_images', 'https://perfmatters.io/docs/preload/#critical-images'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'preload', 
        array(
            'id' => 'critical_images',
            'section' => 'preload',
            'input' => 'select',
            'options' => array(
                '' => '0' . ' (' . __('Default', 'perfmatters') . ')',
                '1' => '1',
                '2' => '2',
                '3' => '3',
                '4' => '4',
                '5' => '5'
            ),
            'tooltip' => __('Automatically preload leading images to help improve Largest Contentful Paint (LCP).', 'perfmatters')
        )
    );

    //preload
    add_settings_field(
        'preload', 
        perfmatters_title(__('Preload', 'perfmatters'), 'preload', 'https://perfmatters.io/docs/preload/'), 
        'perfmatters_print_input_rows', 
        'perfmatters_options', 
        'preload', 
        array(
            'id' => 'preload',
            'section' => 'preload',
            'tooltip' => __('Preload allows you to specify resources (such as fonts or CSS) needed right away during a page load. This helps fix render-blocking resource warnings. Format: https://example.com/font.woff2', 'perfmatters')
        )
    );

    //fetch priority
    add_settings_field(
        'fetch_priority', 
        perfmatters_title(__('Fetch Priority', 'perfmatters'), 'fetch_priority', 'https://perfmatters.io/docs/fetch-priority/'), 
        'perfmatters_print_input_rows', 
        'perfmatters_options', 
        'preload', 
        array(
            'id' => 'fetch_priority',
            'section' => 'preload',
            'tooltip' => __('Add the fetchpriority HTML attribute to a resource to proritize it higher or lower. This can help improve Largest Contentful Paint (LCP).', 'perfmatters')
        )
    );

    //disable core fetch
    add_settings_field(
        'disable_core_fetch', 
        perfmatters_title(__('Disable Core Fetch', 'perfmatters'), 'disable_core_fetch', 'https://perfmatters.io/docs/fetch-priority/#disable-core'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'preload', 
        array(
            'id' => 'disable_core_fetch',
            'section' => 'preload',
            'tooltip' => __('Disable the fetch priority attribute added by WordPress core.', 'perfmatters'),
            'class' => 'pm-advanced-option'
        )
    );

    //preconnect
    add_settings_field(
        'preconnect', 
        perfmatters_title(__('Preconnect', 'perfmatters'), 'preconnect', 'https://perfmatters.io/docs/preconnect/'), 
        'perfmatters_print_input_rows', 
        'perfmatters_options', 
        'preload', 
        array(
            'id' => 'preconnect',
            'section' => 'preload',
            'tooltip' => __('Preconnect allows the browser to set up early connections before an HTTP request, eliminating roundtrip latency and saving time for users. Format: https://example.com', 'perfmatters')
        )
    );

    //dns prefetch
    add_settings_field(
        'dns_prefetch', 
        perfmatters_title(__('DNS Prefetch', 'perfmatters'), 'dns_prefetch', 'https://perfmatters.io/docs/dns-prefetching/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'preload', 
        array(
            'id' => 'dns_prefetch',
            'section' => 'preload',
            'input' => 'textarea',
            'textareatype' => 'oneperline',
            'placeholder' => '//example.com',
            'tooltip' => __('Resolve domain names before a user clicks. Format: //example.com (one per line)', 'perfmatters')
        )
    );

    /* lazyload section
    /**********************************************************/
    add_settings_section('lazyload', __('Lazy Loading', 'perfmatters'), '__return_false', 'perfmatters_options');

    //images
    add_settings_field(
        'lazy_loading', 
        perfmatters_title(__('Images', 'perfmatters'), 'lazy_loading', 'https://perfmatters.io/docs/lazy-load-wordpress/#images'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'lazyload', 
        array(
            'section' => 'lazyload',
            'id' => 'lazy_loading',
            'tooltip' => __('Enable lazy loading on images.', 'perfmatters'),
            'class' => 'perfmatters-input-controller'
        )
    );

    //exclude leading
    add_settings_field(
        'exclude_leading_images', 
        perfmatters_title(__('Exclude Leading Images', 'perfmatters'), 'exclude_leading_images', 'https://perfmatters.io/docs/lazy-load-wordpress/#exclude-leading-images'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'lazyload', 
        array(
            'section' => 'lazyload',
            'id' => 'exclude_leading_images',
            'input' => 'select',
            'options' => array(
                '' => '0' . ' (' . __('Default', 'perfmatters') . ')',
                '1' => '1',
                '2' => '2',
                '3' => '3',
                '4' => '4',
                '5' => '5'
            ),
            'tooltip' => __('Exclude a certain number of images starting from the top of the page.', 'perfmatters'),
            'class' => 'lazyload-lazy_loading' . (empty($perfmatters_options['lazyload']['lazy_loading']) ? ' hidden' : '')
        )
    );

    //iframes and videos
    add_settings_field(
        'lazy_loading_iframes', 
        perfmatters_title(__('iFrames and Videos', 'perfmatters'), 'lazy_loading_iframes', 'https://perfmatters.io/docs/lazy-load-wordpress/#iframes-videos'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'lazyload', 
        array(
            'section' => 'lazyload',
            'id' => 'lazy_loading_iframes',
            'tooltip' => __('Enable lazy loading on iframes and videos.', 'perfmatters'),
            'class' => 'perfmatters-input-controller'
        )
    );

    //youtube preview thumbnails
    add_settings_field(
        'youtube_preview_thumbnails', 
        perfmatters_title(__('YouTube Preview Thumbnails', 'perfmatters'), 'youtube_preview_thumbnails', 'https://perfmatters.io/docs/lazy-load-wordpress/#youtube-preview-thumbnails'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'lazyload', 
        array(
            'section' => 'lazyload',
            'id' => 'youtube_preview_thumbnails',
            'tooltip' => __('Swap out YouTube iFrames with preview thumbnails. The original iFrame is loaded when the thumbnail is clicked.', 'perfmatters'),
            'class' => 'lazyload-lazy_loading_iframes' . (empty($perfmatters_options['lazyload']['lazy_loading_iframes']) ? ' hidden' : '')
        )
    );

    //lazy load exclusions
    add_settings_field(
        'lazy_loading_exclusions', 
        perfmatters_title(__('Exclude from Lazy Loading', 'perfmatters'), 'lazy_loading_exclusions', 'https://perfmatters.io/docs/lazy-load-wordpress/#exclude'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'lazyload', 
        array(
            'section' => 'lazyload',
            'id' => 'lazy_loading_exclusions',
            'input' => 'textarea',
            'textareatype' => 'oneperline',
            'placeholder' => 'example.png',
            'tooltip' => __('Exclude specific elements from lazy loading. Exclude an element by adding the source URL (example.png) or by adding any unique portion of its attribute string (class="example"). Format: one per line', 'perfmatters')
        )
    );

    //lazy load parent exclusions
    add_settings_field(
        'lazy_loading_parent_exclusions', 
        perfmatters_title(__('Exclude by Parent Selector', 'perfmatters'), 'lazy_loading_parent_exclusions', 'https://perfmatters.io/docs/lazy-load-wordpress/#exclude-parent-selector'),
        'perfmatters_print_input', 
        'perfmatters_options', 
        'lazyload', 
        array(
            'section' => 'lazyload',
            'id' => 'lazy_loading_parent_exclusions',
            'input' => 'textarea',
            'textareatype' => 'oneperline',
            'placeholder' => 'example-div-class',
            'tooltip' => __('Exclude specific images from lazy loading by adding any unique portion of an attribute string (class="example") from a parent container. Format: one per line', 'perfmatters'),
            'class' => 'pm-advanced-option'
        )
    );

    //threshold
    add_settings_field(
        'threshold', 
        perfmatters_title(__('Threshold', 'perfmatters'), 'threshold', 'https://perfmatters.io/docs/lazy-load-wordpress/#threshold'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'lazyload', 
        array(
            'section' => 'lazyload',
            'id' => 'threshold',
            'input' => 'text',
            'validate' => '[0-9.pPxX%]',
            'placeholder' => '0px',
            'tooltip' => __('Extend the lazy loading threshold allowing images to load before they are visible in the viewport. (px or %)', 'perfmatters')
        )
    );

    //DOM monitoring
    add_settings_field(
        'lazy_loading_dom_monitoring', 
        perfmatters_title(__('DOM Monitoring', 'perfmatters'), 'lazy_loading_dom_monitoring', 'https://perfmatters.io/docs/lazy-load-wordpress/#dom-monitoring'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'lazyload', 
        array(
            'section' => 'lazyload',
            'id' => 'lazy_loading_dom_monitoring',
            'tooltip' => __('Watch for changes in the DOM and dynamically lazy load newly added elements.', 'perfmatters')
        )
    );

    //image dimensions
    add_settings_field(
        'image_dimensions', 
        perfmatters_title(__('Add Missing Image Dimensions', 'perfmatters'), 'image_dimensions', 'https://perfmatters.io/docs/missing-width-height-images/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'lazyload', 
        array(
            'section' => 'lazyload',
            'id' => 'image_dimensions',
            'tooltip' => __('Add missing width and height attributes to images.', 'perfmatters')
        )
    );

    //fade in
    add_settings_field(
        'fade_in', 
        perfmatters_title(__('Fade In', 'perfmatters'), 'fade_in', 'https://perfmatters.io/docs/lazy-load-wordpress/#fade-in'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'lazyload', 
        array(
            'section' => 'lazyload',
            'id' => 'fade_in',
            'tooltip' => __('Add fade in effect when images are loaded in.', 'perfmatters')
        )
    );

    //css background images
    add_settings_field(
        'css_background_images', 
        perfmatters_title(__('CSS Background Images', 'perfmatters'), 'css_background_images', 'https://perfmatters.io/docs/lazy-load-wordpress/#css-background-images'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'lazyload', 
        array(
            'section' => 'lazyload',
            'id' => 'css_background_images',
            'tooltip' => __('Allow lazy loading of background images coming from (CSS) stylesheets.', 'perfmatters'),
            'class' => 'perfmatters-input-controller'
        )
    );

    //css background selectors
    add_settings_field(
        'css_background_selectors', 
        perfmatters_title(__('Background Selectors', 'perfmatters'), 'css_background_selectors', 'https://perfmatters.io/docs/lazy-load-wordpress/#css-background-images'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'lazyload', 
        array(
            'section' => 'lazyload',
            'id' => 'css_background_selectors',
            'input' => 'textarea',
            'textareatype' => 'oneperline',
            'placeholder' => 'div-background-class',
            'tooltip' => __('Lazy load a CSS background image by adding a unique selector (ID or class) found on the element that the background image has been applied to. Format: one per line', 'perfmatters'),
            'class' => 'lazyload-css_background_images' . (empty($perfmatters_options['lazyload']['css_background_images']) ? ' hidden' : '')
        )
    );

    /* fonts section
    /**********************************************************/
    add_settings_section('perfmatters_fonts', __('Fonts', 'perfmatters'), '__return_false', 'perfmatters_options');

    //local google fonts
    add_settings_field(
        'local_google_fonts', 
        perfmatters_title(__('Local Google Fonts', 'perfmatters'), 'local_google_fonts', 'https://perfmatters.io/docs/host-google-fonts-locally/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_fonts', 
        array(
            'section' => 'fonts',
            'id' => 'local_google_fonts',
            'class' => 'perfmatters-input-controller fonts-disable_google_fonts' . (!empty($perfmatters_options['fonts']['disable_google_fonts']) ? ' hidden' : ''),
            'tooltip' => __('Host Google Font files locally on your server or CDN.', 'perfmatters')
        )
    );

    //display swap
    add_settings_field(
        'display_swap', 
        perfmatters_title(__('Display Swap', 'perfmatters'), 'display_swap', 'https://perfmatters.io/docs/font-display-swap/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_fonts', 
        array(
            'section' => 'fonts',
            'id' => 'display_swap',
            'class' => 'fonts-disable_google_fonts' . (!empty($perfmatters_options['fonts']['disable_google_fonts']) ? ' hidden' : ''),
            'tooltip' => __('Add the font-display swap property to your Google Fonts.', 'perfmatters')
        )
    );

    //cdn url
    add_settings_field(
        'cdn_url', 
        perfmatters_title(__('CDN URL', 'perfmatters'), 'cdn_url', 'https://perfmatters.io/docs/host-google-fonts-locally/#cdn'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_fonts', 
        array(
            'section' => 'fonts',
            'id' => 'cdn_url',
            'input' => 'text',
            'class' => 'fonts-disable_google_fonts fonts-local_google_fonts' . (!empty($perfmatters_options['fonts']['disable_google_fonts']) || empty($perfmatters_options['fonts']['local_google_fonts']) ? ' hidden' : ''),
            'placeholder' => 'https://cdn.example.com',
            'tooltip' => __('Use your CDN URL when referencing Google Font files inside a parent stylesheet. Example: https://cdn.example.com', 'perfmatters')
        )
    );

    //clear fonts
    add_settings_field(
        'clear_fonts', 
        perfmatters_title(__('Clear Local Fonts', 'perfmatters'), 'clear_fonts', 'https://perfmatters.io/docs/host-google-fonts-locally/#clear-local-fonts'), 
        'perfmatters_print_input',
        'perfmatters_options', 
        'perfmatters_fonts', 
        array(
            'section' => 'fonts',
            'id' => 'clear_fonts',
            'input' => 'button',
            'action' => 'clear_local_fonts',
            'title' => __('Clear Local Fonts', 'perfmatters'),
            'class' => 'fonts-disable_google_fonts fonts-local_google_fonts' . (!empty($perfmatters_options['fonts']['disable_google_fonts']) || empty($perfmatters_options['fonts']['local_google_fonts']) ? ' hidden' : ''),
            'tooltip' => __('Remove all existing local Google Font files and stylesheets.', 'perfmatters')
        )
    );

    //async
    add_settings_field(
        'async', 
        perfmatters_title(__('Load Asynchronously', 'perfmatters'), 'async', 'https://perfmatters.io/docs/host-google-fonts-locally/#async'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_fonts', 
        array(
            'section' => 'fonts',
            'id' => 'async',
            'class' => 'fonts-disable_google_fonts fonts-local_google_fonts' . (!empty($perfmatters_options['fonts']['disable_google_fonts']) || empty($perfmatters_options['fonts']['local_google_fonts']) ? ' hidden' : '') . ' pm-advanced-option',
            'tooltip' => __('Load local font stylesheets asynchronously. Preloading individual font files is recommended when this option is enabled.', 'perfmatters')
        )
    );

    //disable google fonts
    add_settings_field(
        'disable_google_fonts', 
        perfmatters_title(__('Disable Google Fonts', 'perfmatters'), 'disable_google_fonts', 'https://perfmatters.io/docs/disable-google-fonts/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_fonts', 
        array(
            'section' => 'fonts',
            'id' => 'disable_google_fonts',
            'class' => 'perfmatters-input-controller',
            'tooltip' => __('Removes any instances of Google Fonts being loaded across your entire site.', 'perfmatters')
        )
    );

    /* cdn section
    /**********************************************************/
    add_settings_section('perfmatters_cdn', 'CDN', '__return_false', 'perfmatters_options');

    //enable cdn rewrite
    add_settings_field(
        'enable_cdn', 
        perfmatters_title(__('Enable CDN Rewrite', 'perfmatters'), 'enable_cdn', 'https://perfmatters.io/docs/cdn-rewrite/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_cdn', 
        array(
            'section' => 'cdn',
            'id' => 'enable_cdn',
            'tooltip' => __('Enables rewriting of your site URLs with your CDN URLs which can be configured below.', 'perfmatters')
        )
    );

    //cdn url
    add_settings_field(
        'cdn_url', 
        perfmatters_title(__('CDN URL', 'perfmatters'), 'cdn_url', 'https://perfmatters.io/docs/cdn-url/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_cdn', 
        array(
            'section' => 'cdn',
            'id' => 'cdn_url',
            'input' => 'text',
            'placeholder' => 'https://cdn.example.com',
            'tooltip' => __('Enter your CDN URL without the trailing backslash. Example: https://cdn.example.com', 'perfmatters')
        )
    );

    //cdn included directories
    add_settings_field(
        'cdn_directories', 
        perfmatters_title(__('Included Directories', 'perfmatters'), 'cdn_directories', 'https://perfmatters.io/docs/cdn-included-directories/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_cdn', 
        array(
            'section' => 'cdn',
            'id' => 'cdn_directories',
            'input' => 'text',
            'placeholder' => 'wp-content,wp-includes',
            'tooltip' => __('Enter any directories you would like to be included in CDN rewriting, separated by commas (,). Default: wp-content,wp-includes', 'perfmatters')
        )
    );

    //cdn exclusions
    add_settings_field(
        'cdn_exclusions', 
        perfmatters_title(__('CDN Exclusions', 'perfmatters'), 'cdn_exclusions', 'https://perfmatters.io/docs/cdn-exclusions/'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_cdn', 
        array(
            'section' => 'cdn',
            'id' => 'cdn_exclusions',
            'input' => 'text',
            'placeholder' => '.php',
            'tooltip' => __('Enter any directories or file extensions you would like to be excluded from CDN rewriting, separated by commas (,). Default: .php', 'perfmatters')
        )
    );

    /* analytics section
    /**********************************************************/
    add_settings_section('perfmatters_analytics', __('Google Analytics', 'perfmatters'), '__return_false', 'perfmatters_options');

    //enable local ga
    add_settings_field(
        'enable_local_ga', 
        perfmatters_title(__('Enable Local Analytics', 'perfmatters'), 'enable_local_ga', 'https://perfmatters.io/docs/local-analytics/'),
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_analytics', 
        array(
            'section' => 'analytics',
            'id' => 'enable_local_ga',
            'tooltip' => __('Enable syncing of the Google Analytics script to your own server.', 'perfmatters')
        )
    );

    //google analytics id
    add_settings_field(
        'tracking_id', 
        perfmatters_title(__('Tracking ID', 'perfmatters'), 'tracking_id', 'https://perfmatters.io/docs/local-analytics/#trackingid'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_analytics', 
        array(
            'section' => 'analytics',
            'id' => 'tracking_id',
            'input' => 'text',
            'tooltip' => __('Input your Google Analytics tracking or measurement ID.', 'perfmatters')
        )
    );

    //tracking code position
    add_settings_field(
        'tracking_code_position', 
        perfmatters_title(__('Tracking Code Position', 'perfmatters'), 'tracking_code_position', 'https://perfmatters.io/docs/local-analytics/#trackingcodeposition'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_analytics', 
        array(
            'section' => 'analytics',
            'id' => 'tracking_code_position',
            'input' => 'select',
            'options' => array(
                "" => __('Header', 'perfmatters') . ' (' . __('Default', 'perfmatters') . ')',
                "footer" => __('Footer', 'perfmatters')
                ),
            'tooltip' => __('Load your analytics script in the header (default) or footer of your site. Default: Header', 'perfmatters')
        )
    );

    //script type
    add_settings_field(
        'script_type', 
        perfmatters_title(__('Script Type', 'perfmatters'), 'tracking_code_position', 'https://perfmatters.io/docs/local-analytics/#script-type'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_analytics', 
        array(
            'section' => 'analytics',
            'id' => 'script_type',
            'input' => 'select',
            'options' => array(
                '' => 'Google Analytics 4' . ' (' . __('Default', 'perfmatters') . ')',
                'minimalv4' => 'Google Analytics 4 Minimal'
            ),
            'class' => 'perfmatters-input-controller',
            'tooltip' => __('Choose which script method you would like to use. Default Google Analytics 4 is larger and includes all features, while Minimal is smaller and only includes basic reporting features.', 'perfmatters')
        )
    );

    //track logged in admins
    add_settings_field(
        'track_admins', 
        perfmatters_title(__('Track Logged In Admins', 'perfmatters'), 'track_admins', 'https://perfmatters.io/docs/local-analytics/#track-logged-in-admins'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_analytics', 
        array(
            'section' => 'analytics',
            'id' => 'track_admins',
            'tooltip' => __('Include logged-in WordPress admins in your Google Analytics reports.', 'perfmatters')
        )
    );

    //use monsterinsights
    add_settings_field(
        'use_monster_insights', 
        perfmatters_title(__('Use MonsterInsights', 'perfmatters'), 'use_monster_insights', 'https://perfmatters.io/docs/local-analytics/#monster-insights'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_analytics', 
        array(
            'section' => 'analytics',
            'id' => 'use_monster_insights',
            'class' => 'analytics-script_type perfmatters-select-control- ' . (!empty($perfmatters_options['analytics']['script_type']) ? ' hidden' : ''),
            'tooltip' => __('Allows MonsterInsights to manage your Google Analytics while still using the locally hosted gtag.js file generated by Perfmatters.', 'perfmatters')
        )
    );

    //enable amp support
    add_settings_field(
        'enable_amp', 
        perfmatters_title(__('Enable AMP Support', 'perfmatters'), 'enable_amp', 'https://perfmatters.io/docs/local-analytics/#amp'), 
        'perfmatters_print_input', 
        'perfmatters_options', 
        'perfmatters_analytics', 
        array(
            'section' => 'analytics',
            'id' => 'enable_amp',
            'tooltip' => __('Enable support for analytics tracking on AMP sites. This is not a local script, but a native AMP script.', 'perfmatters')
        )
    );

    register_setting('perfmatters_options', 'perfmatters_options', 'perfmatters_sanitize_options');

    //tools plugin section
    add_settings_section('plugin', __('Tools', 'perfmatters'), '__return_false', 'perfmatters_tools');

    if(!is_multisite()) {

        //clean uninstall
        add_settings_field(
            'clean_uninstall', 
            perfmatters_title(__('Clean Uninstall', 'perfmatters'), 'clean_uninstall', 'https://perfmatters.io/docs/clean-uninstall/'), 
            'perfmatters_print_input', 
            'perfmatters_tools', 
            'plugin', 
            array(
                'id' => 'clean_uninstall',
                'option' => 'perfmatters_tools',
                'tooltip' => __('When enabled, this will cause all Perfmatters options data to be removed from your database when the plugin is uninstalled.', 'perfmatters')
            )
        );

    }

    //accessibility mode
    add_settings_field(
        'accessibility_mode', 
        perfmatters_title(__('Accessibility Mode', 'perfmatters'), 'accessibility_mode', 'https://perfmatters.io/docs/accessibility-mode/'), 
        'perfmatters_print_input',
        'perfmatters_tools', 
        'plugin', 
        array(
        	'id' => 'accessibility_mode',
        	'input' => 'checkbox',
        	'option' => 'perfmatters_tools',
        	'tooltip' => __('Disable the use of visual UI elements in the plugin settings such as checkbox toggles and hovering tooltips.', 'perfmatters')
        )
    );

    //hide admin bar menu
    add_settings_field(
        'hide_admin_bar_menu', 
        perfmatters_title(__('Hide Admin Bar Menu', 'perfmatters'), 'hide_admin_bar_menu', 'https://perfmatters.io/docs/hide-admin-bar-menu/'), 
        'perfmatters_print_input', 
        'perfmatters_tools', 
        'plugin', 
        array(
            'id' => 'hide_admin_bar_menu',
            'option' => 'perfmatters_tools',
            'tooltip' => __('Hide the Perfmatters menu in the admin bar.', 'perfmatters')
        )
    );

    //show advanced options
    add_settings_field(
        'show_advanced', 
        perfmatters_title(__('Show Advanced Options', 'perfmatters'), 'show_advanced', 'https://perfmatters.io/docs/advanced-options/'), 
        'perfmatters_print_input', 
        'perfmatters_tools', 
        'plugin', 
        array(
            'id' => 'show_advanced',
            'option' => 'perfmatters_tools',
            'tooltip' => __('Show advanced options in the Perfmatters UI.', 'perfmatters'),
            'confirmation' => __('Advanced options should only be used if you know exactly what you are doing, as they can break certain plugin functionality if used improperly.', 'perfmatters'),
        )
    );

    //disable while logged in
    add_settings_field(
        'disable_logged_in', 
        perfmatters_title(__('Disable for Logged In Users', 'perfmatters'), 'disable_logged_in', 'https://perfmatters.io/docs/disable-logged-in-users/'), 
        'perfmatters_print_input', 
        'perfmatters_tools', 
        'plugin', 
        array(
            'id' => 'disable_logged_in',
            'option' => 'perfmatters_tools',
            'tooltip' => __('Disable optimizations for logged in users.', 'perfmatters')
        )
    );

    //restore defaults
    add_settings_field(
        'restore_defaults', 
        perfmatters_title(__('Restore Default Options', 'perfmatters'), 'restore_defaults', 'https://perfmatters.io/docs/restore-default-options/'), 
        'perfmatters_print_input',
        'perfmatters_tools', 
        'plugin', 
        array(
            'id'      => 'restore_defaults',
            'input'   => 'button',
            'action'  => 'restore_defaults',
            'title'   => __('Restore Default Options', 'perfmatters'),
            'confirmation' => __('Are you sure? This will remove all existing plugin options and restore them to their default states.', 'perfmatters'),
            'option'  => 'perfmatters_tools',
            'tooltip' => __('Restore all plugin options to their default settings.', 'perfmatters')
        )
    );

    //purge meta options
    add_settings_field(
        'purge_meta', 
        perfmatters_title(__('Purge Meta Options', 'perfmatters'), false, 'https://perfmatters.io/docs/purge-meta-options/'), 
        'perfmatters_print_purge_meta', 
        'perfmatters_tools', 
        'plugin', 
        array(
            'id'           => 'purge_meta',
            'input'        => 'button',
            'option'       => 'perfmatters_tools',
            'title'        => __('Purge Meta Options', 'perfmatters'),
            'confirmation' => __('Are you sure? This will delete all existing Perfmatters meta options for all posts from the database.', 'perfmatters'),
            'tooltip'      => __('Permanently delete all existing Perfmatters meta options from your database.', 'perfmatters')
        )
    );

    //export settings
    add_settings_field(
        'export_settings', 
        perfmatters_title(__('Export Settings', 'perfmatters'), 'export_settings', 'https://perfmatters.io/docs/import-export/'), 
        'perfmatters_print_input',
        'perfmatters_tools', 
        'plugin', 
        array(
            'id' => 'export_settings',
            'input' => 'button',
            'action' => 'export_settings',
            'title' => __('Export Plugin Settings', 'perfmatters'),
            'option' => 'perfmatters_tools',
            'tooltip' => __('Export your Perfmatters settings for this site as a .json file. This lets you easily import the configuration into another site.', 'perfmatters')
        )
    );

    //import settings
    add_settings_field(
        'import_settings', 
        perfmatters_title(__('Import Settings', 'perfmatters'), 'import_settings', 'https://perfmatters.io/docs/import-export/'), 
        'perfmatters_print_import_settings',
        'perfmatters_tools', 
        'plugin', 
        array(
            'tooltip' => __('Import Perfmatters settings from an exported .json file.', 'perfmatters')
        )
    );

    //database section
    add_settings_section('database', __('Database', 'perfmatters'), '__return_false', 'perfmatters_tools');

    //optimize database
    add_settings_field(
        'scan_database', 
        perfmatters_title(__('Scan Database', 'perfmatters'), 'scan_database', 'https://perfmatters.io/docs/optimize-wordpress-database/#scan'), 
        'perfmatters_print_input',
        'perfmatters_tools', 
        'database', 
        array(
            'id' => 'scan_database',
            'input' => 'button',
            'action' => 'scan_database',
            'title' => __('Scan Now', 'perfmatters'),
            'option' => 'perfmatters_tools',
            'section' => 'database',
            'tooltip' => __('Scan the database to calculate items available for optimization.', 'perfmatters')
        )
    );

    //post revisions
    add_settings_field(
        'post_revisions', 
        perfmatters_title(__('Post Revisions', 'perfmatters'), 'post_revisions', 'https://perfmatters.io/docs/wordpress-post-revisions/'), 
        'perfmatters_print_input', 
        'perfmatters_tools', 
        'database', 
        array(
            'id' => 'post_revisions',
            'option' => 'perfmatters_tools',
            'section' => 'database',
            'tooltip' => __('Include post revisions in your database optimization. This also includes revisions for pages and custom post types.', 'perfmatters')
        )
    );

    //post auto-drafts
    add_settings_field(
        'post_auto_drafts', 
        perfmatters_title(__('Post Auto-Drafts', 'perfmatters'), 'post_auto_drafts', 'https://perfmatters.io/docs/wordpress-auto-drafts/'), 
        'perfmatters_print_input', 
        'perfmatters_tools', 
        'database', 
        array(
            'id' => 'post_auto_drafts',
            'option' => 'perfmatters_tools',
            'section' => 'database',
            'tooltip' => __('Include post auto-drafts in your database optimization. This also includes auto-drafts for pages and custom post types.', 'perfmatters'),
        )
    );

    //trashed posts
    add_settings_field(
        'trashed_posts', 
        perfmatters_title(__('Trashed Posts', 'perfmatters'), 'trashed_posts', 'https://perfmatters.io/docs/wordpress-trash/#posts'), 
        'perfmatters_print_input', 
        'perfmatters_tools', 
        'database', 
        array(
            'id' => 'trashed_posts',
            'option' => 'perfmatters_tools',
            'section' => 'database',
            'tooltip' => __('Include trashed posts in your database optimization. This also includes trashed pages and custom post types.', 'perfmatters')
        )
    );

    //spam comments
    add_settings_field(
        'spam_comments', 
        perfmatters_title(__('Spam Comments', 'perfmatters'), 'spam_comments', 'https://perfmatters.io/docs/wordpress-spam-comments/'), 
        'perfmatters_print_input', 
        'perfmatters_tools', 
        'database', 
        array(
            'id' => 'spam_comments',
            'option' => 'perfmatters_tools',
            'section' => 'database',
            'tooltip' => __('Include spam comments in your database optimization.', 'perfmatters')
        )
    );

    //trashed comments
    add_settings_field(
        'trashed_comments', 
        perfmatters_title(__('Trashed Comments', 'perfmatters'), 'trashed_comments', 'https://perfmatters.io/docs/wordpress-trash/#comments'), 
        'perfmatters_print_input', 
        'perfmatters_tools', 
        'database', 
        array(
            'id' => 'trashed_comments',
            'option' => 'perfmatters_tools',
            'section' => 'database',
            'tooltip' => __('Include trashed comments in your database optimization.', 'perfmatters')
        )
    );

    //expired transients
    add_settings_field(
        'expired_transients', 
        perfmatters_title(__('Expired Transients', 'perfmatters'), 'expired_transients', 'https://perfmatters.io/docs/wordpress-transients/#expired'), 
        'perfmatters_print_input', 
        'perfmatters_tools', 
        'database', 
        array(
            'id' => 'expired_transients',
            'option' => 'perfmatters_tools',
            'section' => 'database',
            'tooltip' => __('Include expired transients in your database optimization.', 'perfmatters')
        )
    );

    //all transients
    add_settings_field(
        'all_transients', 
        perfmatters_title(__('All Transients', 'perfmatters'), 'all_transients', 'https://perfmatters.io/docs/wordpress-transients/#all'), 
        'perfmatters_print_input', 
        'perfmatters_tools', 
        'database', 
        array(
            'id' => 'all_transients',
            'option' => 'perfmatters_tools',
            'section' => 'database',
            'tooltip' => __('Include all transients in your database optimization.', 'perfmatters')
        )
    );

    //tables
    add_settings_field(
        'tables', 
        perfmatters_title(__('Tables', 'perfmatters'), 'tables', 'https://perfmatters.io/docs/wordpress-database-tables/'), 
        'perfmatters_print_input', 
        'perfmatters_tools', 
        'database', 
        array(
            'id' => 'tables',
            'option' => 'perfmatters_tools',
            'section' => 'database',
            'tooltip' => __('Include tables in your database optimization.', 'perfmatters')
        )
    );

    //optimize database
    add_settings_field(
        'optimize_database', 
        perfmatters_title(__('Optimize Database', 'perfmatters'), 'optimize_database', 'https://perfmatters.io/docs/optimize-wordpress-database/'), 
        'perfmatters_print_input',
        'perfmatters_tools', 
        'database', 
        array(
            'id' => 'optimize_database',
            'input' => 'button',
            'action' => 'optimize_database',
            'title' => __('Optimize Now', 'perfmatters'),
            'option' => 'perfmatters_tools',
            'section' => 'database',
            'confirmation' => __('This will make permanent changes that cannot be reverted! Are you sure you want to proceed with optimization?', 'perfmatters'),
            'tooltip' => __('Run a one-time optimization of your WordPress database based on the selected options above. This process runs in the background.', 'perfmatters')
        )
    );

    //Scheduled Optimization
    add_settings_field(
        'optimize_schedule', 
        perfmatters_title(__('Scheduled Optimization', 'perfmatters'), 'optimize_schedule', 'https://perfmatters.io/docs/optimize-wordpress-database/#schedule'), 
        'perfmatters_print_input', 
        'perfmatters_tools', 
        'database', 
        array(
            'id' => 'optimize_schedule',
            'option' => 'perfmatters_tools',
            'section' => 'database',
            'input' => 'select',
            'options' => array(
                "" => __('Disabled', 'perfmatters'),
                "daily" => __('Daily', 'perfmatters'),
                "weekly" => __('Weekly', 'perfmatters'),
                "monthly" => __('Monthly', 'perfmatters')
                ),
            'tooltip' => __('Schedule a routine optimization of your WordPress database based on the selected options above. This process runs in the background and starts immediately after saving.', 'perfmatters')
        )
    );

    register_setting('perfmatters_tools', 'perfmatters_tools', 'perfmatters_sanitize_tools');

    //edd license option
	register_setting('perfmatters_edd_license', 'perfmatters_edd_license_key', 'perfmatters_edd_sanitize_license');
}
add_action('admin_init', 'perfmatters_settings');

//options default values
function perfmatters_default_options() {
	$defaults = array(
		'disable_emojis' => "0",
		'disable_embeds' => "0",
		'disable_xmlrpc' => "0",
		'remove_jquery_migrate' => "0",
		'hide_wp_version' => "0",
		'remove_rsd_link' => "0",
		'remove_shortlink' => "0",
		'disable_rss_feeds' => "0",
		'remove_feed_links' => "0",
		'disable_self_pingbacks' => "0",
		'disable_rest_api' => "",
		'remove_rest_api_links' => "0",
        'disable_dashicons' => "0",
        'disable_google_maps' => "0",
        'disable_password_strength_meter' => "0",
        'disable_comments' => "0",
        'remove_comment_urls' => "0",
		'disable_heartbeat' => "",
		'heartbeat_frequency' => "",
		'limit_post_revisions' => "",
		'autosave_interval' => "",
        'login_url' => "",
        'disable_woocommerce_scripts' => "0",
        'disable_woocommerce_cart_fragmentation' => "0",
        'disable_woocommerce_status' => "0",
        'disable_woocommerce_widgets' => "0",
        'cdn' => array(
            'cdn_directories' => 'wp-content,wp-includes',
            'cdn_exclusions' => '.php'
        )
	);
    perfmatters_network_defaults($defaults, 'perfmatters_options');
	return apply_filters('perfmatters_default_options', $defaults);
}

//tools default values
function perfmatters_default_tools() {
    $defaults = array();
    perfmatters_network_defaults($defaults, 'perfmatters_tools');
    return apply_filters('perfmatters_default_tools', $defaults);
}

//network defaults
function perfmatters_network_defaults(&$defaults, $option) {
    if(is_multisite() && is_plugin_active_for_network('perfmatters/perfmatters.php')) {
        $perfmatters_network = get_site_option('perfmatters_network');
        if(!empty($perfmatters_network['default'])) {
            $networkDefaultOptions = get_blog_option($perfmatters_network['default'], $option);
            if($option == 'perfmatters_options') {
                unset($networkDefaultOptions['cdn']['cdn_url']);
            }
            if(!empty($networkDefaultOptions)) {
                foreach($networkDefaultOptions as $key => $val) {
                    $defaults[$key] = $val;
                }
            }
        }
    }
}

//print settings section
function perfmatters_settings_section($page, $section, $dashicon = '', $class = '') {
    global $wp_settings_sections;
    if(!empty($wp_settings_sections[$page][$section])) {
        echo '<div class="perfmatters-settings-section">';
            echo '<h2>' . ($dashicon ? '<span class="dashicons ' . $dashicon . '"></span>' : '') . __($wp_settings_sections[$page][$section]['title'], 'perfmatters') . '</h2>';
            echo '<table class="form-table">';
                echo '<tbody>';
                    do_settings_fields($page, $section);
                echo '</tbody>';
            echo '</table>';
        echo '</div>';
    }
}

//print form inputs
function perfmatters_print_input($args) {

    $selection_id = $args['id'];

    if(!empty($args['option'])) {
        $option = $args['option'];
        if($args['option'] == 'perfmatters_network') {
            $options = get_site_option($args['option']);
        }
        else {
            $options = get_option($args['option']);
        }
    }
    else {
        $option = 'perfmatters_options';
        $options = get_option('perfmatters_options');
    }
    if(!empty($args['option']) && $args['option'] == 'perfmatters_tools') {
        $tools = $options;
    }
    else {
        $tools = get_option('perfmatters_tools');
    }

    //set section variables
    if(!empty($args['section'])) {
        $selection_id = $args['section'] . '-' . $args['id'];
        $option = $option . '[' . $args['section'] . ']';
        $options = isset($options[$args['section']]) ? $options[$args['section']] : array();
    }


    //text
    if(!empty($args['input']) && ($args['input'] == 'text' || $args['input'] == 'color')) {
        echo "<input type='text' id='" . $selection_id . "' name='" . $option . "[" . $args['id'] . "]' value='" . (!empty($options[$args['id']]) ? $options[$args['id']] : '') . "' placeholder='" . (!empty($args['placeholder']) ? $args['placeholder'] : '') . "'" . (!empty($args['validate']) ? " perfmatters_validate='" . $args['validate'] . "'" : "") . " />";
    }

    //select
    elseif(!empty($args['input']) && $args['input'] == 'select') {
        echo "<select id='" . $selection_id . "' name='" . $option . "[" . $args['id'] . "]'>";
            foreach($args['options'] as $value => $title) {
                echo "<option value='" . $value . "' "; 
                if(!empty($options[$args['id']]) && $options[$args['id']] == $value) {
                    echo "selected";
                } 
                echo ">" . $title . "</option>";
            }
        echo "</select>";
    }

    //button
    elseif(!empty($args['input']) && $args['input'] == 'button') {
        perfmatters_action_button($args['action'] ?? '', $args['title'], 'secondary', $args['confirmation'] ?? '');
    }

    //text area
    elseif(!empty($args['input']) && $args['input'] == 'textarea') {
        echo "<textarea id='" . $selection_id . "' name='" . $option . "[" . $args['id'] . "]' placeholder='" . (!empty($args['placeholder']) ? $args['placeholder'] : '') . "'" . (!empty($args['textareatype']) && $args['textareatype'] == 'codemirror' ? " class='perfmatters-codemirror'" : "" ) . ">";
            if(!empty($options[$args['id']])) {
                if(!empty($args['textareatype']) && $args['textareatype'] == 'oneperline') {
                    foreach($options[$args['id']] as $line) {
                        echo $line . "\n";
                    }
                }
                else {
                    echo $options[$args['id']];
                }
            }
        echo "</textarea>";
    }

    //checkbox + toggle
    else {
        if(empty($tools['accessibility_mode']) && (empty($args['input']) || $args['input'] != 'checkbox')) {
            echo "<label for='" . $selection_id . "' class='perfmatters-switch'>";
        }
            echo "<input type='checkbox' id='" . $selection_id . "' name='" . $option . "[" . $args['id'] . "]' value='1' style='display: inline-block; margin: 0px;' ";
            if(!empty($options[$args['id']])) {
                echo "checked";
            }
            if(!empty($args['confirmation'])) {
                echo " onChange=\"this.checked=this.checked?confirm('" . $args['confirmation'] . "'):false;\"";
            }
            echo ">";
        if(empty($tools['accessibility_mode']) && (empty($args['input']) || $args['input'] != 'checkbox')) {
               echo "<div class='perfmatters-slider'></div>";
           echo "</label>";
        }

        if(!empty($args['section']) && $args['section'] == 'database') {
            echo '<span class="perfmatters-option-data"></span>';
        }
    }

    //tooltip
	if(!empty($args['tooltip'])) {
		perfmatters_tooltip($args['tooltip']);
	}
}

//print simple exclusions
function perfmatters_print_quick_exclusions($args) {

    $options = get_option('perfmatters_options');

    //master exclusions array
    $master = Perfmatters\JS::get_quick_exclusions_master();

    //local exclusions
    $exclusions = array(
        'plugins' => array(
            'title' => __('Plugins', 'perfmatters'),
            'items' => array(),
            'dashicon' => 'admin-plugins'
        ),
        'themes' => array(
            'title' => __('Themes', 'perfmatters'),
            'items' => array(),
            'dashicon' => 'admin-appearance'
        )
    );

    //add any active plugin sets to list
    $active_plugins = (array) get_option('active_plugins', array());

    if(is_multisite()) {
        $active_plugins = array_merge($active_plugins, array_keys((array) get_site_option('active_sitewide_plugins', array())));
    }

    foreach($master['plugins'] as $key => $exclusion_set) {
        if(in_array($exclusion_set['id'], $active_plugins)) {
            $exclusions['plugins']['items'][] = $key;
        }
    }

    //add any active theme sets to list
    $theme = wp_get_theme();
    $parent = $theme->get_template();
    $active_theme = strtolower(!empty($parent) ? $parent : $theme->get('Name'));

    foreach($master['themes'] as $key => $exclusion_set) {
        if($exclusion_set['id'] == $active_theme) {
            $exclusions['themes']['items'][] = $key;
        }
    }

    //quick exclusions ui
    echo '<div class="perfmatters-input-row-wrapper">';
        echo '<div class="perfmatters-input-row-container">';

            if(empty($exclusions['plugins']['items']) && empty($exclusions['themes']['items'])) {
                echo '<style>.delay_js_quick_exclusions { display: none; }</style>';
            }

            foreach($exclusions as $type => $data) {

                if(!empty($data['items'])) {

                    $opened = !empty($options['assets']['delay_js_quick_exclusions'][$type]) ? ' perfmatters-opened' : '';

                    //quick exclusion section
                    echo '<div class="perfmatters-quick-exclusion' . $opened . '">';

                        //title bar
                        echo '<div class="perfmatters-quick-exclusion-title-bar" style="display: flex; justify-content: space-between;">';
                            echo '<div style="display: flex; align-items: center;">';
                                echo '<span class="dashicons dashicons-' . $data['dashicon'] . '" style="margin-right: 5px;"></span>';
                                echo $data['title'];
                            echo '</div>';

                            echo '<span class="perfmatters-quick-exclusion-toggle dashicons dashicons-plus"></span>';
                            echo '<span class="perfmatters-quick-exclusion-toggle dashicons dashicons-minus"></span>';
                        echo '</div>';

                        //exclusions
                        echo '<div class="perfmatters-quick-exclusion-items">';
                            foreach($data['items'] as $item) {
                                echo '<div style="margin-top: 5px;">';
                                    echo '<input type="checkbox" name="perfmatters_options[assets][delay_js_quick_exclusions][' . $type . '][' . $item . ']" value="1" ' . (!empty($options['assets'][$args['id']][$type][$item]) ? 'checked ' : '') . '/>';
                                    echo $master[$type][$item]['title'];
                                echo '</div >';
                            }
                        echo '</div>';

                    echo '</div>';
                }
            }
        echo '</div>';
    echo '</div>';

    //tooltip
    if(!empty($args['tooltip'])) {
        perfmatters_tooltip($args['tooltip']);
    }
}

//input rows ui
function perfmatters_print_input_rows($args) {

    $perfmatters_options = get_option('perfmatters_options');
 
    echo '<div class="perfmatters-input-row-wrapper">';
        echo '<div class="perfmatters-input-row-container">';

            $rowCount = 0;

            if(!empty($perfmatters_options[$args['section']][$args['id']]) && is_array($perfmatters_options[$args['section']][$args['id']])) {

                foreach($perfmatters_options[$args['section']][$args['id']] as $line) {

                    call_user_func('perfmatters_print_' . $args['id'] . '_row', $rowCount, $line);

                    $rowCount++;
                }
            }
            else {

                //print empty row at the end
                call_user_func('perfmatters_print_' . $args['id'] . '_row', $rowCount);
            }

        echo '</div>';

        //add new row
        echo '<a href="#" class="perfmatters-add-input-row button button-secondary" rel="' . $rowCount . '"><span class="dashicons dashicons-plus"></span>' . __('Add New', 'perfmatters') . '</a>';

    echo '</div>';

    //tooltip
    if(!empty($args['tooltip'])) {
        perfmatters_tooltip($args['tooltip']);
    }
}

//preload input row
function perfmatters_print_preload_row($rowCount = 0, $line = array()) {

    echo '<div class="perfmatters-input-row"' . (empty($line['url']) ? ' style="display: none;"' : '') . '>';

        echo '<div style="display: flex; width: 100%; align-items: center;">';
            echo '<input type="text" id="preload-' . $rowCount . '-url" name="perfmatters_options[preload][preload][' . $rowCount . '][url]" value="' . (isset($line['url']) ? $line['url'] : '') . '" placeholder="https://example.com/font.woff2" />';

            $types = array(
                'audio'    => 'Audio',
                'document' => 'Document',
                'embed'    => 'Embed',
                'fetch'    => 'Fetch',
                'font'     => 'Font',
                'image'    => 'Image',
                'object'   => 'Object',
                'script'   => 'Script',
                'style'    => 'Style',
                'track'    => 'Track',
                'worker'   => 'Worker',
                'video'    => 'Video'
            );

            echo '<select id="preload-' . $rowCount . '-as" name="perfmatters_options[preload][preload][' . $rowCount . '][as]" style="margin-left: 5px;">';
                echo '<option value="">' . __('Select Type', 'perfmatters') . '</option>';
                foreach($types as $value => $label) {
                    echo '<option value="' . $value . '"' . (isset($line['as']) && $line['as'] == $value ? ' selected="selected"' : '') . '>' . $label . '</option>';
                }
            echo '</select>';

            echo '<a href="#" class="perfmatters-expand-input-row" title="' . __('Settings', 'perfmatters') . '" style="margin-left: 8px; text-decoration: none;"><span class="dashicons dashicons-admin-generic"></span></a>';
            echo '<a href="#" class="perfmatters-delete-input-row" title="' . __('Remove', 'perfmatters') . '"><span class="dashicons dashicons-trash"></span></a>';
        echo '</div>';

        echo '<div class="perfmatters-input-row-extra">';

            echo '<select id="preload-' . $rowCount . '-device" name="perfmatters_options[preload][preload][' . $rowCount . '][device]">';
                echo '<option value="">' . __('All Devices', 'perfmatters') . '</option>';
                echo '<option value="desktop"' . (isset($line['device']) && $line['device'] == 'desktop' ? ' selected="selected"' : '') . '>' . __('Desktop', 'perfmatters') . '</option>';
                echo '<option value="mobile"' . (isset($line['device']) && $line['device'] == 'mobile' ? ' selected="selected"' : '') . '>' . __('Mobile', 'perfmatters') . '</option>';
            echo '</select>';

            echo '<label class="perfmatters-inline-label-input"><span>' . __('Location', 'perfmatters') . '</span>';
                echo '<input type="text" id="preload-' . $rowCount . '-locations" name="perfmatters_options[preload][preload][' . $rowCount . '][locations]" value="' . (isset($line['locations']) ? $line['locations'] : '') . '" placeholder="23,19,blog" style="min-width: auto; padding-left: 74px;" />';
            echo '</label>';

            echo '<label for="preload-' . $rowCount . '-crossorigin">';
                echo '<input type="checkbox" id="preload-' . $rowCount . '-crossorigin" name="perfmatters_options[preload][preload][' . $rowCount . '][crossorigin]"' . (!empty($line['crossorigin']) ? ' checked' : '') . ' value="1" /> CrossOrigin';
            echo '</label>';

        echo '</div>';
    echo "</div>";
}

//fetch priority input row
function perfmatters_print_fetch_priority_row($rowCount = 0, $line = array()) {

    echo '<div class="perfmatters-input-row"' . (empty($line['selector']) ? ' style="display: none;"' : '') . '>';

        echo '<div style="display: flex; width: 100%; align-items: center;">';
            echo '<input type="text" id="fetch-priority-' . $rowCount . '-url" name="perfmatters_options[preload][fetch_priority][' . $rowCount . '][selector]" value="' . (isset($line['selector']) ? esc_attr($line['selector']) : '') . '" placeholder="example-class" style="" />';

            $types = array(
                'high' => 'High',
                'low'  => 'Low'
            );

            echo '<select id="fetch-priority-' . $rowCount . '-as" name="perfmatters_options[preload][fetch_priority][' . $rowCount . '][priority]" style="margin-left: 5px;">';
                echo '<option value="">' . __('Select Priority', 'perfmatters') . '</option>';
                foreach($types as $value => $label) {
                    echo '<option value="' . $value . '"' . (isset($line['priority']) && $line['priority'] == $value ? ' selected="selected"' : '') . '>' . $label . '</option>';
                }
            echo '</select>';

            echo '<a href="#" class="perfmatters-expand-input-row" title="' . __('Settings', 'perfmatters') . '" style="margin-left: 8px; text-decoration: none;"><span class="dashicons dashicons-admin-generic"></span></a>';

            echo '<a href="#" class="perfmatters-delete-input-row" title="' . __('Remove', 'perfmatters') . '"><span class="dashicons dashicons-trash"></span></a>';

        echo '</div>';

        echo '<div class="perfmatters-input-row-extra">';

            echo '<select id="fetch-priority-' . $rowCount . '-device" name="perfmatters_options[preload][fetch_priority][' . $rowCount . '][device]" style="">';
                echo '<option value="">' . __('All Devices', 'perfmatters') . '</option>';
                echo '<option value="desktop"' . (isset($line['device']) && $line['device'] == 'desktop' ? ' selected="selected"' : '') . '>' . __('Desktop', 'perfmatters') . '</option>';
                echo '<option value="mobile"' . (isset($line['device']) && $line['device'] == 'mobile' ? ' selected="selected"' : '') . '>' . __('Mobile', 'perfmatters') . '</option>';
            echo '</select>';

            echo '<label class="perfmatters-inline-label-input" style="margin-left: 5px;"><span>' . __('Location', 'perfmatters') . '</span>';
                echo '<input type="text" id="fetch-priority-' . $rowCount . '-locations" name="perfmatters_options[preload][fetch_priority][' . $rowCount . '][locations]" value="' . (isset($line['locations']) ? $line['locations'] : '') . '" placeholder="23,19,blog" style="min-width: auto; padding-left: 74px;" />';
            echo '</label>';

            echo '<label for="fetch-priority-' . $rowCount . '-parent">';
                echo '<input type="checkbox" id="fetch-priority-' . $rowCount . '-parent" name="perfmatters_options[preload][fetch_priority][' . $rowCount . '][parent]"' . (!empty($line['parent']) ? ' checked' : '') . ' value="1" /> Search by Parent Selector';
            echo '</label>';

        echo '</div>';
    echo '</div>';
}

//preconnect input row
function perfmatters_print_preconnect_row($rowCount = 0, $line = '') {

    //check for previous vs new format
    if(is_array($line)) {
        $url = $line['url'];
        $crossorigin = isset($line['crossorigin']) ? $line['crossorigin'] : 0;
    }
    elseif(!empty($line)) {
        $url = $line;
        $crossorigin = 1;
    }

    //print row
    echo '<div class="perfmatters-input-row"' . (empty($url) ? ' style="display: none;"' : '') . '>';
        echo '<div class="perfmatters-input-row-hero">';
            echo '<input type="text" id="preconnect-' . $rowCount . '-url" name="perfmatters_options[preload][preconnect][' . $rowCount . '][url]" value="' . ($url ?? ''). '" placeholder="https://example.com" />';
            echo '<a href="#" class="perfmatters-expand-input-row" title="' . __('Settings', 'perfmatters') . '" style="margin-left: 8px; text-decoration: none;"><span class="dashicons dashicons-admin-generic"></span></a>';
            echo '<a href="#" class="perfmatters-delete-input-row" title="' . __('Remove', 'perfmatters') . '"><span class="dashicons dashicons-trash"></span></a>';
        echo '</div>';
        echo '<div class="perfmatters-input-row-extra">';
            echo '<label for="preconnect-' . $rowCount . '-crossorigin" style="margin-left: 0px;">';
                echo "<input type='checkbox' id='preconnect-" . $rowCount . "-crossorigin' name='perfmatters_options[preload][preconnect][" . $rowCount . "][crossorigin]' " . (!empty($crossorigin) ? "checked" : "") . " value='1' /> CrossOrigin";
            echo '</label>';
        echo '</div>';
    echo '</div>';
}

//print purge meta options
function perfmatters_print_purge_meta($args) {

    //input + button
    $meta_options = array('perfmatters_exclude_defer_js' => 'Defer JavaScript', 'perfmatters_exclude_delay_js' => 'Delay JavaScript', 'perfmatters_exclude_lazy_loading' => 'Lazy Loading', 'perfmatters_exclude_instant_page' => 'Instant Page');
    echo "<div style='margin-bottom: 10px;' id='perfmatters-purge-meta'>";
        foreach($meta_options as $key => $name) {
            echo "<label for='perfmatters-purge-meta-" . $key . "' style='margin-right: 10px;'>";
                echo "<input type='checkbox' name='perfmatters_tools_temp[purge_meta_options][]' id='perfmatters-purge-meta-" . $key . "' value='" . $key . "' />";
                echo $name;
            echo "</label>";
        }
    echo "</div>";
    perfmatters_action_button('purge_meta', __('Purge Meta Options', 'perfmatters'), 'secondary', $args['confirmation'] ?? '');

    //tooltip
    if(!empty($args['tooltip'])) {
        perfmatters_tooltip($args['tooltip']);
    }
}

//print import settings
function perfmatters_print_import_settings($args) {

	//input + button
    echo "<input type='file' id='perfmatters-import-settings-file' name='perfmatters_import_settings_file' /><br />";
    perfmatters_action_button('import_settings', __('Import Plugin Settings', 'perfmatters'), 'secondary');

    //tooltip
    if(!empty($args['tooltip'])) {
    	perfmatters_tooltip($args['tooltip']);
    }
}

//sanitize options
function perfmatters_sanitize_options($values) {

    //textarea inputs with one per line
    $sections_one_per_line = array(
        'lazyload' => array(
            'lazy_loading_exclusions',
            'lazy_loading_parent_exclusions',
            'css_background_selectors'
        ),
        'assets' => array(
            'js_exclusions',
            'delay_js_inclusions',
            'delay_js_exclusions',
            'rucss_excluded_stylesheets',
            'rucss_excluded_selectors'
        ),
        'preload' => array(
            'dns_prefetch'
        )
    );

    foreach($sections_one_per_line as $section => $options) {
        foreach($options as $id) {
            if(!empty($values[$section][$id])) {
                perfmatters_sanitize_one_per_line($values[$section][$id]);
            }
        }
    }

    //input rows
    $sections_input_rows = array(
        'preload' => array(
            'preload' => 'url',
            'preconnect' => 'url',
            'fetch_priority' => 'selector'
        )
    );

    foreach($sections_input_rows as $section => $options) {
        foreach($options as $id => $field) {
            if(!empty($values[$section][$id])) {
                foreach($values[$section][$id] as $key => $line) {
                    $val = trim($line[$field]);
                    if(empty($val)) {
                        unset($values[$section][$id][$key]);
                    }
                    else {
                        $values[$section][$id][$key][$field] = $val;
                    }
                }
                $values[$section][$id] = array_values($values[$section][$id]);
            }
        }
    }

    return $values;
}

//sanitize edd license
function perfmatters_edd_sanitize_license($new) {
	$old = get_option( 'perfmatters_edd_license_key' );
	if($old && $old != $new) {
		delete_option( 'perfmatters_edd_license_status' ); // new license has been entered, so must reactivate
	}
	return $new;
}

//sanitize one per line text field
function perfmatters_sanitize_one_per_line(&$value) {
    if(!is_array($value)) {
        $text = trim($value);
        $text_array = explode("\n", $text);
        $text_array = array_filter(array_map('trim', $text_array));
        $value = $text_array;
    }
}

//print tooltip
function perfmatters_tooltip($tooltip) {
    if(!empty($tooltip)) {
        $tools = get_option('perfmatters_tools');
        echo "<span class='perfmatters-tooltip-text" . (!empty($tools['accessibility_mode']) ? "-am" : "") . "'>" . $tooltip . "<span class='perfmatters-tooltip-subtext'>" . sprintf(__("Click %s to view documentation.", 'perfmatters'), "<span class='perfmatters-tooltip-icon'>?</span>") . "</span></span>";
    }
}

//print title
function perfmatters_title($title, $id = false, $link = false) {

    if(!empty($title)) {

        $var = "<span class='perfmatters-title-wrapper'>";

            //label + title
            if(!empty($id)) {
                $var.= "<label for='" . $id . "'>" . $title . "</label>";
            }
            else {
                $var.= $title;
            }

            //tooltip icon + link
            if(!empty($link)) {
                $tools = get_option('perfmatters_tools');
                 $var.= "<a" . (!empty($link) ? " href='" . $link . "'" : "") . " class='perfmatters-tooltip'" . (!empty($tools['accessibility_mode']) ? " title='" . __("View Documentation", 'perfmatters') . "'" : "") . " target='_blank'>?</a>";
            }

        $var.= "</span>";

        return $var;
    }
}

//action button
function perfmatters_action_button($action, $label, $type = 'primary', $confirmation = '') {
    echo '<div class="perfmatters-button-container">';
        echo '<button name="submit" id="submit" class="button button-' . $type . '" data-pm-action="' . $action . '"' . (!empty($confirmation) ? ' data-pm-confirmation="' . $confirmation . '"' : '') . ' style="display: flex; align-items: center;">';
            echo '<span class="perfmatters-button-text">' . $label . '</span>';
            echo '<svg class="perfmatters-button-spinner" viewBox="0 0 100 100" role="presentation" focusable="false" style="background: rgba(0,0,0,.1); border-radius: 100%; width: 16px; height: 28px; margin: 0px 2px; overflow: visible; opacity: 1; background-color: transparent; display: none;"><circle cx="50" cy="50" r="50" vector-effect="non-scaling-stroke" style="fill: transparent; stroke-width: 1.5px; stroke: #fff;"></circle><path d="m 50 0 a 50 50 0 0 1 50 50" vector-effect="non-scaling-stroke" style="fill: transparent; stroke-width: 1.5px; stroke: #4A89DD; stroke-linecap: round; transform-origin: 50% 50%; animation: 1.4s linear 0s infinite normal both running perfmatters-spinner;"></path></svg>';
        echo '</button>';
        echo '<div class="perfmatters-button-message" style="display: none; margin-left: 10px; "></div>';
    echo '</div>';
}

Youez - 2016 - github.com/yon3zu
LinuXploit