Your IP : 3.137.219.213


Current Path : /home/ncdcgo/public_html/wp-content/plugins/facetwp/includes/
Upload File :
Current File : /home/ncdcgo/public_html/wp-content/plugins/facetwp/includes/class-settings.php

<?php

class FacetWP_Settings
{

    /**
     * Get the field settings array
     * @since 3.0.0
     */
    function get_registered_settings() {
        $defaults = [
            'general' => [
                'label' => __( 'General', 'fwp' ),
                'fields' => [
                    'license_key' => [
                        'label' => __( 'License key', 'fwp' ),
                        'html' => $this->get_setting_html( 'license_key' )
                    ],
                    'gmaps_api_key' => [
                        'label' => __( 'Google Maps API key', 'fwp' ),
                        'html' => $this->get_setting_html( 'gmaps_api_key' )
                    ],
                    'separators' => [
                        'label' => __( 'Separators', 'fwp' ),
                        'notes' => 'Enter the thousands and decimal separators, respectively',
                        'html' => $this->get_setting_html( 'separators' )
                    ],
                    'prefix' => [
                        'label' => __( 'URL prefix', 'fwp' ),
                        'html' => $this->get_setting_html( 'prefix', 'dropdown', [
                            'choices' => [ 'fwp_' => 'fwp_', '_' => '_' ]
                        ])
                    ],
                    'load_jquery' => [
                        'label' => __( 'Load jQuery', 'fwp' ),
                        'notes' => 'FacetWP no longer requires jQuery, but enable if needed',
                        'html' => $this->get_setting_html( 'load_jquery', 'toggle', [
                            'true_value' => 'yes',
                            'false_value' => 'no'
                        ])
                    ],
                    'load_a11y' => [
                        'label' => __( 'Load a11y support', 'fwp' ),
                        'notes' => 'Improved accessibility for users with disabilities',
                        'html' => $this->get_setting_html( 'load_a11y', 'toggle', [
                            'true_value' => 'yes',
                            'false_value' => 'no'
                        ])
                    ],
                    'strict_query_detection' => [
                        'label' => __( 'Strict query detection', 'fwp' ),
                        'notes' => 'Enable if FacetWP auto-detects the wrong archive query',
                        'html' => $this->get_setting_html( 'strict_query_detection', 'toggle', [
                            'true_value' => 'yes',
                            'false_value' => 'no'
                        ])
                    ],
                    'debug_mode' => [
                        'label' => __( 'Debug mode', 'fwp' ),
                        'notes' => 'After enabling, type "FWP.settings.debug" into the browser console on your front-end facet page',
                        'html' => $this->get_setting_html( 'debug_mode', 'toggle', [
                            'true_value' => 'on',
                            'false_value' => 'off',
                            'message' => 'Debug Mode exposes some of your settings and can influence loading speeds.<br />Make sure to disable it when not needed for troubleshooting.'
                        ]),
                    ]
                ]
            ],
            'woocommerce' => [
                'label' => __( 'WooCommerce', 'fwp' ),
                'fields' => [
                    'wc_enable_variations' => [
                        'label' => __( 'Support product variations?', 'fwp' ),
                        'notes' => __( 'Enable if your store uses variable products.', 'fwp' ),
                        'html' => $this->get_setting_html( 'wc_enable_variations', 'toggle' )
                    ],
                    'wc_index_all' => [
                        'label' => __( 'Index out-of-stock products?', 'fwp' ),
                        'notes' => __( 'Show facet choices for out-of-stock products?', 'fwp' ),
                        'html' => $this->get_setting_html( 'wc_index_all', 'toggle' )
                    ]
                ]
            ],
            'backup' => [
                'label' => __( 'Import / Export', 'fwp' ),
                'fields' => [
                    'export' => [
                        'label' => __( 'Export', 'fwp' ),
                        'html' => $this->get_setting_html( 'export' )
                    ],
                    'import' => [
                        'label' => __( 'Import', 'fwp' ),
                        'html' => $this->get_setting_html( 'import' )
                    ]
                ]
            ]
        ];

        if ( ! is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
            unset( $defaults['woocommerce'] );
        }

        if ( '_' == FWP()->helper->settings['settings']['prefix'] ) {
            unset( $defaults['general']['fields']['prefix'] );
        }

        return apply_filters( 'facetwp_settings_admin', $defaults, $this );
    }


