Hotel Raxa - Advanced Booking System Implementation

🏨 Hotel Booking Enhancements:
- Implemented Eagle Booking Advanced Pricing add-on
- Added Booking.com-style rate management system
- Created professional calendar interface for pricing
- Integrated deals and discounts functionality

💰 Advanced Pricing Features:
- Dynamic pricing models (per room, per person, per adult)
- Base rates, adult rates, and child rates management
- Length of stay discounts and early bird deals
- Mobile rates and secret deals implementation
- Seasonal promotions and flash sales

📅 Availability Management:
- Real-time availability tracking
- Stop sell and restriction controls
- Closed to arrival/departure functionality
- Minimum/maximum stay requirements
- Automatic sold-out management

💳 Payment Integration:
- Maintained Redsys payment gateway integration
- Seamless integration with existing Eagle Booking
- No modifications to core Eagle Booking plugin

🛠️ Technical Implementation:
- Custom database tables for advanced pricing
- WordPress hooks and filters integration
- AJAX-powered admin interface
- Data migration from existing Eagle Booking
- Professional calendar view for revenue management

📊 Admin Interface:
- Booking.com-style management dashboard
- Visual rate and availability calendar
- Bulk operations for date ranges
- Statistics and analytics dashboard
- Modal dialogs for quick editing

🔧 Code Quality:
- WordPress coding standards compliance
- Secure database operations with prepared statements
- Proper input validation and sanitization
- Error handling and logging
- Responsive admin interface