    /**
     * All facet admin fields
     * @since 3.9
     */
    function get_registered_facet_fields() {
        $settings = [
            'label_any' => [
                'label' => __( 'Default label', 'fwp' ),
                'notes' => 'Customize the "Any" label',
                'default' => __( 'Any', 'fwp' )
            ],
            'placeholder' => [
                'label' => __( 'Placeholder text', 'fwp' )
            ],
            'parent_term' => [
                'label' => __( 'Parent term', 'fwp' ),
                'notes' => 'To show only child terms, enter the parent <a href="https://facetwp.com/how-to-find-a-wordpress-terms-id/" target="_blank">term ID</a>. Otherwise, leave blank.',
                'show' => "facet.source.substr(0, 3) == 'tax'"
            ],
            'hierarchical' => [
                'type' => 'toggle',
                'label' => __( 'Hierarchical', 'fwp' ),
                'notes' => 'Is this a hierarchical taxonomy?',
                'show' => "facet.source.substr(0, 3) == 'tax'"
            ],
            'show_expanded' => [
                'type' => 'toggle',
                'label' => __( 'Show expanded', 'fwp' ),
                'notes' => 'Should child terms be visible by default?',
                'show' => "facet.hierarchical == 'yes'"
            ],
            'multiple' => [
                'type' => 'toggle',
                'label' => __( 'Multi-select', 'fwp' ),
                'notes' => 'Allow multiple selections?'
            ],
            'ghosts' => [
                'type' => 'alias',
                'items' => [
                    'ghosts' => [
                        'type' => 'toggle',
                        'label' => __( 'Show ghosts', 'fwp' ),
                        'notes' => 'Show choices that would return zero results?'
                    ],
                    'preserve_ghosts' => [
                        'type' => 'toggle',
                        'label' => __( 'Preserve ghost order', 'fwp' ),
                        'notes' => 'Keep ghost choices in the same order?',
                        'show' => "facet.ghosts == 'yes'"
                    ]
                ]
            ],
            'modifiers' => [
                'type' => 'alias',
                'items' => [
                    'modifier_type' => [
                        'type' => 'select',
                        'label' => __( 'Value modifiers', 'fwp' ),
                        'notes' => 'Include or exclude certain values?',
                        'choices' => [
                            'off' => __( 'Off', 'fwp' ),
                            'exclude' => __( 'Exclude these values', 'fwp' ),
                            'include' => __( 'Show only these values', 'fwp' )
                        ]
                    ],
                    'modifier_values' => [
                        'type' => 'textarea',
                        'label' => '',
                        'placeholder' => 'Add one value per line',
                        'show' => "facet.modifier_type != 'off'"
                    ]
                ]
            ],
            'operator' => [
                'type' => 'select',
                'label' => __( 'Facet logic', 'fwp' ),
                'notes' => 'How should multiple selections affect the results?',
                'choices' => [
                    'and' => __( 'AND (match all)', 'fwp' ),
                    'or' => __( 'OR (match any)', 'fwp' )
                ]
            ],
            'orderby' => [
                'type' => 'select',
                'label' => __( 'Sort by', 'fwp' ),
                'default' => 'count',
                'choices' => [
                    'count' => __( 'Highest count', 'fwp' ),
                    'display_value' => __( 'Display value', 'fwp' ),
                    'raw_value' => __( 'Raw value', 'fwp' ),
                    'term_order' => __( 'Term order', 'fwp' )
                ]
            ],
            'count' => [
                'label' => __( 'Count', 'fwp' ),
                'notes' => 'The maximum number of choices to show (-1 for no limit)',
                'default' => 10
            ],
            'soft_limit' => [
                'label' => __( 'Soft limit', 'fwp' ),
                'notes' => 'Show a toggle link after this many choices',
                'default' => 5,
                'show' => "facet.hierarchical != 'yes'"
            ],
            'source_other' => [
                'label' => __( 'Other data source', 'fwp' ),
                'notes' => 'Use a separate value for the upper limit?',
                'html' => '<data-sources :facet="facet" setting-name="source_other"></data-sources>'
            ],
            'compare_type' => [
                'type' => 'select',
                'label' => __( 'Compare type', 'fwp' ),
                'notes' => "<strong>Basic</strong> - entered range surrounds the post's range<br /><strong>Enclose</strong> - entered range is fully inside the post's range<br /><strong>Intersect</strong> - entered range overlaps the post's range<br /><br />When in doubt, choose <strong>Basic</strong>",
                'choices' => [
                    '' => __( 'Basic', 'fwp' ),
                    'enclose' => __( 'Enclose', 'fwp' ),
                    'intersect' => __( 'Intersect', 'fwp' )
                ]
            ],
            'ui_type' => [
                'label' => __( 'UI type', 'fwp' ),
                'html' => '<ui-type :facet="facet"></ui-type>'
            ],
            'ui_ghosts' => [
                'type' => 'toggle',
                'label' => __( 'Show ghosts', 'fwp' ),
                'notes' => 'Show choices that would return zero results?'
            ],
            'reset_text' => [
                'label' => __( 'Reset text', 'fwp' ),
                'default' => 'Reset'
            ]
        ];

        foreach ( FWP()->helper->facet_types as $name => $obj ) {
            if ( method_exists( $obj, 'register_fields' ) ) {
                $settings = array_merge( $settings, $obj->register_fields() );
            }
        }

        return $settings;
    }


    /**
     * Return HTML for a single facet field (supports aliases)
     * @since 3.9
     */
    function get_facet_field_html( $name ) {
        ob_start();

        $fields = FWP()->settings->get_registered_facet_fields();

        if ( isset( $fields[ $name ] ) ) {
            $field = $fields[ $name ];

            if ( isset( $field['type'] ) && 'alias' == $field['type'] ) {
                foreach ( $field['items'] as $k => $v ) {
                    $v['name'] = $k;
                    $this->render_facet_field( $v );
                }
            }
            else {
                $field['name'] = $name;
                $this->render_facet_field( $field );
            }
        }

        return ob_get_clean();
    }


    /**
     * Render a facet field
     * @since 3.9
     */
    function render_facet_field( $field ) {
        $name = str_replace( '_', '-', $field['name'] );
        $type = $field['type'] ?? 'text';
        $placeholder = $field['placeholder'] ?? '';
        $show = isset( $field['show'] ) ? ' v-show="' . $field['show'] . '"' : '';
        $default = isset( $field['default'] ) ? ' value="' . $field['default'] . '"' : '';
        $label = empty( $field['label'] ) ? '' : $field['label'];
        $checked = ( isset( $field['default'] ) && 'checked' == $field['default'] ) ? ' checked="checked"' : '';

        if ( isset( $field['notes'] ) ) {
            $label = '<div class="facetwp-tooltip">' . $label . '<div class="facetwp-tooltip-content">' . $field['notes'] . '</div></div>';
        }

        ob_start();

        if ( isset( $field['html'] ) ) {
            echo $field['html'];
        }
        elseif ( 'text' == $type ) {
?>
                <input type="text" class="facet-<?php echo $name; ?>" placeholder="<?php echo $placeholder; ?>"<?php echo $default; ?> />
<?php
        }
        elseif ( 'textarea' == $type ) {
?>
                <textarea class="facet-<?php echo $name; ?>" placeholder="<?php echo $placeholder; ?>"></textarea>
<?php
        }
        elseif ( 'toggle' == $type ) {
            ?>
                <label class="facetwp-switch">
                    <input type="checkbox" class="facet-<?php echo $name; ?>" true-value="yes" false-value="no"<?php echo $checked; ?> />
                    <span class="facetwp-slider"></span>
                </label>
<?php
        }
        elseif ( 'select' == $type ) {
?>
                <select class="facet-<?php echo $name; ?>">
                    <?php foreach ( $field['choices'] as $k => $v ) : ?>
                    <option value="<?php echo $k; ?>"><?php echo $v; ?></option>
                    <?php endforeach; ?>
                </select>
<?php
        }

        $html = ob_get_clean();
?>
        <div class="facetwp-row"<?php echo $show; ?>>
            <div><?php echo $label; ?></div>
            <div><?php echo $html; ?></div>
        </div>
<?php
    }