🤖 Generated with Claude Code (https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Hotel Raxa Dev
2025-07-11 07:43:22 +02:00
commit 5b1e2453c7
9816 changed files with 2784509 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,370 @@
<?php
/** Array of dashicons
* Contributed by Kevin Provance <kevin.provance@gmail.com>
* Last updated' April 28, 2023
*
* @package Redux Framework
*/
defined( 'ABSPATH' ) || exit;
add_filter( 'redux/fonts/dashicons dashicons', 'redux_get_dashicons dashicons' );
/**
* Dashicons icon set'
*
* @return array
*/
function redux_get_dashicons(): array {
return array(
'dashicons dashicons-admin-appearance',
'dashicons dashicons-admin-collapse',
'dashicons dashicons-admin-comments',
'dashicons dashicons-admin-customizer',
'dashicons dashicons-admin-generic',
'dashicons dashicons-admin-home',
'dashicons dashicons-admin-links',
'dashicons dashicons-admin-media',
'dashicons dashicons-admin-multisite',
'dashicons dashicons-admin-network',
'dashicons dashicons-admin-page',
'dashicons dashicons-admin-plugins',
'dashicons dashicons-admin-post',
'dashicons dashicons-admin-settings',
'dashicons dashicons-admin-site-alt',
'dashicons dashicons-admin-site-alt2',
'dashicons dashicons-admin-site-alt3',
'dashicons dashicons-admin-site',
'dashicons dashicons-admin-tools',
'dashicons dashicons-admin-users',
'dashicons dashicons-airplane',
'dashicons dashicons-album',
'dashicons dashicons-align-center',
'dashicons dashicons-align-full-width',
'dashicons dashicons-align-left',
'dashicons dashicons-align-none',
'dashicons dashicons-align-pull-left',
'dashicons dashicons-align-pull-right',
'dashicons dashicons-align-right',
'dashicons dashicons-align-wide',
'dashicons dashicons-amazon',
'dashicons dashicons-analytics',
'dashicons dashicons-archive',
'dashicons dashicons-arrow-down-alt',
'dashicons dashicons-arrow-down-alt2',
'dashicons dashicons-arrow-down',
'dashicons dashicons-arrow-left-alt',
'dashicons dashicons-arrow-left-alt2',
'dashicons dashicons-arrow-left',
'dashicons dashicons-arrow-right-alt',
'dashicons dashicons-arrow-right-alt2',
'dashicons dashicons-arrow-right',
'dashicons dashicons-arrow-up-alt',
'dashicons dashicons-arrow-up-alt2',
'dashicons dashicons-arrow-up-duplicate',
'dashicons dashicons-arrow-up',
'dashicons dashicons-art',
'dashicons dashicons-awards',
'dashicons dashicons-backup',
'dashicons dashicons-bank',
'dashicons dashicons-beer',
'dashicons dashicons-bell',
'dashicons dashicons-block-default',
'dashicons dashicons-book-alt',
'dashicons dashicons-book',
'dashicons dashicons-buddicons-activity',
'dashicons dashicons-buddicons-bbpress-logo',
'dashicons dashicons-buddicons-buddypress-logo',
'dashicons dashicons-buddicons-community',
'dashicons dashicons-buddicons-forums',
'dashicons dashicons-buddicons-friends',
'dashicons dashicons-buddicons-groups',
'dashicons dashicons-buddicons-pm',
'dashicons dashicons-buddicons-replies',
'dashicons dashicons-buddicons-topics',
'dashicons dashicons-buddicons-tracking',
'dashicons dashicons-building',
'dashicons dashicons-businessman',
'dashicons dashicons-businessperson',
'dashicons dashicons-businesswoman',
'dashicons dashicons-button',
'dashicons dashicons-calculator',
'dashicons dashicons-calendar-alt',
'dashicons dashicons-calendar',
'dashicons dashicons-camera-alt',
'dashicons dashicons-camera',
'dashicons dashicons-car',
'dashicons dashicons-carrot',
'dashicons dashicons-cart',
'dashicons dashicons-category',
'dashicons dashicons-chart-area',
'dashicons dashicons-chart-bar',
'dashicons dashicons-chart-line',
'dashicons dashicons-chart-pie',
'dashicons dashicons-clipboard',
'dashicons dashicons-clock',
'dashicons dashicons-cloud-saved',
'dashicons dashicons-cloud-upload',
'dashicons dashicons-cloud',
'dashicons dashicons-code-standards',
'dashicons dashicons-coffee',
'dashicons dashicons-color-picker',
'dashicons dashicons-columns',
'dashicons dashicons-controls-back',
'dashicons dashicons-controls-forward',
'dashicons dashicons-controls-pause',
'dashicons dashicons-controls-play',
'dashicons dashicons-controls-repeat',
'dashicons dashicons-controls-skipback',
'dashicons dashicons-controls-skipforward',
'dashicons dashicons-controls-volumeoff',
'dashicons dashicons-controls-volumeon',
'dashicons dashicons-cover-image',
'dashicons dashicons-dashboard',
'dashicons dashicons-database-add',
'dashicons dashicons-database-export',
'dashicons dashicons-database-import',
'dashicons dashicons-database-remove',
'dashicons dashicons-database-view',
'dashicons dashicons-database',
'dashicons dashicons-desktop',
'dashicons dashicons-dismiss',
'dashicons dashicons-download',
'dashicons dashicons-drumstick',
'dashicons dashicons-edit-large',
'dashicons dashicons-edit-page',
'dashicons dashicons-edit',
'dashicons dashicons-editor-aligncenter',
'dashicons dashicons-editor-alignleft',
'dashicons dashicons-editor-alignright',
'dashicons dashicons-editor-bold',
'dashicons dashicons-editor-break',
'dashicons dashicons-editor-code-duplicate',
'dashicons dashicons-editor-code',
'dashicons dashicons-editor-contract',
'dashicons dashicons-editor-customchar',
'dashicons dashicons-editor-expand',
'dashicons dashicons-editor-help',
'dashicons dashicons-editor-indent',
'dashicons dashicons-editor-insertmore',
'dashicons dashicons-editor-italic',
'dashicons dashicons-editor-justify',
'dashicons dashicons-editor-kitchensink',
'dashicons dashicons-editor-ltr',
'dashicons dashicons-editor-ol-rtl',
'dashicons dashicons-editor-ol',
'dashicons dashicons-editor-outdent',
'dashicons dashicons-editor-paragraph',
'dashicons dashicons-editor-paste-text',
'dashicons dashicons-editor-paste-word',
'dashicons dashicons-editor-quote',
'dashicons dashicons-editor-removeformatting',
'dashicons dashicons-editor-rtl',
'dashicons dashicons-editor-spellcheck',
'dashicons dashicons-editor-strikethrough',
'dashicons dashicons-editor-table',
'dashicons dashicons-editor-textcolor',
'dashicons dashicons-editor-ul',
'dashicons dashicons-editor-underline',
'dashicons dashicons-editor-unlink',
'dashicons dashicons-editor-video',
'dashicons dashicons-ellipsis',
'dashicons dashicons-email-alt',
'dashicons dashicons-email-alt2',
'dashicons dashicons-email',
'dashicons dashicons-embed-audio',
'dashicons dashicons-embed-generic',
'dashicons dashicons-embed-photo',
'dashicons dashicons-embed-post',
'dashicons dashicons-embed-video',
'dashicons dashicons-excerpt-view',
'dashicons dashicons-exit',
'dashicons dashicons-external',
'dashicons dashicons-facebook-alt',
'dashicons dashicons-facebook',
'dashicons dashicons-feedback',
'dashicons dashicons-filter',
'dashicons dashicons-flag',
'dashicons dashicons-food',
'dashicons dashicons-format-aside',
'dashicons dashicons-format-audio',
'dashicons dashicons-format-chat',
'dashicons dashicons-format-gallery',
'dashicons dashicons-format-image',
'dashicons dashicons-format-quote',
'dashicons dashicons-format-status',
'dashicons dashicons-format-video',
'dashicons dashicons-forms',
'dashicons dashicons-fullscreen-alt',
'dashicons dashicons-fullscreen-exit-alt',
'dashicons dashicons-games',
'dashicons dashicons-google',
'dashicons dashicons-googleplus',
'dashicons dashicons-grid-view',
'dashicons dashicons-groups',
'dashicons dashicons-hammer',
'dashicons dashicons-heading',
'dashicons dashicons-heart',
'dashicons dashicons-hidden',
'dashicons dashicons-hourglass',
'dashicons dashicons-html',
'dashicons dashicons-id-alt',
'dashicons dashicons-id',
'dashicons dashicons-image-crop',
'dashicons dashicons-image-filter',
'dashicons dashicons-image-flip-horizontal',
'dashicons dashicons-image-flip-vertical',
'dashicons dashicons-image-rotate-left',
'dashicons dashicons-image-rotate-right',
'dashicons dashicons-image-rotate',
'dashicons dashicons-images-alt',
'dashicons dashicons-images-alt2',
'dashicons dashicons-index-card',
'dashicons dashicons-info-outline',
'dashicons dashicons-info',
'dashicons dashicons-insert-after',
'dashicons dashicons-insert-before',
'dashicons dashicons-insert',
'dashicons dashicons-instagram',
'dashicons dashicons-laptop',
'dashicons dashicons-layout',
'dashicons dashicons-leftright',
'dashicons dashicons-lightbulb',
'dashicons dashicons-linkedin',
'dashicons dashicons-list-view',
'dashicons dashicons-location-alt',
'dashicons dashicons-location',
'dashicons dashicons-lock-duplicate',
'dashicons dashicons-lock',
'dashicons dashicons-marker',
'dashicons dashicons-media-archive',
'dashicons dashicons-media-audio',
'dashicons dashicons-media-code',
'dashicons dashicons-media-default',
'dashicons dashicons-media-document',
'dashicons dashicons-media-interactive',
'dashicons dashicons-media-spreadsheet',
'dashicons dashicons-media-text',
'dashicons dashicons-media-video',
'dashicons dashicons-megaphone',
'dashicons dashicons-menu-alt',
'dashicons dashicons-menu-alt2',
'dashicons dashicons-menu-alt3',
'dashicons dashicons-menu',
'dashicons dashicons-microphone',
'dashicons dashicons-migrate',
'dashicons dashicons-minus',
'dashicons dashicons-money-alt',
'dashicons dashicons-money',
'dashicons dashicons-move',
'dashicons dashicons-nametag',
'dashicons dashicons-networking',
'dashicons dashicons-no-alt',
'dashicons dashicons-no',
'dashicons dashicons-open-folder',
'dashicons dashicons-palmtree',
'dashicons dashicons-paperclip',
'dashicons dashicons-pdf',
'dashicons dashicons-performance',
'dashicons dashicons-pets',
'dashicons dashicons-phone',
'dashicons dashicons-pinterest',
'dashicons dashicons-playlist-audio',
'dashicons dashicons-playlist-video',
'dashicons dashicons-plugins-checked',
'dashicons dashicons-plus-alt',
'dashicons dashicons-plus-alt2',
'dashicons dashicons-plus',
'dashicons dashicons-podio',
'dashicons dashicons-portfolio',
'dashicons dashicons-post-status',
'dashicons dashicons-pressthis',
'dashicons dashicons-printer',
'dashicons dashicons-privacy',
'dashicons dashicons-products',
'dashicons dashicons-randomize',
'dashicons dashicons-reddit',
'dashicons dashicons-redo',
'dashicons dashicons-remove',
'dashicons dashicons-rest-api',
'dashicons dashicons-rss',
'dashicons dashicons-saved',
'dashicons dashicons-schedule',
'dashicons dashicons-screenoptions',
'dashicons dashicons-search',
'dashicons dashicons-share-alt',
'dashicons dashicons-share-alt2',
'dashicons dashicons-share',
'dashicons dashicons-shield-alt',
'dashicons dashicons-shield',
'dashicons dashicons-shortcode',
'dashicons dashicons-slides',
'dashicons dashicons-smartphone',
'dashicons dashicons-smiley',
'dashicons dashicons-sort',
'dashicons dashicons-sos',
'dashicons dashicons-spotify',
'dashicons dashicons-star-empty',
'dashicons dashicons-star-filled',
'dashicons dashicons-star-half',
'dashicons dashicons-sticky',
'dashicons dashicons-store',
'dashicons dashicons-superhero-alt',
'dashicons dashicons-superhero',
'dashicons dashicons-table-col-after',
'dashicons dashicons-table-col-before',
'dashicons dashicons-table-col-delete',
'dashicons dashicons-table-row-after',
'dashicons dashicons-table-row-before',
'dashicons dashicons-table-row-delete',
'dashicons dashicons-tablet',
'dashicons dashicons-tag',
'dashicons dashicons-tagcloud',
'dashicons dashicons-testimonial',
'dashicons dashicons-text-page',
'dashicons dashicons-text',
'dashicons dashicons-thumbs-down',
'dashicons dashicons-thumbs-up',
'dashicons dashicons-tickets-alt',
'dashicons dashicons-tickets',
'dashicons dashicons-tide',
'dashicons dashicons-translation',
'dashicons dashicons-trash',
'dashicons dashicons-twitch',
'dashicons dashicons-twitter-alt',
'dashicons dashicons-twitter',
'dashicons dashicons-undo',
'dashicons dashicons-universal-access-alt',
'dashicons dashicons-universal-access',
'dashicons dashicons-unlock',
'dashicons dashicons-update-alt',
'dashicons dashicons-update',
'dashicons dashicons-upload',
'dashicons dashicons-vault',
'dashicons dashicons-video-alt',
'dashicons dashicons-video-alt2',
'dashicons dashicons-video-alt3',
'dashicons dashicons-visibility',
'dashicons dashicons-warning',
'dashicons dashicons-welcome-add-page',
'dashicons dashicons-welcome-comments',
'dashicons dashicons-welcome-learn-more',
'dashicons dashicons-welcome-view-site',
'dashicons dashicons-welcome-widgets-menus',
'dashicons dashicons-welcome-write-blog',
'dashicons dashicons-whatsapp',
'dashicons dashicons-wordpress-alt',
'dashicons dashicons-wordpress',
'dashicons dashicons-xing',
'dashicons dashicons-yes-alt',
'dashicons dashicons-yes',
'dashicons dashicons-youtube',
'dashicons dashicons-editor-distractionfree',
'dashicons dashicons-exerpt-view',
'dashicons dashicons-format-links',
'dashicons dashicons-format-standard',
'dashicons dashicons-post-trash',
'dashicons dashicons-share1',
'dashicons dashicons-welcome-edit-page',
);
}

View File

@@ -0,0 +1,320 @@
<?php
/** Array of Elusive Icons
* Contributed by @WhatJustHappened
* Last updated' 14 Sept' 2013
*
* @package Redux Framework/Fields/Select
*/
defined( 'ABSPATH' ) || exit;
add_filter( 'redux/font-icons', 'redux_get_font_icons' );
/**
* Elusive icon set'
*
* @return array
*/
function redux_get_font_icons() :array {
return array(
'el el-address-book-alt',
'el el-address-book',
'el el-adjust-alt',
'el el-adjust',
'el el-adult',
'el el-align-center',
'el el-align-justify',
'el el-align-left',
'el el-align-right',
'el el-arrow-down',
'el el-arrow-left',
'el el-arrow-right',
'el el-arrow-up',
'el el-asl',
'el el-asterisk',
'el el-backward',
'el el-ban-circle',
'el el-barcode',
'el el-behance',
'el el-bell',
'el el-blind',
'el el-blogger',
'el el-bold',
'el el-book',
'el el-bookmark-empty',
'el el-bookmark',
'el el-braille',
'el el-briefcase',
'el el-broom',
'el el-brush',
'el el-bulb',
'el el-bullhorn',
'el el-calendar-sign',
'el el-calendar',
'el el-camera',
'el el-car',
'el el-caret-down',
'el el-caret-left',
'el el-caret-right',
'el el-caret-up',
'el el-cc',
'el el-certificate',
'el el-check-empty',
'el el-check',
'el el-chevron-down',
'el el-chevron-left',
'el el-chevron-right',
'el el-chevron-up',
'el el-child',
'el el-circle-arrow-down',
'el el-circle-arrow-left',
'el el-circle-arrow-right',
'el el-circle-arrow-up',
'el el-cloud-alt',
'el el-cloud',
'el el-cog-alt',
'el el-cog',
'el el-cogs',
'el el-comment-alt',
'el el-comment',
'el el-compass-alt',
'el el-compass',
'el el-credit-card',
'el el-css',
'el el-dashboard',
'el el-delicious',
'el el-deviantart',
'el el-digg',
'el el-download-alt',
'el el-download',
'el el-dribbble',
'el el-edit',
'el el-eject',
'el el-envelope-alt',
'el el-envelope',
'el el-error-alt',
'el el-error',
'el el-eur',
'el el-exclamation-sign',
'el el-eye-close',
'el el-eye-open',
'el el-facebook',
'el el-facetime-video',
'el el-fast-backward',
'el el-fast-forward',
'el el-female',
'el el-file-alt',
'el el-file-edit-alt',
'el el-file-edit',
'el el-file-new-alt',
'el el-file-new',
'el el-file',
'el el-film',
'el el-filter',
'el el-fire',
'el el-flag-alt',
'el el-flag',
'el el-flickr',
'el el-folder-close',
'el el-folder-open',
'el el-folder-sign',
'el el-folder',
'el el-font',
'el el-fontsize',
'el el-fork',
'el el-forward-alt',
'el el-forward',
'el el-foursquare',
'el el-friendfeed-rect',
'el el-friendfeed',
'el el-fullscreen',
'el el-gbp',
'el el-gift',
'el el-github-text',
'el el-github',
'el el-glass',
'el el-glasses',
'el el-globe-alt',
'el el-globe',
'el el-googleplus',
'el el-graph-alt',
'el el-graph',
'el el-group-alt',
'el el-group',
'el el-guidedog',
'el el-hand-down',
'el el-hand-left',
'el el-hand-right',
'el el-hand-up',
'el el-hdd',
'el el-headphones',
'el el-hearing-impaired',
'el el-heart-alt',
'el el-heart-empty',
'el el-heart',
'el el-home-alt',
'el el-home',
'el el-hourglass',
'el el-idea-alt',
'el el-idea',
'el el-inbox-alt',
'el el-inbox-box',
'el el-inbox',
'el el-indent-left',
'el el-indent-right',
'el el-info-circle',
'el el-instagram',
'el el-iphone-home',
'el el-italic',
'el el-key',
'el el-laptop-alt',
'el el-laptop',
'el el-lastfm',
'el el-leaf',
'el el-lines',
'el el-link',
'el el-linkedin',
'el el-list-alt',
'el el-list',
'el el-livejournal',
'el el-lock-alt',
'el el-lock',
'el el-magic',
'el el-magnet',
'el el-male',
'el el-map-marker-alt',
'el el-map-marker',
'el el-mic-alt',
'el el-mic',
'el el-minus-sign',
'el el-minus',
'el el-move',
'el el-music',
'el el-myspace',
'el el-network',
'el el-off',
'el el-ok-circle',
'el el-ok-sign',
'el el-ok',
'el el-opensource',
'el el-paper-clip-alt',
'el el-paper-clip',
'el el-path',
'el el-pause-alt',
'el el-pause',
'el el-pencil-alt',
'el el-pencil',
'el el-person',
'el el-phone-alt',
'el el-phone',
'el el-photo-alt',
'el el-photo',
'el el-picasa',
'el el-picture',
'el el-plane',
'el el-play-alt',
'el el-play-circle',
'el el-play',
'el el-plus-sign',
'el el-plus',
'el el-podcast',
'el el-print',
'el el-puzzle',
'el el-qrcode',
'el el-question-sign',
'el el-question',
'el el-quote-alt',
'el el-quotes',
'el el-random',
'el el-record',
'el el-reddit',
'el el-refresh',
'el el-remove-circle',
'el el-remove-sign',
'el el-remove',
'el el-repeat-alt',
'el el-repeat',
'el el-resize-full',
'el el-resize-horizontal',
'el el-resize-small',
'el el-resize-vertical',
'el el-return-key',
'el el-retweet',
'el el-reverse-alt',
'el el-road',
'el el-rss',
'el el-scissors',
'el el-screen-alt',
'el el-screen',
'el el-screenshot',
'el el-search-alt',
'el el-search',
'el el-share-alt',
'el el-share',
'el el-shopping-cart-sign',
'el el-shopping-cart',
'el el-signal',
'el el-skype',
'el el-slideshare',
'el el-smiley-alt',
'el el-smiley',
'el el-soundcloud',
'el el-speaker',
'el el-spotify',
'el el-stackoverflow',
'el el-star-alt',
'el el-star-empty',
'el el-star',
'el el-step-backward',
'el el-step-forward',
'el el-stop-alt',
'el el-stop',
'el el-stumbleupon',
'el el-tag',
'el el-tags',
'el el-tasks',
'el el-text-height',
'el el-text-width',
'el el-th-large',
'el el-th-list',
'el el-th',
'el el-thumbs-down',
'el el-thumbs-up',
'el el-time-alt',
'el el-time',
'el el-tint',
'el el-torso',
'el el-trash-alt',
'el el-trash',
'el el-tumblr',
'el el-twitter',
'el el-universal-access',
'el el-unlock-alt',
'el el-unlock',
'el el-upload',
'el el-usd',
'el el-user',
'el el-viadeo',
'el el-video-alt',
'el el-video-chat',
'el el-video',
'el el-view-mode',
'el el-vimeo',
'el el-vkontakte',
'el el-volume-down',
'el el-volume-off',
'el el-volume-up',
'el el-w3c',
'el el-warning-sign',
'el el-website-alt',
'el el-website',
'el el-wheelchair',
'el el-wordpress',
'el el-wrench-alt',
'el el-wrench',
'el el-youtube',
'el el-zoom-in',
'el el-zoom-out',
);
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,57 @@
<?php
/**
* Get Font Awesome font classes.
*
* Used with Gulp compiler to pull Font Awesome font class names
* and compile them into a function to be used with icon_Select field.
*
* @package Redux
* @author Kevin Provance <kevin.provance@gmail.com>
*
* @version 4.4.2
*/
$output = '<?php' . "\r";
$output .= '/**' . "\r";
$output .= ' * Redux Icon Select Font Awesome 6 Free icon array.' . "\r";
$output .= ' *' . "\r";
$output .= ' * @package Redux' . "\r";
$output .= ' * @author Kevin Provance <kevin.provance@gmail.com>' . "\r";
$output .= ' */' . "\r\r";
$output .= "defined( 'ABSPATH' ) || exit;\r\r";
$output .= '';
$output .= "if ( ! function_exists( 'redux_icon_select_fa_6_free' ) ) {\r\r";
$output .= "\t" . '/**' . "\r";
$output .= "\t" . ' * Array of free Font Awesome 6 icons.' . "\r";
$output .= "\t" . ' *' . "\r";
$output .= "\t" . ' * @return array' . "\r";
$output .= "\t" . ' */' . "\r";
$output .= "\t" . 'function redux_icon_select_fa_6_free(): array {' . "\r";
$output .= "\t\t" . 'return array( ' . fa_icons() . ' );' . "\r";
$output .= "\t" . '}' . "\r";
$output .= '}' . "\r";
file_put_contents( dirname( __DIR__ ) . '/lib/font-awesome-6-free.php', $output );
// print_r ( fa_icons() );
/**
* Get Font Awesome metadata.
*
* @return false|string
*/
function fa_icons() {
$content = file_get_contents( 'https://raw.githubusercontent.com/FortAwesome/Font-Awesome/6.x/metadata/icons.json' );
$json = json_decode( $content );
$icons = '';
foreach ( $json as $icon => $value ) {
foreach ( $value->styles as $style ) {
$icon = 'fa' . substr( $style, 0, 1 ) . ' fa-' . $icon;
$icons .= "'" . $icon . "', ";
}
}
return substr( $icons, 0, -2 );
}

View File

@@ -0,0 +1,270 @@
<?php
/**
* Redux Gradient Filters Class
*
* @class Redux_Gradient_Filters
* @version 4.1.30
* @package Redux Framework
*/
defined( 'ABSPATH' ) || exit;
if ( ! class_exists( 'Redux_Gradient_Filters' ) ) {
/**
* Class Redux_Gradient_Filters
*/
class Redux_Gradient_Filters {
/**
* Render select boxes.
*
* @param array $data Data.
*
* @return string
*/
public static function render_select( array $data ): string {
extract( $data ); // phpcs:ignore WordPress.PHP.DontExtract
$output = '';
if ( $field['gradient-type'] ) {
$select2_default = array(
'width' => 'resolve',
'allowClear' => false,
'theme' => 'default',
'minimumResultsForSearch' => 3,
);
$select2_default = Redux_Functions::sanitize_camel_case_array_keys( $select2_default );
$select2_data = Redux_Functions::create_data_string( $select2_default );
$output .= '<div class="redux-gradient-type">';
$output .= '<strong>' . esc_html__( 'Gradient Type ', 'redux-framework' ) . '</strong>&nbsp;';
$output .= '<select ';
$output .= 'class="redux-gradient-select select2-container"';
$output .= 'data-placeholder="' . esc_attr__( 'Type', 'redux-framework' ) . '" ' . $select2_data . ' ';
$output .= 'name="' . esc_attr( $field['name'] . $field['name_suffix'] ) . '[gradient-type]"';
$output .= 'data-value="' . esc_attr( $value['gradient-type'] ) . '"';
$output .= 'data-id="' . esc_attr( $field['id'] ) . '">';
$arr = array(
esc_html__( 'linear', 'redux-framework' ),
esc_html__( 'radial', 'redux-framework' ),
);
foreach ( $arr as $v ) {
$output .= '<option value="' . esc_attr( $v ) . '" ' . selected( $value['gradient-type'], $v, false ) . '>' . esc_html( ucfirst( $v ) ) . '</option>';
}
$output .= '</select>';
$output .= '</div>';
}
return $output;
}
/**
* Render sliders.
*
* @param array $data Data.
*
* @return string
*/
public static function render_sliders( array $data ): string {
extract( $data ); // phpcs:ignore WordPress.PHP.DontExtract
$output = '';
if ( $field['gradient-reach'] ) {
$output .= '<div class="slider-from-reach">';
$output .= '<div class="label">' . esc_html__( 'From Reach ', 'redux-framework' ) . ': <strong>' . esc_html( $value['gradient-reach']['from'] ) . '%</strong></div>';
$output .= '<div ';
$output .= 'class="redux-gradient-slider redux-color-gradient redux-gradient-from-reach color-gradient-input ' . esc_attr( $field['class'] ) . '"';
$output .= 'id="' . esc_attr( $field['id'] ) . '"';
$output .= 'data-id="' . esc_attr( $field['id'] ) . '-from"';
$output .= 'data-min="0"';
$output .= 'data-max="100"';
$output .= 'data-step="1"';
$output .= 'data-rtl="' . esc_attr( is_rtl() ) . '"';
$output .= 'data-label="' . esc_attr__( 'From Reach', 'redux-framework' ) . '"';
$output .= 'data-default = "' . esc_attr( $value['gradient-reach']['from'] ) . '">';
$output .= '</div>';
$output .= '<input ';
$output .= 'type="hidden"';
$output .= 'id="redux-slider-value-' . esc_attr( $field['id'] ) . '-from"';
$output .= 'class="color-gradient-reach-from"';
$output .= 'name="' . esc_attr( $field['name'] . $field['name_suffix'] ) . '[gradient-reach][from]"';
$output .= 'value="' . esc_attr( $value['gradient-reach']['from'] ) . '"';
$output .= 'data-id="' . esc_attr( $field['id'] ) . '"';
$output .= '/>';
$output .= '</div>';
$output .= '<div class="slider-to-reach">';
$output .= '<div class="label">' . esc_html__( 'To Reach', 'redux-framework' ) . ': <strong>' . esc_html( $value['gradient-reach']['to'] ) . '%</strong></div>';
$output .= '<div ';
$output .= 'class="redux-gradient-slider redux-color-gradient redux-gradient-reach-to color-gradient-input ' . esc_attr( $field['class'] ) . '"';
$output .= 'id="' . esc_attr( $field['id'] ) . '"';
$output .= 'data-id="' . esc_attr( $field['id'] ) . '-to"';
$output .= 'data-min="0"';
$output .= 'data-max="100"';
$output .= 'data-step="1"';
$output .= 'data-rtl="' . esc_attr( is_rtl() ) . '"';
$output .= 'data-label="' . esc_attr__( 'To Reach', 'redux-framework' ) . '"';
$output .= 'data-default = "' . esc_attr( $value['gradient-reach']['to'] ) . '">';
$output .= '</div>';
$output .= '<input ';
$output .= 'type="hidden"';
$output .= 'id="redux-slider-value-' . esc_attr( $field['id'] ) . '-to"';
$output .= 'class="color-gradient-reach-to"';
$output .= 'name="' . esc_attr( $field['name'] . $field['name_suffix'] ) . '[gradient-reach][to]"';
$output .= 'value="' . esc_attr( $value['gradient-reach']['to'] ) . '"';
$output .= 'data-id="' . esc_attr( $field['id'] ) . '"';
$output .= '/>';
$output .= '</div>';
}
if ( $field['gradient-angle'] ) {
$style = '';
if ( 'radial' === $value['gradient-type'] ) {
$style = 'style="display:none;"';
}
$output .= '<div class="slider-gradient-angle" ' . $style . '>';
$output .= '<div class="label">' . esc_html__( 'Gradient Angle', 'redux-framework' ) . ': <strong>' . $value['gradient-angle'] . '&deg;</strong></div>';
$output .= '<div ';
$output .= 'class="redux-gradient-slider redux-color-gradient redux-gradient-angle color-gradient-input ' . esc_attr( $field['class'] ) . '"';
$output .= 'id="' . esc_attr( $field['id'] ) . '"';
$output .= 'data-id="' . esc_attr( $field['id'] ) . '-angle"';
$output .= 'data-min="0"';
$output .= 'data-max="360"';
$output .= 'data-step="1"';
$output .= 'data-rtl="' . esc_attr( is_rtl() ) . '"';
$output .= 'data-label="' . esc_attr__( 'Gradient Angle', 'redux-framework' ) . '"';
$output .= 'data-default = "' . esc_attr( $value['gradient-angle'] ) . '">';
$output .= '</div>';
$output .= '<input ';
$output .= 'type="hidden"';
$output .= 'id="redux-slider-value-' . esc_attr( $field['id'] ) . '-angle"';
$output .= 'class="color-gradient-angle"';
$output .= 'name="' . esc_attr( $field['name'] . $field['name_suffix'] ) . '[gradient-angle]"';
$output .= 'value="' . esc_attr( $value['gradient-angle'] ) . '"';
$output .= 'data-id="' . esc_attr( $field['id'] ) . '"';
$output .= '/>';
$output .= '</div>';
}
return $output;
}
/**
* Render preview.
*
* @param array $data Data.
*
* @return string
*/
public static function render_preview( array $data ): string {
extract( $data ); // phpcs:ignore WordPress.PHP.DontExtract
$output = '';
$css = '';
if ( false === $field['preview'] ) {
$css .= 'display:none;';
}
$css .= self::get_output( $value );
$css .= 'height: ' . $field['preview_height'] . ';';
$output .= '<div class="redux-gradient-preview" style="' . esc_attr( $css ) . '"></div>';
return $output;
}
/**
* Get CSS output.
*
* @param mixed $data Data.
*
* @return string
*/
public static function get_output( $data ): string {
if ( ! is_array( $data ) ) {
return $data;
}
$angle = $data['gradient-angle'];
$w3c_angle = abs( $angle - 450 ) % 360;
$colors = $data['from'] . ' ' . $data['gradient-reach']['from'] . '%, ' . $data['to'] . ' ' . $data['gradient-reach']['to'] . '%)';
if ( 'linear' === $data['gradient-type'] ) {
$result_w3c = 'linear-gradient(' . $w3c_angle . 'deg,' . $colors;
$result = 'linear-gradient(' . $angle . 'deg,' . $colors;
} else {
$result_w3c = 'radial-gradient(center, ellipse cover, ' . $colors;
$result = 'radial-gradient(center, ellipse cover,' . $colors;
}
return 'background:' . $result_w3c . ';background:-moz-' . $result . ';background:-webkit-' . $result . ';background:-o-' . $result . ';background:-ms-' . $result;
}
/**
* Enqueue support files.
*
* @param array $field Field array.
* @param bool $filters_enabled Enable filter bit.
*/
public static function enqueue( array $field, bool $filters_enabled ) {
$min = Redux_Functions::is_min();
if ( $filters_enabled ) {
if ( $field['gradient-type'] ) {
if ( ! wp_style_is( 'select2-css' ) ) {
wp_enqueue_style( 'select2-css' );
}
if ( ! wp_script_is( 'select2-js' ) ) {
wp_enqueue_script( 'select2-js' );
}
}
if ( ! wp_style_is( 'redux-nouislider' ) ) {
wp_enqueue_style(
'redux-nouislider',
Redux_Core::$url . 'assets/css/vendor/nouislider' . $min . '.css',
array(),
'5.0.0'
);
wp_enqueue_script(
'redux-nouislider',
Redux_Core::$url . 'assets/js/vendor/nouislider/redux.jquery.nouislider' . $min . '.js',
array( 'jquery' ),
'5.0.0',
true
);
}
wp_enqueue_script(
'redux-gradient-filters',
Redux_Core::$url . 'inc/lib/gradient-filters/gradient-filters' . Redux_Functions::isMin() . '.js',
array( 'jquery' ),
Redux_Core::$version,
true
);
wp_enqueue_style(
'redux-gradient-filters',
Redux_Core::$url . 'inc/lib/gradient-filters/gradient-filters.css',
array(),
Redux_Core::$version
);
}
}
}
}

View File

@@ -0,0 +1,29 @@
.redux-main .redux-gradient-preview { height: 150px; margin-top: 10px; border-radius: 4px; }
.redux-main .redux-gradient-slider { margin-top: 10px; margin-right: 35px; }
.redux-main .redux-gradient-type, .redux-main div.colorGradient { vertical-align: top; }
.redux-main .redux-gradient-type .wp-picker-container, .redux-main .redux-gradient-type .color-transparency-check, .redux-main div.colorGradient .wp-picker-container, .redux-main div.colorGradient .color-transparency-check { display: inline; }
.redux-main .redux-gradient-type { margin-right: 20px; }
.redux-main .redux-gradient-type select { width: 100px; }
.redux-main .slider-gradient-angle { width: 33% !important; margin-top: 10px; }
.redux-main .slider-gradient-angle input { width: 33%; }
.redux-main .slider-from-reach, .redux-main .slider-to-reach, .redux-main .slider-gradient-angle { margin-top: 10px; width: 33%; }
.redux-main .slider-from-reach .label, .redux-main .slider-to-reach .label, .redux-main .slider-gradient-angle .label { display: block; position: relative; font-size: 12px !important; text-align: left; color: #999999; margin: 4px 0 2px 0 !important; cursor: default; }
.redux-main .slider-from-reach input:not(.slider-gradient-angle), .redux-main .slider-to-reach input:not(.slider-gradient-angle), .redux-main .slider-gradient-angle input:not(.slider-gradient-angle) { width: 90%; }
.redux-main .slider-to-reach, .redux-main .slider-from-reach, .redux-main .slider-gradient-angle { display: inline-block; margin-bottom: 10px; }
.redux-main .slider-to-reach strong, .redux-main .slider-from-reach strong, .redux-main .slider-gradient-angle strong { margin-bottom: 5px; margin-left: 3px; font-size: 12px; color: #999; }
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhZGllbnQtZmlsdGVycy5jc3MiLCJzb3VyY2VzIjpbImdyYWRpZW50LWZpbHRlcnMuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUNJLFdBRE8sQ0FDUCx1QkFBdUIsQ0FBQyxFQUNwQixNQUFNLEVBQUUsS0FBSyxFQUNiLFVBQVUsRUFBRSxJQUFJLEVBQ2hCLGFBQWEsRUFBRSxHQUFHLEdBQ3JCOztBQUxMLEFBT0ksV0FQTyxDQU9QLHNCQUFzQixDQUFDLEVBQ25CLFVBQVUsRUFBRSxJQUFJLEVBQ2hCLFlBQVksRUFBRSxJQUFJLEdBQ3JCOztBQVZMLEFBWUksV0FaTyxDQVlQLG9CQUFvQixFQVp4QixXQUFXLENBWWUsR0FBRyxBQUFBLGNBQWMsQ0FBQSxFQUNuQyxjQUFjLEVBQUUsR0FBRyxHQUl0Qjs7QUFqQkwsQUFjUSxXQWRHLENBWVAsb0JBQW9CLENBRWhCLG9CQUFvQixFQWQ1QixXQUFXLENBWVAsb0JBQW9CLENBRU0seUJBQXlCLEVBZHZELFdBQVcsQ0FZZSxHQUFHLEFBQUEsY0FBYyxDQUVuQyxvQkFBb0IsRUFkNUIsV0FBVyxDQVllLEdBQUcsQUFBQSxjQUFjLENBRWIseUJBQXlCLENBQUMsRUFDNUMsT0FBTyxFQUFFLE1BQU0sR0FDbEI7O0FBaEJULEFBbUJJLFdBbkJPLENBbUJQLG9CQUFvQixDQUFDLEVBQ2pCLFlBQVksRUFBRSxJQUFJLEdBS3JCOztBQXpCTCxBQXNCUSxXQXRCRyxDQW1CUCxvQkFBb0IsQ0FHaEIsTUFBTSxDQUFDLEVBQ0gsS0FBSyxFQUFFLEtBQUssR0FDZjs7QUF4QlQsQUEyQkksV0EzQk8sQ0EyQlAsc0JBQXNCLENBQUMsRUFDbkIsS0FBSyxFQUFFLEdBQUcsQ0FBQSxVQUFVLEVBQ3BCLFVBQVUsRUFBRSxJQUFJLEdBS25COztBQWxDTCxBQStCUSxXQS9CRyxDQTJCUCxzQkFBc0IsQ0FJbEIsS0FBSyxDQUFDLEVBQ0YsS0FBSyxFQUFFLEdBQUcsR0FDYjs7QUFqQ1QsQUFvQ0ksV0FwQ08sQ0FvQ1Asa0JBQWtCLEVBcEN0QixXQUFXLENBcUNQLGdCQUFnQixFQXJDcEIsV0FBVyxDQXNDUCxzQkFBc0IsQ0FBQyxFQUNuQixVQUFVLEVBQUUsSUFBSSxFQUNoQixLQUFLLEVBQUUsR0FBRyxHQWViOztBQXZETCxBQTBDUSxXQTFDRyxDQW9DUCxrQkFBa0IsQ0FNZCxNQUFNLEVBMUNkLFdBQVcsQ0FxQ1AsZ0JBQWdCLENBS1osTUFBTSxFQTFDZCxXQUFXLENBc0NQLHNCQUFzQixDQUlsQixNQUFNLENBQUMsRUFDSCxPQUFPLEVBQUUsS0FBSyxFQUNkLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLFNBQVMsRUFBRSxlQUFlLEVBQzFCLFVBQVUsRUFBRSxJQUFJLEVBQ2hCLEtBQUssRUFBRSxPQUFPLEVBQ2QsTUFBTSxFQUFFLHNCQUFzQixFQUM5QixNQUFNLEVBQUUsT0FBTyxHQUNsQjs7QUFsRFQsQUFvRFEsV0FwREcsQ0FvQ1Asa0JBQWtCLENBZ0JkLEtBQUssQUFBQSxJQUFLLENBQUEsc0JBQXNCLEdBcER4QyxXQUFXLENBcUNQLGdCQUFnQixDQWVaLEtBQUssQUFBQSxJQUFLLENBQUEsc0JBQXNCLEdBcER4QyxXQUFXLENBc0NQLHNCQUFzQixDQWNsQixLQUFLLEFBQUEsSUFBSyxDQUFBLHNCQUFzQixFQUFFLEVBQzlCLEtBQUssRUFBRSxHQUFHLEdBQ2I7O0FBdERULEFBeURJLFdBekRPLENBeURQLGdCQUFnQixFQXpEcEIsV0FBVyxDQTBEUCxrQkFBa0IsRUExRHRCLFdBQVcsQ0EyRFAsc0JBQXNCLENBQUMsRUFDbkIsT0FBTyxFQUFFLFlBQVksRUFDckIsYUFBYSxFQUFFLElBQUksR0FRdEI7O0FBckVMLEFBK0RRLFdBL0RHLENBeURQLGdCQUFnQixDQU1aLE1BQU0sRUEvRGQsV0FBVyxDQTBEUCxrQkFBa0IsQ0FLZCxNQUFNLEVBL0RkLFdBQVcsQ0EyRFAsc0JBQXNCLENBSWxCLE1BQU0sQ0FBQyxFQUNILGFBQWEsRUFBRSxHQUFHLEVBQ2xCLFdBQVcsRUFBRSxHQUFHLEVBQ2hCLFNBQVMsRUFBRSxJQUFJLEVBQ2YsS0FBSyxFQUFFLElBQUksR0FDZCJ9 */
/*# sourceMappingURL=gradient-filters.css.map */

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,130 @@
/* global jQuery, redux_change, redux */
(function( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.gradient_filters = redux.field_objects.gradient_filters || {};
redux.field_objects.gradient_filters.sliderInit = function( el, mode ) {
el.find( '.redux-gradient-slider' ).each(
function() {
var mainID = $( this ).data( 'id' );
var minVal = $( this ).data( 'min' );
var maxVal = $( this ).data( 'max' );
var step = $( this ).data( 'step' );
var def = $( this ).data( 'default' );
var label = $( this ).data( 'label' );
var rtl = Boolean( $( this ).data( 'rtl' ) );
var range = [minVal, maxVal];
var slider = $( this ).reduxNoUiSlider(
{
range: range,
start: def,
handles: 1,
step: step,
connect: 'lower',
behaviour: 'tap-drag',
rtl: rtl,
serialization: {
resolution: 1
},
slide: function() {
var sliderID = $( this ).data( 'id' );
var unit;
if ( sliderID.indexOf( 'angle' ) !== -1 ) {
unit = '&deg;';
} else {
unit = '%';
}
$( this ).next( '#redux-slider-value-' + mainID ).attr(
'value',
slider.val()
);
$( this ).prev( 'label' ).html(
label + ': <strong>' + slider.val() + unit + '</strong>'
);
redux.field_objects.gradient_filters.changeValue( $( this ), true, mode );
}
}
);
}
);
};
redux.field_objects.gradient_filters.selectChange = function( el, mode ) {
$( el ).find( '.redux-gradient-select' ).on(
'change',
function() {
var type = $( this ).val();
var angle = el.find( '.slider-gradient-angle' );
if ( 'linear' === type ) {
angle.fadeIn();
} else {
angle.fadeOut();
}
redux.field_objects.gradient_filters.changeValue( $( this ), true, mode );
}
);
el.find( '.redux-gradient-select' ).select2();
};
redux.field_objects.gradient_filters.changeValue = function( el, update, mode ) {
var parent = el.parents( '.redux-container-' + mode );
var mainID = parent.data( 'id' );
var preview = parent.find( '.redux-gradient-preview' );
var hide = preview.css( 'display' );
var colorFrom = parent.find( '#' + mainID + '-from' ).val();
var colorTo = parent.find( '#' + mainID + '-to' ).val();
var type = parent.find( '.redux-gradient-select' ).val();
var result_w3c;
var result;
var fromReach;
var toReach;
var colors;
var angle = 0;
var w3c_deg = Math.abs( angle - 450 ) % 360;
fromReach = parent.find( '#redux-slider-value-' + mainID + '-from' ).val();
toReach = parent.find( '#redux-slider-value-' + mainID + '-to' ).val();
angle = parent.find( '#redux-slider-value-' + mainID + '-angle' ).val();
colors = colorFrom + ' ' + fromReach + '%, ' + colorTo + ' ' + toReach + '%)';
if ( 'linear' === type ) {
result_w3c = 'linear-gradient(' + w3c_deg + 'deg,' + colors;
result = 'linear-gradient(' + angle + 'deg,' + colors;
} else {
result_w3c = 'radial-gradient(center, ellipse cover,' + colors;
result = 'radial-gradient(center, ellipse cover,' + colors;
}
if ( 'none' === hide ) {
preview.fadeIn();
}
preview.css( 'background', result_w3c );
preview.css( 'background', '-moz-' + result );
preview.css( 'background', '-webkit-' + result );
preview.css( 'background', '-o-' + result );
preview.css( 'background', '-ms-' + result );
if ( update ) {
redux_change( el );
}
};
})( jQuery );

View File

@@ -0,0 +1 @@
!function(u){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.gradient_filters=redux.field_objects.gradient_filters||{},redux.field_objects.gradient_filters.sliderInit=function(e,s){e.find(".redux-gradient-slider").each(function(){var a=u(this).data("id"),e=u(this).data("min"),i=u(this).data("max"),d=u(this).data("step"),t=u(this).data("default"),r=u(this).data("label"),n=Boolean(u(this).data("rtl")),e=[e,i],l=u(this).reduxNoUiSlider({range:e,start:t,handles:1,step:d,connect:"lower",behaviour:"tap-drag",rtl:n,serialization:{resolution:1},slide:function(){var e=-1!==u(this).data("id").indexOf("angle")?"&deg;":"%";u(this).next("#redux-slider-value-"+a).attr("value",l.val()),u(this).prev("label").html(r+": <strong>"+l.val()+e+"</strong>"),redux.field_objects.gradient_filters.changeValue(u(this),!0,s)}})})},redux.field_objects.gradient_filters.selectChange=function(i,d){u(i).find(".redux-gradient-select").on("change",function(){var e=u(this).val(),a=i.find(".slider-gradient-angle");"linear"===e?a.fadeIn():a.fadeOut(),redux.field_objects.gradient_filters.changeValue(u(this),!0,d)}),i.find(".redux-gradient-select").select2()},redux.field_objects.gradient_filters.changeValue=function(e,a,i){var d,i=e.parents(".redux-container-"+i),t=i.data("id"),r=i.find(".redux-gradient-preview"),n=r.css("display"),l=i.find("#"+t+"-from").val(),s=i.find("#"+t+"-to").val(),u=i.find(".redux-gradient-select").val(),c=Math.abs(-450)%360,o=i.find("#redux-slider-value-"+t+"-from").val(),f=i.find("#redux-slider-value-"+t+"-to").val(),i=i.find("#redux-slider-value-"+t+"-angle").val(),t=l+" "+o+"%, "+s+" "+f+"%)",l="linear"===u?(d="linear-gradient("+c+"deg,"+t,"linear-gradient("+i+"deg,"+t):d="radial-gradient(center, ellipse cover,"+t;"none"===n&&r.fadeIn(),r.css("background",d),r.css("background","-moz-"+l),r.css("background","-webkit-"+l),r.css("background","-o-"+l),r.css("background","-ms-"+l),a&&redux_change(e)}}(jQuery);

View File

@@ -0,0 +1,71 @@
.redux-main {
.redux-gradient-preview {
height: 150px;
margin-top: 10px;
border-radius: 4px;
}
.redux-gradient-slider {
margin-top: 10px;
margin-right: 35px;
}
.redux-gradient-type, div.colorGradient{
vertical-align: top;
.wp-picker-container, .color-transparency-check {
display: inline;
}
}
.redux-gradient-type {
margin-right: 20px;
select {
width: 100px;
}
}
.slider-gradient-angle {
width: 33%!important;
margin-top: 10px;
input {
width: 33%;
}
}
.slider-from-reach,
.slider-to-reach,
.slider-gradient-angle {
margin-top: 10px;
width: 33%;
.label {
display: block;
position: relative;
font-size: 12px !important;
text-align: left;
color: #999999;
margin: 4px 0 2px 0 !important;
cursor: default;
}
input:not(.slider-gradient-angle) {
width: 90%;
}
}
.slider-to-reach,
.slider-from-reach,
.slider-gradient-angle {
display: inline-block;
margin-bottom: 10px;
strong {
margin-bottom: 5px;
margin-left: 3px;
font-size: 12px;
color: #999;
}
}
}

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux
*/
echo null;

View File

@@ -0,0 +1,189 @@
<?php
/**
* Redux Image Filters Class
*
* @class Redux_Includes
* @version 4.1.30
* @package Redux Framework
*/
defined( 'ABSPATH' ) || exit;
if ( ! class_exists( 'Redux_Image_Filters' ) ) {
/**
* Class Redux_Image_Filters
*/
class Redux_Image_Filters {
/**
* Render preview.
*
* @param array $data Data.
*
* @return string
*/
public static function render( array $data ): string {
extract( $data ); // phpcs:ignore WordPress.PHP.DontExtract
$output = '';
$filter_arr = array(
'grayscale',
'blur',
'sepia',
'saturate',
'opacity',
'brightness',
'contrast',
'hue-rotate',
'invert',
);
// Make an array of in use filters.
$in_use_filters = array();
foreach ( $filter_arr as $filter ) {
if ( $field['filter'][ $filter ] ) {
$in_use_filters[] = $filter;
}
}
$filters = rawurlencode( wp_json_encode( $in_use_filters ) );
$output .= '<div class="redux-' . $mode . '-filter-container" data-filters="' . $filters . '">';
$output .= '<div class="container-label">' . esc_html__( 'Filters', 'redux-framework' ) . '</div>';
foreach ( $in_use_filters as $filter ) {
$step = 1;
$unit = self::get_filter_unit( $filter );
if ( 'grayscale' === $filter || 'invert' === $filter ) {
$min = 0;
$max = 100;
} elseif ( 'blur' === $filter ) {
$min = 0;
$max = 30;
} elseif ( 'sepia' === $filter || 'saturate' === $filter || 'opacity' === $filter ) {
$min = 0;
$max = 1;
$step = .01;
} elseif ( 'brightness' === $filter || 'contrast' === $filter ) {
$min = 0;
$max = 200;
} elseif ( 'hue-rotate' === $filter ) {
$min = 0;
$max = 360;
}
$disabled = 'pro-disabled';
if ( $value['filter'][ $filter ]['checked'] ) {
$disabled = '';
}
$output .= '<div class="filter filter-' . $filter . '">';
$output .= '<label for="' . esc_attr( $field['id'] ) . '-' . $filter . '" class="' . $disabled . '">';
$output .= '<input type="checkbox" id="' . esc_attr( $field['id'] ) . '-' . $filter . '" class="checkbox" value="1"' . checked( $value['filter'][ $filter ]['checked'], '1', false ) . '/>';
$output .= '<input type="hidden" data-val="1" value="' . esc_attr( $value['filter'][ $filter ]['checked'] ) . '" class="checkbox-check" name="' . esc_attr( $field['name'] . $field['name_suffix'] ) . '[filter][' . $filter . '][checked]"/>';
$output .= ucfirst( $filter ) . ': ';
$output .= '<span class="filter-value"><strong>' . $value['filter'][ $filter ]['value'] . $unit . '</strong></span>';
$output .= '</label>';
$output .= '<div ';
$output .= 'class="redux-' . $mode . '-slider redux-' . $mode . '-filter redux-filter redux-filter-' . $filter . esc_attr( $field['class'] ) . '"';
$output .= 'id="' . esc_attr( $field['id'] ) . '"';
$output .= 'data-id="' . esc_attr( $field['id'] . '-' . $filter ) . '"';
$output .= 'data-min="' . $min . '"';
$output .= 'data-max="' . $max . '"';
$output .= 'data-step="' . $step . '"';
$output .= 'data-rtl="' . esc_attr( is_rtl() ) . '"';
$output .= 'data-unit="' . $unit . '"';
$output .= 'data-default = "' . esc_attr( $value['filter'][ $filter ]['value'] ) . '" ';
$output .= disabled( filter_var( $value['filter'][ $filter ]['checked'], FILTER_VALIDATE_BOOLEAN ), false, false );
$output .= '>';
$output .= '</div>';
if ( '&deg;' === $unit ) {
$unit = 'deg';
}
$output .= '<input ';
$output .= 'type="hidden"';
$output .= 'id="redux-slider-value-' . esc_attr( $field['id'] ) . '-' . $filter . '"';
$output .= 'class="' . $mode . '-filter-' . $filter . '"';
$output .= 'name="' . esc_attr( $field['name'] . $field['name_suffix'] ) . '[filter][' . $filter . '][value]"';
$output .= 'value="' . esc_attr( $value['filter'][ $filter ]['value'] ) . '"';
$output .= 'data-id="' . esc_attr( $field['id'] ) . '"';
$output .= 'data-unit="' . $unit . '"';
$output .= '/>';
$output .= '</div>';
}
$output .= '</div>';
return $output;
}
/**
* Get filter unit.
*
* @param string $filter Filter type.
*
* @return string
*/
public static function get_filter_unit( string $filter ): string {
if ( 'grayscale' === $filter || 'invert' === $filter || 'brightness' === $filter || 'contrast' === $filter ) {
return '%';
} elseif ( 'blur' === $filter ) {
return 'px';
} elseif ( 'hue-rotate' === $filter ) {
return '&deg;';
} else {
return '';
}
}
/**
* Enqueue support files.
*
* @param bool $filters_enabled Filtered enabled bit.
*/
public static function enqueue( bool $filters_enabled ) {
$min = Redux_Functions::is_min();
if ( $filters_enabled ) {
if ( ! wp_style_is( 'redux-nouislider' ) ) {
wp_enqueue_style(
'redux-nouislider',
Redux_Core::$url . 'assets/css/vendor/nouislider/redux.jquery.nouislider.css',
array(),
'5.0.0'
);
wp_enqueue_script(
'redux-nouislider',
Redux_Core::$url . 'assets/js/vendor/nouislider/redux.jquery.nouislider' . $min . '.js',
array( 'jquery' ),
'5.0.0',
true
);
}
wp_enqueue_script(
'redux-image-filters',
Redux_Core::$url . 'inc/lib/image-filters/image-filters' . $min . '.js',
array( 'jquery' ),
Redux_Core::$version,
true
);
wp_enqueue_style(
'redux-image-filters',
Redux_Core::$url . 'inc/lib/image-filters/image-filters.css',
array(),
Redux_Core::$version
);
}
}
}
}

View File

@@ -0,0 +1,15 @@
.redux-main .filter .redux-filter { width: 40%; display: inline-block; margin-left: 30px; }
.redux-main div[class^="redux-"][class$="-filter-container"] { padding-top: 20px; }
.redux-main div[class^="redux-"][class$="-filter-container"] .container-label { margin-bottom: 20px; padding-bottom: 1px; border-bottom: 1px solid #E7E7E7; font-weight: 600; font-size: 12px; color: #999; }
.redux-main div[class^="redux-"][class$="-filter-container"] .filter { display: inline-block; width: 47%; margin-bottom: 5px; }
.redux-main div[class^="redux-"][class$="-filter-container"] .filter label { display: inline-block; width: 135px; color: #999999; }
.redux-main div[class^="redux-"][class$="-filter-container"] .filter label.pro-disabled .filter-value { color: #cccccc; }
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZmlsdGVycy5jc3MiLCJzb3VyY2VzIjpbImltYWdlLWZpbHRlcnMuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUNJLFdBRE8sQ0FDUCxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQ2xCLEtBQUssRUFBRSxHQUFHLEVBQ1YsT0FBTyxFQUFFLFlBQVksRUFDckIsV0FBVyxFQUFFLElBQUksR0FDcEI7O0FBTEwsQUFPSSxXQVBPLENBT1AsR0FBRyxDQUFBLEFBQUEsS0FBQyxFQUFPLFFBQVEsQUFBZixFQUFnQixBQUFBLEtBQUMsRUFBTyxtQkFBbUIsQUFBMUIsRUFBNEIsRUFDN0MsV0FBVyxFQUFFLElBQUksR0E2QnBCOztBQXJDTCxBQVVRLFdBVkcsQ0FPUCxHQUFHLENBQUEsQUFBQSxLQUFDLEVBQU8sUUFBUSxBQUFmLEVBQWdCLEFBQUEsS0FBQyxFQUFPLG1CQUFtQixBQUExQixFQUdqQixnQkFBZ0IsQ0FBQyxFQUNiLGFBQWEsRUFBRSxJQUFJLEVBQ25CLGNBQWMsRUFBRSxHQUFHLEVBQ25CLGFBQWEsRUFBRSxpQkFBaUIsRUFDaEMsV0FBVyxFQUFFLEdBQUcsRUFDaEIsU0FBUyxFQUFFLElBQUksRUFDZixLQUFLLEVBQUUsSUFBSSxHQUNkOztBQWpCVCxBQW1CUSxXQW5CRyxDQU9QLEdBQUcsQ0FBQSxBQUFBLEtBQUMsRUFBTyxRQUFRLEFBQWYsRUFBZ0IsQUFBQSxLQUFDLEVBQU8sbUJBQW1CLEFBQTFCLEVBWWpCLE9BQU8sQ0FBQyxFQUNKLE9BQU8sRUFBRSxZQUFZLEVBQ3JCLEtBQUssRUFBRSxHQUFHLEVBQ1YsYUFBYSxFQUFFLEdBQUcsR0FjckI7O0FBcENULEFBd0JZLFdBeEJELENBT1AsR0FBRyxDQUFBLEFBQUEsS0FBQyxFQUFPLFFBQVEsQUFBZixFQUFnQixBQUFBLEtBQUMsRUFBTyxtQkFBbUIsQUFBMUIsRUFZakIsT0FBTyxDQUtILEtBQUssQ0FBQyxFQUNGLE9BQU8sRUFBRSxZQUFZLEVBQ3JCLEtBQUssRUFBRSxLQUFLLEVBQ1osS0FBSyxFQUFFLE9BQU8sR0FRakI7O0FBbkNiLEFBK0JvQixXQS9CVCxDQU9QLEdBQUcsQ0FBQSxBQUFBLEtBQUMsRUFBTyxRQUFRLEFBQWYsRUFBZ0IsQUFBQSxLQUFDLEVBQU8sbUJBQW1CLEFBQTFCLEVBWWpCLE9BQU8sQ0FLSCxLQUFLLEFBS0EsYUFBYSxDQUVWLGFBQWEsQ0FBQyxFQUNWLEtBQUssRUFBRSxPQUFPLEdBQ2pCIn0= */
/*# sourceMappingURL=image-filters.css.map */

View File

@@ -0,0 +1 @@
{"version":3,"sources":["image-filters.scss","image-filters.css"],"names":[],"mappings":"AAAA,oCAAA,UAOO,ECJC,qBAAqB,EDH7B,iBAOe,EAAA;;AAPf,+DAAA,iBAOe,EAAA;;AAPf,gFCWY,mBAAmB,EACnB,mBAAmB,EACnB,gCAAgC,EAChC,gBAAgB,EAChB,eAAe,EACf,WAAW,EAAA;;ADhBvB,uECoBY,qBAAqB,EACrB,UAAU,EACV,kBAAkB,EAAA;;ADtB9B,6ECyBgB,qBAAqB,EACrB,YAAY,EACZ,cAAc,EAAA;;AD3B9B,wGCgCwB,cAAc,EAAA;;AApBtC,y/CAAy/C","file":"image-filters.css","sourcesContent":[".redux-main {\r\n .filter .redux-filter {\r\n width: 40%;\r\n display: inline-block;\r\n margin-left: 30px; \r\n }\r\n \r\n div[class^=\"redux-\"][class$=\"-filter-container\"] {\r\n padding-top: 20px;\r\n \r\n .container-label {\r\n margin-bottom: 20px;\r\n padding-bottom: 1px;\r\n border-bottom: 1px solid #E7E7E7; \r\n font-weight: 600;\r\n font-size: 12px;\r\n color: #999; \r\n }\r\n \r\n .filter {\r\n display: inline-block;\r\n width: 47%;\r\n margin-bottom: 5px;\r\n\r\n label {\r\n display: inline-block;\r\n width: 135px;\r\n color: #999999;\r\n\r\n &.pro-disabled {\r\n \r\n .filter-value {\r\n color: #cccccc;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}",".redux-main .filter .redux-filter { width: 40%; display: inline-block; margin-left: 30px; }\n\n.redux-main div[class^=\"redux-\"][class$=\"-filter-container\"] { padding-top: 20px; }\n\n.redux-main div[class^=\"redux-\"][class$=\"-filter-container\"] .container-label { margin-bottom: 20px; padding-bottom: 1px; border-bottom: 1px solid #E7E7E7; font-weight: 600; font-size: 12px; color: #999; }\n\n.redux-main div[class^=\"redux-\"][class$=\"-filter-container\"] .filter { display: inline-block; width: 47%; margin-bottom: 5px; }\n\n.redux-main div[class^=\"redux-\"][class$=\"-filter-container\"] .filter label { display: inline-block; width: 135px; color: #999999; }\n\n.redux-main div[class^=\"redux-\"][class$=\"-filter-container\"] .filter label.pro-disabled .filter-value { color: #cccccc; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZmlsdGVycy5jc3MiLCJzb3VyY2VzIjpbImltYWdlLWZpbHRlcnMuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUNJLFdBRE8sQ0FDUCxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQ2xCLEtBQUssRUFBRSxHQUFHLEVBQ1YsT0FBTyxFQUFFLFlBQVksRUFDckIsV0FBVyxFQUFFLElBQUksR0FDcEI7O0FBTEwsQUFPSSxXQVBPLENBT1AsR0FBRyxDQUFBLEFBQUEsS0FBQyxFQUFPLFFBQVEsQUFBZixFQUFnQixBQUFBLEtBQUMsRUFBTyxtQkFBbUIsQUFBMUIsRUFBNEIsRUFDN0MsV0FBVyxFQUFFLElBQUksR0E2QnBCOztBQXJDTCxBQVVRLFdBVkcsQ0FPUCxHQUFHLENBQUEsQUFBQSxLQUFDLEVBQU8sUUFBUSxBQUFmLEVBQWdCLEFBQUEsS0FBQyxFQUFPLG1CQUFtQixBQUExQixFQUdqQixnQkFBZ0IsQ0FBQyxFQUNiLGFBQWEsRUFBRSxJQUFJLEVBQ25CLGNBQWMsRUFBRSxHQUFHLEVBQ25CLGFBQWEsRUFBRSxpQkFBaUIsRUFDaEMsV0FBVyxFQUFFLEdBQUcsRUFDaEIsU0FBUyxFQUFFLElBQUksRUFDZixLQUFLLEVBQUUsSUFBSSxHQUNkOztBQWpCVCxBQW1CUSxXQW5CRyxDQU9QLEdBQUcsQ0FBQSxBQUFBLEtBQUMsRUFBTyxRQUFRLEFBQWYsRUFBZ0IsQUFBQSxLQUFDLEVBQU8sbUJBQW1CLEFBQTFCLEVBWWpCLE9BQU8sQ0FBQyxFQUNKLE9BQU8sRUFBRSxZQUFZLEVBQ3JCLEtBQUssRUFBRSxHQUFHLEVBQ1YsYUFBYSxFQUFFLEdBQUcsR0FjckI7O0FBcENULEFBd0JZLFdBeEJELENBT1AsR0FBRyxDQUFBLEFBQUEsS0FBQyxFQUFPLFFBQVEsQUFBZixFQUFnQixBQUFBLEtBQUMsRUFBTyxtQkFBbUIsQUFBMUIsRUFZakIsT0FBTyxDQUtILEtBQUssQ0FBQyxFQUNGLE9BQU8sRUFBRSxZQUFZLEVBQ3JCLEtBQUssRUFBRSxLQUFLLEVBQ1osS0FBSyxFQUFFLE9BQU8sR0FRakI7O0FBbkNiLEFBK0JvQixXQS9CVCxDQU9QLEdBQUcsQ0FBQSxBQUFBLEtBQUMsRUFBTyxRQUFRLEFBQWYsRUFBZ0IsQUFBQSxLQUFDLEVBQU8sbUJBQW1CLEFBQTFCLEVBWWpCLE9BQU8sQ0FLSCxLQUFLLEFBS0EsYUFBYSxDQUVWLGFBQWEsQ0FBQyxFQUNWLEtBQUssRUFBRSxPQUFPLEdBQ2pCIn0= */\n\n/*# sourceMappingURL=image-filters.css.map */\n"]}

View File

@@ -0,0 +1,141 @@
/* global jQuery, redux_change, redux */
(function( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.image_filters = redux.field_objects.image_filters || {};
redux.field_objects.image_filters.sliderInit = function( el, mode ) {
el.find( '.redux-' + mode + '-slider' ).each(
function() {
var mainID = $( this ).data( 'id' );
var minVal = $( this ).data( 'min' );
var maxVal = $( this ).data( 'max' );
var step = $( this ).data( 'step' );
var def = $( this ).data( 'default' );
var unit = $( this ).data( 'unit' );
var rtl = Boolean( $( this ).data( 'rtl' ) );
var range = [minVal, maxVal];
var slider = $( this ).reduxNoUiSlider(
{
range: range,
start: def,
handles: 1,
step: step,
connect: 'lower',
behaviour: 'tap-drag',
rtl: rtl,
unit: unit,
serialization: {
resolution: step
},
slide: function() {
var val = slider.val();
if ( '0.00' === val ) {
val = 0;
} else if ( '1.00' === val ) {
val = 1;
}
$( this ).next( '#redux-slider-value-' + mainID ).attr(
'value',
val
);
$( this ).prev( 'label' ).find( 'span' ).html(
'<strong>' + val + unit + '</strong>'
);
redux.field_objects.image_filters.changeValue( $( this ), true, mode );
}
}
);
}
);
};
redux.field_objects.image_filters.changeValue = function( el, update, mode ) {
var parent = el.parents( '.redux-container-' + mode );
var container = parent.find( '.redux-' + mode + '-filter-container' );
var filterCSS = '';
var isChecked;
var mainID;
var preview;
var img;
var filters;
var val;
var unit;
var hide;
if ( container.length > 0 ) {
mainID = parent.data( 'id' );
preview = parent.find( '.screenshot' );
img = preview.find( 'img' );
filters = container.data( 'filters' );
filters = decodeURIComponent( filters );
filters = JSON.parse( filters );
$.each(
filters,
function( idx, filter ) {
isChecked = container.find( '#' + mainID + '-' + filter ).is( ':checked' );
if ( true === isChecked ) {
val = container.find( '#redux-slider-value-' + mainID + '-' + filter ).val();
unit = container.find( '#redux-slider-value-' + mainID + '-' + filter ).data( 'unit' );
filterCSS = filterCSS + ' ' + filter + '(' + val + unit + ')';
}
}
);
img.css(
{
'filter': filterCSS,
'-webkit-filter': filterCSS
}
);
hide = preview.css( 'display' );
if ( 'none' === hide ) {
preview.fadeIn();
}
if ( update ) {
redux_change( el );
}
}
};
redux.field_objects.image_filters.checkbox = function( el, mode ) {
el.find( '.checkbox' ).on(
'click',
function() {
var val = 0;
var slider = $( this ).parent().next( '.redux-' + mode + '-slider' );
var label = $( this ).parent( 'label' );
if ( $( this ).is( ':checked' ) ) {
val = $( this ).parent().find( '.checkbox-check' ).attr( 'data-val' );
slider.attr( 'disabled', false );
label.removeClass( 'pro-disabled' );
} else {
slider.attr( 'disabled', true );
label.addClass( 'pro-disabled' );
}
$( this ).parent().find( '.checkbox-check' ).val( val );
redux.field_objects.image_filters.changeValue( $( this ), true, mode );
}
);
};
} )( jQuery );

View File

@@ -0,0 +1 @@
!function(o){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.image_filters=redux.field_objects.image_filters||{},redux.field_objects.image_filters.sliderInit=function(e,l){e.find(".redux-"+l+"-slider").each(function(){var i=o(this).data("id"),e=o(this).data("min"),t=o(this).data("max"),a=o(this).data("step"),d=o(this).data("default"),s=o(this).data("unit"),r=Boolean(o(this).data("rtl")),e=[e,t],n=o(this).reduxNoUiSlider({range:e,start:d,handles:1,step:a,connect:"lower",behaviour:"tap-drag",rtl:r,unit:s,serialization:{resolution:a},slide:function(){var e=n.val();"0.00"===e?e=0:"1.00"===e&&(e=1),o(this).next("#redux-slider-value-"+i).attr("value",e),o(this).prev("label").find("span").html("<strong>"+e+s+"</strong>"),redux.field_objects.image_filters.changeValue(o(this),!0,l)}})})},redux.field_objects.image_filters.changeValue=function(e,i,t){var a,d,s,r,n=e.parents(".redux-container-"+t),l=n.find(".redux-"+t+"-filter-container"),c="";0<l.length&&(a=n.data("id"),n=(t=n.find(".screenshot")).find("img"),d=l.data("filters"),d=decodeURIComponent(d),d=JSON.parse(d),o.each(d,function(e,i){!0===l.find("#"+a+"-"+i).is(":checked")&&(s=l.find("#redux-slider-value-"+a+"-"+i).val(),r=l.find("#redux-slider-value-"+a+"-"+i).data("unit"),c=c+" "+i+"("+s+r+")")}),n.css({filter:c,"-webkit-filter":c}),"none"===t.css("display")&&t.fadeIn(),i)&&redux_change(e)},redux.field_objects.image_filters.checkbox=function(e,a){e.find(".checkbox").on("click",function(){var e=0,i=o(this).parent().next(".redux-"+a+"-slider"),t=o(this).parent("label");o(this).is(":checked")?(e=o(this).parent().find(".checkbox-check").attr("data-val"),i.attr("disabled",!1),t.removeClass("pro-disabled")):(i.attr("disabled",!0),t.addClass("pro-disabled")),o(this).parent().find(".checkbox-check").val(e),redux.field_objects.image_filters.changeValue(o(this),!0,a)})}}(jQuery);

View File

@@ -0,0 +1,39 @@
.redux-main {
.filter .redux-filter {
width: 40%;
display: inline-block;
margin-left: 30px;
}
div[class^="redux-"][class$="-filter-container"] {
padding-top: 20px;
.container-label {
margin-bottom: 20px;
padding-bottom: 1px;
border-bottom: 1px solid #E7E7E7;
font-weight: 600;
font-size: 12px;
color: #999;
}
.filter {
display: inline-block;
width: 47%;
margin-bottom: 5px;
label {
display: inline-block;
width: 135px;
color: #999999;
&.pro-disabled {
.filter-value {
color: #cccccc;
}
}
}
}
}
}

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux
*/
echo null;

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
echo null;

View File

@@ -0,0 +1,36 @@
<?php
/**
* Redux_Instances Functions
*
* @package Redux_Framework
* @subpackage Core
* @deprecated Maintained for backward compatibility with v3.
*/
/**
* Retrieve an instance of ReduxFramework
*
* @depreciated
*
* @param string $opt_name the defined opt_name as passed in $args.
*
* @return object ReduxFramework
*/
function get_redux_instance( string $opt_name ) {
_deprecated_function( __FUNCTION__, '4.0', 'Redux::instance($opt_name)' );
return Redux::instance( $opt_name );
}
/**
* Retrieve all instances of ReduxFramework
* as an associative array.
*
* @depreciated
* @return array format ['opt_name' => $ReduxFramework]
*/
function get_all_redux_instances(): array {
_deprecated_function( __FUNCTION__, '4.0', 'Redux::all_instances()' );
return Redux::all_instances();
}