    /**
     * Return HTML for a setting field
     * @since 3.0.0
     */
    function get_setting_html( $setting_name, $field_type = 'text', $atts = [] ) {
        ob_start();

        if ( 'license_key' == $setting_name ) : ?>

        <input type="text" class="facetwp-license" style="width:360px" value="<?php echo FWP()->helper->get_license_key(); ?>"<?php echo defined( 'FACETWP_LICENSE_KEY' ) ? ' disabled' : ''; ?> />
        <div @click="activate" class="btn-normal"><?php _e( 'Activate', 'fwp' ); ?></div>
        <div class="facetwp-activation-status field-notes"><?php echo $this->get_activation_status(); ?></div>

<?php elseif ( 'gmaps_api_key' == $setting_name ) : ?>

        <input type="text" v-model="app.settings.gmaps_api_key" style="width:360px" />
        <a href="https://developers.google.com/maps/documentation/javascript/get-api-key" target="_blank"><?php _e( 'Get an API key', 'fwp' ); ?></a>

<?php elseif ( 'separators' == $setting_name ) : ?>

        Thousands:
        <input type="text" v-model="app.settings.thousands_separator" style="width:30px" /> &nbsp;
        Decimal:
        <input type="text" v-model="app.settings.decimal_separator" style="width:30px" />

<?php elseif ( 'export' == $setting_name ) : ?>

        <select class="export-items" multiple="multiple">
            <?php foreach ( $this->get_export_choices() as $val => $label ) : ?>
            <option value="<?php echo $val; ?>"><?php echo $label; ?></option>
            <?php endforeach; ?>
        </select>
        <div class="btn-normal export-submit">
            <?php _e( 'Export', 'fwp' ); ?>
        </div>

<?php elseif ( 'import' == $setting_name ) : ?>

        <div><textarea class="import-code" placeholder="<?php _e( 'Paste the import code here', 'fwp' ); ?>"></textarea></div>
        <div><input type="checkbox" class="import-overwrite" /> <?php _e( 'Overwrite existing items?', 'fwp' ); ?></div>
        <div style="margin-top:5px">
            <div class="btn-normal import-submit"><?php _e( 'Import', 'fwp' ); ?></div>
        </div>

<?php elseif ( 'dropdown' == $field_type ) : ?>

        <select class="facetwp-setting" v-model="app.settings.<?php echo $setting_name; ?>">
            <?php foreach ( $atts['choices'] as $val => $label ) : ?>
            <option value="<?php echo $val; ?>"><?php echo $label; ?></option>
            <?php endforeach; ?>
        </select>

<?php elseif ( 'toggle' == $field_type ) : ?>
<?php

$true_value = $atts['true_value'] ?? 'yes';
$false_value = $atts['false_value'] ?? 'no';
$message = $atts['message'] ?? '';

?>
        <label class="facetwp-switch">
            <input
                type="checkbox"
                v-model="app.settings.<?php echo $setting_name; ?>"
                true-value="<?php echo $true_value; ?>"
                false-value="<?php echo $false_value; ?>"
            />
            <span class="facetwp-slider"></span>
        </label>

        <?php if ( '' != $message ) { ?>
            <div v-if="app.settings.<?php echo $setting_name; ?> == '<?php echo $true_value; ?>'" class="facetwp-toggle-status field-notes"><?php echo $message; ?></div>
        <?php } ?>

<?php endif;

        return ob_get_clean();
    }


    /**
     * Get an array of all facets and templates
     * @since 3.0.0
     */
    function get_export_choices() {
        $export = [];

        $settings = FWP()->helper->settings;

        foreach ( $settings['facets'] as $facet ) {
            $export['facet-' . $facet['name']] = 'Facet - ' . $facet['label'];
        }

        foreach ( $settings['templates'] as $template ) {
            $export['template-' . $template['name']] = 'Template - '. $template['label'];
        }

        return $export;
    }


    /**
     * Get the activation status
     * @since 3.0.0
     */
    function get_activation_status() {
        $message = __( 'Not yet activated', 'fwp' );
        $status = FWP()->helper->get_license_meta( 'status' );

        if ( false !== $status ) {
            if ( 'success' == $status ) {
                $expiration = FWP()->helper->get_license_meta( 'expiration' );
                $expiration = date( 'M j, Y', strtotime( $expiration ) );
                $message = __( 'Valid until', 'fwp' ) . ' ' . $expiration;
            }
            else {
                $message = FWP()->helper->get_license_meta( 'message' );
            }
        }

        return $message;
    }


    /**
     * Load i18n admin strings
     * @since 3.2.0
     */
    function get_i18n_strings() {
        return [
            'Number of grid columns' => __( 'Number of grid columns', 'fwp' ),
            'Spacing between results' => __( 'Spacing between results', 'fwp' ),
            'No results text' => __( 'No results text', 'fwp' ),
            'Text style' => __( 'Text style', 'fwp' ),
            'Text color' => __( 'Text color', 'fwp' ),
            'Font size' => __( 'Font size', 'fwp' ),
            'Background color' => __( 'Background color', 'fwp' ),
            'Border' => __( 'Border', 'fwp' ),
            'Border style' => __( 'Border style', 'fwp' ),
            'None' => __( 'None', 'fwp' ),
            'Solid' => __( 'Solid', 'fwp' ),
            'Dashed' => __( 'Dashed', 'fwp' ),
            'Dotted' => __( 'Dotted', 'fwp' ),
            'Double' => __( 'Double', 'fwp' ),
            'Border color' => __( 'Border color', 'fwp' ),
            'Border width' => __( 'Border width', 'fwp' ),
            'Button text' => __( 'Button text', 'fwp' ),
            'Button text color' => __( 'Button text color', 'fwp' ),
            'Button padding' => __( 'Button padding', 'fwp' ),
            'Separator' => __( 'Separator', 'fwp' ),
            'Custom CSS' => __( 'Custom CSS', 'fwp' ),
            'Column widths' => __( 'Column widths', 'fwp' ),
            'Content' => __( 'Content', 'fwp' ),
            'Image size' => __( 'Image size', 'fwp' ),
            'Author field' => __( 'Author field', 'fwp' ),
            'Display name' => __( 'Display name', 'fwp' ),
            'User login' => __( 'User login', 'fwp' ),
            'User ID' => __( 'User ID', 'fwp' ),
            'Field type' => __( 'Field type', 'fwp' ),
            'Text' => __( 'Text', 'fwp' ),
            'Date' => __( 'Date', 'fwp' ),
            'Number' => __( 'Number', 'fwp' ),
            'Date format' => __( 'Date format', 'fwp' ),
            'Input format' => __( 'Input format', 'fwp' ),
            'Number format' => __( 'Number format', 'fwp' ),
            'Link' => __( 'Link', 'fwp' ),
            'Link type' => __( 'Link type', 'fwp' ),
            'Post URL' => __( 'Post URL', 'fwp' ),
            'Custom URL' => __( 'Custom URL', 'fwp' ),
            'Open in new tab?' => __( 'Open in new tab?', 'fwp' ),
            'Prefix' => __( 'Prefix', 'fwp' ),
            'Suffix' => __( 'Suffix', 'fwp' ),
            'Hide item?' => __( 'Hide item?', 'fwp' ),
            'Padding' => __( 'Padding', 'fwp' ),
            'CSS class' => __( 'CSS class', 'fwp' ),
            'Button Border' => __( 'Button border', 'fwp' ),
            'Term URL' => __( 'Term URL', 'fwp' ),
            'Fetch' => __( 'Fetch', 'fwp' ),
            'All post types' => __( 'All post types', 'fwp' ),
            'and show' => __( 'and show', 'fwp' ),
            'per page' => __( 'per page', 'fwp' ),
            'Sort by' => __( 'Sort by', 'fwp' ),
            'Posts' => __( 'Posts', 'fwp' ),
            'Post Title' => __( 'Post Title', 'fwp' ),
            'Post Name' => __( 'Post Name', 'fwp' ),
            'Post Type' => __( 'Post Type', 'fwp' ),
            'Post Date' => __( 'Post Date', 'fwp' ),
            'Post Modified' => __( 'Post Modified', 'fwp' ),
            'Comment Count' => __( 'Comment Count', 'fwp' ),
            'Menu Order' => __( 'Menu Order', 'fwp' ),
            'Custom Fields' => __( 'Custom Fields', 'fwp' ),
            'Narrow results by' => __( 'Narrow results by', 'fwp' ),
            'Hit Enter' => __( 'Hit Enter', 'fwp' ),
            'Add query sort' => __( 'Add query sort', 'fwp' ),
            'Add query filter' => __( 'Add query filter', 'fwp' ),
            'Clear' => __( 'Clear', 'fwp' ),
            'Enter term slugs' => __( 'Enter term slugs', 'fwp' ),
            'Enter values' => __( 'Enter values', 'fwp' ),
            'Layout' => __( 'Layout', 'fwp' ),
            'Content' => __( 'Content', 'fwp' ),
            'Style' => __( 'Style', 'fwp' ),
            'Row' => __( 'Row', 'fwp' ),
            'Column' => __( 'Column', 'fwp' ),
            'Start typing' => __( 'Start typing', 'fwp' ),
            'Label' => __( 'Label', 'fwp' ),
            'Unique name' => __( 'Unique name', 'fwp' ),
            'Facet type' => __( 'Facet type', 'fwp' ),
            'Copy shortcode' => __( 'Copy shortcode', 'fwp' ),
            'Data source' => __( 'Data source', 'fwp' ),
            'Switch to advanced mode' => __( 'Switch to advanced mode', 'fwp' ),
            'Switch to visual mode' => __( 'Switch to visual mode', 'fwp' ),
            'Display' => __( 'Display', 'fwp' ),
            'Query' => __( 'Query', 'fwp' ),
            'Help' => __( 'Help', 'fwp' ),
            'Display Code' => __( 'Display Code', 'fwp' ),
            'Query Arguments' => __( 'Query Arguments', 'fwp' ),
            'Saving' => __( 'Saving', 'fwp' ),
            'Indexing' => __( 'Indexing', 'fwp' ),
            'The index table is empty' => __( 'The index table is empty', 'fwp' ),
            'Indexing complete' => __( 'Indexing complete', 'fwp' ),
            'Looking' => __( 'Looking', 'fwp' ),
            'Purging' => __( 'Purging', 'fwp' ),
            'Copied!' => __( 'Copied!', 'fwp' ),
            'Press CTRL+C to copy' => __( 'Press CTRL+C to copy', 'fwp' ),
            'Activating' => __( 'Activating', 'fwp' ),
            'Re-index' => __( 'Re-index', 'fwp' ),
            'Stop indexer' => __( 'Stop indexer', 'fwp' ),
            'Loading' => __( 'Loading', 'fwp' ),
            'Importing' => __( 'Importing', 'fwp' ),
            'Convert to query args' => __( 'Convert to query args', 'fwp' )
        ];
    }


    /**
     * Get available image sizes
     * @since 3.2.7
     */
    function get_image_sizes() {
        global $_wp_additional_image_sizes;

        $sizes = [];

        $default_sizes = [ 'thumbnail', 'medium', 'medium_large', 'large', 'full' ];

        foreach ( get_intermediate_image_sizes() as $size ) {
            if ( in_array( $size, $default_sizes ) ) {
                $sizes[ $size ]['width'] = (int) get_option( "{$size}_size_w" );
                $sizes[ $size ]['height'] = (int) get_option( "{$size}_size_h" );
            }
            elseif ( isset( $_wp_additional_image_sizes[ $size ] ) ) {
                $sizes[ $size ] = $_wp_additional_image_sizes[ $size ];
            }
        }

        return $sizes;
    }


    /**
     * Return an array of formatted image sizes
     * @since 3.2.7
     */
    function get_image_size_labels() {
        $labels = [];
        $sizes = $this->get_image_sizes();

        foreach ( $sizes as $size => $data ) {
            $height = ( 0 === $data['height'] ) ? 'w' : 'x' . $data['height'];
            $label = $size . ' (' . $data['width'] . $height . ')';
            $labels[ $size ] = $label;
        }

        $labels['full'] = __( 'full', 'fwp' );

        return $labels;
    }


    /**
     * Create SVG images (based on Font Awesome)
     * @license https://fontawesome.com/license/free CC BY 4.0
     * @since 3.6.5
     */
    function get_svg() {
        $output = [];

        $icons = [
            // [viewBox width, viewBox height, icon width, svg data]
            "align-center" => [448, 512, 14, "M432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM108.1 96h231.81A12.09 12.09 0 0 0 352 83.9V44.09A12.09 12.09 0 0 0 339.91 32H108.1A12.09 12.09 0 0 0 96 44.09V83.9A12.1 12.1 0 0 0 108.1 96zm231.81 256A12.09 12.09 0 0 0 352 339.9v-39.81A12.09 12.09 0 0 0 339.91 288H108.1A12.09 12.09 0 0 0 96 300.09v39.81a12.1 12.1 0 0 0 12.1 12.1z"],
            "align-left" => [448, 512, 14, "M12.83 352h262.34A12.82 12.82 0 0 0 288 339.17v-38.34A12.82 12.82 0 0 0 275.17 288H12.83A12.82 12.82 0 0 0 0 300.83v38.34A12.82 12.82 0 0 0 12.83 352zm0-256h262.34A12.82 12.82 0 0 0 288 83.17V44.83A12.82 12.82 0 0 0 275.17 32H12.83A12.82 12.82 0 0 0 0 44.83v38.34A12.82 12.82 0 0 0 12.83 96zM432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"],
            "align-right" => [448, 512, 14, "M16 224h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm416 192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-384H172.83A12.82 12.82 0 0 0 160 44.83v38.34A12.82 12.82 0 0 0 172.83 96h262.34A12.82 12.82 0 0 0 448 83.17V44.83A12.82 12.82 0 0 0 435.17 32zm0 256H172.83A12.82 12.82 0 0 0 160 300.83v38.34A12.82 12.82 0 0 0 172.83 352h262.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288z"],
            "arrow-circle-up" => [512, 512, 16, "M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm143.6 28.9l72.4-75.5V392c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V209.4l72.4 75.5c9.3 9.7 24.8 9.9 34.3.4l10.9-11c9.4-9.4 9.4-24.6 0-33.9L273 107.7c-9.4-9.4-24.6-9.4-33.9 0L106.3 240.4c-9.4 9.4-9.4 24.6 0 33.9l10.9 11c9.6 9.5 25.1 9.3 34.4-.4z"],
            "bold" => [384, 512, 12, "M333.49 238a122 122 0 0 0 27-65.21C367.87 96.49 308 32 233.42 32H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h31.87v288H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h209.32c70.8 0 134.14-51.75 141-122.4 4.74-48.45-16.39-92.06-50.83-119.6zM145.66 112h87.76a48 48 0 0 1 0 96h-87.76zm87.76 288h-87.76V288h87.76a56 56 0 0 1 0 112z"],
            "caret-down" => [320, 512, 10, "M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z"],
            "cog" => [512, 512, 16, "M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"],
            "columns" => [512, 512, 16, "M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64V160h160v256zm224 0H288V160h160v256z"],
            "eye-slash" => [640, 512, 20, "M320 400c-75.85 0-137.25-58.71-142.9-133.11L72.2 185.82c-13.79 17.3-26.48 35.59-36.72 55.59a32.35 32.35 0 0 0 0 29.19C89.71 376.41 197.07 448 320 448c26.91 0 52.87-4 77.89-10.46L346 397.39a144.13 144.13 0 0 1-26 2.61zm313.82 58.1l-110.55-85.44a331.25 331.25 0 0 0 81.25-102.07 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64a308.15 308.15 0 0 0-147.32 37.7L45.46 3.37A16 16 0 0 0 23 6.18L3.37 31.45A16 16 0 0 0 6.18 53.9l588.36 454.73a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zm-183.72-142l-39.3-30.38A94.75 94.75 0 0 0 416 256a94.76 94.76 0 0 0-121.31-92.21A47.65 47.65 0 0 1 304 192a46.64 46.64 0 0 1-1.54 10l-73.61-56.89A142.31 142.31 0 0 1 320 112a143.92 143.92 0 0 1 144 144c0 21.63-5.29 41.79-13.9 60.11z"],
            "italic" => [320, 512, 10, "M320 48v32a16 16 0 0 1-16 16h-62.76l-80 320H208a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H16a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h62.76l80-320H112a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h192a16 16 0 0 1 16 16z"],
            "lock" => [448, 512, 14, "M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z"],
            "lock-open" => [576, 512, 18, "M423.5 0C339.5.3 272 69.5 272 153.5V224H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48h-48v-71.1c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v80c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-80C576 68 507.5-.3 423.5 0z"],
            "minus-circle" => [512, 512, 16, "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z"],
            "plus" => [448, 512, 14, "M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"],
            "plus-circle" => [512, 512, 16, "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"],
            "times" => [352, 512, 11, "M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"]
        ];

        foreach ( $icons as $name => $attr ) {
            $svg = '<svg aria-hidden="true" focusable="false" class="svg-inline--fa fa-{name} fa-w-{faw}" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 {w} {h}"><path fill="currentColor" d="{d}"></path></svg>';
            $search = [ '{name}', '{w}', '{h}', '{faw}', '{d}' ];
            $replace = [ $name, $attr[0], $attr[1], $attr[2], $attr[3] ];
            $output[ $name ] = str_replace( $search, $replace, $svg );
        }

        return $output;
    }
}